DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_BUDGET_PUB

Source


1 package body PA_BUDGET_PUB as
2 --$Header: PAPMBUPB.pls 120.26.12010000.3 2008/09/09 22:50:47 snizam 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 BEGIN
281 
282       --Standard begin of API savepoint
283       SAVEPOINT create_draft_budget_pub;
284       p_msg_count := 0;
285       p_return_status := FND_API.G_RET_STS_SUCCESS;
286       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
287       l_module_name :=  'create_draft_budget' || g_module_name;
288 
289       -- Changes for bug 3182963
290       IF l_debug_mode = 'Y' THEN
291             pa_debug.set_curr_function( p_function   => 'create_draft_budget',
292                                       p_debug_mode => l_debug_mode );
293       END IF;
294 
295 
296 
297       --  Standard call to check for call compatibility.
298       IF NOT FND_API.Compatible_API_Call ( PA_BUDGET_PUB.g_api_version_number ,
299                                          p_api_version_number   ,
300                                          l_api_name             ,
301                                          G_PKG_NAME             )
302       THEN
303             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
304       END IF;
305 
306       --dbms_output.put_line('copying input parameters to local variables');
307 
308       --Copy the input parametes into the local variables.
309 
310       l_resource_list_name            :=   p_resource_list_name           ;
311 
312       -- G_MISS_NUM can not fit in l_resource_list_id . Hence make it null
313       IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
314              -- dbms_output.put_line('Copying the miss num to l_resource_list_id');
315             l_resource_list_id        :=   NULL;
316       ELSE
317             l_resource_list_id        :=   p_resource_list_id;
318       END IF;
319 
320 --Check if input parameters is G_PA_MISS_XXX. If true set to NULL
321 --Changes made by Xin Liu for post_fpk. 24-APR-03
322 
323     IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
324        l_fin_plan_type_id := NULL;
325     ELSE
326       l_fin_plan_type_id              :=   p_fin_plan_type_id             ;
327     END IF;
328 
329     IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
330        l_fin_plan_type_name := NULL;
331     ELSE
332       l_fin_plan_type_name            :=   p_fin_plan_type_name           ;
333     END IF;
334 
335     IF p_version_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
336        l_version_type := NULL;
337     ELSE
338       l_version_type                  :=   p_version_type                 ;
339     END IF;
340 
341     IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
342        l_fin_plan_level_code := NULL;
343     ELSE
344       l_fin_plan_level_code           :=   p_fin_plan_level_code          ;
345     END IF;
346 
347     IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
348        l_time_phased_code := NULL;
349     ELSE
350       l_time_phased_code              :=   p_time_phased_code             ;
351     END IF;
352 
353     IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
354        l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
355     ELSE
356       l_plan_in_multi_curr_flag       :=   p_plan_in_multi_curr_flag      ;
357     END IF;
358 
359     IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
360       l_projfunc_cost_rate_type := NULL;
361     ELSE
362       l_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
363     END IF;
364 
365      IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
366       l_projfunc_cost_rate_date_typ  := NULL;
367     ELSE
368       l_projfunc_cost_rate_date_typ   :=   p_projfunc_cost_rate_date_typ  ;
369     END IF;
370 
371     IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
372       l_projfunc_cost_rate_date := NULL;
373     ELSE
374       l_projfunc_cost_rate_date       :=   p_projfunc_cost_rate_date      ;
375     END IF;
376 
377     IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
378       l_projfunc_rev_rate_type := NULL;
379     ELSE
380       l_projfunc_rev_rate_type        :=   p_projfunc_rev_rate_type       ;
381     END IF;
382 
383     IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
384       l_projfunc_rev_rate_date_typ  := NULL;
385     ELSE
386       l_projfunc_rev_rate_date_typ    :=   p_projfunc_rev_rate_date_typ   ;
387     END IF;
388 
389     IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
390       l_projfunc_rev_rate_date := NULL;
391     ELSE
392       l_projfunc_rev_rate_date        :=   p_projfunc_rev_rate_date       ;
393     END IF;
394 
395     IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
396       l_project_cost_rate_type := NULL;
397     ELSE
398       l_project_cost_rate_type        :=   p_project_cost_rate_type       ;
399     END IF;
400 
401     IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
402       l_project_cost_rate_date_typ  := NULL;
403     ELSE
404       l_project_cost_rate_date_typ    :=   p_project_cost_rate_date_typ   ;
405     END IF;
406 
407     IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
408       l_project_cost_rate_date := NULL;
409     ELSE
410       l_project_cost_rate_date        :=   p_project_cost_rate_date       ;
411     END IF;
412 
413     IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
414       l_project_rev_rate_type := NULL;
415     ELSE
416       l_project_rev_rate_type         :=   p_project_rev_rate_type        ;
417     END IF;
418 
419     IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
420       l_project_rev_rate_date_typ  := NULL;
421     ELSE
422       l_project_rev_rate_date_typ     :=   p_project_rev_rate_date_typ    ;
423     END IF;
424 
425     IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
426       l_project_rev_rate_date := NULL;
427     ELSE
428       l_project_rev_rate_date         :=   p_project_rev_rate_date        ;
429     END IF;
430 
431     IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
432       l_raw_cost_flag  := 'N';
433     ELSE
434       l_raw_cost_flag                 :=   p_raw_cost_flag                ;
435     END IF;
436 
437     IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
438       l_burdened_cost_flag  := 'N';
439     ELSE
440       l_burdened_cost_flag            :=   p_burdened_cost_flag           ;
441     END IF;
442 
443     IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
444       l_revenue_flag  := 'N';
445     ELSE
446       l_revenue_flag                  :=   p_revenue_flag                 ;
447     END IF;
448 
449     IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
450       l_cost_qty_flag  := 'N';
451     ELSE
452       l_cost_qty_flag                 :=   p_cost_qty_flag                ;
453     END IF;
454 
455     IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
456       l_revenue_qty_flag  := 'N';
457     ELSE
458       l_revenue_qty_flag              :=   p_revenue_qty_flag             ;
459     END IF;
460 
461     IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
462       l_all_qty_flag  := 'N';
463     ELSE
464       l_all_qty_flag                  :=   p_all_qty_flag                 ;
465     END IF;
466 
467     IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
468       l_create_new_working_flag  := 'N';
469     ELSE
470       l_create_new_working_flag       :=   p_create_new_curr_working_flag ;
471     END IF;
472 
473     IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
474       l_replace_current_working_flag  := 'N';
475     ELSE
476       l_replace_current_working_flag  :=   p_replace_current_working_flag ;
477     END IF;
478 
479     IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
480       l_using_resource_lists_flag  := 'Y';
481     ELSE
482       l_using_resource_lists_flag  :=   p_using_resource_lists_flag ;
483     END IF;
484 
485 
486       -- G_MISS_NUM can not fit in l_project_id . Hence make it null
487       IF p_pa_project_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
488       --dbms_output.put_line('Copying the miss num to l_project_id');
489             l_project_id                :=   NULL;
490       ELSE
491             l_project_id                :=   p_pa_project_id;
492       END IF;
493       --Get the user id and responsibility Ids
494       l_user_id := FND_GLOBAL.User_id;
495       l_resp_id := FND_GLOBAL.Resp_id;
496 
497       -- This api will initialize the data that will be used by the map_new_amg_msg.
498       -- Commented out the procedure call as required by Venkatesh. 25-APR-03
499    /*
500         PA_INTERFACE_UTILS_PUB.Set_Global_Info
501         ( p_api_version_number => 1.0
502          ,p_responsibility_id  => l_resp_id
503          ,p_user_id            => l_user_id
504          ,p_calling_mode       => 'AMG'     --bug 2783845
505          ,p_msg_count          => p_msg_count
506          ,p_msg_data           => p_msg_data
507          ,p_return_status      => p_return_status);
508 
509       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
510             RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
511       END IF;
512    */
513 
514       IF l_debug_mode = 'Y' THEN
515             pa_debug.g_err_stage := 'About to call validate header info';
516             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
517       END IF;
518 
519       --Call the api that validates the input information
520       pa_budget_pvt.Validate_Header_Info
521       ( p_api_version_number           => p_api_version_number
522       /* Bug 3133930- parameter included to pass version name */
523       ,p_budget_version_name           => p_budget_version_name
524       ,p_init_msg_list                 => p_init_msg_list
525       ,px_pa_project_id                => l_project_id
526       ,p_pm_project_reference          => p_pm_project_reference
527       ,p_pm_product_code               => p_pm_product_code
528       ,p_budget_type_code              => p_budget_type_code
529       ,p_entry_method_code             => p_entry_method_code
530       ,px_resource_list_name           => l_resource_list_name
531       ,px_resource_list_id             => l_resource_list_id
532       ,px_fin_plan_type_id             => l_fin_plan_type_id
533       ,px_fin_plan_type_name           => l_fin_plan_type_name
534       ,px_version_type                 => l_version_type
535       ,px_fin_plan_level_code          => l_fin_plan_level_code
536       ,px_time_phased_code             => l_time_phased_code
537       ,px_plan_in_multi_curr_flag      => l_plan_in_multi_curr_flag
538       ,px_projfunc_cost_rate_type      => l_projfunc_cost_rate_type
539       ,px_projfunc_cost_rate_date_typ  => l_projfunc_cost_rate_date_typ
540       ,px_projfunc_cost_rate_date      => l_projfunc_cost_rate_date
541       ,px_projfunc_rev_rate_type       => l_projfunc_rev_rate_type
542       ,px_projfunc_rev_rate_date_typ   => l_projfunc_rev_rate_date_typ
543       ,px_projfunc_rev_rate_date       => l_projfunc_rev_rate_date
544       ,px_project_cost_rate_type       => l_project_cost_rate_type
545       ,px_project_cost_rate_date_typ   => l_project_cost_rate_date_typ
546       ,px_project_cost_rate_date       => l_project_cost_rate_date
547       ,px_project_rev_rate_type        => l_project_rev_rate_type
548       ,px_project_rev_rate_date_typ    => l_project_rev_rate_date_typ
549       ,px_project_rev_rate_date        => l_project_rev_rate_date
550       ,px_raw_cost_flag                => l_raw_cost_flag
551       ,px_burdened_cost_flag           => l_burdened_cost_flag
552       ,px_revenue_flag                 => l_revenue_flag
553       ,px_cost_qty_flag                => l_cost_qty_flag
554       ,px_revenue_qty_flag             => l_revenue_qty_flag
555       ,px_all_qty_flag                 => l_all_qty_flag
556       ,p_create_new_curr_working_flag  => l_create_new_working_flag
557       ,p_replace_current_working_flag  => l_replace_current_working_flag
558       ,p_change_reason_code            => p_change_reason_code
559       ,p_calling_module                => 'PA_PM_CREATE_DRAFT_BUDGET'
560       ,p_using_resource_lists_flag     => p_using_resource_lists_flag
561       ,x_budget_amount_code            => l_budget_amount_code   -- Added for bug 4224464
562       ,x_msg_count                     => p_msg_count
563       ,x_msg_data                      => p_msg_data
564       ,x_return_status                 => p_return_status);
565 
566       IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
567 
568          RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
569 
570       END IF;
571 
572       IF l_debug_mode = 'Y' THEN
573             pa_debug.g_err_stage := 'Validate Header got executed successfully';
574             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
575       END IF;
576 
577       -- Copy the input pl/sql table to a local pl/sql table. This is necessary since the
578       -- input table is a IN variable and hence read only.
579       l_budget_lines_in := p_budget_lines_in;
580 
581 
582       -- Budget type code and budget entry method,project id should be valid at this point
583       -- Hence exception handling is not done
584 
585       IF (p_budget_type_code IS NOT NULL AND
586            p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
587 
588             SELECT  budget_amount_code
589             INTO    l_budget_amount_code
590             FROM    pa_budget_types
591             WHERE   budget_type_code = p_budget_type_code;
592 
593             SELECT time_phased_type_code
594                   ,categorization_code
595                   ,entry_level_code
596             INTO   l_time_phased_type_code
597                   ,l_categorization_code
598                   ,l_entry_level_code
599             FROM   pa_budget_entry_methods
600             WHERE  budget_entry_method_code = p_entry_method_code
601             AND    trunc(sysdate) BETWEEN trunc(start_date_active) and trunc(nvl(end_date_active,sysdate));
602 
603       END IF;
604 
605       SELECT segment1
606       INTO   l_amg_segment1
607       FROM   pa_projects_all
608       WHERE  project_id=l_project_id;
609 
610       IF l_debug_mode = 'Y' THEN
611             pa_debug.g_err_stage := 'Got the budget type details and segment1 of the project';
612             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
613       END IF;
614 
615 
616 /* After bug fix for bug 4052562, note that the below API returns UOM from rlm table as DOLLARS instead of
617  * pa_resources table. Due to this, the below api may not be suitable for usage
618  * for old budgets model which retrieves UOM from pa_resources (HOURS). As such,
619  * since UOM is not used in create_draft_budget api FOR OLD BUDGETS MODEL, reusing
620  * the below api for both old and new budget model resource lists. If for some
621  * reason in future, UOM of uncatrlm is to be used even for old budgets model,
622  * we should consider using pa_get_resource.get_uncateg_Resource_info. Not
623  * changing it now, since, pa_get_resource.get_uncateg_resource_info owned by RF
624  * team, as of now, has the same performance issue of full table scans on RLM
625  * and pa_resources tables.  */
626       --Get the uncategorized resource list info.
627       pa_fin_plan_utils.Get_Uncat_Resource_List_Info
628         (x_resource_list_id           => l_uncategorized_res_list_id,
629          x_resource_list_member_id    => l_uncategorized_rlmid,
630          x_track_as_labor_flag        => l_unc_track_as_labor_flag,
631          x_unit_of_measure            => l_unc_unit_of_measure,
632          x_return_status              => p_return_status,
633          x_msg_count                  => p_msg_count,
634          x_msg_data                   => p_msg_data     );
635 
636       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
637             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
638       --  RAISE  FND_API.G_EXC_ERROR;
639       END IF; -- IF l_err_code <> 0 THEN
640 
641       IF l_debug_mode = 'Y' THEN
642             pa_debug.g_err_stage := 'Got the uncategorized res list info';
643             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
644       END IF;
645 
646       --Added by Xin Liu for supporting Project Connect 4.0
647       --5/6/2003
648 
649       If l_using_resource_lists_flag = 'N' THEN
650 
651        l_resource_list_id :=l_uncategorized_res_list_id;
652 
653       END IF;
654 
655       --When description is not passed, set value to NULL
656 
657       IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
658       THEN
659             l_description := NULL;
660       ELSE
661             l_description := p_description;
662       END IF;
663 
664       /*   -- dbms_output.put_line('Before setting flex fields to NULL, when not passed'); */
665 
666       --When descriptive flex fields are not passed set them to NULL
667       IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
668       THEN
669             l_attribute_category := NULL;
670       ELSE
671            l_attribute_category := p_attribute_category;
672       END IF;
673       IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
674       THEN
675             l_attribute1 := NULL;
676       ELSE
677             l_attribute1 := p_attribute1;
678       END IF;
679       IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
680       THEN
681             l_attribute2 := NULL;
682       ELSE
683             l_attribute2 := p_attribute2;
684       END IF;
685       IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
686       THEN
687             l_attribute3 := NULL;
688       ELSE
689             l_attribute3 := p_attribute3;
690       END IF;
691       IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
692       THEN
693             l_attribute4 := NULL;
694       ELSE
695             l_attribute4 := p_attribute4;
696       END IF;
697 
698       IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
699       THEN
700             l_attribute5 := NULL;
701       ELSE
702             l_attribute5 := p_attribute5;
703       END IF;
704 
705       IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
706       THEN
707             l_attribute6 := NULL;
708       ELSE
709             l_attribute6 := p_attribute6;
710       END IF;
711 
712       IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
713       THEN
714             l_attribute7 := NULL;
715       ELSE
716             l_attribute7 := p_attribute7;
717       END IF;
718 
719       IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
720       THEN
721             l_attribute8 := NULL;
722       ELSE
723       l_attribute8 := p_attribute8;
724       END IF;
725       IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
726       THEN
727             l_attribute9 := NULL;
728       ELSE
729             l_attribute9 := p_attribute9;
730       END IF;
731       IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
732       THEN
733             l_attribute10 := NULL;
734       ELSE
735             l_attribute10 := p_attribute10;
736       END IF;
737       IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
738       THEN
739             l_attribute11 := NULL;
740       ELSE
741             l_attribute11 := p_attribute11;
742       END IF;
743       IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
744       THEN
745             l_attribute12 := NULL;
746       ELSE
747       l_attribute12 := p_attribute12;
748       END IF;
749       IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
750       THEN
751             l_attribute13 := NULL;
752       ELSE
753       l_attribute13 := p_attribute13;
754       END IF;
755       IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
756       THEN
757             l_attribute14:= NULL;
758       ELSE
759             l_attribute14:= p_attribute14;
760       END IF;
761 
762       IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
763       THEN
764             l_attribute15 := NULL;
765       ELSE
766             l_attribute15 := p_attribute15;
767       END IF;
768 
769 
770       IF p_pm_budget_reference =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
771       THEN
772             l_pm_budget_reference := NULL;
773       ELSE
774             l_pm_budget_reference := p_pm_budget_reference;
775       END IF;
776 
777       IF p_budget_version_name =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
778       THEN
779             l_budget_version_name := NULL;
780       ELSE
781             l_budget_version_name := p_budget_version_name;
782       END IF;
783 
784       IF p_change_reason_code =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
785       THEN
786             l_change_reason_code := NULL;
787       ELSE
788             l_change_reason_code := p_change_reason_code;
789       END IF;
790 
791 
792       IF l_debug_mode = 'Y' THEN
793             pa_debug.g_err_stage := 'Done with the initialisation of flex fields, dexcription, etc';
794             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
795       END IF;
796 
797 
798       IF p_budget_type_code IS NOT NULL AND
799          p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
800 
801             -- Lock the existing working version.
802             OPEN l_budget_version_csr( l_project_id, p_budget_type_code );
803             FETCH l_budget_version_csr INTO l_budget_version_rec;
804             IF l_budget_version_csr%FOUND THEN
805 
806                   OPEN l_lock_old_budget_csr( l_budget_version_rec.budget_Version_id );
807                   CLOSE l_lock_old_budget_csr;                --FYI, does not release locks
808 
809             END IF;
810             CLOSE l_budget_version_csr;
811 
812 /* It is assumed that if the program reaches till this point,then there are no budget lines with errors in the out plsql table*/
813 
814             --Call the api that creates the draft budget
815             PA_BUDGET_UTILS.create_draft
816             (x_project_id                 => l_project_id
817             ,x_budget_type_code           => p_budget_type_code
818             ,x_version_name               => l_budget_version_name
819             ,x_description                => l_description
820             ,x_resource_list_id           => l_resource_list_id
821             ,x_change_reason_code         => l_change_reason_code
822             ,x_budget_entry_method_code   => p_entry_method_code
823             ,x_attribute_category         => l_attribute_category
824             ,x_attribute1                 => l_attribute1
825             ,x_attribute2                 => l_attribute2
826             ,x_attribute3                 => l_attribute3
827             ,x_attribute4                 => l_attribute4
828             ,x_attribute5                 => l_attribute5
829             ,x_attribute6                 => l_attribute6
830             ,x_attribute7                 => l_attribute7
831             ,x_attribute8                 => l_attribute8
832             ,x_attribute9                 => l_attribute9
833             ,x_attribute10                => l_attribute10
834             ,x_attribute11                => l_attribute11
835             ,x_attribute12                => l_attribute12
836             ,x_attribute13                => l_attribute13
837             ,x_attribute14                => l_attribute14
838             ,x_attribute15                => l_attribute15
839             ,x_budget_version_id          => l_budget_version_id
840             ,x_err_code                   => l_err_code
841             ,x_err_stage                  => l_err_stage
842             ,x_err_stack                  => l_err_stack
843             ,x_pm_product_code            => p_pm_product_code
844             ,x_pm_budget_reference        => l_pm_budget_reference );
845 
846            -----------
847             -- temporary solution
848             -- COMMIT in DELETE_DRAFT removes all savepoints!!!
849 
850             SAVEPOINT create_draft_budget_pub;
851             -----------
852 
853             IF l_err_code > 0
854             THEN
855                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
856                   THEN
857 
858                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
859                         THEN
860                               pa_interface_utils_pub.map_new_amg_msg
861                               ( p_old_message_code => 'PA_CREATE_DRAFT_FAILED'
862                                ,p_msg_attribute    => 'CHANGE'
863                                ,p_resize_flag      => 'N'
864                                ,p_msg_context      => 'BUDG'
865                                ,p_attribute1       => l_amg_segment1
866                                ,p_attribute2       => ''
867                                ,p_attribute3       => p_budget_type_code
868                                ,p_attribute4       => ''
869                                ,p_attribute5       => '');
870                         ELSE
871                               pa_interface_utils_pub.map_new_amg_msg
872                               ( p_old_message_code => l_err_stage
873                                ,p_msg_attribute    => 'CHANGE'
874                                ,p_resize_flag      => 'N'
875                                ,p_msg_context      => 'BUDG'
876                                ,p_attribute1       => l_amg_segment1
877                                ,p_attribute2       => ''
878                                ,p_attribute3       => p_budget_type_code
879                                ,p_attribute4       => ''
880                                ,p_attribute5       => '');
881                         END IF;
882 
883                   END IF;
884 
885                   IF l_debug_mode = 'Y' THEN
886                         pa_debug.g_err_stage := 'Error executing create draft';
887                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
888                   END IF;
889 
890                   RAISE FND_API.G_EXC_ERROR;
891 
892             ELSIF l_err_code < 0
893             THEN
894 
895                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
896                   THEN
897 
898                   FND_MSG_PUB.add_exc_msg
899                       (  p_pkg_name       => 'PA_BUDGET_UTILS'
900                       ,  p_procedure_name => 'CREATE_DRAFT'
901                       ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
902 
903                   END IF;
904 
905                   IF l_debug_mode = 'Y' THEN
906                         pa_debug.g_err_stage := 'SQL Error executing create draft';
907                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
908                   END IF;
909 
910 
911                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
912 
913             END IF;
914 
915             IF l_debug_mode = 'Y' THEN
916                   pa_debug.g_err_stage := 'Created the version in the budget model';
917                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
918             END IF;
919 
920             -- Commenting out this select as the create draft now returns the id of hte
921             -- newly created version
922             -- SELECT pa_budget_versions_s.currval  --because x_budget_version_id in procedure
923             -- INTO   l_budget_version_id        --PA_BUDGET_UTILS.create_draft returns nothing: BUG.
924             -- FROM   SYS.DUAL;
925 
926             IF l_debug_mode = 'Y' THEN
927                   pa_debug.g_err_stage := 'Created version is is '|| l_budget_version_id ;
928                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
929 
930                   pa_debug.g_err_stage := 'About to call validate budget lines';
931                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
932             END IF;
933 
934             --Validate the budget lines.
935             IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
936 
937             --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
938             FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
939 
940                              IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
941                                     l_budget_lines_in(i).pa_task_id   :=  NULL;
942                               END IF;
943 
944                              IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
945                                     l_budget_lines_in(i).pm_task_reference  :=  NULL;
946                               END IF;
947 
948                              IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
949                                     l_budget_lines_in(i).resource_alias :=  NULL;
950                               END IF;
951 
952                              IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
953                                     l_budget_lines_in(i).resource_list_member_id:=  NULL;
954                               END IF;
955 
956                              IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
957                                     l_budget_lines_in(i).budget_start_date:=  NULL;
958                               END IF;
959                              IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
960                                     l_budget_lines_in(i).budget_end_date:=  NULL;
961                               END IF;
962 
963                               IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
964                                         l_budget_lines_in(i).period_name := NULL;
965                               END IF;
966 
967                         IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
968                                     l_budget_lines_in(i).raw_cost   :=  NULL;
969                               END IF;
970 
971                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
972                                     l_budget_lines_in(i).burdened_cost  := NULL;
973                               END IF;
974 
975                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
976                                     l_budget_lines_in(i).revenue  := NULL;
977                               END IF;
978 
979                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
980                                     l_budget_lines_in(i).quantity  := NULL;
981                               END IF;
982 
983 
984                               IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
985                                     l_budget_lines_in(i).change_reason_code  :=NULL;
986                               END IF;
987 
988                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
989                                     l_budget_lines_in(i).description     :=  NULL;
990                               END IF;
991 
992                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
993                                     l_budget_lines_in(i).attribute_category     :=  NULL;
994                               END IF;
995 
996                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
997                                     l_budget_lines_in(i).attribute1     :=  NULL;
998                               END IF;
999 
1000                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1001                                     l_budget_lines_in(i).attribute2     :=  NULL;
1002                               END IF;
1003 
1004                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1005                                     l_budget_lines_in(i).attribute3     :=  NULL;
1006                               END IF;
1007 
1008                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1009                                     l_budget_lines_in(i).attribute4     :=  NULL;
1010                               END IF;
1011 
1012                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1013                                     l_budget_lines_in(i).attribute5     :=  NULL;
1014                               END IF;
1015 
1016                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1017                                     l_budget_lines_in(i).attribute6     :=  NULL;
1018                               END IF;
1019 
1020                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1021                                     l_budget_lines_in(i).attribute7     :=  NULL;
1022                               END IF;
1023 
1024                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1025                                     l_budget_lines_in(i).attribute8     :=  NULL;
1026                               END IF;
1027 
1028                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1029                                     l_budget_lines_in(i).attribute9     :=  NULL;
1030                               END IF;
1031 
1032                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1033                                     l_budget_lines_in(i).attribute10     :=  NULL;
1034                               END IF;
1035 
1036                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1037                                     l_budget_lines_in(i).attribute11     :=  NULL;
1038                               END IF;
1039 
1040                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1041                                     l_budget_lines_in(i).attribute12     :=  NULL;
1042                               END IF;
1043 
1044                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1045                                     l_budget_lines_in(i).attribute13     :=  NULL;
1046                               END IF;
1047 
1048                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1049                                     l_budget_lines_in(i).attribute14     :=  NULL;
1050                               END IF;
1051 
1052                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1053                                     l_budget_lines_in(i).attribute15     :=  NULL;
1054                               END IF;
1055 
1056                         IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1057                             l_budget_lines_in(i).txn_currency_code := NULL;
1058                         END IF;
1059 
1060                         IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1061                         l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1062                         END IF;
1063 
1064                         IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1065                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1066                         END IF;
1067 
1068                         IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1069                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE     := NULL;
1070                         END IF;
1071 
1072                         IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1073                         l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1074                         END IF;
1075 
1076                         IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1077                                l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE      := NULL;
1078                         END IF;
1079 
1080                         IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1081                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1082                         END IF;
1083 
1084                         IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1085                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE      := NULL;
1086                         END IF;
1087 
1088                         IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1089                         l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
1090                         END IF;
1091 
1092                         IF  l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1093                         l_budget_lines_in(i).PROJECT_COST_RATE_TYPE      := NULL;
1094                         END IF;
1095 
1096                         IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1097                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1098                         END IF;
1099 
1100                         IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE      THEN
1101                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE      := NULL;
1102                         END IF;
1103 
1104                         IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1105                         l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE  := NULL;
1106                         END IF;
1107 
1108                         IF  l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1109                         l_budget_lines_in(i).PROJECT_REV_RATE_TYPE       := NULL;
1110                         END IF;
1111 
1112                         IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1113                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE  := NULL;
1114                         END IF;
1115 
1116                         IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1117                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE       := NULL;
1118                         END IF;
1119 
1120                         IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1121                         l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE   := NULL;
1122                         END IF;
1123 
1124                                 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1125                                    pm_product_code is passed as Null at the line level */
1126 
1127                         IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1128                         l_budget_lines_in(i).pm_product_code IS NULL THEN
1129                                 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1130                                 END IF;
1131 
1132                         IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1133                         l_budget_lines_in(i).pm_budget_line_reference    := NULL;
1134                         END IF;
1135 
1136 
1137             END LOOP;
1138 /** Bug 3709462
1139                 --3569883 start
1140               select fin_plan_type_id
1141               into l_fp_type_id
1142               from pa_budget_versions
1143              where budget_version_id = l_budget_version_id;
1144 
1145                 select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1146                 --3569883 end
1147 **/            -- Bug 3709462 we are in old model context no additional checks are necessary
1148 --               l_old_model := 'Y';
1149                --Done with Changes by xin liu
1150                   pa_budget_pvt.Validate_Budget_Lines
1151                         ( p_pa_project_id              => l_project_id
1152                         ,p_budget_type_code            => p_budget_type_code
1153                         ,p_fin_plan_type_id            => NULL
1154                         ,p_version_type                => NULL
1155                         ,p_resource_list_id            => l_resource_list_id
1156                         ,p_time_phased_code            => l_time_phased_type_code
1157                         ,p_budget_entry_method_code    => p_entry_method_code
1158                         ,p_entry_level_code            => l_entry_level_code
1159                         ,p_allow_qty_flag              => NULL
1160                         ,p_allow_raw_cost_flag         => NULL
1161                         ,p_allow_burdened_cost_flag    => NULL
1162                         ,p_allow_revenue_flag          => NULL
1163                         ,p_multi_currency_flag         => NULL
1164                         ,p_project_cost_rate_type      => NULL
1165                         ,p_project_cost_rate_date_typ  => NULL
1166                         ,p_project_cost_rate_date      => NULL
1167                         ,p_project_cost_exchange_rate  => NULL
1168                         ,p_projfunc_cost_rate_type     => NULL
1169                         ,p_projfunc_cost_rate_date_typ => NULL
1170                         ,p_projfunc_cost_rate_date     => NULL
1171                         ,p_projfunc_cost_exchange_rate => NULL
1172                         ,p_project_rev_rate_type       => NULL
1173                         ,p_project_rev_rate_date_typ   => NULL
1174                         ,p_project_rev_rate_date       => NULL
1175                         ,p_project_rev_exchange_rate   => NULL
1176                         ,p_projfunc_rev_rate_type      => NULL
1177                         ,p_projfunc_rev_rate_date_typ  => NULL
1178                         ,p_projfunc_rev_rate_date      => NULL
1179                         ,p_projfunc_rev_exchange_rate  => NULL
1180                         ,px_budget_lines_in            => l_budget_lines_in
1181                         ,x_budget_lines_out            => p_budget_lines_out /* Bug 3133930*/
1182 --                        ,x_old_model                   => l_old_model --3569883
1183                         ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
1184                         ,x_etc_method_code_tbl         => l_etc_method_code_tbl
1185                         ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
1186                         ,x_msg_count                   => p_msg_count
1187                         ,x_msg_data                    => p_msg_data
1188                         ,x_return_status               => p_return_status);
1189 
1190                   IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1191 
1192                          RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1193 
1194                   END IF;
1195 
1196                   IF l_debug_mode = 'Y' THEN
1197                         pa_debug.g_err_stage := 'Validate Budget Lines got executed successfully';
1198                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1199                   END IF;
1200 
1201             END IF;--IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1202 
1203 
1204 
1205 
1206     /*
1207         -- Not necessary now since the same is passed as parameters to create_draft
1208         --add the pm_budget_reference and pm_product_code to the just created budget
1209         UPDATE pa_budget_versions
1210         SET pm_budget_reference = p_pm_budget_reference
1211         ,   pm_product_code      = p_pm_product_code
1212         WHERE budget_version_id = l_budget_version_id;
1213     */
1214 
1215 
1216     -- BUDGET LINES
1217 
1218             i := l_budget_lines_in.first;
1219 
1220             IF l_budget_lines_in.exists(i)
1221             THEN
1222 
1223                   <<budget_line>>
1224                   WHILE i IS NOT NULL LOOP
1225 
1226                         /* initialize return status for budget line to success */
1227 
1228                         /* Bug 3133930 initialization is removed here as it has been done in
1229                         validate_budget_lines */
1230                         /* p_budget_lines_out(i).return_status     := FND_API.G_RET_STS_SUCCESS; */
1231 
1232                         l_budget_line_in_rec := l_budget_lines_in(i);
1233                         IF l_budget_line_in_rec.pm_budget_line_reference =
1234                                        PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1235                               l_budget_line_in_rec.pm_budget_line_reference := NULL;
1236                         END IF;
1237 
1238                         IF l_categorization_code = 'N' THEN
1239                               l_budget_rlmid := l_uncategorized_rlmid;
1240                               l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1241                         ELSE
1242                               l_budget_rlmid := l_budget_line_in_rec.resource_list_member_id;
1243                               l_budget_alias := l_budget_line_in_rec.resource_alias;
1244                         END IF;
1245 
1246                         /* For bug # 675869 Fix */
1247                         IF l_budget_line_in_rec.period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1248                               l_budget_line_in_rec.period_name := NULL;
1249                         END IF;
1250                         /* End Of bug # 675869 Fix */
1251 
1252 
1253                         --Call the api that inserts the budget line
1254                         pa_budget_pvt.insert_budget_line
1255                         ( p_return_status           => l_return_status
1256                         ,p_pa_project_id            => l_project_id
1257                         ,p_budget_type_code         => p_budget_type_code
1258                         ,p_pa_task_id               => l_budget_line_in_rec.pa_task_id
1259                         ,p_pm_task_reference        => l_budget_line_in_rec.pm_task_reference
1260                         ,p_resource_alias           => l_budget_alias
1261                         ,p_member_id                => l_budget_rlmid
1262                         ,p_budget_start_date        => l_budget_line_in_rec.budget_start_date
1263                         ,p_budget_end_date          => l_budget_line_in_rec.budget_end_date
1264                         ,p_period_name              => l_budget_line_in_rec.period_name
1265                         ,p_description              => l_budget_line_in_rec.description
1266                         ,p_raw_cost                 => l_budget_line_in_rec.raw_cost
1267                         ,p_burdened_cost            => l_budget_line_in_rec.burdened_cost
1268                         ,p_revenue                  => l_budget_line_in_rec.revenue
1269                         ,p_quantity                 => l_budget_line_in_rec.quantity
1270                         ,p_pm_product_code          => l_budget_line_in_rec.pm_product_code
1271                         ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
1272                         ,p_resource_list_id         => l_resource_list_id
1273                         ,p_attribute_category       => l_budget_line_in_rec.attribute_category
1274                         ,p_attribute1               => l_budget_line_in_rec.attribute1
1275                         ,p_attribute2               => l_budget_line_in_rec.attribute2
1276                         ,p_attribute3               => l_budget_line_in_rec.attribute3
1277                         ,p_attribute4               => l_budget_line_in_rec.attribute4
1278                         ,p_attribute5               => l_budget_line_in_rec.attribute5
1279                         ,p_attribute6               => l_budget_line_in_rec.attribute6
1280                         ,p_attribute7               => l_budget_line_in_rec.attribute7
1281                         ,p_attribute8               => l_budget_line_in_rec.attribute8
1282                         ,p_attribute9               => l_budget_line_in_rec.attribute9
1283                         ,p_attribute10              => l_budget_line_in_rec.attribute10
1284                         ,p_attribute11              => l_budget_line_in_rec.attribute11
1285                         ,p_attribute12              => l_budget_line_in_rec.attribute12
1286                         ,p_attribute13              => l_budget_line_in_rec.attribute13
1287                         ,p_attribute14              => l_budget_line_in_rec.attribute14
1288                         ,p_attribute15              => l_budget_line_in_rec.attribute15
1289                         ,p_time_phased_type_code    => l_time_phased_type_code
1290                         ,p_entry_level_code         => l_entry_level_code
1291                         ,p_budget_amount_code       => l_budget_amount_code
1292                         ,p_budget_entry_method_code => p_entry_method_code
1293                         ,p_categorization_code      => l_categorization_code
1294                         ,p_budget_version_id        => l_budget_version_id  );
1295                         IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
1296                         THEN
1297                               p_budget_lines_out(i).return_status := l_return_status;
1298 
1299                               IF l_debug_mode = 'Y' THEN
1300                                     pa_debug.g_err_stage := 'Unexpected Error inserting line '||i;
1301                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1302                               END IF;
1303 
1304                               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1305 
1306                         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
1307                         THEN
1308                               p_budget_lines_out(i).return_status := l_return_status;
1309                               p_multiple_task_msg   := 'F';
1310                               IF l_debug_mode = 'Y' THEN
1311                                     pa_debug.g_err_stage := 'Error inserting line '||i;
1312                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1313                               END IF;
1314 
1315                               --        RAISE  FND_API.G_EXC_ERROR;
1316 
1317                         END IF;
1318 
1319                         IF l_debug_mode = 'Y' THEN
1320                               pa_debug.g_err_stage := 'Done with the insertion of line '||i;
1321                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1322                         END IF;
1323 
1324 
1325                         i := l_budget_lines_in.next(i);
1326 
1327                   END LOOP budget_line;
1328 
1329                   IF p_multiple_task_msg = 'F'
1330                   THEN
1331                         RAISE  FND_API.G_EXC_ERROR;
1332                   END IF;
1333 
1334             END IF;
1335 
1336       ELSE--Create a version in the finplan model
1337 
1338             IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
1339 
1340                   l_allow_qty_flag := p_cost_qty_flag;
1341 
1342             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
1343 
1344                   l_allow_qty_flag := p_revenue_qty_flag;
1345 
1346             ELSE
1347 
1348                   l_allow_qty_flag :=  P_all_qty_flag;
1349 
1350             END IF;
1351 
1352             IF l_debug_mode = 'Y' THEN
1353                   pa_debug.g_err_stage := 'l_allow_qty_flag is  '||l_allow_qty_flag;
1354                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1355             END IF;
1356 
1357             --Call the api only if budget lines exist
1358              -- dbms_output.put_line('l_budget_lines_in.last '||l_budget_lines_in.last);
1359             IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1360 
1361                   IF l_debug_mode = 'Y' THEN
1362                         pa_debug.g_err_stage := 'About to call validate budget lines in finplan model';
1363                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1364                   END IF;
1365 
1366             --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
1367             FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1368 
1369                              IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1370                                     l_budget_lines_in(i).pa_task_id   :=  NULL;
1371                               END IF;
1372 
1373                              IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1374                                     l_budget_lines_in(i).pm_task_reference  :=  NULL;
1375                               END IF;
1376 
1377                              IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1378                                     l_budget_lines_in(i).resource_alias :=  NULL;
1379                               END IF;
1380 
1381                              IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1382                                     l_budget_lines_in(i).resource_list_member_id:=  NULL;
1383                               END IF;
1384 
1385                              IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1386                                     l_budget_lines_in(i).budget_start_date:=  NULL;
1387                               END IF;
1388                              IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1389                                     l_budget_lines_in(i).budget_end_date:=  NULL;
1390                               END IF;
1391 
1392                               IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1393                                         l_budget_lines_in(i).period_name := NULL;
1394                               END IF;
1395 
1396                         IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1397                                     l_budget_lines_in(i).raw_cost   :=  NULL;
1398                               END IF;
1399 
1400                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1401                                     l_budget_lines_in(i).burdened_cost  := NULL;
1402                               END IF;
1403 
1404                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1405                                     l_budget_lines_in(i).revenue  := NULL;
1406                               END IF;
1407 
1408                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1409                                     l_budget_lines_in(i).quantity  := NULL;
1410                               END IF;
1411 
1412 
1413                               IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1414                                     l_budget_lines_in(i).change_reason_code  :=NULL;
1415                               END IF;
1416 
1417                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1418                                     l_budget_lines_in(i).description     :=  NULL;
1419                               END IF;
1420 
1421                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1422                                     l_budget_lines_in(i).attribute_category     :=  NULL;
1423                               END IF;
1424 
1425                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1426                                     l_budget_lines_in(i).attribute1     :=  NULL;
1427                               END IF;
1428 
1429                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1430                                     l_budget_lines_in(i).attribute2     :=  NULL;
1431                               END IF;
1432 
1433                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1434                                     l_budget_lines_in(i).attribute3     :=  NULL;
1435                               END IF;
1436 
1437                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1438                                     l_budget_lines_in(i).attribute4     :=  NULL;
1439                               END IF;
1440 
1441                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1442                                     l_budget_lines_in(i).attribute5     :=  NULL;
1443                               END IF;
1444 
1445                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1446                                     l_budget_lines_in(i).attribute6     :=  NULL;
1447                               END IF;
1448 
1449                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1450                                     l_budget_lines_in(i).attribute7     :=  NULL;
1451                               END IF;
1452 
1453                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1454                                     l_budget_lines_in(i).attribute8     :=  NULL;
1455                               END IF;
1456 
1457                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1458                                     l_budget_lines_in(i).attribute9     :=  NULL;
1459                               END IF;
1460 
1461                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1462                                     l_budget_lines_in(i).attribute10     :=  NULL;
1463                               END IF;
1464 
1465                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1466                                     l_budget_lines_in(i).attribute11     :=  NULL;
1467                               END IF;
1468 
1469                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1470                                     l_budget_lines_in(i).attribute12     :=  NULL;
1471                               END IF;
1472 
1473                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1474                                     l_budget_lines_in(i).attribute13     :=  NULL;
1475                               END IF;
1476 
1477                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1478                                     l_budget_lines_in(i).attribute14     :=  NULL;
1479                               END IF;
1480 
1481                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1482                                     l_budget_lines_in(i).attribute15     :=  NULL;
1483                               END IF;
1484 
1485                         IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1486                             l_budget_lines_in(i).txn_currency_code := NULL;
1487                         END IF;
1488 
1489                         IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1490                         l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1491                         END IF;
1492 
1493                         IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1494                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1495                         END IF;
1496 
1497                         IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1498                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE     := NULL;
1499                         END IF;
1500 
1501                         IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1502                         l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1503                         END IF;
1504 
1505                         IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1506                                l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE      := NULL;
1507                         END IF;
1508 
1509                         IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1510                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1511                         END IF;
1512 
1513                         IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1514                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE      := NULL;
1515                         END IF;
1516 
1517                         IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1518                         l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
1519                         END IF;
1520 
1521                         IF  l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1522                         l_budget_lines_in(i).PROJECT_COST_RATE_TYPE      := NULL;
1523                         END IF;
1524 
1525                         IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1526                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1527                         END IF;
1528 
1529                         IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE      THEN
1530                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE      := NULL;
1531                         END IF;
1532 
1533                         IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1534                         l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE  := NULL;
1535                         END IF;
1536 
1537                         IF  l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1538                         l_budget_lines_in(i).PROJECT_REV_RATE_TYPE       := NULL;
1539                         END IF;
1540 
1541                         IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1542                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE  := NULL;
1543                         END IF;
1544 
1545                         IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1546                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE       := NULL;
1547                         END IF;
1548 
1549                         IF  l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1550                         l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE   := NULL;
1551                         END IF;
1552 
1553                                 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1554                                    pm_product_code is passed as Null at the line level */
1555 
1556                         IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1557                                 l_budget_lines_in(i).pm_product_code IS NULL THEN
1558                                 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1559                         END IF;
1560 
1561                         IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1562                         l_budget_lines_in(i).pm_budget_line_reference    := NULL;
1563                         END IF;
1564 
1565 
1566             END LOOP;
1567                   --Done with Changes by xin liu
1568 /** Bug 3709462
1569                   --3569883 start
1570                   select fin_plan_type_id
1571                   into l_fp_type_id
1572                   from pa_budget_versions
1573                   where budget_version_id = l_budget_version_id;
1574 
1575                   select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1576                   --3569883 end
1577 **/
1578                   -- Bug 3709462 We are in new model context, no new checks are necessary
1579 --                  l_old_model := 'N';
1580                   --Validate the finplan lines passed
1581                   pa_budget_pvt.Validate_Budget_Lines
1582                   ( p_pa_project_id              => l_project_id
1583                   ,p_budget_type_code            => NULL
1584                   ,p_fin_plan_type_id            => l_fin_plan_type_id
1585                   ,p_version_type                => l_version_type
1586                   ,p_resource_list_id            => l_resource_list_id
1587                   ,p_time_phased_code            => l_time_phased_code
1588                   ,p_budget_entry_method_code    => NULL
1589                   ,p_entry_level_code            => l_fin_plan_level_code
1590                   ,p_allow_qty_flag              => l_allow_qty_flag
1591                   ,p_allow_raw_cost_flag         => p_raw_cost_flag
1592                   ,p_allow_burdened_cost_flag    => p_burdened_cost_flag
1593                   ,p_allow_revenue_flag          => p_revenue_flag
1594                   ,p_multi_currency_flag         => l_plan_in_multi_curr_flag
1595                   ,p_project_cost_rate_type      => l_project_cost_rate_type
1596                   ,p_project_cost_rate_date_typ  => l_project_cost_rate_date_typ
1597                   ,p_project_cost_rate_date      => l_project_cost_rate_date
1598                   ,p_project_cost_exchange_rate  => NULL
1599                   ,p_projfunc_cost_rate_type     => l_projfunc_cost_rate_type
1600                   ,p_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
1601                   ,p_projfunc_cost_rate_date     => l_projfunc_cost_rate_date
1602                   ,p_projfunc_cost_exchange_rate => NULL
1603                   ,p_project_rev_rate_type       => l_project_rev_rate_type
1604                   ,p_project_rev_rate_date_typ   => l_project_rev_rate_date_typ
1605                   ,p_project_rev_rate_date       => l_project_rev_rate_date
1606                   ,p_project_rev_exchange_rate   => NULL
1607                   ,p_projfunc_rev_rate_type      => l_projfunc_rev_rate_type
1608                   ,p_projfunc_rev_rate_date_typ  => l_projfunc_rev_rate_date_typ
1609                   ,p_projfunc_rev_rate_date      => l_projfunc_rev_rate_date
1610                   ,p_projfunc_rev_exchange_rate  => NULL
1611                   ,px_budget_lines_in            => l_budget_lines_in
1612                   ,x_budget_lines_out            => p_budget_lines_out /* Bug 3133930*/
1613 --                  ,x_old_model                   => l_old_model --3569883
1614                   ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
1615                   ,x_etc_method_code_tbl         => l_etc_method_code_tbl
1616                   ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
1617                   ,x_msg_count                   => p_msg_count
1618                   ,x_msg_data                    => p_msg_data
1619                   ,x_return_status               => p_return_status);
1620 
1621                   IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1622 
1623                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1624 
1625                   END IF;
1626 
1627                   IF l_debug_mode = 'Y' THEN
1628                         pa_debug.g_err_stage := 'Validate budget lines got executed successfully';
1629                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1630                   END IF;
1631 
1632                   -- Initialise the index for the fin plan lines table
1633                   j :=1;
1634 
1635                   -- Intilalise the UOM and track as labor flag to the values associated with
1636                   -- the uncategorized resource list.
1637                   l_unit_of_measure := l_unc_unit_of_measure;
1638                   l_track_as_labor_flag := l_unc_track_as_labor_flag;
1639 
1640                   --dbms_output.put_line('l_budget_lines_in.FIRST '||l_budget_lines_in.FIRST);
1641                   --dbms_output.put_line('l_budget_lines_in.LAST '||l_budget_lines_in.LAST);
1642 
1643                   -- Copy the fin plan lines into a table of type pa_fp_rollup_tmp
1644                   FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1645 
1646                        --dbms_output.put_line('In the for loop');
1647 
1648                         IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1649                               l_budget_lines_in(i).period_name := NULL;
1650                         END IF;
1651 
1652                         --Lines should be processed only if atleast one of the amounts exist
1653                         IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1654                             nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
1655                             nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
1656                             nvl(l_budget_lines_in(i).revenue,0) <>0) THEN
1657 
1658 
1659                               -- Get UOM and track as labor flag only if the resource list is not uncategorized
1660                               -- If it is is uncategorized then we can make use of the uom and track as labor
1661                               -- flag obtained earlier
1662                               IF (l_resource_list_id <> l_uncategorized_res_list_id) THEN
1663                                     -- Bug 3807633.. We can directly fetch UOM from pa_resource_list_members
1664                                     -- for FINPLAN MODEL(FP.M Changes) as old non-migrated resource
1665                                     -- list cannot be used and only New and Migrated resource
1666                                     -- list can be used for FINPLAN Model.
1667                                     SELECT prlm.unit_of_measure
1668                                     INTO   l_unit_of_measure
1669                                     FROM   pa_resource_list_members prlm
1670                                     WHERE  prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
1671 
1672                               END IF;
1673 
1674                               --dbms_output.put_line('copying from budget to rollup finplan');
1675 
1676                               -- Convert flex field attributes to NULL if they have Miss Char as value
1677 
1678                               l_finplan_lines_tab(j).system_reference1           :=  l_budget_lines_in(i).pa_task_id;
1679                               l_finplan_lines_tab(j).system_reference2           :=  l_budget_lines_in(i).resource_list_member_id         ;
1680                               l_finplan_lines_tab(j).start_date                  :=  l_budget_lines_in(i).budget_start_date;
1681                               l_finplan_lines_tab(j).end_date                    :=  l_budget_lines_in(i).budget_end_date;
1682                               l_finplan_lines_tab(j).period_name                 :=  l_budget_lines_in(i).period_name;
1683                               l_finplan_lines_tab(j).system_reference4           :=  l_unit_of_measure     ;
1684                               --  l_finplan_lines_tab(j).system_reference5           :=  l_track_as_labor_flag  ;
1685                               l_finplan_lines_tab(j).system_reference5           :=  NULL; -- 3807633 track_as_labor_flag not mantained in FPM changes
1686                               l_finplan_lines_tab(j).txn_currency_code           :=  l_budget_lines_in(i).txn_currency_code               ;
1687                               l_finplan_lines_tab(j).projfunc_raw_cost           :=  NULL;
1688                               l_finplan_lines_tab(j).projfunc_burdened_cost      :=  NULL;
1689                               l_finplan_lines_tab(j).projfunc_revenue            :=  NULL;
1690                               l_finplan_lines_tab(j).project_raw_cost            :=  NULL ;
1691                               l_finplan_lines_tab(j).project_burdened_cost       :=  NULL;
1692                               l_finplan_lines_tab(j).project_revenue             :=  NULL;
1693 
1694                               IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1695                                     l_finplan_lines_tab(j).txn_raw_cost   :=  NULL;
1696                               ELSE
1697                                     l_finplan_lines_tab(j).txn_raw_cost   :=  l_budget_lines_in(i).raw_cost          ;
1698                               END IF;
1699 
1700                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1701                                     l_finplan_lines_tab(j).txn_burdened_cost  := NULL;
1702                               ELSE
1703                                     l_finplan_lines_tab(j).txn_burdened_cost  := l_budget_lines_in(i).burdened_cost;
1704                               END IF;
1705 
1706                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1707                                     l_finplan_lines_tab(j).txn_revenue  := NULL;
1708                               ELSE
1709                                     l_finplan_lines_tab(j).txn_revenue  := l_budget_lines_in(i).revenue;
1710                               END IF;
1711 
1712                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1713                                     l_finplan_lines_tab(j).quantity  := NULL;
1714                               ELSE
1715                                     l_finplan_lines_tab(j).quantity  := l_budget_lines_in(i).quantity;
1716                               END IF;
1717 
1718 
1719                               IF l_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1720                                     l_finplan_lines_tab(j).change_reason_code  :=NULL;
1721                               ELSE
1722                                     l_finplan_lines_tab(j).change_reason_code  :=  l_budget_lines_in(i).change_reason_code ;
1723                               END IF;
1724 
1725                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1726                                     l_finplan_lines_tab(j).description     :=  NULL;
1727                               ELSE
1728                                     l_finplan_lines_tab(j).description     :=  l_budget_lines_in(i).description;
1729                               END IF;
1730 
1731                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1732                                     l_finplan_lines_tab(j).attribute_category     :=  NULL;
1733                               ELSE
1734                                     l_finplan_lines_tab(j).attribute_category     :=  l_budget_lines_in(i).attribute_category;
1735                               END IF;
1736 
1737                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1738                                     l_finplan_lines_tab(j).attribute1     :=  NULL;
1739                               ELSE
1740                                     l_finplan_lines_tab(j).attribute1     :=  l_budget_lines_in(i).attribute1;
1741                               END IF;
1742 
1743                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1744                                     l_finplan_lines_tab(j).attribute2     :=  NULL;
1745                               ELSE
1746                                     l_finplan_lines_tab(j).attribute2     :=  l_budget_lines_in(i).attribute2;
1747                               END IF;
1748 
1749                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1750                                     l_finplan_lines_tab(j).attribute3     :=  NULL;
1751                               ELSE
1752                                     l_finplan_lines_tab(j).attribute3     :=  l_budget_lines_in(i).attribute3;
1753                               END IF;
1754 
1755                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1756                                     l_finplan_lines_tab(j).attribute4     :=  NULL;
1757                               ELSE
1758                                     l_finplan_lines_tab(j).attribute4     :=  l_budget_lines_in(i).attribute4;
1759                               END IF;
1760 
1761                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1762                                     l_finplan_lines_tab(j).attribute5     :=  NULL;
1763                               ELSE
1764                                     l_finplan_lines_tab(j).attribute5     :=  l_budget_lines_in(i).attribute5;
1765                               END IF;
1766 
1767                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1768                                     l_finplan_lines_tab(j).attribute6     :=  NULL;
1769                               ELSE
1770                                     l_finplan_lines_tab(j).attribute6     :=  l_budget_lines_in(i).attribute6;
1771                               END IF;
1772 
1773                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1774                                     l_finplan_lines_tab(j).attribute7     :=  NULL;
1775                               ELSE
1776                                     l_finplan_lines_tab(j).attribute7     :=  l_budget_lines_in(i).attribute7;
1777                               END IF;
1778 
1779                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1780                                     l_finplan_lines_tab(j).attribute8     :=  NULL;
1781                               ELSE
1782                                     l_finplan_lines_tab(j).attribute8     :=  l_budget_lines_in(i).attribute8;
1783                               END IF;
1784 
1785                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1786                                     l_finplan_lines_tab(j).attribute9     :=  NULL;
1787                               ELSE
1788                                     l_finplan_lines_tab(j).attribute9     :=  l_budget_lines_in(i).attribute9;
1789                               END IF;
1790 
1791                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1792                                     l_finplan_lines_tab(j).attribute10     :=  NULL;
1793                               ELSE
1794                                     l_finplan_lines_tab(j).attribute10     :=  l_budget_lines_in(i).attribute10;
1795                               END IF;
1796 
1797                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1798                                     l_finplan_lines_tab(j).attribute11     :=  NULL;
1799                               ELSE
1800                                     l_finplan_lines_tab(j).attribute11     :=  l_budget_lines_in(i).attribute11;
1801                               END IF;
1802 
1803                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1804                                     l_finplan_lines_tab(j).attribute12     :=  NULL;
1805                               ELSE
1806                                     l_finplan_lines_tab(j).attribute12     :=  l_budget_lines_in(i).attribute12;
1807                               END IF;
1808 
1809                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1810                                     l_finplan_lines_tab(j).attribute13     :=  NULL;
1811                               ELSE
1812                                     l_finplan_lines_tab(j).attribute13     :=  l_budget_lines_in(i).attribute13;
1813                               END IF;
1814 
1815                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1816                                     l_finplan_lines_tab(j).attribute14     :=  NULL;
1817                               ELSE
1818                                     l_finplan_lines_tab(j).attribute14     :=  l_budget_lines_in(i).attribute14;
1819                               END IF;
1820 
1821                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1822                                     l_finplan_lines_tab(j).attribute15     :=  NULL;
1823                               ELSE
1824                                     l_finplan_lines_tab(j).attribute15     :=  l_budget_lines_in(i).attribute15;
1825                               END IF;
1826 
1827             -- Added by Xin Liu
1828 
1829                         IF l_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1830                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
1831                         ELSE
1832                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE     :=  l_budget_lines_in(i).projfunc_cost_rate_type            ;
1833                         END IF;
1834 
1835                         IF l_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1836                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1837                         ELSE
1838                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type      ;
1839                         END IF;
1840 
1841                         IF l_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1842                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     := NULL;
1843                         ELSE
1844                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     :=  l_budget_lines_in(i).projfunc_cost_rate_date            ;
1845                         END IF;
1846 
1847                         IF l_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1848                         l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1849                         ELSE
1850                         l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE :=  l_budget_lines_in(i).projfunc_cost_exchange_rate        ;
1851                         END IF;
1852 
1853                         IF l_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1854                                l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      := NULL;
1855                         ELSE
1856                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      :=  l_budget_lines_in(i).projfunc_rev_rate_type             ;
1857                         END IF;
1858 
1859                         IF l_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1860                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1861                         ELSE
1862                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE :=  l_budget_lines_in(i).projfunc_rev_rate_date_type        ;
1863                         END IF;
1864 
1865                         IF l_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1866                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      := NULL;
1867                         ELSE
1868                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      :=  l_budget_lines_in(i).projfunc_rev_rate_date;
1869                         END IF;
1870 
1871                         IF l_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1872                         l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
1873                         ELSE
1874                         l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  :=  l_budget_lines_in(i).projfunc_rev_exchange_rate         ;
1875                         END IF;
1876 
1877                         IF  l_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1878                         l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      := NULL;
1879                         ELSE
1880                         l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      :=  l_budget_lines_in(i).project_cost_rate_type;
1881                         END IF;
1882 
1883                         IF l_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1884                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
1885                         ELSE
1886                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE :=  l_budget_lines_in(i).project_cost_rate_date_type        ;
1887                         END IF;
1888 
1889                         IF l_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE    THEN
1890                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      := NULL;
1891                         ELSE
1892                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      :=  l_budget_lines_in(i).project_cost_rate_date             ;
1893                         END IF;
1894 
1895                         IF l_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1896                         l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  := NULL;
1897                         ELSE
1898                         l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  :=  l_budget_lines_in(i).project_cost_exchange_rate ;
1899                         END IF;
1900 
1901                         IF  l_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1902                         l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       := NULL;
1903                         ELSE
1904                                l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       :=  l_budget_lines_in(i).project_rev_rate_type              ;
1905                         END IF;
1906 
1907                         IF l_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1908                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  := NULL;
1909                         ELSE
1910                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  :=  l_budget_lines_in(i).project_rev_rate_date_type         ;
1911                         END IF;
1912 
1913                         IF l_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
1914                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       := NULL;
1915                         ELSE
1916                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       :=  l_budget_lines_in(i).project_rev_rate_date              ;
1917                         END IF;
1918 
1919                         IF l_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1920                         l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   := NULL;
1921                         ELSE
1922                         l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  l_budget_lines_in(i).project_rev_exchange_rate          ;
1923                         END IF;
1924 
1925                                 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1926                                    pm_product_code is passed as Null at the line level */
1927 
1928                         IF l_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1929                                 l_budget_lines_in(i).pm_product_code IS NULL THEN
1930                         l_finplan_lines_tab(j).pm_product_code             :=  p_pm_product_code      ;
1931                         ELSE
1932                         l_finplan_lines_tab(j).pm_product_code             :=  l_budget_lines_in(i).pm_product_code      ;
1933                         END IF;
1934 
1935                         IF l_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1936                         l_finplan_lines_tab(j).pm_budget_line_reference    := NULL;
1937                         ELSE
1938                         l_finplan_lines_tab(j).pm_budget_line_reference    :=  l_budget_lines_in(i).pm_budget_line_reference        ;
1939                         END IF;
1940             -- Done with Changes.
1941                         l_finplan_lines_tab(j).quantity_source             :=  'I'          ;
1942                               l_finplan_lines_tab(j).raw_cost_source             :=  'I'         ;
1943                               l_finplan_lines_tab(j).burdened_cost_source        :=  'I'         ;
1944                               l_finplan_lines_tab(j).revenue_source              :=  'I'         ;
1945                               l_finplan_lines_tab(j).resource_assignment_id      :=  -1          ;
1946 
1947                               --increment the index for fin plan lines table
1948                               j := j+1;
1949 
1950                         END IF;--IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1951 
1952                   END LOOP;--Loop for copying fin plan lines into table of type rollup temp
1953 
1954                   IF l_debug_mode = 'Y' THEN
1955                         pa_debug.g_err_stage := 'Done with the copying of budget lines to fin plan lines';
1956                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1957                   END IF;
1958 
1959             END IF;
1960 
1961             IF l_debug_mode = 'Y' THEN
1962                   pa_debug.g_err_stage := 'About to call the create draft api in fin plan pvt';
1963                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1964             END IF;
1965 
1966             -- If either of the create , replace current working version flags are Y then lock the
1967             -- Current working version.
1968 
1969             IF (p_replace_current_working_flag = 'Y' OR
1970                        p_create_new_curr_working_flag = 'Y')  THEN
1971                   --Get the current working version info
1972                    pa_fin_plan_utils.Get_Curr_Working_Version_Info(
1973                          p_project_id            => l_project_id
1974                         ,p_fin_plan_type_id      => l_fin_plan_type_id
1975                         ,p_version_type          => l_version_type
1976                         ,x_fp_options_id         => l_proj_fp_options_id
1977                         ,x_fin_plan_version_id   => l_CW_version_id
1978                         ,x_return_status         => p_return_status
1979                         ,x_msg_count             => p_msg_count
1980                         ,x_msg_data              => p_msg_data );
1981 
1982                   IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1983                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1984                   END IF;
1985 
1986                   IF l_CW_version_id IS NOT NULL THEN
1987 
1988 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
1989 -- Commented the call to PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
1990 -- Comment START
1991 /*
1992                     --Added by Xin Liu
1993                     --Check if the current working version is locked for WBS refresh or not
1994                   PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
1995                                                       (
1996                                                          p_budget_version_id      => l_CW_version_id
1997                                                        , p_proj_fp_options_id     => NULL
1998                                                        , x_refresh_required_flag  => l_refresh_required_flag
1999                                                        , x_request_id             => l_request_id
2000                                                        , x_process_code           => l_process_code
2001                                                        , x_return_status          => p_return_status
2002                                                        , x_msg_count              => p_msg_count
2003                                                        , x_msg_data               => p_msg_data
2004                                                        );
2005 
2006                   IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2007 
2008                               IF l_debug_mode = 'Y' THEN
2009                                     pa_debug.g_err_stage := 'Error executing get refresh plan ele dtls';
2010                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2011                               END IF;
2012                               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2013 
2014                         END IF;
2015 
2016                      IF ( NVL(l_refresh_required_flag, 'N')  = 'Y' ) THEN
2017 
2018                               IF l_debug_mode = 'Y' THEN
2019                                     pa_debug.g_err_stage := 'Plan version must be refreshed for new plannable-task state.';
2020                                     pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2021                               END IF;
2022 
2023                   pa_interface_utils_pub.map_new_amg_msg
2024                               ( p_old_message_code => 'PA_FP_AMG_WBS_IN_PROC_MSG'
2025                               ,p_msg_attribute    => 'CHANGE'
2026                               ,p_resize_flag      => 'Y'
2027                               ,p_msg_context      => 'GENERAL'
2028                               ,p_attribute1       => ''
2029                               ,p_attribute2       => ''
2030                               ,p_attribute3       => ''
2031                               ,p_attribute4       => ''
2032                               ,p_attribute5       => '');
2033 
2034                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2035 
2036                         END IF;
2037 
2038                     --End changes done by Xin Liu for WBS refresh
2039 */
2040 -- Comment END
2041 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
2042 
2043                         select locked_by_person_id
2044                         into l_locked_by_person_id from pa_budget_versions
2045                          where budget_version_id = l_CW_version_id;
2046 
2047                         --Get the record version number of the current working version
2048                         l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2049 
2050                         pa_fin_plan_pvt.lock_unlock_version
2051                               (p_budget_version_id      => l_CW_version_id,
2052                               p_record_version_number   => l_CW_record_version_number,
2053                               p_action                  => 'L',
2054                               p_user_id                 => l_user_id,
2055                               p_person_id               => NULL,
2056                               x_return_status           => p_return_status,
2057                               x_msg_count               => p_msg_count,
2058                               x_msg_data                => p_msg_data) ;
2059 
2060                         IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2061 
2062                               IF l_debug_mode = 'Y' THEN
2063                                     pa_debug.g_err_stage := 'Error executing lock unlock version';
2064                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2065                               END IF;
2066                               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2067 
2068                         END IF;
2069 
2070                   END IF;--IF l_CW_version_id IS NOT NULL THEN
2071 
2072             END IF;--IF (p_replace_current_working_flag = 'Y' OR
2073 
2074             --Call the api that creates the fin plan version
2075             PA_FIN_PLAN_PVT.CREATE_DRAFT(
2076             p_project_id                   => l_project_id
2077             ,p_fin_plan_type_id             => l_fin_plan_type_id
2078             ,p_version_type                 => l_version_type
2079             ,p_calling_context              => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
2080             ,p_time_phased_code             => l_time_phased_code
2081             ,p_resource_list_id             => l_resource_list_id
2082             ,p_fin_plan_level_code          => l_fin_plan_level_code
2083             ,p_plan_in_mc_flag              => l_plan_in_multi_curr_flag
2084             ,p_version_name                 => l_budget_version_name
2085             ,p_description                  => l_description
2086             ,p_change_reason_code           => l_change_reason_code
2087             ,p_raw_cost_flag                => l_raw_cost_flag
2088             ,p_burdened_cost_flag           => l_burdened_cost_flag
2089             ,p_revenue_flag                 => l_revenue_flag
2090             ,p_cost_qty_flag                => l_cost_qty_flag
2091             ,p_revenue_qty_flag             => l_revenue_qty_flag
2092             ,p_all_qty_flag                 => l_all_qty_flag
2093             ,p_attribute_category           => l_attribute_category
2094             ,p_attribute1                   => l_attribute1
2095             ,p_attribute2                   => l_attribute2
2096             ,p_attribute3                   => l_attribute3
2097             ,p_attribute4                   => l_attribute4
2098             ,p_attribute5                   => l_attribute5
2099             ,p_attribute6                   => l_attribute6
2100             ,p_attribute7                   => l_attribute7
2101             ,p_attribute8                   => l_attribute8
2102             ,p_attribute9                   => l_attribute9
2103             ,p_attribute10                  => l_attribute10
2104             ,p_attribute11                  => l_attribute11
2105             ,p_attribute12                  => l_attribute12
2106             ,p_attribute13                  => l_attribute13
2107             ,p_attribute14                  => l_attribute14
2108             ,p_attribute15                  => l_attribute15
2109             ,p_projfunc_cost_rate_type      => l_projfunc_cost_rate_type
2110             ,p_projfunc_cost_rate_date_type => l_projfunc_cost_rate_date_typ
2111             ,p_projfunc_cost_rate_date      => l_projfunc_cost_rate_date
2112             ,p_projfunc_rev_rate_type       => l_projfunc_rev_rate_type
2113             ,p_projfunc_rev_rate_date_type  => l_projfunc_rev_rate_date_typ
2114             ,p_projfunc_rev_rate_date       => l_projfunc_rev_rate_date
2115             ,p_project_cost_rate_type       => l_project_cost_rate_type
2116             ,p_project_cost_rate_date_type  => l_project_cost_rate_date_typ
2117             ,p_project_cost_rate_date       => l_project_cost_rate_date
2118             ,p_project_rev_rate_type        => l_project_rev_rate_type
2119             ,p_project_rev_rate_date_type   => l_project_rev_rate_date_typ
2120             ,p_project_rev_rate_date        => l_project_rev_rate_date
2121             ,p_pm_product_code              => p_pm_product_code
2122              ,p_pm_budget_reference          => l_pm_budget_reference -- p_pm_project_reference changed to budget reference for bug 3858543
2123             ,p_budget_lines_tab             => l_finplan_lines_tab
2124             -- Start of additional columns for B
2125             ,p_ci_id                        => NULL
2126             ,p_est_proj_raw_cost            => NULL
2127             ,p_est_proj_bd_cost             => NULL
2128             ,p_est_proj_revenue             => NULL
2129             ,p_est_qty                      => NULL
2130             ,p_impacted_task_id             => NULL
2131             ,p_agreement_id                 => NULL
2132             -- End of additional columns for Bug
2133             ,p_create_new_curr_working_flag => l_create_new_working_flag
2134             ,p_replace_current_working_flag => l_replace_current_working_flag
2135             ,x_budget_version_id            => l_budget_version_id
2136             ,x_return_status                => p_return_status
2137             ,x_msg_count                    => p_msg_count
2138             ,x_msg_data                     => p_msg_data);
2139 
2140 
2141             IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2142 
2143                   RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2144 
2145             END IF;
2146 
2147        -- Added for Bug #4680197 Unlock the budget version incase is it locked in this create_draft api.
2148          IF p_create_new_curr_working_flag = 'Y'
2149              AND l_CW_version_id IS NOT NULL
2150              AND l_locked_by_person_id IS NULL THEN
2151                      --Get the record version number of the current working version
2152                      l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2153                      pa_fin_plan_pvt.lock_unlock_version
2154                            (p_budget_version_id      => l_CW_version_id,
2155                            p_record_version_number   => l_CW_record_version_number,
2156                            p_action                  => 'U',
2157                            p_user_id                 => l_user_id,
2158                            p_person_id               => NULL,
2159                            x_return_status           => p_return_status,
2160                            x_msg_count               => p_msg_count,
2161                            x_msg_data                => p_msg_data) ;
2162 
2163                      IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2164 
2165                            IF l_debug_mode = 'Y' THEN
2166                                  pa_debug.g_err_stage := 'Error executing lock unlock version';
2167                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2168                            END IF;
2169                            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2170                      END IF;
2171          END IF;
2172          --Changes ended  for Bug #4680197
2173 
2174 
2175             IF l_debug_mode = 'Y' THEN
2176                   pa_debug.g_err_stage := 'Succesfully executed the fin plan pvt create draft ';
2177                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2178             END IF;
2179 
2180 
2181 
2182       END IF;--IF p_budget_type_code IS NOT NULL
2183 
2184       IF l_debug_mode = 'Y' THEN
2185             pa_debug.g_err_stage := 'About to check the overlapping dates';
2186             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2187       END IF;
2188 
2189       -- check for overlapping dates
2190       pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id  => l_budget_version_id
2191                               ,x_resource_name  => l_resource_name
2192                               ,x_err_code       => l_err_code       );
2193 
2194       IF l_err_code > 0
2195       THEN
2196 
2197             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2198             THEN
2199                   FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
2200                   FND_MESSAGE.SET_TOKEN('RNAME',l_resource_name);
2201 
2202                   FND_MSG_PUB.add;
2203             END IF;
2204 
2205             IF l_debug_mode = 'Y' THEN
2206                   pa_debug.g_err_stage := 'Error executing check_overlapping_dates';
2207                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2208             END IF;
2209 
2210 
2211             RAISE FND_API.G_EXC_ERROR;
2212 
2213       ELSIF l_err_code < 0
2214       THEN
2215 
2216             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2217             THEN
2218 
2219                   FND_MSG_PUB.add_exc_msg
2220                   (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
2221                   ,  p_procedure_name => 'CHECK_OVERLAPPING_DATES'
2222                   ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2223 
2224             END IF;
2225 
2226             IF l_debug_mode = 'Y' THEN
2227                   pa_debug.g_err_stage := 'Unexpected Error executing check_overlapping_dates';
2228                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2229             END IF;
2230 
2231             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2232 
2233       END IF;
2234 
2235 --Bug # 3507156 : Patchset M: B and F impact changes : AMG
2236 --Added a call to PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS to get the return statuses of the input budget lines.
2237 
2238             PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS(
2239                           p_fin_plan_version_id            =>   l_budget_version_id
2240                          ,p_budget_lines_in                 =>   l_budget_lines_in          /* Bug # 3589304 */
2241                          ,x_fp_lines_retn_status_tab        =>   p_budget_lines_out
2242                          ,x_return_status                   =>   p_return_status
2243                          ,x_msg_count                       =>   p_msg_count
2244                          ,x_msg_data                        =>   p_msg_data );
2245 
2246 
2247             IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2248 
2249                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2250 
2251             END IF;
2252 
2253                   IF l_debug_mode = 'Y' THEN
2254                         pa_debug.g_err_stage := 'PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS got executed successfully';
2255                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2256                   END IF;
2257 
2258 
2259       --summarizing the totals in the table pa_budget_versions
2260 
2261       /*Summarizing of totals should be done only in the buget model*/
2262       IF (p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR and p_budget_type_code IS NOT NULL) THEN
2263 
2264             IF l_debug_mode = 'Y' THEN
2265                   pa_debug.g_err_stage := 'About to summarize totals in budget model';
2266                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2267             END IF;
2268 
2269             pa_budget_utils.summerize_project_totals( x_budget_version_id => l_budget_version_id
2270                                 , x_err_code      => l_err_code
2271                             , x_err_stage     => l_err_stage
2272                             , x_err_stack     => l_err_stack        );
2273 
2274 
2275             IF l_err_code > 0
2276             THEN
2277 
2278                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2279                   THEN
2280 
2281                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
2282                         THEN
2283                               pa_interface_utils_pub.map_new_amg_msg
2284                               ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
2285                                ,p_msg_attribute    => 'CHANGE'
2286                                ,p_resize_flag      => 'N'
2287                                ,p_msg_context      => 'BUDG'
2288                                ,p_attribute1       => l_amg_segment1
2289                                ,p_attribute2       => ''
2290                                ,p_attribute3       => p_budget_type_code
2291                                ,p_attribute4       => ''
2292                                ,p_attribute5       => '');
2293                         else
2294                               pa_interface_utils_pub.map_new_amg_msg
2295                               ( p_old_message_code => l_err_stage
2296                                ,p_msg_attribute    => 'CHANGE'
2297                                ,p_resize_flag      => 'N'
2298                                ,p_msg_context      => 'BUDG'
2299                                ,p_attribute1       => l_amg_segment1
2300                                ,p_attribute2       => ''
2301                                ,p_attribute3       => p_budget_type_code
2302                                ,p_attribute4       => ''
2303                                ,p_attribute5       => '');
2304                         end IF;
2305 
2306                   END IF;
2307 
2308                   IF l_debug_mode = 'Y' THEN
2309                         pa_debug.g_err_stage := 'Error in  summarizing totals in budget model';
2310                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2311                   END IF;
2312 
2313 
2314                   RAISE FND_API.G_EXC_ERROR;
2315 
2316             ELSIF l_err_code < 0
2317             THEN
2318 
2319                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2320                   THEN
2321 
2322                         FND_MSG_PUB.add_exc_msg
2323                             (  p_pkg_name       => 'PA_BUDGET_UTILS'
2324                             ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
2325                             ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2326 
2327                   END IF;
2328 
2329                   IF l_debug_mode = 'Y' THEN
2330                         pa_debug.g_err_stage := 'Unexpected Error in  summarizing totals in budget model';
2331                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2332                   END IF;
2333 
2334 
2335                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2336 
2337             END IF;
2338 
2339 
2340       END IF;
2341 
2342 
2343       IF FND_API.TO_BOOLEAN( p_commit )
2344       THEN
2345 
2346             IF l_debug_mode = 'Y' THEN
2347                   pa_debug.g_err_stage := 'About to do a COMMIT';
2348                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2349             END IF;
2350 
2351             COMMIT;
2352       END IF;
2353 
2354       IF l_debug_mode = 'Y' THEN
2355             pa_debug.g_err_stage := 'Leaving create draft budget';
2356             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2357       END IF;
2358 
2359       --Changes for bug 3182963
2360       IF l_debug_mode = 'Y' THEN
2361             pa_debug.reset_curr_function;
2362       END IF;
2363 
2364 
2365 EXCEPTION
2366       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
2367              -- dbms_output.put_line('MSG count in the stack ' || FND_MSG_PUB.count_msg);
2368             ROLLBACK TO create_draft_budget_pub;
2369 
2370             IF p_return_status IS NULL OR
2371                p_return_status =  FND_API.G_RET_STS_SUCCESS THEN
2372                   p_return_status := FND_API.G_RET_STS_ERROR;
2373             END IF;
2374 
2375             l_msg_count := FND_MSG_PUB.count_msg;
2376              -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2377 
2378             IF l_msg_count = 1 AND p_msg_data IS NULL THEN
2379                    PA_INTERFACE_UTILS_PUB.get_messages
2380                        (p_encoded        => FND_API.G_TRUE,
2381                         p_msg_index      => 1,
2382                         p_msg_count      => l_msg_count,
2383                         p_msg_data       => l_msg_data,
2384                         p_data           => l_data,
2385                         p_msg_index_out  => l_msg_index_out);
2386 
2387                    p_msg_data  := l_data;
2388                    p_msg_count := l_msg_count;
2389             ELSE
2390                    p_msg_count := l_msg_count;
2391             END IF;
2392 
2393           IF l_debug_mode = 'Y' THEN
2394                  pa_debug.reset_curr_function;
2395             END IF;
2396 
2397              -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2398 
2399             RETURN;
2400 
2401     WHEN FND_API.G_EXC_ERROR
2402     THEN
2403 
2404 /*   -- dbms_output.put_line('handling an G_EXC_ERROR exception in create_draft_budget'); */
2405 
2406             ROLLBACK TO create_draft_budget_pub;
2407 
2408             p_return_status := FND_API.G_RET_STS_ERROR;
2409 
2410             FND_MSG_PUB.Count_And_Get
2411             (   p_count     =>  p_msg_count ,
2412                 p_data      =>  p_msg_data  );
2413           --Changes for bug 3182963
2414           IF l_debug_mode = 'Y' THEN
2415                  pa_debug.reset_curr_function;
2416             END IF;
2417 
2418 
2419     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2420     THEN
2421 
2422 /*   -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception in create_draft_budget'); */
2423 
2424             ROLLBACK TO create_draft_budget_pub;
2425 
2426             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2427 
2428             FND_MSG_PUB.Count_And_Get
2429             (   p_count     =>  p_msg_count ,
2430                 p_data      =>  p_msg_data  );
2431 
2432           --Changes for bug 3182963
2433           IF l_debug_mode = 'Y' THEN
2434                  pa_debug.reset_curr_function;
2435             END IF;
2436 
2437 
2438     WHEN ROW_ALREADY_LOCKED
2439     THEN
2440     ROLLBACK TO create_draft_budget_pub;
2441 
2442     p_return_status := FND_API.G_RET_STS_ERROR;
2443 
2444     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2445     THEN
2446       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
2447       FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
2448       FND_MESSAGE.SET_TOKEN('TASK',    '');
2449       FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
2450       FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
2451       FND_MESSAGE.SET_TOKEN('START_DATE', '');
2452       FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
2453       FND_MSG_PUB.ADD;
2454     END IF;
2455 
2456     FND_MSG_PUB.Count_And_Get
2457             (   p_count     =>  p_msg_count ,
2458                 p_data      =>  p_msg_data  );
2459 
2460           --Changes for bug 3182963
2461           IF l_debug_mode = 'Y' THEN
2462                  pa_debug.reset_curr_function;
2463             END IF;
2464 
2465 
2466     WHEN OTHERS
2467     THEN
2468 
2469 /*   -- dbms_output.put_line('handling an OTHERS exception'); */
2470 
2471             ROLLBACK TO create_draft_budget_pub;
2472 
2473             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2474 
2475             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2476             THEN
2477             FND_MSG_PUB.add_exc_msg
2478             (  p_pkg_name       => G_PKG_NAME
2479             ,  p_procedure_name => l_api_name );
2480 
2481             END IF;
2482 
2483             FND_MSG_PUB.Count_And_Get
2484             (   p_count     =>  p_msg_count ,
2485                 p_data      =>  p_msg_data  );
2486 
2487           --Changes for bug 3182963
2488           IF l_debug_mode = 'Y' THEN
2489                  pa_debug.reset_curr_function;
2490             END IF;
2491 
2492 
2493 END create_draft_budget;
2494 
2495 
2496 
2497 ----------------------------------------------------------------------------------------
2498 --Name:               init_budget
2499 --Type:               Procedure
2500 --Description:        This procedure can be used to initialize the global PL/SQL
2501 --            tables that are used by a LOAD/EXECUTE/FETCH cycle.
2502 --
2503 --
2504 --Called subprograms:
2505 --
2506 --
2507 --
2508 --History:
2509 --    20-SEP-1996        L. de Werker    Created
2510 --
2511 --
2512 PROCEDURE init_budget
2513 
2514 IS
2515 
2516 BEGIN
2517 
2518     FND_MSG_PUB.Initialize;
2519 
2520 --  Initialize global table and record types
2521 
2522     G_budget_lines_in_tbl.delete;
2523 
2524     G_budget_lines_tbl_count := 0;
2525 
2526     G_budget_lines_out_tbl.delete;
2527 
2528 
2529 END init_budget;
2530 
2531 
2532 ----------------------------------------------------------------------------------------
2533 --Name:               load_budget_line
2534 --Type:               Procedure
2535 --Description:        This procedure can be used to load a budget line
2536 --                    in a global PL/SQL table.
2537 --
2538 --Called subprograms:
2539 --
2540 --
2541 --
2542 --History:
2543 --    24-SEP-1996        L. de Werker    Created
2544 --    28-NOV-1996        L. de Werker    Add 16 parameters for descriptive flexfields
2545 --    11-Mar-2003        Srikanth        Included the parameters for Fin Plan Model
2546 
2547 PROCEDURE load_budget_line
2548 ( p_api_version_number          IN  NUMBER
2549  ,p_commit              IN  VARCHAR2    := FND_API.G_FALSE
2550  ,p_init_msg_list           IN  VARCHAR2    := FND_API.G_FALSE
2551  ,p_return_status           OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2552  ,p_pa_task_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2553  ,p_pm_task_reference           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2554  ,p_resource_alias          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2555  ,p_resource_list_member_id     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2556  ,p_budget_start_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2557  ,p_budget_end_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2558  ,p_period_name             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2559  ,p_description             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2560  ,p_raw_cost                IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2561  ,p_burdened_cost           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2562  ,p_revenue                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2563  ,p_quantity                IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2564 ,p_pm_product_code          IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2565 ,p_pm_budget_line_reference IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2566  ,p_attribute_category      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2567  ,p_attribute1              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2568  ,p_attribute2              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2569  ,p_attribute3              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2570  ,p_attribute4              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2571  ,p_attribute5              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2572  ,p_attribute6              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2573  ,p_attribute7              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2574  ,p_attribute8              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2575  ,p_attribute9              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2576  ,p_attribute10             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2577  ,p_attribute11             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2578  ,p_attribute12             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2579  ,p_attribute13             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2580  ,p_attribute14             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2581  ,p_attribute15             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2582 
2583  --Parameters for fin plan model
2584 
2585  --Changes the default of the following parameters from NULL to G_PA_MISS_XXX 24-APR-03 by Xin Liu
2586  ,p_txn_currency_code             IN  pa_fp_txn_currencies.txn_currency_code%TYPE
2587 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2588  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2589 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2590  ,p_projfunc_cost_rate_date_type  IN   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2591 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2592  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2593 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2594  ,p_projfunc_cost_exchange_rate   IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2595 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2596  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2597 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2598  ,p_projfunc_rev_rate_date_type   IN   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2599 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2600  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2601 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2602  ,p_projfunc_rev_exchange_rate    IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2603 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2604  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE
2605 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2606  ,p_project_cost_rate_date_type   IN   pa_proj_fp_options.project_cost_rate_date_type%TYPE
2607 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2608  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE
2609 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2610  ,p_project_cost_exchange_rate    IN  pa_budget_lines.project_cost_exchange_rate%TYPE
2611 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2612  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE
2613 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2614  ,p_project_rev_rate_date_type    IN   pa_proj_fp_options.project_rev_rate_date_type%TYPE
2615 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2616  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE
2617 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2618  ,p_project_rev_exchange_rate     IN  pa_budget_lines.project_rev_exchange_rate%TYPE
2619 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2620  ,p_change_reason_code            IN  pa_budget_lines.change_reason_code%TYPE
2621 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2622  )
2623 
2624 IS
2625 
2626    l_api_name               CONSTANT    VARCHAR2(30)        := 'load_budget_line';
2627    l_return_status                  VARCHAR2(1);
2628    l_err_stage                      VARCHAR2(120);
2629    l_msg_entity                     VARCHAR2(100);
2630    l_msg_entity_index                   NUMBER;
2631 
2632 
2633 BEGIN
2634 
2635 --  Standard begin of API savepoint
2636 
2637     SAVEPOINT load_budget_line_pub;
2638 
2639 --  Standard call to check for call compatibility.
2640 
2641     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
2642                                          p_api_version_number   ,
2643                                          l_api_name             ,
2644                                          G_PKG_NAME             )
2645     THEN
2646 
2647     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2648 
2649     END IF;
2650 
2651 --  Initialize the message table if requested.
2652 
2653     IF FND_API.TO_BOOLEAN( p_init_msg_list )
2654     THEN
2655 
2656     FND_MSG_PUB.initialize;
2657 
2658     END IF;
2659 
2660 --  Set API return status to success
2661 
2662     p_return_status := FND_API.G_RET_STS_SUCCESS;
2663 
2664 --  assign a value to the global counter for this table
2665     G_budget_lines_tbl_count := G_budget_lines_tbl_count + 1;
2666 
2667 
2668 --  assign incoming parameters to the fields of pl/sql global table G_budget_lines_in_tbl
2669     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pa_task_id          := p_pa_task_id;
2670     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_task_reference       := p_pm_task_reference;
2671     G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_alias      := p_resource_alias;
2672     G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_list_member_id := p_resource_list_member_id;
2673     G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_start_date       := p_budget_start_date;
2674     G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_end_date     := p_budget_end_date;
2675     G_budget_lines_in_tbl(G_budget_lines_tbl_count).period_name         := p_period_name;
2676     G_budget_lines_in_tbl(G_budget_lines_tbl_count).description         := p_description;
2677     G_budget_lines_in_tbl(G_budget_lines_tbl_count).raw_cost            := p_raw_cost;
2678     G_budget_lines_in_tbl(G_budget_lines_tbl_count).burdened_cost       := p_burdened_cost;
2679     G_budget_lines_in_tbl(G_budget_lines_tbl_count).revenue         := p_revenue;
2680     G_budget_lines_in_tbl(G_budget_lines_tbl_count).quantity            := p_quantity;
2681     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_product_code
2682 := p_pm_product_code;
2683     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_budget_line_reference
2684 := p_pm_budget_line_reference;
2685     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute_category      := p_attribute_category;
2686     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute1
2687 := p_attribute1;
2688     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute2
2689 := p_attribute2;
2690     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute3
2691 := p_attribute3;
2692     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute4
2693 := p_attribute4;
2694     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute5
2695 := p_attribute5;
2696     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute6
2697 := p_attribute6;
2698     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute7
2699 := p_attribute7;
2700     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute8
2701 := p_attribute8;
2702     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute9
2703 := p_attribute9;
2704     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute10
2705 := p_attribute10;
2706     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute11
2707 := p_attribute11;
2708     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute12
2709 := p_attribute12;
2710     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute13
2711 := p_attribute13;
2712     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute14
2713 := p_attribute14;
2714     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute15
2715 := p_attribute15;
2716 
2717 -- The parameters included for fin plan model
2718    G_budget_lines_in_tbl(G_budget_lines_tbl_count).txn_currency_code             :=  p_txn_currency_code            ;
2719    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_type       :=  p_projfunc_cost_rate_type      ;
2720    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date_type  :=  p_projfunc_cost_rate_date_type ;
2721    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date       :=  p_projfunc_cost_rate_date      ;
2722    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_exchange_rate   :=  p_projfunc_cost_exchange_rate  ;
2723    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_type        :=  p_projfunc_rev_rate_type       ;
2724    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date_type   :=  p_projfunc_rev_rate_date_type  ;
2725    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date        :=  p_projfunc_rev_rate_date        ;
2726    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_exchange_rate    :=  p_projfunc_rev_exchange_rate   ;
2727    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_type        :=  p_project_cost_rate_type       ;
2728    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date_type   :=  p_project_cost_rate_date_type  ;
2729    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date        :=  p_project_cost_rate_date       ;
2730    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_exchange_rate    :=  p_project_cost_exchange_rate   ;
2731    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_type         :=  p_project_rev_rate_type        ;
2732    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date_type    :=  p_project_rev_rate_date_type   ;
2733    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date         :=  p_project_rev_rate_date        ;
2734    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_exchange_rate     :=  p_project_rev_exchange_rate    ;
2735    G_budget_lines_in_tbl(G_budget_lines_tbl_count).change_reason_code            :=  p_change_reason_code           ;
2736 
2737 
2738 
2739 EXCEPTION
2740 
2741     WHEN FND_API.G_EXC_ERROR
2742     THEN
2743     ROLLBACK TO load_budget_line_pub;
2744 
2745     p_return_status := FND_API.G_RET_STS_ERROR;
2746 
2747     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2748     THEN
2749     ROLLBACK TO load_budget_line_pub;
2750 
2751     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2752 
2753     WHEN OTHERS THEN
2754     ROLLBACK TO load_budget_line_pub;
2755 
2756     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2757 
2758     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2759     THEN
2760         FND_MSG_PUB.add_exc_msg
2761             (  p_pkg_name       => G_PKG_NAME
2762             ,  p_procedure_name => l_api_name );
2763 
2764     END IF;
2765 
2766 END load_budget_line;
2767 
2768 ----------------------------------------------------------------------------------------
2769 --Name:               execute_create_draft_budget
2770 --Type:               Procedure
2771 --Description:        This procedure can be used to create a draft budget
2772 --                    using global PL/SQL tables.
2773 --
2774 --Called subprograms:
2775 --
2776 --
2777 --
2778 --History:
2779 --    23-SEP-1996        L. de Werker    Created
2780 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
2781 --    29-NOV-1996    L. de Werker    Added parameter p_pm_budget_reference
2782 --    01-sep-2004    tpalaniv        Added parameter  p_pm_budget_reference while calling create_draft_budget
2783 PROCEDURE execute_create_draft_budget
2784 ( p_api_version_number            IN  NUMBER
2785  ,p_commit                        IN  VARCHAR2    := FND_API.G_FALSE
2786  ,p_init_msg_list                 IN  VARCHAR2    := FND_API.G_FALSE
2787  ,p_msg_count                     OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2788  ,p_msg_data                      OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2789  ,p_return_status                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2790  ,p_pm_product_code               IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2791  ,p_pm_budget_reference           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2792 , p_budget_version_name           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2793  ,p_pa_project_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2794  ,p_pm_project_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2795  ,p_budget_type_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2796  ,p_change_reason_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2797  ,p_description                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2798  ,p_entry_method_code             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2799  ,p_resource_list_name            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2800  ,p_resource_list_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2801  ,p_attribute_category            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2802  ,p_attribute1                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2803  ,p_attribute2                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2804  ,p_attribute3                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2805  ,p_attribute4                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2806  ,p_attribute5                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2807  ,p_attribute6                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2808  ,p_attribute7                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2809  ,p_attribute8                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2810  ,p_attribute9                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2811  ,p_attribute10                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2812  ,p_attribute11                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2813  ,p_attribute12                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2814  ,p_attribute13                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2815  ,p_attribute14                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2816  ,p_attribute15                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2817 
2818  --Added the following parameters for changes in AMG due to finplan model
2819  ,p_fin_plan_type_id              IN   pa_fin_plan_types_b.fin_plan_type_id%TYPE
2820  ,p_fin_plan_type_name            IN   pa_fin_plan_types_vl.name%TYPE
2821  ,p_version_type                  IN   pa_budget_versions.version_type%TYPE
2822  ,p_fin_plan_level_code           IN   pa_proj_fp_options.cost_fin_plan_level_code%TYPE
2823  ,p_time_phased_code              IN   pa_proj_fp_options.cost_time_phased_code%TYPE
2824  ,p_plan_in_multi_curr_flag       IN   pa_proj_fp_options.plan_in_multi_curr_flag%TYPE
2825  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2826  ,p_projfunc_cost_rate_date_typ   IN   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2827  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2828  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2829  ,p_projfunc_rev_rate_date_typ    IN   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2830  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2831  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE
2832  ,p_project_cost_rate_date_typ    IN   pa_proj_fp_options.project_cost_rate_date_type%TYPE
2833  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE
2834  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE
2835  ,p_project_rev_rate_date_typ     IN   pa_proj_fp_options.project_rev_rate_date_type%TYPE
2836  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE
2837  ,p_raw_cost_flag                 IN   VARCHAR2
2838  ,p_burdened_cost_flag            IN   VARCHAR2
2839  ,p_revenue_flag                  IN   VARCHAR2
2840  ,p_cost_qty_flag                 IN   VARCHAR2
2841  ,p_revenue_qty_flag              IN   VARCHAR2
2842  ,P_all_qty_flag                  IN   VARCHAR2
2843  ,p_create_new_curr_working_flag  IN   VARCHAR2
2844  ,p_replace_current_working_flag  IN   VARCHAR2
2845  ,p_using_resource_lists_flag   IN   VARCHAR2
2846  )
2847 
2848 
2849 IS
2850 
2851    l_api_name               CONSTANT    VARCHAR2(30)        := 'execute_create_draft_budget';
2852    i                            NUMBER;
2853    l_return_status                  VARCHAR2(1);
2854    l_err_stage                      VARCHAR2(120);
2855 
2856 
2857 BEGIN
2858 
2859 --  Standard begin of API savepoint
2860 
2861     SAVEPOINT execute_create_budget_pub;
2862 
2863 --  Standard call to check for call compatibility.
2864 
2865     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
2866                                          p_api_version_number   ,
2867                                          l_api_name             ,
2868                                          G_PKG_NAME             )
2869     THEN
2870 
2871     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2872 
2873     END IF;
2874 
2875 --  Initialize the message table if requested.
2876 
2877     IF FND_API.TO_BOOLEAN( p_init_msg_list )
2878     THEN
2879 
2880     FND_MSG_PUB.initialize;
2881 
2882     END IF;
2883 
2884 --  Set API return status to success
2885 
2886     p_return_status := FND_API.G_RET_STS_SUCCESS;
2887 
2888     create_draft_budget
2889             ( p_api_version_number          => p_api_version_number
2890              ,p_commit                      => FND_API.G_FALSE
2891              ,p_init_msg_list               => FND_API.G_FALSE
2892              ,p_msg_count                   => p_msg_count
2893              ,p_msg_data                    => p_msg_data
2894              ,p_return_status               => l_return_status
2895              ,p_pm_product_code             => p_pm_product_code
2896              ,p_budget_version_name         => p_budget_version_name
2897              ,p_pa_project_id               => p_pa_project_id
2898              ,p_pm_project_reference        => p_pm_project_reference
2899            ,p_pm_budget_reference         => p_pm_budget_reference  -- Added for bug 3858543
2900              ,p_budget_type_code            => p_budget_type_code
2901              ,p_change_reason_code          => p_change_reason_code
2902              ,p_description                 => p_description
2903              ,p_entry_method_code           => p_entry_method_code
2904              ,p_resource_list_name          => p_resource_list_name
2905              ,p_resource_list_id            => p_resource_list_id
2906              ,p_attribute_category          => p_attribute_category
2907              ,p_attribute1                  => p_attribute1
2908              ,p_attribute2                  => p_attribute2
2909              ,p_attribute3                  => p_attribute3
2910              ,p_attribute4                  => p_attribute4
2911              ,p_attribute5                  => p_attribute5
2912              ,p_attribute6                  => p_attribute6
2913              ,p_attribute7                  => p_attribute7
2914              ,p_attribute8                  => p_attribute8
2915              ,p_attribute9                  => p_attribute9
2916              ,p_attribute10                 => p_attribute10
2917              ,p_attribute11                 => p_attribute11
2918              ,p_attribute12                 => p_attribute12
2919              ,p_attribute13                 => p_attribute13
2920              ,p_attribute14                 => p_attribute14
2921              ,p_attribute15                 => p_attribute15
2922              ,p_budget_lines_in             => G_budget_lines_in_tbl
2923              ,p_budget_lines_out            => G_budget_lines_out_tbl
2924 
2925              --New parameters for finplan model
2926              ,p_fin_plan_type_id            => p_fin_plan_type_id
2927              ,p_fin_plan_type_name          => p_fin_plan_type_name
2928              ,p_version_type                => p_version_type
2929              ,p_fin_plan_level_code         => p_fin_plan_level_code
2930              ,p_time_phased_code            => p_time_phased_code
2931              ,p_plan_in_multi_curr_flag     => p_plan_in_multi_curr_flag
2932              ,p_projfunc_cost_rate_type     => p_projfunc_cost_rate_type
2933              ,p_projfunc_cost_rate_date_typ => p_projfunc_cost_rate_date_typ
2934              ,p_projfunc_cost_rate_date     => p_projfunc_cost_rate_date
2935              ,p_projfunc_rev_rate_type      => p_projfunc_rev_rate_type
2936              ,p_projfunc_rev_rate_date_typ  => p_projfunc_rev_rate_date_typ
2937              ,p_projfunc_rev_rate_date      => p_projfunc_rev_rate_date
2938              ,p_project_cost_rate_type      => p_project_cost_rate_type
2939              ,p_project_cost_rate_date_typ  => p_project_cost_rate_date_typ
2940              ,p_project_cost_rate_date      => p_project_cost_rate_date
2941              ,p_project_rev_rate_type       => p_project_rev_rate_type
2942              ,p_project_rev_rate_date_typ   => p_project_rev_rate_date_typ
2943              ,p_project_rev_rate_date       => p_project_rev_rate_date
2944              ,p_raw_cost_flag               => p_raw_cost_flag
2945              ,p_burdened_cost_flag          => p_burdened_cost_flag
2946              ,p_revenue_flag                => p_revenue_flag
2947              ,p_cost_qty_flag               => p_cost_qty_flag
2948              ,p_revenue_qty_flag            => p_revenue_qty_flag
2949              ,P_all_qty_flag                => P_all_qty_flag
2950              ,p_create_new_curr_working_flag=> p_create_new_curr_working_flag
2951              ,p_replace_current_working_flag=> p_replace_current_working_flag
2952            ,p_using_resource_lists_flag   => p_using_resource_lists_flag);
2953 
2954 
2955 -- Temporary solution because of commit in delete_budget!!!!
2956 
2957    SAVEPOINT execute_create_budget_pub;
2958 
2959 /*   -- dbms_output.put_line('Return status create_draft_budget: '||l_return_status); */
2960 
2961     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
2962         THEN
2963 
2964             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2965 
2966         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
2967         THEN
2968 
2969             RAISE FND_API.G_EXC_ERROR;
2970         END IF;
2971 
2972         IF fnd_api.to_boolean(p_commit)
2973         THEN
2974             COMMIT;
2975         END IF;
2976 
2977 
2978 EXCEPTION
2979 
2980     WHEN FND_API.G_EXC_ERROR
2981     THEN
2982 
2983 
2984         ROLLBACK TO execute_create_budget_pub;
2985 
2986         p_return_status := FND_API.G_RET_STS_ERROR;
2987 
2988         FND_MSG_PUB.Count_And_Get
2989         (   p_count     =>  p_msg_count ,
2990             p_data      =>  p_msg_data  );
2991 
2992     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2993     THEN
2994 
2995 /*   -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
2996 
2997     ROLLBACK TO execute_create_budget_pub;
2998 
2999     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3000 
3001     FND_MSG_PUB.Count_And_Get
3002     (   p_count     =>  p_msg_count ,
3003         p_data      =>  p_msg_data  );
3004 
3005     WHEN OTHERS THEN
3006 
3007 
3008     ROLLBACK TO execute_create_budget_pub;
3009 
3010     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3011 
3012     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3013     THEN
3014         FND_MSG_PUB.add_exc_msg
3015             (  p_pkg_name       => G_PKG_NAME
3016             ,  p_procedure_name => l_api_name );
3017 
3018     END IF;
3019 
3020     FND_MSG_PUB.Count_And_Get
3021     (   p_count     =>  p_msg_count ,
3022         p_data      =>  p_msg_data  );
3023 
3024 END execute_create_draft_budget;
3025 
3026 
3027 ----------------------------------------------------------------------------------------
3028 --Name:               fetch_budget_line
3029 --Type:               Procedure
3030 --Description:        This procedure can be used to fetch the outcoming
3031 --            parameters for budget lines as part of the LOAD/EXECUTE/FETCH cycle.
3032 --
3033 --
3034 --Called subprograms:
3035 --
3036 --
3037 --
3038 --History:
3039 --    30-SEP-1996        L. de Werker    Created
3040 --
3041 --
3042 PROCEDURE fetch_budget_line
3043 ( p_api_version_number      IN  NUMBER
3044  ,p_init_msg_list       IN  VARCHAR2    := FND_API.G_FALSE
3045  ,p_return_status       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3046  ,p_line_index          IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3047  ,p_line_return_status      OUT NOCOPY VARCHAR2                    ) --File.Sql.39 bug 4440895
3048 
3049 IS
3050 
3051    l_api_name           CONSTANT    VARCHAR2(30)        := 'fetch_budget_line';
3052    l_index                  NUMBER;
3053    i                        NUMBER;
3054 
3055 BEGIN
3056 
3057 --  Standard begin of API savepoint
3058 
3059     SAVEPOINT fetch_budget_line_pub;
3060 
3061 --  Standard call to check for call compatibility.
3062 
3063     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
3064                                          p_api_version_number   ,
3065                                          l_api_name             ,
3066                                          G_PKG_NAME             )
3067     THEN
3068 
3069     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3070 
3071     END IF;
3072 
3073 --  Initialize the message table if requested.
3074 
3075     IF FND_API.TO_BOOLEAN( p_init_msg_list )
3076     THEN
3077 
3078     FND_MSG_PUB.initialize;
3079 
3080     END IF;
3081 
3082 --  Set API return status to success
3083 
3084     p_return_status := FND_API.G_RET_STS_SUCCESS;
3085 
3086 -- Check budget line index value,
3087 -- when they don't provide an index we will error out
3088 
3089 IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3090 OR p_line_index IS NULL
3091 THEN
3092     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3093     THEN
3094          pa_interface_utils_pub.map_new_amg_msg
3095           ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
3096            ,p_msg_attribute    => 'CHANGE'
3097            ,p_resize_flag      => 'Y'
3098            ,p_msg_context      => 'GENERAL'
3099            ,p_attribute1       => ''
3100            ,p_attribute2       => ''
3101            ,p_attribute3       => ''
3102            ,p_attribute4       => ''
3103            ,p_attribute5       => '');
3104     END IF;
3105 
3106     p_return_status := FND_API.G_RET_STS_ERROR;
3107     RAISE FND_API.G_EXC_ERROR;
3108 ELSE
3109     l_index := p_line_index;
3110 END IF;
3111 
3112 --assign global table fields to the outgoing parameter
3113 p_line_return_status        := G_budget_lines_out_tbl(l_index).return_status;
3114 
3115 
3116 
3117 EXCEPTION
3118 
3119     WHEN FND_API.G_EXC_ERROR
3120     THEN
3121 
3122     ROLLBACK TO fetch_budget_line_pub;
3123 
3124     p_return_status := FND_API.G_RET_STS_ERROR;
3125 
3126     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3127     THEN
3128 
3129     ROLLBACK TO fetch_budget_line_pub;
3130 
3131     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3132 
3133     WHEN OTHERS THEN
3134 
3135     ROLLBACK TO fetch_budget_line_pub;
3136 
3137     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3138 
3139     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3140     THEN
3141         FND_MSG_PUB.add_exc_msg
3142             (  p_pkg_name       => G_PKG_NAME
3143             ,  p_procedure_name => l_api_name );
3144 
3145     END IF;
3146 
3147 
3148 END fetch_budget_line;
3149 
3150 ----------------------------------------------------------------------------------------
3151 --Name:               clear_budget
3152 --Type:               Procedure
3153 --Description:        This procedure can be used to clear the global PL/SQL
3154 --            tables that are used by a LOAD/EXECUTE/FETCH cycle.
3155 --
3156 --
3157 --Called subprograms:
3158 --
3159 --
3160 --
3161 --History:
3162 --    23-SEP-1996        L. de Werker    Created
3163 --
3164 --
3165 PROCEDURE clear_budget
3166 
3167 IS
3168 
3169 BEGIN
3170 
3171 
3172    init_budget;
3173 
3174 
3175 END clear_budget;
3176 
3177 
3178 ----------------------------------------------------------------------------------------
3179 --Name:               Baseline_Budget
3180 --Type:               Procedure
3181 --Description:        This procedure can be used to baseline
3182 --            a budget for a given project.
3183 --
3184 --
3185 --Called subprograms: pa_budget_core.verify
3186 --            pa_budget_core.baseline
3187 --                    PA_BUDGET_FUND_PKG.get_budget_ctrl_options
3188 --
3189 --
3190 --
3191 --History:
3192 --    30-SEP-1996       L. de Werker    Created
3193 --    03-DEC-1996   L. de Werker    Added check for previous baselined budgets.
3194 --    03-MAR-1997   L. de Werker    Added workflow enabling
3195 --    24-JUN-97     jwhite      Workflow had been commented-out, renabled it
3196 --                  as per latest specifications.
3197 --    21-JUL-97     jwhite      Added Check_Baseline_Rules procedure
3198 --                  to validations section.
3199 --    29-JUL-97     jwhite      Radically changed validations and WF implementation
3200 --                  as per new specs from jlowell.
3201 --    12-AUG-97     jwhite      Added new OUT-parameter, p_workflow_started
3202 --                  as per workflow implementation.
3203 --    08-SEP-97     jwhite      Updated to latest specifications: added
3204 --                  wrappers for Start_Budget_WF and
3205 --                  Budget_WF_Is_Used, new parameters to
3206 --                  Verify_Budget_Rules calls, etc.
3207 --    11-SEP-97     jwhite      Added new concept of  warnings_only ('W')
3208 --                  for the p_return_status with respect
3209 --                  to the Verify_Budget_Rules calls.
3210 --
3211 --    02-MAY-01         jwhite      As per the Non-Project Budget Ingtegration
3212 --                                      development effort,  if budget is enabled for budgetary
3213 --                                      controls, the baseline process will be
3214 --                                      aborted.
3215 --    02-FEB-03        sgoteti     Made changes for the finplan model
3216 
3217 
3218 PROCEDURE Baseline_Budget
3219 ( p_api_version_number        IN    NUMBER
3220  ,p_commit                    IN    VARCHAR2          := FND_API.G_FALSE
3221  ,p_init_msg_list             IN    VARCHAR2          := FND_API.G_FALSE
3222  ,p_msg_count                 OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
3223  ,p_msg_data                  OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3224  ,p_return_status             OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3225  ,p_workflow_started          OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3226  ,p_pm_product_code           IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3227  ,p_pa_project_id             IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3228  ,p_pm_project_reference      IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3229  ,p_budget_type_code          IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3230  ,p_mark_as_original          IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3231 
3232  --Parameters due to Fin Plan Model
3233  ,p_fin_plan_type_id          IN    pa_fin_plan_types_b.fin_plan_type_id%TYPE
3234  ,p_fin_plan_type_name        IN    pa_fin_plan_types_tl.name%TYPE
3235  ,p_version_type              IN    pa_budget_versions.version_type%TYPE)
3236 
3237 IS
3238 
3239       CURSOR l_budget_types_csr
3240              (p_budget_type_code    VARCHAR2 )
3241       IS
3242       SELECT 1
3243       FROM   pa_budget_types
3244       WHERE  budget_type_code = p_budget_type_code;
3245 
3246       -- Changed the cursor so that it can be used in both old budget model
3247       -- and finplan model
3248       CURSOR l_budget_lines_csr
3249              (p_budget_version_id NUMBER )
3250       IS
3251       SELECT 1
3252       FROM   pa_budget_lines
3253       WHERE  budget_version_id = p_budget_version_id;
3254 
3255       CURSOR l_budget_versions_csr
3256              (c_project_id       NUMBER
3257              ,c_budget_type_code VARCHAR2)
3258 
3259       IS
3260       SELECT budget_version_id
3261       FROM   pa_budget_versions
3262       WHERE  project_id   = c_project_id
3263       AND    budget_type_code       = c_budget_type_code
3264       AND    budget_status_code     = 'W'
3265       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3266 
3267 
3268       l_budget_versions_rec              l_budget_versions_csr%ROWTYPE;
3269 
3270 
3271       CURSOR l_baselined_csr
3272             ( c_project_id       NUMBER
3273              ,c_budget_type_code VARCHAR2 )
3274 
3275       IS
3276       SELECT budget_version_id
3277       FROM   pa_budget_versions
3278       WHERE  project_id             = c_project_id
3279       AND    budget_type_code = c_budget_type_code
3280       AND    budget_status_code     = 'B'
3281       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3282 
3283 
3284       l_baselined_rec                    l_baselined_csr%ROWTYPE;
3285 
3286 
3287       -- 01-AUG-97, jwhite
3288       -- Cursor for Verify_Budget_Rules
3289 
3290       CURSOR l_budget_rules_csr(p_draft_version_id NUMBER)
3291       IS
3292       SELECT v.resource_list_id,
3293              t.project_type_class_code
3294       FROM   pa_project_types t,
3295              pa_projects p,
3296              pa_budget_versions v
3297       WHERE  v.budget_version_id = p_draft_version_id
3298       AND    v.project_id = p.project_id
3299       AND    p.project_type = t.project_type
3300       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
3301 
3302 
3303 
3304       -- 24-JUN-97, jwhite
3305       -- ROW LOCKING ---------------------------------------------------------------
3306 
3307       CURSOR l_lock_budget_csr (p_budget_version_id NUMBER)
3308       IS
3309       SELECT 'x'
3310       FROM   pa_budget_versions
3311       WHERE  budget_version_id = p_budget_version_id
3312       AND    ci_id IS NULL         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3313       FOR UPDATE NOWAIT;
3314 
3315       -- --------------------------------------------------------------------------------------
3316 
3317 
3318 
3319       l_api_name              CONSTANT    VARCHAR2(30)            := 'baseline_budget';
3320       l_return_status                     VARCHAR2(1);
3321       l_project_id                        NUMBER;
3322 
3323       l_budget_version_id                 NUMBER;
3324       l_mark_as_original                  pa_budget_versions.current_original_flag%TYPE;
3325 
3326       l_err_code                          NUMBER;
3327       l_err_stage                         VARCHAR2(120);
3328       l_err_stack                         VARCHAR2(630);
3329       i                                   NUMBER;
3330       l_row_found                         NUMBER;
3331       l_msg_count                         NUMBER ;
3332       l_msg_data                          VARCHAR2(2000);
3333       l_function_allowed                  VARCHAR2(1);
3334       l_resp_id                           NUMBER := 0;
3335       l_user_id                           NUMBER := 0;
3336       l_module_name                       VARCHAR2(80);
3337 
3338       l_workflow_is_used                  VARCHAR2(1) := NULL;
3339       l_resource_list_id                  NUMBER;
3340       l_project_type_class_code           pa_project_types.project_type_class_code%TYPE;
3341 
3342       l_warnings_only_flag                VARCHAR2(1) := 'Y';
3343       l_err_msg_count                     NUMBER      := 0;
3344 
3345       --needed to get the field values associated to a AMG message
3346 
3347       CURSOR l_amg_project_csr
3348           (p_pa_project_id pa_projects.project_id%type)
3349       IS
3350       SELECT segment1
3351       FROM   pa_projects p
3352       WHERE  p.project_id = p_pa_project_id;
3353 
3354       l_amg_segment1                      VARCHAR2(25);
3355 
3356       -- Needed to check whether the plan type id passed is attached to the project or Not
3357       CURSOR l_plan_type_option_csr
3358              (c_project_id          pa_projects_all.project_id%TYPE,
3359               c_fin_plan_type_id    pa_proj_fp_options.proj_fp_options_id%TYPE)
3360       IS
3361       SELECT 'X'
3362       FROM   pa_proj_fp_options pfo
3363       WHERE  pfo.project_id=c_project_id
3364       AND    pfo.fin_plan_type_id=c_fin_plan_type_id
3365       AND    pfo.fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
3366 
3367       -- Needed to get the version id and record version number of the original baselined version
3368       CURSOR l_orig_baselined_ver_csr
3369              (c_project_id        pa_projects_all.project_id%TYPE,
3370               c_fin_plan_type_id  pa_budget_versions.fin_plan_type_id%TYPE,
3371               c_version_type      pa_budget_versions.version_type%TYPE)
3372       IS
3373       SELECT budget_version_id
3374             ,record_version_number
3375       FROM   pa_budget_versions
3376       WHERE  project_id=c_project_id
3377       AND    fin_plan_type_id=c_fin_plan_type_id
3378       AND    version_type=c_version_type
3379       AND    current_original_flag='Y'
3380       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3381 
3382 
3383       l_orig_baselined_ver_rec            l_orig_baselined_ver_csr%ROWTYPE;
3384 
3385 
3386       -- Budget Integration Variables --------------------------
3387 
3388       l_fck_req_flag                      VARCHAR2(1) := NULL;
3389       l_bdgt_intg_flag                    VARCHAR2(1) := NULL;
3390       l_bdgt_ver_id                       NUMBER := NULL;
3391       l_encum_type_id                     NUMBER := NULL;
3392       l_balance_type                      VARCHAR2(1) := NULL;
3393 
3394       -- --------------------------------------------------------
3395       l_fin_plan_type_id                  pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3396       l_debug_mode                        VARCHAR2(1);
3397       l_debug_level2             CONSTANT NUMBER := 2;
3398       l_debug_level3             CONSTANT NUMBER := 3;
3399       l_debug_level4             CONSTANT NUMBER := 4;
3400       l_debug_level5             CONSTANT NUMBER := 5;
3401       l_version_type                      pa_budget_Versions.version_type%TYPE;
3402       l_security_ret_code                 VARCHAR2(1);
3403       l_baselined_Ver_options_id          pa_proj_fp_options.proj_fp_options_id%TYPE;
3404       l_baselined_version_id              pa_budget_Versions.budget_version_id%TYPE;
3405       l_CW_ver_options_id                 pa_proj_fp_options.proj_fp_options_id%TYPE;
3406       l_curr_working_version_id           pa_budget_Versions.budget_version_id%TYPE;
3407       l_CB_record_version_number          pa_budget_Versions.record_version_number%TYPE;
3408       l_CW_record_version_number          pa_budget_Versions.record_version_number%TYPE;
3409       l_any_error_occurred_flag           VARCHAR2(1);
3410       l_data                              VARCHAR2(2000);
3411       l_msg_index_out                     NUMBER;
3412       l_dummy                             VARCHAR2(1);
3413       l_fin_plan_type_name                pa_fin_plan_types_tl.name%TYPE;
3414       l_result                            VARCHAR2(1);
3415       ll_fin_plan_type_id                  pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3416       ll_fin_plan_type_name                pa_fin_plan_types_tl.name%TYPE;
3417       l_fc_version_created_flag            VARCHAR2(1);
3418       l_final_plan_prc_code                VARCHAR2(10);
3419       l_targ_request_id                pa_budget_versions.request_id%TYPE;
3420 BEGIN
3421 
3422       --Standard begin of API savepoint
3423 
3424       SAVEPOINT baseline_budget_pub;
3425 
3426 
3427       --Standard call to check for call compatibility.
3428 
3429       IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
3430                                p_api_version_number   ,
3431                                l_api_name             ,
3432                                G_PKG_NAME             )
3433       THEN
3434 
3435             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3436 
3437       END IF;
3438 
3439       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3440 
3441 
3442       pa_debug.set_curr_function( p_function   => 'baseline_budget',
3443                                   p_debug_mode => l_debug_mode );
3444 
3445 
3446       --Initialize the message table if requested.
3447       IF FND_API.TO_BOOLEAN( p_init_msg_list )
3448       THEN
3449 
3450             FND_MSG_PUB.initialize;
3451 
3452       END IF;
3453 
3454       --Get the user id and responsibility Ids
3455       l_user_id := FND_GLOBAL.User_id;
3456       l_resp_id := FND_GLOBAL.Resp_id;
3457 
3458 
3459       -- This api will initialize the data that will be used by the map_new_amg_msg.
3460       -- commented out the procedure call as required by venkatesh. 25-APR-03
3461 /*
3462       PA_INTERFACE_UTILS_PUB.Set_Global_Info
3463         ( p_api_version_number => 1.0
3464          ,p_responsibility_id  => l_resp_id
3465          ,p_user_id            => l_user_id
3466          ,p_calling_mode       => 'AMG'     --bug 2783845
3467          ,p_msg_count          => l_msg_count
3468          ,p_msg_data           => l_msg_data
3469          ,p_return_status      => l_return_status);
3470 
3471       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3472             RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3473       END IF;
3474 */
3475       --product_code is mandatory
3476       IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3477       OR p_pm_product_code IS NULL
3478       THEN
3479             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3480             THEN
3481                   pa_interface_utils_pub.map_new_amg_msg
3482                   ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
3483                    ,p_msg_attribute    => 'CHANGE'
3484                    ,p_resize_flag      => 'N'
3485                    ,p_msg_context      => 'GENERAL'
3486                    ,p_attribute1       => ''
3487                    ,p_attribute2       => ''
3488                    ,p_attribute3       => ''
3489                    ,p_attribute4       => ''
3490                    ,p_attribute5       => '');
3491             END IF;
3492 
3493             IF l_debug_mode = 'Y' THEN
3494                   pa_debug.g_err_stage:= 'Product code is missing';
3495                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3496             END IF;
3497 
3498 --            RAISE FND_API.G_EXC_ERROR;
3499               l_any_error_occurred_flag := 'Y';
3500 
3501       ELSE
3502             l_pm_product_code :='Z';
3503             /*added for bug no :2413400*/
3504              -- dbms_output.put_line('p_pm_product_code is '||p_pm_product_code);
3505              -- dbms_output.put_line('l_pm_product_code is '||l_pm_product_code);
3506             OPEN p_product_code_csr (p_pm_product_code);
3507             FETCH p_product_code_csr INTO l_pm_product_code;
3508             CLOSE p_product_code_csr;
3509              -- dbms_output.put_line('l_pm_product_code is 2'||l_pm_product_code);
3510             IF l_pm_product_code <> 'X'
3511             THEN
3512 
3513                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3514                   THEN
3515                         pa_interface_utils_pub.map_new_amg_msg
3516                         ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
3517                         ,p_msg_attribute    => 'CHANGE'
3518                         ,p_resize_flag      => 'N'
3519                         ,p_msg_context      => 'GENERAL'
3520                         ,p_attribute1       => ''
3521                         ,p_attribute2       => ''
3522                         ,p_attribute3       => ''
3523                         ,p_attribute4       => ''
3524                         ,p_attribute5       => '');
3525                   END IF;
3526                   p_return_status             := FND_API.G_RET_STS_ERROR;
3527                   -- RAISE FND_API.G_EXC_ERROR;
3528                   l_any_error_occurred_flag := 'Y';
3529                   IF l_debug_mode = 'Y' THEN
3530                         pa_debug.g_err_stage:= 'Product code is invalid';
3531                         pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3532                   END IF;
3533                    -- dbms_output.put_line('Product Code is invalid');
3534             END IF;
3535              -- dbms_output.put_line('Validated the code');
3536       END IF;
3537 
3538       --l_module_name := p_pm_product_code||'.'||'PA_PM_BASELINE_BUDGET';
3539       l_module_name := 'PA_PM_BASELINE_BUDGET';
3540 
3541       --Commented out the existing calls to security APIs. call the api that has all the
3542       --security checks (As part of the changes to AMG for finplan model)
3543 
3544       -- As part of enforcing project security, which would determine
3545       -- whether the user has the necessary privileges to update the project
3546       -- need to call the pa_security package
3547       -- If a user does not have privileges to update the project, then
3548       -- cannot baseline the budget
3549 
3550       --pa_security.initialize (X_user_id        => l_user_id,
3551       --                        X_calling_module => l_module_name);
3552 
3553       -- Actions performed using the APIs would be subject to
3554       -- function security. If the responsibility does not allow
3555       -- such functions to be executed, the API should not proceed further
3556       -- since the user does not have access to such functions
3557 
3558       --PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id; Moved this to later part of code
3559 
3560 
3561       --PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3562       --(p_api_version_number => p_api_version_number,
3563       -- p_responsibility_id  => l_resp_id,
3564       -- p_function_name      => 'PA_PM_BASELINE_BUDGET',
3565       -- p_msg_count          => l_msg_count,
3566       -- p_msg_data           => l_msg_data,
3567       -- p_return_status      => l_return_status,
3568       -- p_function_allowed   => l_function_allowed );
3569 
3570       --IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3571       --THEN
3572       --      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3573       --
3574       --ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3575       --THEN
3576       --      RAISE FND_API.G_EXC_ERROR;
3577       --END IF;
3578       --IF l_function_allowed = 'N' THEN
3579       --      pa_interface_utils_pub.map_new_amg_msg
3580       --      ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3581       --      ,p_msg_attribute    => 'CHANGE'
3582       --      ,p_resize_flag      => 'Y'
3583       --      ,p_msg_context      => 'GENERAL'
3584       --      ,p_attribute1       => ''
3585       --      ,p_attribute2       => ''
3586       --      ,p_attribute3       => ''
3587       --      ,p_attribute4       => ''
3588       --      ,p_attribute5       => '');
3589       --      p_return_status := FND_API.G_RET_STS_ERROR;
3590       --      RAISE FND_API.G_EXC_ERROR;
3591       --END IF;
3592 
3593 
3594       --  Set API return status to success
3595 
3596       p_return_status         := FND_API.G_RET_STS_SUCCESS;
3597 
3598 
3599 
3600       -- 12-AUG-97, jwhite:
3601       --  Initialize New OUT-parameter to indicate workflow status
3602 
3603       -- Set Worflow Started Status -------------------------------------------------
3604 
3605       p_workflow_started            := 'N';
3606       -- ------------------------------------------------------------------------------------
3607 
3608 
3609       --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
3610 
3611       /*   -- dbms_output.put_line('Check for Mandatory Fields'); */
3612 
3613       -- convert pm_project_reference to id
3614       Pa_project_pvt.Convert_pm_projref_to_id (
3615          p_pm_project_reference  => p_pm_project_reference,
3616          p_pa_project_id         => p_pa_project_id,
3617          p_out_project_id        => l_project_id,
3618          p_return_status         => l_return_status );
3619 
3620       PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
3621 
3622       IF l_debug_mode = 'Y' THEN
3623             pa_debug.g_err_stage:= 'Convert_pm_projref_to_id returned status '||l_return_status;
3624             pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3625       END IF;
3626 
3627       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
3628       THEN
3629             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3630 
3631       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3632       THEN
3633             RAISE  FND_API.G_EXC_ERROR;
3634 
3635       END IF;
3636 
3637       IF l_project_id IS NULL   --never happens because previous procedure checks this.
3638       THEN
3639             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3640             THEN
3641                   pa_interface_utils_pub.map_new_amg_msg
3642                   ( p_old_message_code => 'PA_PROJECT_IS_MISSING'
3643                   ,p_msg_attribute    => 'CHANGE'
3644                   ,p_resize_flag      => 'N'
3645                   ,p_msg_context      => 'GENERAL'
3646                   ,p_attribute1       => ''
3647                   ,p_attribute2       => ''
3648                   ,p_attribute3       => ''
3649                   ,p_attribute4       => ''
3650                   ,p_attribute5       => '');
3651             END IF;
3652 
3653             IF l_debug_mode = 'Y' THEN
3654                   pa_debug.g_err_stage:= 'Project id is null ';
3655                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3656             END IF;
3657 
3658             RAISE FND_API.G_EXC_ERROR;
3659 
3660       END IF;
3661 
3662       -- Get segment1 for AMG messages
3663 
3664       OPEN l_amg_project_csr( l_project_id );
3665       FETCH l_amg_project_csr INTO l_amg_segment1;
3666       CLOSE l_amg_project_csr;
3667 
3668 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
3669 -- 28-APR-03
3670       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3671          ll_fin_plan_type_id := NULL;
3672       ELSE
3673        ll_fin_plan_type_id := p_fin_plan_type_id;
3674       END IF;
3675 
3676       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3677          ll_fin_plan_type_name := NULL;
3678       ELSE
3679          ll_fin_plan_type_name := p_fin_plan_type_name;
3680       END IF;
3681 
3682 -- Changes done.
3683 
3684 
3685       -- Both Budget Type Code and Fin Plan Type Id should not be null
3686       IF ((p_budget_type_code IS NULL OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  AND
3687         (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3688         (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
3689 
3690             PA_UTILS.ADD_MESSAGE
3691                   (p_app_short_name => 'PA',
3692                   p_msg_name        => 'PA_BUDGET_FP_BOTH_MISSING');
3693 
3694             IF l_debug_mode = 'Y' THEN
3695                   pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are null ';
3696                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3697             END IF;
3698 
3699             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3700 
3701       END IF;
3702 
3703       -- Both Budget Type Code and Fin Plan Type Id should not be not null
3704       IF ((p_budget_type_code IS NOT NULL  AND
3705            p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  AND
3706         ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3707          (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
3708 
3709             PA_UTILS.ADD_MESSAGE
3710                   (p_app_short_name => 'PA',
3711                   p_msg_name        => 'PA_BUDGET_FP_BOTH_NOT_NULL');
3712 
3713             IF l_debug_mode = 'Y' THEN
3714                   pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are not null ';
3715                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3716             END IF;
3717 
3718             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3719 
3720       END IF;
3721 
3722       -- Check whether the user has privileges to call this api.
3723       -- Check whether budget type code or fin plan passed are valid or not
3724       IF p_budget_type_code IS NOT NULL
3725       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3726       THEN
3727             -- This api adds the message to stack in case of error
3728             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3729                  p_api_version_number => p_api_version_number
3730                 ,p_project_id         => l_project_id
3731                 ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
3732                 ,p_function_name      => l_module_name
3733                 ,p_version_type       => NULL
3734                 ,x_return_status      => l_return_status
3735                 ,x_ret_code           => l_security_ret_code );
3736 
3737             IF l_return_status <>  FND_API.G_RET_STS_SUCCESS OR
3738                l_security_ret_code = 'N' THEN
3739 
3740                   IF l_debug_mode = 'Y' THEN
3741                         pa_debug.g_err_stage := 'Security API failed' ;
3742                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3743                   END IF;
3744 
3745                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3746 
3747             END IF;
3748 
3749 
3750             OPEN l_budget_types_csr( p_budget_type_code );
3751 
3752             FETCH l_budget_types_csr
3753             INTO l_row_found;
3754 
3755             IF l_budget_types_csr%NOTFOUND
3756             THEN
3757                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3758                   THEN
3759                         pa_interface_utils_pub.map_new_amg_msg
3760                         ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
3761                          ,p_msg_attribute    => 'CHANGE'
3762                          ,p_resize_flag      => 'N'
3763                          ,p_msg_context      => 'BUDG'
3764                          ,p_attribute1       => l_amg_segment1
3765                          ,p_attribute2       => ''
3766                          ,p_attribute3       => p_budget_type_code
3767                          ,p_attribute4       => ''
3768                          ,p_attribute5       => '');
3769                   END IF;
3770 
3771                   CLOSE l_budget_types_csr;
3772                   IF l_debug_mode = 'Y' THEN
3773                         pa_debug.g_err_stage:= 'Invalid budget type ';
3774                         pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3775                   END IF;
3776 
3777                   RAISE FND_API.G_EXC_ERROR;
3778 
3779             ELSE
3780                   CLOSE l_budget_types_csr;
3781             END IF;
3782 
3783             --Added this validation for bug#4460120
3784              --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
3785              IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
3786                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3787                    THEN
3788                          PA_UTILS.add_message
3789                          (p_app_short_name => 'PA',
3790                           p_msg_name       => 'PA_FP_CANT_BLINE_FCST_BUD_TYPE');
3791                    END IF;
3792                    IF l_debug_mode = 'Y' THEN
3793                          pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
3794                          pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3795                    END IF;
3796                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3797              END IF;
3798 
3799       ELSE  -- API is called in the context of fin plan
3800 
3801             --Call the api that converts the fin plan type name to ID .This api adds the
3802             --message to stack in case of error
3803 
3804           --Changed p_fin_plan_type_id to ll_fin_plan_type_id,
3805             --        p_fin_plan_type_name to ll_fin_plan_type_name
3806             --Xin Liu 28-APR-03
3807             PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
3808                                      ( p_fin_plan_type_id    => ll_fin_plan_type_id
3809                                       ,p_fin_plan_type_name  => ll_fin_plan_type_name
3810                                       ,x_fin_plan_type_id    => l_fin_plan_type_id
3811                                       ,x_return_status       => l_return_status
3812                                       ,x_msg_count           => l_msg_count
3813                                       ,x_msg_data            => l_msg_data);
3814 
3815             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3816 
3817                   IF l_debug_mode = 'Y' THEN
3818                         pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
3819                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3820                   END IF;
3821 
3822 
3823                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3824 
3825             END IF;
3826 
3827              -- dbms_output.put_line('Obtained the plan type id'||l_fin_plan_type_id);
3828 
3829             OPEN l_plan_type_option_csr( l_project_id
3830                                        ,l_fin_plan_type_id)  ;
3831             FETCH l_plan_type_option_csr INTO l_dummy;
3832             IF l_plan_type_option_csr%NOTFOUND THEN
3833 
3834                   IF l_debug_mode = 'Y' THEN
3835                         pa_debug.g_err_stage := 'Plan type options does not exiss' ;
3836                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3837                   END IF;
3838 
3839                   SELECT name
3840                   INTO   l_fin_plan_type_name
3841                   FROM   pa_fin_plan_types_vl
3842                   WHERE  fin_plan_type_id = l_fin_plan_type_id;
3843 
3844                   PA_UTILS.ADD_MESSAGE
3845                            (p_app_short_name => 'PA',
3846                             p_msg_name       => 'PA_FP_NO_PLAN_TYPE_OPTION',
3847                             p_token1         => 'PROJECT',
3848                             p_value1         =>  l_amg_segment1,
3849                             p_token2         => 'PLAN_TYPE',
3850                             p_value2         =>  l_fin_plan_type_name);
3851 
3852 
3853                   CLOSE l_plan_type_option_csr;
3854 
3855                   IF l_debug_mode = 'Y' THEN
3856                          pa_debug.g_err_stage:= 'Plan type is not yet added to the project';
3857                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
3858                   END IF;
3859 
3860                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3861 
3862             ELSE
3863 
3864                   CLOSE l_plan_type_option_csr;
3865 
3866             END IF;
3867 
3868 --Added by Xin Liu to Handle the G_miss case.
3869 --28-APR-03
3870          IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3871           l_version_type := NULL;
3872          ELSE
3873             l_version_type := p_version_type;
3874          END IF;
3875 
3876             --Derive the version type.
3877             pa_fin_plan_utils.get_version_type
3878                  ( p_project_id        => l_project_id
3879                   ,p_fin_plan_type_id  => l_fin_plan_type_id
3880                   ,px_version_type     => l_version_type
3881                   ,x_return_status     => l_return_status
3882                   ,x_msg_count         => l_msg_count
3883                   ,x_msg_data          => l_msg_data);
3884 
3885              -- dbms_output.put_line('Got the version type');
3886             IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
3887 
3888                   IF l_debug_mode = 'Y' THEN
3889                         pa_debug.g_err_stage := 'get_version_type failed' ;
3890                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3891                   END IF;
3892 
3893                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3894 
3895             END IF;
3896 
3897 
3898             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3899                  p_api_version_number => p_api_version_number
3900                 ,p_project_id         => l_project_id
3901                 ,p_fin_plan_type_id   => l_fin_plan_type_id /* Bug 3139924 */
3902                 ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
3903                 ,p_function_name      => l_module_name
3904                 ,p_version_type       => l_version_type
3905                 ,x_return_status      => l_return_status
3906                 ,x_ret_code           => l_security_ret_code );
3907 
3908             IF l_return_status <>  FND_API.G_RET_STS_SUCCESS OR
3909                l_security_ret_code = 'N' THEN
3910 
3911                   IF l_debug_mode = 'Y' THEN
3912                         pa_debug.g_err_stage := 'Security API failed' ;
3913                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3914                   END IF;
3915 
3916                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3917 
3918             END IF;
3919 
3920             -- Get the current baselined version
3921             pa_fin_plan_utils.Get_Baselined_Version_Info(
3922                            p_project_id           => l_project_id
3923                           ,p_fin_plan_type_id     => l_fin_plan_type_id
3924                           ,p_version_type         => l_version_type
3925                           ,x_fp_options_id        => l_baselined_Ver_options_id
3926                           ,x_fin_plan_version_id  => l_baselined_version_id
3927                           ,x_return_status        => l_return_status
3928                           ,x_msg_count            => l_msg_count
3929                           ,x_msg_data             => l_msg_data);
3930 
3931             IF l_return_status <> FND_API.G_RET_STS_SUCCESS
3932             THEN
3933                  -- RAISE  FND_API.G_EXC_ERROR;
3934                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3935             END IF;
3936 
3937       END IF;--IF p_budget_type_code IS NOT NULL
3938       -- Budget Integration Validation ---------------------------------------
3939 
3940       --This validation is required only in budget model
3941       IF( p_budget_type_code IS NOT NULL
3942          AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3943 
3944 
3945             PA_BUDGET_FUND_PKG.get_budget_ctrl_options (p_project_Id => l_project_id
3946                                   , p_budget_type_code => p_budget_type_code
3947                                   , p_calling_mode     => 'BUDGET'
3948                                   , x_fck_req_flag     => l_fck_req_flag
3949                                   , x_bdgt_intg_flag   => l_bdgt_intg_flag
3950                                   , x_bdgt_ver_id      => l_bdgt_ver_id
3951                                   , x_encum_type_id    => l_encum_type_id
3952                                   , x_balance_type     => l_balance_type
3953                                   , x_return_status    => l_return_status
3954                                   , x_msg_data         => l_msg_data
3955                                   , x_msg_count        => l_msg_count
3956                                   );
3957 
3958 
3959             IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
3960             THEN
3961                   IF l_debug_mode = 'Y' THEN
3962                         pa_debug.g_err_stage := 'Unexpected error in budget ctrl options' ;
3963                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3964                   END IF;
3965 
3966                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3967 
3968 
3969             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3970             THEN
3971                  -- RAISE  FND_API.G_EXC_ERROR;
3972                  l_any_error_occurred_flag := 'Y';
3973 
3974             END IF;
3975 
3976 
3977             IF (nvl(l_fck_req_flag,'N') = 'Y')
3978             THEN
3979                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3980                   THEN
3981                         pa_interface_utils_pub.map_new_amg_msg
3982                         ( p_old_message_code => 'PA_BC_BGT_TYPE_IS_BAD_AMG'
3983                          ,p_msg_attribute    => 'CHANGE'
3984                          ,p_resize_flag      => 'N'
3985                          ,p_msg_context      => 'BUDG'
3986                          ,p_attribute1       => l_amg_segment1
3987                          ,p_attribute2       => ''
3988                          ,p_attribute3       => p_budget_type_code
3989                          ,p_attribute4       => ''
3990                          ,p_attribute5       => '');
3991                   END IF;
3992 
3993                   -- RAISE FND_API.G_EXC_ERROR;
3994                   l_any_error_occurred_flag := 'Y';
3995             END IF;
3996 
3997 
3998             -- ----------------------------------------------------------------------
3999       END IF;--end of the if for bugetary controls
4000 
4001 
4002       -- mark_as_original defaults to YES ('Y') when this is the first time this budget is baselined
4003       -- otherwise it will default to NO ('N')
4004       IF p_mark_as_original IS NULL
4005       OR p_mark_as_original = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4006       OR UPPER(p_mark_as_original) NOT IN ('N','Y') THEN
4007 
4008             IF( p_budget_type_code IS NOT NULL
4009             AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4010 
4011                   OPEN l_baselined_csr( l_project_id
4012                                ,p_budget_type_code);
4013 
4014                   FETCH l_baselined_csr INTO l_baselined_rec;
4015 
4016                   IF l_baselined_csr%NOTFOUND
4017                   THEN
4018                     l_mark_as_original := 'Y';
4019                   ELSE
4020                     l_mark_as_original := 'N';
4021                   END IF;
4022 
4023                   CLOSE l_baselined_csr;
4024 
4025             ELSE--Fin Plan Model . Get the baselined version details
4026 
4027 
4028                   IF l_baselined_version_id IS NULL
4029                   THEN
4030                     l_mark_as_original := 'Y';
4031                   ELSE
4032                     l_mark_as_original := 'N';
4033                   END IF;
4034 
4035             END IF;
4036 
4037       ELSE --Mark as original param is passed
4038             l_mark_as_original := UPPER(p_mark_as_original);
4039 
4040       END IF;
4041        -- dbms_output.put_line('Done with mark as orig');
4042 
4043 /*   -- dbms_output.put_line('Mark_as_original = '||l_mark_as_original); */
4044 
4045  -- get the budget version ID associated with this project / budget_type_code combination
4046 
4047       IF( p_budget_type_code IS NOT NULL
4048             AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4049 
4050             OPEN l_budget_versions_csr ( l_project_id
4051                                         ,p_budget_type_code);
4052 
4053             FETCH l_budget_versions_csr
4054             INTO l_budget_versions_rec;
4055 
4056             IF l_budget_versions_csr%NOTFOUND
4057             THEN
4058                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4059                   THEN
4060                         pa_interface_utils_pub.map_new_amg_msg
4061                         ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4062                          ,p_msg_attribute    => 'CHANGE'
4063                          ,p_resize_flag      => 'N'
4064                          ,p_msg_context      => 'BUDG'
4065                          ,p_attribute1       => l_amg_segment1
4066                          ,p_attribute2       => ''
4067                          ,p_attribute3       => p_budget_type_code
4068                          ,p_attribute4       => ''
4069                          ,p_attribute5       => '');
4070                   END IF;
4071 
4072                   CLOSE l_budget_versions_csr;
4073                   RAISE FND_API.G_EXC_ERROR;
4074 
4075                   IF l_debug_mode = 'Y' THEN
4076                         pa_debug.g_err_stage := 'Curr working version does not exist' ;
4077                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4078                   END IF;
4079                   l_any_error_occurred_flag := 'Y';
4080             ELSE
4081 
4082                   CLOSE l_budget_versions_csr;
4083 
4084             END IF;
4085 
4086             l_curr_working_version_id := l_budget_versions_rec.budget_version_id;
4087 
4088       ELSE -- Fin Plan Model. Get the current working version info
4089 
4090             pa_fin_plan_utils.Get_Curr_Working_Version_Info(
4091                   p_project_id             => l_project_id
4092                   ,p_fin_plan_type_id      => l_fin_plan_type_id
4093                   ,p_version_type          => l_version_type
4094                   ,x_fp_options_id         => l_CW_ver_options_id
4095                   ,x_fin_plan_version_id   => l_curr_working_version_id
4096                   ,x_return_status         => l_return_status
4097                   ,x_msg_count             => l_msg_count
4098                   ,x_msg_data              => l_msg_data );
4099 
4100             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4101                   IF l_debug_mode = 'Y' THEN
4102                         pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4103                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4104                   END IF;
4105                   l_any_error_occurred_flag := 'Y';
4106             END IF;
4107 
4108             IF l_curr_working_version_id IS NULL
4109             THEN
4110                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4111                   THEN
4112                         pa_interface_utils_pub.map_new_amg_msg
4113                         ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4114                          ,p_msg_attribute    => 'CHANGE'
4115                          ,p_resize_flag      => 'N'
4116                          ,p_msg_context      => 'BUDG'
4117                          ,p_attribute1       => l_amg_segment1
4118                          ,p_attribute2       => ''
4119                          ,p_attribute3       => p_budget_type_code
4120                          ,p_attribute4       => ''
4121                          ,p_attribute5       => '');
4122                   END IF;
4123                   -- Raising the error since its not possible to proceed if there is no
4124                   -- Current working version
4125                   RAISE FND_API.G_EXC_ERROR;
4126                   l_any_error_occurred_flag := 'Y';
4127                   IF l_debug_mode = 'Y' THEN
4128                         pa_debug.g_err_stage := 'Curr working version does not exist' ;
4129                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4130                   END IF;
4131 
4132             END IF;
4133 
4134             pa_fin_plan_utils.return_and_vldt_plan_prc_code
4135             (p_budget_version_id      =>   l_curr_working_version_id
4136             ,x_final_plan_prc_code    =>   l_final_plan_prc_code
4137             ,x_targ_request_id        =>   l_targ_request_id
4138             ,x_return_status          =>   l_return_status
4139             ,x_msg_count              =>   l_msg_count
4140             ,x_msg_data               =>   l_msg_data);
4141 
4142             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4143                   IF l_debug_mode = 'Y' THEN
4144                         pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4145                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4146                   END IF;
4147                   l_any_error_occurred_flag := 'Y';
4148             END IF;
4149 
4150 
4151       END IF;
4152 
4153       -- Call the api that performs the autobaseline checks
4154       -- Bug 3099706 : Skip the autobaseline checks if this API is called from
4155       -- PA_AGREEMENT_PUB.create_baselined_budget. This API will only be called
4156       -- in Autobaseline enabled AR plan type / budget type cases only.
4157       -- This check is valid in all other cases when a budget needs to be baselined.
4158 
4159       -- dbms_output.put_line('Value of PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB = '||PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB);
4160 
4161       IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'N') THEN
4162               -- dbms_output.put_line('about to call autobaseline checks API ');
4163 
4164             pa_fin_plan_utils.perform_autobasline_checks
4165             (  p_budget_version_id  => l_curr_working_version_id
4166             ,x_result             => l_result
4167             ,x_return_status      => p_return_status
4168             ,x_msg_count          => p_msg_count
4169             ,x_msg_data           => p_msg_data       );
4170 
4171             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4172                 IF(l_debug_mode='Y') THEN
4173                     pa_debug.g_err_stage := 'Auto baseline API falied';
4174                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4175                 END IF;
4176                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4177             END IF;
4178 
4179 
4180             IF l_result = 'F' THEN
4181                 IF(l_debug_mode='Y') THEN
4182                     pa_debug.g_err_stage := 'Auto baseline checks falied';
4183                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4184                 END IF;
4185                 l_any_error_occurred_flag:='Y';
4186                 PA_UTILS.ADD_MESSAGE( p_app_short_name  => 'PA'
4187                                ,p_msg_name        => 'PA_FP_APP_REV_BL_VER_AB_PROJ'
4188                                ,p_token1          => 'PROJECT'
4189                                ,p_value1          => l_amg_segment1);
4190 
4191             END IF;
4192       END IF; -- bug 3099706
4193 
4194       IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'Y') THEN
4195               PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB := 'N'; -- reset the value bug 3099706
4196       END IF;
4197        -- dbms_output.put_line('Got the CW version ' || l_curr_working_version_id);
4198 
4199 
4200       -- check for budget lines in pa_resource_assignments,
4201       -- we only permit submit/baseline action when there are budget lines
4202 
4203       OPEN l_budget_lines_csr(l_curr_working_version_id);
4204 
4205       FETCH l_budget_lines_csr
4206       INTO l_row_found;
4207 
4208       IF l_budget_lines_csr%NOTFOUND
4209       THEN
4210             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4211             THEN
4212                   pa_interface_utils_pub.map_new_amg_msg
4213                   ( p_old_message_code => 'PA_NO_BUDGET_LINES'
4214                    ,p_msg_attribute    => 'CHANGE'
4215                    ,p_resize_flag      => 'N'
4216                    ,p_msg_context      => 'BUDG'
4217                    ,p_attribute1       => l_amg_segment1
4218                    ,p_attribute2       => ''
4219                    ,p_attribute3       => p_budget_type_code
4220                    ,p_attribute4       => ''
4221                    ,p_attribute5       => '');
4222             END IF;
4223 
4224             CLOSE l_budget_lines_csr;
4225             -- RAISE FND_API.G_EXC_ERROR;
4226             l_any_error_occurred_flag := 'Y';
4227             IF l_debug_mode = 'Y' THEN
4228                   pa_debug.g_err_stage := 'Budget Lines do not exist for current working version' ;
4229                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4230             END IF;
4231 
4232       ELSE
4233 
4234             CLOSE l_budget_lines_csr;
4235 
4236       END IF;
4237 
4238 
4239        -- dbms_output.put_line('done with BL Check');
4240 
4241       -- verify budget (up to this date (sept 96) not implemented)
4242       --
4243       pa_budget_core.verify( x_budget_version_id  => l_curr_working_version_id
4244                             ,x_err_code           => l_err_code
4245                             ,x_err_stage          => l_err_stage
4246                             ,x_err_stack          => l_err_stack  );
4247 
4248       IF l_err_code > 0
4249       THEN
4250 
4251             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4252             THEN
4253 
4254                   IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4255                   THEN
4256                         pa_interface_utils_pub.map_new_amg_msg
4257                         ( p_old_message_code => 'PA_VERIFY_FAILED'
4258                          ,p_msg_attribute    => 'CHANGE'
4259                          ,p_resize_flag      => 'N'
4260                          ,p_msg_context      => 'BUDG'
4261                          ,p_attribute1       => l_amg_segment1
4262                          ,p_attribute2       => ''
4263                          ,p_attribute3       => p_budget_type_code
4264                          ,p_attribute4       => ''
4265                          ,p_attribute5       => '');
4266                   ELSE
4267                         pa_interface_utils_pub.map_new_amg_msg
4268                         ( p_old_message_code => l_err_stage
4269                         ,p_msg_attribute    => 'CHANGE'
4270                         ,p_resize_flag      => 'N'
4271                         ,p_msg_context      => 'BUDG'
4272                         ,p_attribute1       => l_amg_segment1
4273                         ,p_attribute2       => ''
4274                         ,p_attribute3       => p_budget_type_code
4275                         ,p_attribute4       => ''
4276                         ,p_attribute5       => '');
4277                   END IF;
4278 
4279             END IF;
4280 
4281             -- RAISE FND_API.G_EXC_ERROR;
4282             l_any_error_occurred_flag := 'Y';
4283 
4284       ELSIF l_err_code < 0
4285       THEN
4286 
4287             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4288             THEN
4289 
4290                   FND_MSG_PUB.add_exc_msg
4291                         (  p_pkg_name           => 'PA_BUDGET_CORE'
4292                         ,  p_procedure_name     => 'VERIFY'
4293                         ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4294 
4295             END IF;
4296 
4297             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4298 
4299       END IF;
4300        -- dbms_output.put_line('About to verify budget rules');
4301 
4302       --Verify Budget Rules should be called in budget model Only. In FinPlan model
4303       --The baseline api  in fin plan pub inturn calls the verify budget rules
4304       IF p_budget_type_code IS NOT NULL
4305       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4306 
4307             IF l_debug_mode = 'Y' THEN
4308                   pa_debug.g_err_stage := 'About to verify the budget rules in budget model' ;
4309                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4310             END IF;
4311 
4312 
4313             -- ------------------------------------------------------------------------------------
4314             -- 29-JUL-97, jwhite
4315             --  Added SUBMISSION/BASELINE RULES and WORFLOW
4316             -- ------------------------------------------------------------------------------------
4317 
4318             -- Retrieve Required IN-parameters for Verify_Budget_Rules Calls
4319 
4320             OPEN l_budget_rules_csr(l_curr_working_version_id);
4321 
4322             FETCH l_budget_rules_csr
4323             INTO  l_resource_list_id
4324                   , l_project_type_class_code;
4325 
4326             IF ( l_budget_rules_csr%NOTFOUND)
4327             THEN
4328 
4329                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4330                   THEN
4331                         pa_interface_utils_pub.map_new_amg_msg
4332                         ( p_old_message_code => 'PA_NO_BUDGET_RULES_ATTR'
4333                          ,p_msg_attribute    => 'CHANGE'
4334                          ,p_resize_flag      => 'N'
4335                          ,p_msg_context      => 'BUDG'
4336                          ,p_attribute1       => l_amg_segment1
4337                          ,p_attribute2       => ''
4338                          ,p_attribute3       => p_budget_type_code
4339                          ,p_attribute4       => ''
4340                          ,p_attribute5       => '');
4341                   END IF;
4342 
4343                   CLOSE l_budget_rules_csr;
4344                   -- RAISE FND_API.G_EXC_ERROR;
4345                   l_any_error_occurred_flag := 'Y';
4346 
4347             ELSE
4348 
4349                   CLOSE l_budget_rules_csr;
4350 
4351             END IF;
4352 
4353 
4354             --
4355             -- SUBMISSION RULES -------------------------------------------------------------
4356             --
4357 
4358             /*   -- dbms_output.put_line('Verify Budget Rules - SUBMIT'); */
4359 
4360 
4361             PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4362             (p_draft_version_id           =>    l_curr_working_version_id
4363             , p_mark_as_original          =>    l_mark_as_original
4364             , p_event                     =>    'SUBMIT'
4365             , p_project_id                =>    l_project_id
4366             , p_budget_type_code          =>    p_budget_type_code
4367             , p_resource_list_id          =>    l_resource_list_id
4368             , p_project_type_class_code   =>    l_project_type_class_code
4369             , p_created_by                =>    l_user_id
4370             , p_calling_module            =>    'PAPMBUPB'
4371             , p_warnings_only_flag        =>    l_warnings_only_flag
4372             , p_err_msg_count             =>    l_err_msg_count
4373             , p_err_code                  =>    l_err_code
4374             , p_err_stage                 =>    l_err_stage
4375             , p_err_stack                 =>    l_err_stack
4376             );
4377 
4378             -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4379             --
4380             IF (l_err_msg_count > 0)
4381             THEN
4382                   IF (l_warnings_only_flag      = 'Y')
4383                   THEN
4384                         p_return_status := 'W';
4385                   ELSE
4386                         -- RAISE FND_API.G_EXC_ERROR;
4387                         l_any_error_occurred_flag := 'Y';
4388                   END IF;
4389              -- dbms_output.put_line('Count after verify the baseline rules is >0');
4390 
4391             END IF;
4392             --
4393 
4394             -- LOCK DRAFT BUDGET VERSION Since Primary Verification Finished
4395 
4396             OPEN l_lock_budget_csr(l_curr_working_version_id);
4397             CLOSE l_lock_budget_csr;
4398 
4399              -- dbms_output.put_line('About to verify the baseline rules');
4400             --
4401             -- BASELINE RULES -------------------------------------------------------------
4402             --
4403 
4404             PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4405                 (p_draft_version_id             =>    l_curr_working_version_id
4406                 , p_mark_as_original            =>    l_mark_as_original
4407                 , p_event                       =>    'BASELINE'
4408                 , p_project_id                  =>    l_project_id
4409                 , p_budget_type_code            =>    p_budget_type_code
4410                 , p_resource_list_id            =>    l_resource_list_id
4411                 , p_project_type_class_code     =>    l_project_type_class_code
4412                 , p_created_by                  =>    l_user_id
4413                 , p_calling_module              =>    'PAPMBUPB'
4414                 , p_warnings_only_flag          =>    l_warnings_only_flag
4415                 , p_err_msg_count               =>    l_err_msg_count
4416                 , p_err_code                    =>    l_err_code
4417                 , p_err_stage                   =>    l_err_stage
4418                 , p_err_stack                   =>    l_err_stack
4419                 );
4420 
4421             -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4422             --
4423             IF (l_err_msg_count > 0)
4424              THEN
4425                   IF (l_warnings_only_flag      = 'Y')
4426                   THEN
4427                         p_return_status := 'W';
4428                   ELSE
4429                         -- RAISE FND_API.G_EXC_ERROR;
4430                         l_any_error_occurred_flag := 'Y';
4431                   END IF;
4432             END IF;
4433 
4434       ELSE -- Verify budget rules will be called by the baseline api in fin plan model.
4435            -- Lock the version in the finplan model
4436 
4437             --Get the record version number of the current working version
4438             l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4439 
4440             -- Lock the current working version
4441 
4442             pa_fin_plan_pvt.lock_unlock_version
4443                   (p_budget_version_id      => l_curr_working_version_id,
4444                   p_record_version_number   => l_CW_record_version_number,
4445                   p_action                  => 'L',
4446                   p_user_id                 => l_user_id,
4447                   p_person_id               => NULL,
4448                   x_return_status           => p_return_status,
4449                   x_msg_count               => p_msg_count,
4450                   x_msg_data                => p_msg_data) ;
4451 
4452             IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4453 
4454                   IF l_debug_mode = 'Y' THEN
4455                         pa_debug.g_err_stage := 'Error executing lock unlock version';
4456                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4457                   END IF;
4458                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4459 
4460             END IF;
4461             -- dbms_output.put_line('The no of messages in the stack 2 '||FND_MSG_PUB.count_msg);
4462 
4463       END IF;--If for buget model check
4464 
4465        -- dbms_output.put_line('Starting with workflow l_err_code '||l_err_code);
4466       --
4467 
4468       --
4469       -- ENABLE WORKFLOW?  ---------------------------------------------------
4470       --
4471 
4472       /*   -- dbms_output.put_line('Call BUDGET_WF_IS_USED'); */
4473 
4474       IF p_budget_type_code IS NOT NULL
4475       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4476       THEN
4477 
4478             PA_BUDGET_WF.Budget_Wf_Is_Used
4479             ( p_draft_version_id          =>    l_curr_working_version_id
4480             , p_project_id                =>    l_project_id
4481             , p_budget_type_code          =>    p_budget_type_code
4482             , p_pm_product_code           =>    p_pm_product_code
4483             , p_result                    =>    l_workflow_is_used
4484             , p_err_code                  =>    l_err_code
4485             , p_err_stage                 =>    l_err_stage
4486             , p_err_stack                 =>    l_err_stack
4487             );
4488 
4489       ELSE --Fin Plan Model. Pass the version type and plan type id
4490 
4491             PA_BUDGET_WF.Budget_Wf_Is_Used
4492             ( p_draft_version_id          =>    l_curr_working_version_id
4493             , p_project_id                =>    l_project_id
4494             , p_budget_type_code          =>    NULL
4495             , p_pm_product_code           =>    p_pm_product_code
4496             , p_result                    =>    l_workflow_is_used
4497             , p_err_code                  =>    l_err_code
4498             , p_err_stage                 =>    l_err_stage
4499             , p_err_stack                 =>    l_err_stack
4500             , p_fin_plan_type_id          =>    l_fin_plan_type_id
4501             , p_version_type              =>    l_version_type
4502             );
4503 
4504       END IF;
4505 
4506        -- dbms_output.put_line('l_err_code after is WD '||l_err_code);
4507       IF (l_err_code > 0)
4508       THEN
4509             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4510             THEN
4511                   FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4512                   FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.BUDGET_WF_IS_USED');
4513                               FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4514                   FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4515                   FND_MSG_PUB.add;
4516             END IF;
4517 
4518             -- RAISE FND_API.G_EXC_ERROR;
4519             l_any_error_occurred_flag := 'Y';
4520       ELSIF (l_err_code < 0)
4521       THEN
4522             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4523             THEN
4524                   FND_MSG_PUB.add_exc_msg
4525                         (  p_pkg_name           => 'PA_BUDGET_WF'
4526                         ,  p_procedure_name     => 'BUDGET_WF_IS_USED'
4527                         ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4528             END IF;
4529 
4530             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4531       END IF;
4532 
4533       -- Stop further processing if any errors are reported
4534       -- dbms_output.put_line('l_any_error_occurred_flag is '||l_any_error_occurred_flag);
4535       IF(l_any_error_occurred_flag='Y') THEN
4536             IF(l_debug_mode='Y') THEN
4537                   pa_debug.g_err_stage := 'About to display all the messages';
4538                   pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4539             END IF;
4540              -- dbms_output.put_line('Displaying all messages');
4541             l_return_status := FND_API.G_RET_STS_ERROR;
4542             l_any_error_occurred_flag := 'Y';
4543             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4544       END IF;
4545        -- dbms_output.put_line('Starting with workflow = T');
4546 
4547       IF (l_workflow_is_used = 'T' ) THEN
4548 
4549             -- ENABLE Workflow !!! -------------------------------------------------------------
4550 
4551             -- when the client extension returns 'T',
4552             -- the baseline action will be skipped here, since the baselining is done later
4553             -- by the baseliner as part of the workflow process.
4554 
4555             /*   -- dbms_output.put_line('WORKFLOW USED...Update Draft to Submitted, IN_ROUTE'); */
4556 
4557             UPDATE pa_budget_versions
4558             SET budget_status_code = 'S', WF_status_code = 'IN_ROUTE'
4559             WHERE budget_version_id = l_curr_working_version_id;
4560 
4561 /*   -- dbms_output.put_line('WORKFLOW USED...START_BUDGET_WF API'); */
4562 
4563             PA_BUDGET_WF.Start_Budget_Wf
4564             (p_draft_version_id           =>    l_curr_working_version_id
4565             , p_project_id                =>    l_project_id
4566             , p_budget_type_code          =>    p_budget_type_code
4567             , p_mark_as_original          =>    l_mark_as_original
4568             , p_err_code                  =>      l_err_code
4569             , p_err_stage                 =>    l_err_stage
4570             , p_err_stack                 =>    l_err_stack
4571             );
4572 
4573             IF (l_err_code > 0)
4574             THEN
4575                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4576                   THEN
4577                         FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4578                         FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.START_BUDGET_WF');
4579                                     FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4580                         FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4581                         FND_MSG_PUB.add;
4582                   END IF;
4583 
4584                   RAISE FND_API.G_EXC_ERROR;
4585 
4586             ELSIF (l_err_code < 0)
4587             THEN
4588                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4589                   THEN
4590                         FND_MSG_PUB.add_exc_msg
4591                               (  p_pkg_name           => 'PA_BUDGET_WF'
4592                               ,  p_procedure_name     => 'START_BUDGET_WF'
4593                               ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4594                   END IF;
4595 
4596                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4597             END IF;
4598 
4599 
4600 
4601             p_workflow_started            := 'Y';
4602 
4603             -- NOTE: A commit is required to actually start/activate  the workflow instance opened
4604             -- by the previous Start_Budget_WF procedure.
4605 
4606 
4607             IF FND_API.TO_BOOLEAN( p_commit )
4608             THEN
4609                   COMMIT;
4610             END IF;
4611 
4612             RETURN;
4613       ELSE
4614 
4615       -- STRAIGHT BASELINE, NO Workflow
4616 
4617 
4618             UPDATE pa_budget_versions
4619             SET budget_status_code = 'S', WF_status_code = NULL
4620             WHERE budget_version_id = l_curr_working_version_id;
4621 
4622 
4623       END IF;
4624 
4625       IF l_debug_mode = 'Y' THEN
4626             pa_debug.g_err_stage := 'Budget rules verified' ;
4627             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4628       END IF;
4629 
4630 -- -------------------------------------------------------------------------------------
4631 
4632  -- calling private API 'BASELINE'
4633     -- Hardcode p_verify_budget_rules to 'N' becuase verify_budget_rules already called.
4634 
4635 /*   -- dbms_output.put_line('Call PA_BUDGET_CORE.BASELINE'); */
4636 
4637 
4638 
4639 
4640       IF p_budget_type_code IS NOT NULL
4641       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4642 
4643             IF l_debug_mode = 'Y' THEN
4644                   pa_debug.g_err_stage := 'About to baseline the budget ' ;
4645                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4646             END IF;
4647 
4648             -- dbms_output.put_line('About to call the baseline api in budget core');
4649             pa_budget_core.baseline ( x_draft_version_id    => l_curr_working_version_id
4650                              ,x_mark_as_original      => l_mark_as_original
4651                              ,x_verify_budget_rules     => 'N'
4652                              ,x_err_code        => l_err_code
4653                              ,x_err_stage       => l_err_stage
4654                              ,x_err_stack       => l_err_stack    );
4655 
4656 
4657 
4658             IF l_err_code > 0
4659             THEN
4660 
4661             /*   -- dbms_output.put_line('Err_code: '||l_err_code); */
4662             /*   -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4663             /*   -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4664 
4665                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4666                   THEN
4667 
4668                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4669                         THEN
4670                               pa_interface_utils_pub.map_new_amg_msg
4671                               ( p_old_message_code => 'PA_BASELINE_FAILED'
4672                                ,p_msg_attribute    => 'CHANGE'
4673                                ,p_resize_flag      => 'N'
4674                                ,p_msg_context      => 'BUDG'
4675                                ,p_attribute1       => l_amg_segment1
4676                                ,p_attribute2       => ''
4677                                ,p_attribute3       => p_budget_type_code
4678                                ,p_attribute4       => ''
4679                                ,p_attribute5       => '');
4680                         ELSE
4681                               pa_interface_utils_pub.map_new_amg_msg
4682                               ( p_old_message_code => l_err_stage
4683                                ,p_msg_attribute    => 'CHANGE'
4684                                ,p_resize_flag      => 'N'
4685                                ,p_msg_context      => 'BUDG'
4686                                ,p_attribute1       => l_amg_segment1
4687                                ,p_attribute2       => ''
4688                                ,p_attribute3       => p_budget_type_code
4689                                ,p_attribute4       => ''
4690                                ,p_attribute5       => '');
4691                         END IF;
4692 
4693                   END IF;
4694 
4695                   RAISE FND_API.G_EXC_ERROR;
4696 
4697             ELSIF l_err_code < 0
4698             THEN
4699 
4700                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4701                   THEN
4702 
4703       /*   -- dbms_output.put_line('Err_code: '||l_err_code); */
4704       /*   -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4705       /*   -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4706 
4707                         FND_MSG_PUB.add_exc_msg
4708                               (  p_pkg_name           => 'PA_BUDGET_CORE'
4709                               ,  p_procedure_name     => 'BASELINE'
4710                               ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4711 
4712                   END IF;
4713 
4714                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4715 
4716             END IF;
4717 
4718        -- after calling BASELINE, set the budget_status_code back to 'W' (Working)
4719        -- the concept of submitting budget is not available in the public API's!
4720 
4721             UPDATE pa_budget_versions
4722             SET budget_status_code = 'W'
4723             WHERE budget_version_id = l_curr_working_version_id;
4724 
4725       ELSE--Fin Plan Model. Call the baseline api in fin plan pub
4726 
4727             --Get the record version number of the current baselined version
4728             IF l_baselined_version_id IS NOT NULL THEN
4729                   --Get the record version number
4730                   l_CB_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4731             ELSE
4732                   l_CB_record_version_number:=NULL;
4733             END IF;
4734 
4735             --Get the record version number of the current working version  (As it will be incremented by the lock_unlock_version)
4736             l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4737 
4738             IF l_debug_mode = 'Y' THEN
4739                   pa_debug.g_err_stage := 'About to baseline the finplan ' ;
4740                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4741             END IF;
4742 
4743              -- dbms_output.put_line('About to call baseline api');
4744 
4745             IF (l_mark_as_original = 'Y') THEN
4746 
4747                   -- Fetch the details of  original baseline version
4748                   -- so that they can be used to set its orginal flag
4749 
4750                   OPEN l_orig_baselined_ver_csr(l_project_id,
4751                                                 l_fin_plan_type_id,
4752                                                 l_version_type);
4753                   FETCH  l_orig_baselined_ver_csr INTO l_orig_baselined_ver_rec;
4754                   CLOSE l_orig_baselined_ver_csr;
4755 
4756             END IF;
4757 
4758             pa_fin_plan_pub.Baseline
4759                   ( p_project_id                 => l_project_id
4760                    ,p_budget_version_id          => l_curr_working_version_id
4761                    ,p_record_version_number      => l_CW_record_version_number
4762                    ,p_orig_budget_version_id     => l_baselined_version_id
4763                    ,p_orig_record_version_number => l_CB_record_version_number
4764                    ,x_fc_version_created_flag    => l_fc_version_created_flag
4765                    ,x_return_status              => l_return_status
4766                    ,x_msg_count                  => l_msg_count
4767                    ,x_msg_data                   => l_msg_data );
4768 
4769             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4770 
4771                   IF l_debug_mode = 'Y' THEN
4772                         pa_debug.g_err_stage:= 'Error in fin plan pub baseline ';
4773                         pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4774                   END IF;
4775                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4776 
4777             END IF;
4778 
4779              -- dbms_output.put_line('About to call mark as original api');
4780 
4781             --If the mark as original parameter is Y then call the api that sets the just now baselined version
4782             --as the orginal version
4783             IF (l_mark_as_original = 'Y') THEN
4784 
4785                   IF l_debug_mode = 'Y' THEN
4786                         pa_debug.g_err_stage := 'About to mark the created version as original baselined ' ;
4787                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4788                   END IF;
4789 
4790                   -- Fetch the details current baselined version
4791                   pa_fin_plan_utils.Get_Baselined_Version_Info(
4792                            p_project_id           => l_project_id
4793                           ,p_fin_plan_type_id     => l_fin_plan_type_id
4794                           ,p_version_type         => l_version_type
4795                           ,x_fp_options_id        => l_baselined_Ver_options_id
4796                           ,x_fin_plan_version_id  => l_baselined_version_id
4797                           ,x_return_status        => l_return_status
4798                           ,x_msg_count            => l_msg_count
4799                           ,x_msg_data             => l_msg_data);
4800 
4801                   IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4802                   THEN
4803                        -- RAISE  FND_API.G_EXC_ERROR;
4804                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4805                   END IF;
4806 
4807                   l_CB_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4808 
4809                   IF l_orig_baselined_ver_rec.budget_version_id IS NOT NULL THEN
4810 
4811                         l_orig_baselined_ver_rec.record_version_number:=pa_fin_plan_utils.Retrieve_Record_Version_Number
4812                                                                             (l_orig_baselined_ver_rec.budget_version_id);
4813 
4814                   END IF;
4815 
4816                    -- dbms_output.put_line('The verid to be marked as orig is '||l_baselined_version_id);
4817                    -- dbms_output.put_line('The orig verid to be marked as orig is '||l_orig_baselined_ver_rec.budget_version_id);
4818 
4819                   pa_fin_plan_pub.Mark_As_Original
4820                         ( p_project_id                  => l_project_id
4821                          ,p_budget_version_id           => l_baselined_version_id
4822                          ,p_record_version_number       => l_Cb_record_version_number
4823                          ,p_orig_budget_version_id      => l_orig_baselined_ver_rec.budget_version_id
4824                          ,p_orig_record_version_number  => l_orig_baselined_ver_rec.record_version_number
4825                          ,x_return_status               => l_return_status
4826                          ,x_msg_count                   => l_msg_count
4827                          ,x_msg_data                    => l_msg_data      );
4828 
4829                   IF l_return_status <> FND_API.G_RET_STS_SUCCESS  OR
4830                      l_msg_count <> 0THEN
4831 
4832                         IF l_debug_mode = 'Y' THEN
4833                               pa_debug.g_err_stage:= 'Error while marking the newly created version as the original version ';
4834                               pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4835                         END IF;
4836                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4837 
4838                   END IF;
4839 
4840             END IF;
4841 
4842             --Bug 6453987 - skkoppul - Unlocking the working version
4843 
4844             pa_fin_plan_pvt.lock_unlock_version
4845                   (p_budget_version_id      => l_curr_working_version_id,
4846                   p_record_version_number   => l_CW_record_version_number,
4847                   p_action                  => 'U',
4848                   p_user_id                 => l_user_id,
4849                   p_person_id               => NULL,
4850                   x_return_status           => p_return_status,
4851                   x_msg_count               => p_msg_count,
4852                   x_msg_data                => p_msg_data) ;
4853 
4854             IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4855 
4856                   IF l_debug_mode = 'Y' THEN
4857                         pa_debug.g_err_stage := 'Error executing lock unlock version';
4858                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4859                   END IF;
4860                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4861 
4862             END IF;
4863 
4864             --End changes bug 6453987 - skkoppul
4865 
4866 
4867       END IF;-- IF p_budget_type_code IS NOT NULL
4868 
4869 
4870       IF FND_API.TO_BOOLEAN( p_commit )
4871       THEN
4872             COMMIT;
4873       END IF;
4874 
4875       IF l_debug_mode = 'Y' THEN
4876             pa_debug.g_err_stage:= 'Leaving baseline budget';
4877             pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level3);
4878       END IF;
4879 
4880       pa_debug.reset_curr_function;
4881 
4882 
4883 EXCEPTION
4884 
4885       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
4886             ROLLBACK TO baseline_budget_pub;
4887 
4888             IF p_return_status IS NULL OR
4889                p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4890                   p_return_status := FND_API.G_RET_STS_ERROR;
4891             END IF;
4892             l_msg_count := FND_MSG_PUB.count_msg;
4893             IF l_msg_count = 1 THEN
4894                   PA_INTERFACE_UTILS_PUB.get_messages
4895                        (p_encoded        => FND_API.G_TRUE,
4896                         p_msg_index      => 1,
4897                         p_msg_count      => l_msg_count,
4898                         p_msg_data       => l_msg_data,
4899                         p_data           => l_data,
4900                         p_msg_index_out  => l_msg_index_out);
4901 
4902                   p_msg_data  := l_data;
4903                   p_msg_count := l_msg_count;
4904             ELSE
4905                   p_msg_count := l_msg_count;
4906             END IF;
4907             pa_debug.reset_curr_function;
4908 
4909             RETURN;
4910 
4911       WHEN FND_API.G_EXC_ERROR
4912       THEN
4913 
4914 
4915             ROLLBACK TO baseline_budget_pub;
4916 
4917             p_return_status := FND_API.G_RET_STS_ERROR;
4918 
4919             FND_MSG_PUB.Count_And_Get
4920             (   p_count       =>    p_msg_count ,
4921                 p_data        =>    p_msg_data  );
4922 
4923             pa_debug.reset_curr_function;
4924 
4925       WHEN FND_API.G_EXC_UNEXPECTED_ERROR
4926       THEN
4927 
4928 
4929             ROLLBACK TO baseline_budget_pub;
4930 
4931             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4932 
4933             FND_MSG_PUB.Count_And_Get
4934             (   p_count       =>    p_msg_count ,
4935                 p_data        =>    p_msg_data  );
4936 
4937             pa_debug.reset_curr_function;
4938 
4939       WHEN ROW_ALREADY_LOCKED
4940       THEN
4941 
4942             ROLLBACK TO baseline_budget_pub;
4943 
4944             p_return_status := FND_API.G_RET_STS_ERROR ;
4945 
4946                   IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4947                   THEN
4948                         FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
4949                         FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
4950                         FND_MESSAGE.SET_TOKEN('TASK',    '');
4951                         FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
4952                         FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
4953                         FND_MESSAGE.SET_TOKEN('START_DATE', '');
4954                         FND_MESSAGE.SET_TOKEN('ENTITY', 'BUDGET_VERSIONS');
4955                         FND_MSG_PUB.Add;
4956                   END IF;
4957 
4958             FND_MSG_PUB.Count_And_Get
4959             (p_count                =>    p_msg_count
4960             , p_data                =>    p_msg_data
4961             );
4962             pa_debug.reset_curr_function;
4963 
4964 
4965       WHEN OTHERS
4966       THEN
4967 
4968 
4969             ROLLBACK TO baseline_budget_pub;
4970 
4971             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4972 
4973             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4974             THEN
4975                   FND_MSG_PUB.add_exc_msg
4976                   (  p_pkg_name           => G_PKG_NAME
4977                   ,  p_procedure_name     => l_api_name );
4978 
4979             END IF;
4980 
4981             FND_MSG_PUB.Count_And_Get
4982             (   p_count       =>    p_msg_count ,
4983             p_data            =>    p_msg_data  );
4984 
4985             pa_debug.reset_curr_function;
4986 
4987 
4988 END baseline_budget;
4989 
4990 
4991 ----------------------------------------------------------------------------------------
4992 --Name:               add_budget_line
4993 --Type:               Procedure
4994 --Description:        This procedure can be used to add a budgetline to an
4995 --                    existing WORKING budget.
4996 --
4997 --Called subprograms:
4998 --          pa_budget_pvt.insert_budget_line
4999 --          pa_budget_lines_v_pkg.check_overlapping_dates
5000 --          PA_BUDGET_UTILS.summerize_project_totals
5001 --
5002 --
5003 --
5004 --History:
5005 --    01-OCT-1996        L. de Werker    Created
5006 --    19-NOV-1996    L. de Werker    Changed to use pa_budget_pvt.insert_budget_line
5007 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
5008 --    26-APR-2005    Ritesh Shukla   Bug 4224464: FP.M Changes - Did changes in
5009 --                                   add_budget_line for FP.M FinPlan model.
5010 
5011 PROCEDURE Add_Budget_Line
5012 ( p_api_version_number       IN  NUMBER
5013  ,p_commit                   IN  VARCHAR2   := FND_API.G_FALSE
5014  ,p_init_msg_list            IN  VARCHAR2   := FND_API.G_FALSE
5015  ,p_msg_count                OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5016  ,p_msg_data                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5017  ,p_return_status            OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5018  ,p_pm_product_code          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5019  ,p_pa_project_id            IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5020  ,p_pm_project_reference     IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5021  ,p_budget_type_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5022  ,p_pa_task_id               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5023  ,p_pm_task_reference        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5024  ,p_resource_alias           IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5025  ,p_resource_list_member_id  IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5026  ,p_budget_start_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5027  ,p_budget_end_date          IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5028  ,p_period_name              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5029  ,p_description              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5030  ,p_raw_cost                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5031  ,p_burdened_cost            IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5032  ,p_revenue                  IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5033  ,p_quantity                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5034  ,p_pm_budget_line_reference IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5035  ,p_attribute_category       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5036  ,p_attribute1               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5037  ,p_attribute2               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5038  ,p_attribute3               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5039  ,p_attribute4               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5040  ,p_attribute5               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5041  ,p_attribute6               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5042  ,p_attribute7               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5043  ,p_attribute8               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5044  ,p_attribute9               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5045  ,p_attribute10              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5046  ,p_attribute11              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5047  ,p_attribute12              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5048  ,p_attribute13              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5049  ,p_attribute14              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5050  ,p_attribute15              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5051 --Parameters added for FP.M
5052  ,p_fin_plan_type_id         IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5053  ,p_fin_plan_type_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5054  ,p_version_type             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5055  ,p_version_number           IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5056  ,p_currency_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5057  ,p_change_reason_code       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5058 
5059 IS
5060 
5061 
5062      l_api_name       CONSTANT    VARCHAR2(30)  := 'Add_Budget_Line';
5063      l_err_code                   NUMBER;
5064      l_err_stage                  VARCHAR2(120);
5065      l_err_stack                  VARCHAR2(630);
5066 
5067      l_project_id                 NUMBER := p_pa_project_id;
5068      l_budget_type_code           pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
5069      l_fin_plan_type_id           NUMBER := p_fin_plan_type_id;
5070      l_fin_plan_type_name         pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
5071      l_version_type               pa_budget_versions.version_type%TYPE := p_version_type;
5072      l_budget_version_id          NUMBER;
5073      l_budget_entry_method_code   pa_budget_entry_methods.budget_entry_method_code%TYPE;
5074      l_resource_list_id           pa_resource_lists_all_bg.resource_list_id%TYPE;
5075      l_budget_amount_code         pa_budget_types.budget_amount_code%type;
5076      l_entry_level_code           pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
5077      l_time_phased_code           pa_proj_fp_options.cost_time_phased_code%TYPE;
5078      l_multi_curr_flag            pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
5079      l_categorization_code        pa_budget_entry_methods.categorization_code%TYPE;
5080      l_record_version_number      pa_budget_versions.record_version_number%TYPE;
5081 
5082      l_resource_name              VARCHAR2(80); --bug 3711693
5083 
5084      l_budget_lines_in            budget_line_in_tbl_type;
5085      l_budget_lines_out_tbl       budget_line_out_tbl_type;
5086      l_mfc_cost_type_id_tbl       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5087      l_etc_method_code_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
5088      l_spread_curve_id_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5089 
5090      l_finplan_lines_tab          pa_fin_plan_pvt.budget_lines_tab;
5091      l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
5092 
5093      --Following parameters are needed for amounts check
5094      l_amount_set_id              pa_proj_fp_options.all_amount_set_id%TYPE;
5095      lx_raw_cost_flag             VARCHAR2(1) := NULL;
5096      lx_burdened_cost_flag        VARCHAR2(1) := NULL;
5097      lx_revenue_flag              VARCHAR2(1) := NULL;
5098      lx_cost_qty_flag             VARCHAR2(1) := NULL;
5099      lx_revenue_qty_flag          VARCHAR2(1) := NULL;
5100      lx_all_qty_flag              VARCHAR2(1) := NULL;
5101      l_bill_rate_flag             pa_fin_plan_amount_sets.bill_rate_flag%type;
5102      l_cost_rate_flag             pa_fin_plan_amount_sets.cost_rate_flag%type;
5103      l_burden_rate_flag           pa_fin_plan_amount_sets.burden_rate_flag%type;
5104      l_allow_qty_flag             VARCHAR2(1);
5105 
5106      l_msg_count                  NUMBER := 0;
5107      l_msg_data                   VARCHAR2(2000);
5108      l_function_allowed           VARCHAR2(1);
5109      l_module_name                VARCHAR2(80);
5110      l_data                       VARCHAR2(2000);
5111      l_msg_index_out              NUMBER;
5112 
5113      l_amg_project_number        pa_projects_all.segment1%TYPE;
5114      l_amg_task_number            VARCHAR2(50);
5115 
5116      --debug variables
5117      l_debug_mode                 VARCHAR2(1);
5118      l_debug_level2      CONSTANT NUMBER := 2;
5119      l_debug_level3      CONSTANT NUMBER := 3;
5120      l_debug_level4      CONSTANT NUMBER := 4;
5121      l_debug_level5      CONSTANT NUMBER := 5;
5122      --Added for bug 6408139 to pass G_PA_MISS_CHAR
5123      l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5124 
5125 
5126 BEGIN
5127 
5128 
5129      --Standard begin of API savepoint
5130 
5131      SAVEPOINT add_budget_line_pub;
5132 
5133      p_msg_count := 0;
5134      p_return_status := FND_API.G_RET_STS_SUCCESS;
5135      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5136      l_module_name := g_module_name || ':Add_Budget_Line';
5137 
5138      IF ( l_debug_mode = 'Y' )
5139      THEN
5140            pa_debug.set_curr_function( p_function   => 'Add_Budget_Line',
5141                                        p_debug_mode => l_debug_mode );
5142      END IF;
5143 
5144      IF ( l_debug_mode = 'Y' )
5145      THEN
5146            pa_debug.g_err_stage:='Entering ' || l_api_name;
5147            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5148      END IF;
5149 
5150      --Initialize the message table if requested.
5151      IF FND_API.TO_BOOLEAN( p_init_msg_list )
5152      THEN
5153           FND_MSG_PUB.initialize;
5154      END IF;
5155 
5156      --Set API return status to success
5157      p_return_status     := FND_API.G_RET_STS_SUCCESS;
5158 
5159      --Call PA_BUDGET_PVT.validate_header_info to do the necessary
5160      --header level validations
5161      PA_BUDGET_PVT.validate_header_info
5162           ( p_api_version_number          => p_api_version_number
5163            ,p_api_name                    => l_api_name
5164            ,p_init_msg_list               => p_init_msg_list
5165            ,px_pa_project_id              => l_project_id
5166            ,p_pm_project_reference        => p_pm_project_reference
5167            ,p_pm_product_code             => p_pm_product_code
5168            ,px_budget_type_code           => l_budget_type_code
5169            ,px_fin_plan_type_id           => l_fin_plan_type_id
5170            ,px_fin_plan_type_name         => l_fin_plan_type_name
5171            ,px_version_type               => l_version_type
5172            ,p_budget_version_number       => p_version_number
5173            ,p_change_reason_code          => NULL
5174            ,p_function_name               => 'PA_PM_ADD_BUDGET_LINE'
5175            ,x_budget_entry_method_code    => l_budget_entry_method_code
5176            ,x_resource_list_id            => l_resource_list_id
5177            ,x_budget_version_id           => l_budget_version_id
5178            ,x_fin_plan_level_code         => l_entry_level_code
5179            ,x_time_phased_code            => l_time_phased_code
5180            ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
5181            ,x_budget_amount_code          => l_budget_amount_code
5182            ,x_categorization_code         => l_categorization_code
5183            ,x_project_number              => l_amg_project_number
5184            /* Plan Amount Entry flags introduced by bug 6408139 */
5185            /*Passing all as G_PA_MISS_CHAR since validations not required*/
5186            ,px_raw_cost_flag         =>   l_pa_miss_char
5187            ,px_burdened_cost_flag    =>   l_pa_miss_char
5188            ,px_revenue_flag          =>   l_pa_miss_char
5189            ,px_cost_qty_flag         =>   l_pa_miss_char
5190            ,px_revenue_qty_flag      =>   l_pa_miss_char
5191            ,px_all_qty_flag          =>   l_pa_miss_char
5192            ,px_bill_rate_flag        =>   l_pa_miss_char
5193            ,px_cost_rate_flag        =>   l_pa_miss_char
5194            ,px_burden_rate_flag      =>   l_pa_miss_char
5195            /* Plan Amount Entry flags introduced by bug 6408139 */
5196            ,x_msg_count                   => p_msg_count
5197            ,x_msg_data                    => p_msg_data
5198            ,x_return_status               => p_return_status );
5199 
5200      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5201            IF(l_debug_mode='Y') THEN
5202                  pa_debug.g_err_stage := 'validate header info API falied';
5203                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5204            END IF;
5205            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5206      END IF;
5207 
5208 
5209      --Get Task number for AMG Messages
5210 
5211      IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5212           l_budget_lines_in(1).pa_task_id := NULL;
5213      ELSE
5214           l_budget_lines_in(1).pa_task_id := p_pa_task_id;
5215      END IF;
5216 
5217      IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5218           l_budget_lines_in(1).pm_task_reference := NULL;
5219      ELSE
5220           l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
5221      END IF;
5222 
5223      l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
5224      (p_task_number=> ''
5225      ,p_task_reference => l_budget_lines_in(1).pm_task_reference
5226      ,p_task_id => l_budget_lines_in(1).pa_task_id);
5227 
5228 
5229      --Insert budget line for old FORMS based Budgets Model
5230      IF l_budget_type_code IS NOT NULL
5231      THEN
5232 
5233           --Insert BUDGET LINES
5234           PA_BUDGET_PVT.insert_budget_line
5235               ( p_return_status              => p_return_status
5236                ,p_pa_project_id              => l_project_id
5237                ,p_budget_type_code           => l_budget_type_code
5238                ,p_pa_task_id                 => p_pa_task_id
5239                ,p_pm_task_reference          => p_pm_task_reference
5240                ,p_resource_alias             => p_resource_alias
5241                ,p_member_id                  => p_resource_list_member_id
5242                ,p_budget_start_date          => p_budget_start_date
5243                ,p_budget_end_date            => p_budget_end_date
5244                ,p_period_name                => p_period_name
5245                ,p_description                => p_description
5246                ,p_raw_cost                   => p_raw_cost
5247                ,p_burdened_cost              => p_burdened_cost
5248                ,p_revenue                    => p_revenue
5249                ,p_quantity                   => p_quantity
5250                ,p_pm_product_code            => p_pm_product_code
5251                ,p_pm_budget_line_reference   => p_pm_budget_line_reference
5252                ,p_resource_list_id           => l_resource_list_id
5253                ,p_attribute_category         => p_attribute_category
5254                ,p_attribute1                 => p_attribute1
5255                ,p_attribute2                 => p_attribute2
5256                ,p_attribute3                 => p_attribute3
5257                ,p_attribute4                 => p_attribute4
5258                ,p_attribute5                 => p_attribute5
5259                ,p_attribute6                 => p_attribute6
5260                ,p_attribute7                 => p_attribute7
5261                ,p_attribute8                 => p_attribute8
5262                ,p_attribute9                 => p_attribute9
5263                ,p_attribute10                => p_attribute10
5264                ,p_attribute11                => p_attribute11
5265                ,p_attribute12                => p_attribute12
5266                ,p_attribute13                => p_attribute13
5267                ,p_attribute14                => p_attribute14
5268                ,p_attribute15                => p_attribute15
5269                ,p_time_phased_type_code      => l_time_phased_code
5270                ,p_entry_level_code           => l_entry_level_code
5271                ,p_budget_amount_code         => l_budget_amount_code
5272                ,p_budget_entry_method_code   => l_budget_entry_method_code
5273                ,p_categorization_code        => l_categorization_code
5274                ,p_budget_version_id          => l_budget_version_id
5275                ,p_change_reason_code         => p_change_reason_code);
5276 
5277           IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
5278           THEN
5279               IF(l_debug_mode='Y') THEN
5280                      pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - unexpected error';
5281                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5282               END IF;
5283               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5284 
5285           ELSIF p_return_status = FND_API.G_RET_STS_ERROR
5286           THEN
5287               IF(l_debug_mode='Y') THEN
5288                      pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - expected error';
5289                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5290               END IF;
5291               RAISE  FND_API.G_EXC_ERROR;
5292           END IF;
5293 
5294 
5295           --check for overlapping dates
5296           PA_BUDGET_LINES_V_PKG.check_overlapping_dates
5297                     ( x_budget_version_id  => l_budget_version_id  --IN
5298                      ,x_resource_name  => l_resource_name  --OUT
5299                      ,x_err_code       => l_err_code       );
5300 
5301           IF l_err_code > 0
5302           THEN
5303 
5304              IF(l_debug_mode='Y') THEN
5305                     pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5306                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5307              END IF;
5308 
5309              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5310              THEN
5311                  FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
5312                  FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
5313 
5314                  FND_MSG_PUB.add;
5315              END IF;
5316 
5317              RAISE FND_API.G_EXC_ERROR;
5318 
5319           ELSIF l_err_code < 0
5320           THEN
5321 
5322              IF(l_debug_mode='Y') THEN
5323                     pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5324                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5325              END IF;
5326 
5327              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5328              THEN
5329                  FND_MSG_PUB.add_exc_msg
5330                      (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
5331                      ,  p_procedure_name => 'CHECK_OVERLAPPING_DATES'
5332                      ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5333              END IF;
5334 
5335              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5336 
5337           END IF;
5338 
5339 
5340           --summarizing the totals in the table pa_budget_versions
5341           PA_BUDGET_UTILS.summerize_project_totals
5342                ( x_budget_version_id => l_budget_version_id
5343                , x_err_code      => l_err_code
5344                , x_err_stage     => l_err_stage
5345                , x_err_stack     => l_err_stack        );
5346 
5347           IF l_err_code > 0  THEN
5348 
5349              IF(l_debug_mode='Y') THEN
5350                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
5351                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5352              END IF;
5353 
5354              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5355              THEN
5356                  IF NOT pa_project_pvt.check_valid_message(l_err_stage)
5357                  THEN
5358                      pa_interface_utils_pub.map_new_amg_msg
5359                       ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
5360                        ,p_msg_attribute    => 'CHANGE'
5361                        ,p_resize_flag      => 'N'
5362                        ,p_msg_context      => 'BUDG'
5363                        ,p_attribute1       => l_amg_project_number
5364                        ,p_attribute2       => l_amg_task_number
5365                        ,p_attribute3       => p_budget_type_code
5366                        ,p_attribute4       => l_resource_name
5367                        ,p_attribute5       => to_char(p_budget_start_date));
5368                  ELSE
5369                      pa_interface_utils_pub.map_new_amg_msg
5370                       ( p_old_message_code => l_err_stage
5371                        ,p_msg_attribute    => 'CHANGE'
5372                        ,p_resize_flag      => 'N'
5373                        ,p_msg_context      => 'BUDG'
5374                        ,p_attribute1       => l_amg_project_number
5375                        ,p_attribute2       => l_amg_task_number
5376                        ,p_attribute3       => p_budget_type_code
5377                        ,p_attribute4       => l_resource_name
5378                        ,p_attribute5       => to_char(p_budget_start_date));
5379                  END IF;
5380              END IF;
5381 
5382              RAISE FND_API.G_EXC_ERROR;
5383 
5384           ELSIF l_err_code < 0  THEN
5385 
5386              IF(l_debug_mode='Y') THEN
5387                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
5388                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5389              END IF;
5390 
5391              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5392              THEN
5393                  FND_MSG_PUB.add_exc_msg
5394                      (  p_pkg_name       => 'PA_BUDGET_UTILS'
5395                      ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
5396                      ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5397              END IF;
5398 
5399              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5400 
5401           END IF;
5402 
5403 
5404      ELSE --insert budget line for new FinPlan model
5405 
5406 
5407           --Store the budget line data in budget line table
5408 
5409           IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5410                l_budget_lines_in(1).resource_alias := NULL;
5411           ELSE
5412                l_budget_lines_in(1).resource_alias := p_resource_alias;
5413           END IF;
5414 
5415           IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5416                l_budget_lines_in(1).resource_list_member_id := NULL;
5417           ELSE
5418                l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
5419           END IF;
5420 
5421           IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5422                l_budget_lines_in(1).budget_start_date := NULL;
5423           ELSE
5424                l_budget_lines_in(1).budget_start_date := p_budget_start_date;
5425           END IF;
5426 
5427           IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5428                l_budget_lines_in(1).budget_end_date := NULL;
5429           ELSE
5430                l_budget_lines_in(1).budget_end_date := p_budget_end_date;
5431           END IF;
5432 
5433           IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5434                l_budget_lines_in(1).period_name := NULL;
5435           ELSE
5436                l_budget_lines_in(1).period_name := p_period_name;
5437           END IF;
5438 
5439           IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5440                l_budget_lines_in(1).description := NULL;
5441           ELSE
5442                l_budget_lines_in(1).description := p_description;
5443           END IF;
5444 
5445           IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5446                l_budget_lines_in(1).raw_cost := NULL;
5447           ELSE
5448                l_budget_lines_in(1).raw_cost := p_raw_cost;
5449           END IF;
5450 
5451           IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5452                l_budget_lines_in(1).burdened_cost := NULL;
5453           ELSE
5454                l_budget_lines_in(1).burdened_cost := p_burdened_cost;
5455           END IF;
5456 
5457           IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5458                l_budget_lines_in(1).revenue := NULL;
5459           ELSE
5460                l_budget_lines_in(1).revenue := p_revenue;
5461           END IF;
5462 
5463           IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5464                l_budget_lines_in(1).quantity := NULL;
5465           ELSE
5466                l_budget_lines_in(1).quantity := p_quantity;
5467           END IF;
5468 
5469           IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5470                l_budget_lines_in(1).pm_product_code := NULL;
5471           ELSE
5472                l_budget_lines_in(1).pm_product_code := p_pm_product_code;
5473           END IF;
5474 
5475           IF p_pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5476                l_budget_lines_in(1).pm_budget_line_reference := NULL;
5477           ELSE
5478                l_budget_lines_in(1).pm_budget_line_reference := p_pm_budget_line_reference;
5479           END IF;
5480 
5481           IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5482                l_budget_lines_in(1).attribute_category := NULL;
5483           ELSE
5484                l_budget_lines_in(1).attribute_category := p_attribute_category;
5485           END IF;
5486 
5487           IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5488                l_budget_lines_in(1).attribute1 := NULL;
5489           ELSE
5490                l_budget_lines_in(1).attribute1 := p_attribute1;
5491           END IF;
5492 
5493           IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5494                l_budget_lines_in(1).attribute2 := NULL;
5495           ELSE
5496                l_budget_lines_in(1).attribute2 := p_attribute2;
5497           END IF;
5498 
5499           IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5500                l_budget_lines_in(1).attribute3 := NULL;
5501           ELSE
5502                l_budget_lines_in(1).attribute3 := p_attribute3;
5503           END IF;
5504 
5505           IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5506                l_budget_lines_in(1).attribute4 := NULL;
5507           ELSE
5508                l_budget_lines_in(1).attribute4 := p_attribute4;
5509           END IF;
5510 
5511           IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5512                l_budget_lines_in(1).attribute5 := NULL;
5513           ELSE
5514                l_budget_lines_in(1).attribute5 := p_attribute5;
5515           END IF;
5516 
5517           IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5518                l_budget_lines_in(1).attribute6 := NULL;
5519           ELSE
5520                l_budget_lines_in(1).attribute6 := p_attribute6;
5521           END IF;
5522 
5523           IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5524                l_budget_lines_in(1).attribute7 := NULL;
5525           ELSE
5526                l_budget_lines_in(1).attribute7 := p_attribute7;
5527           END IF;
5528 
5529           IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5530                l_budget_lines_in(1).attribute8 := NULL;
5531           ELSE
5532                l_budget_lines_in(1).attribute8 := p_attribute8;
5533           END IF;
5534 
5535           IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5536                l_budget_lines_in(1).attribute9 := NULL;
5537           ELSE
5538                l_budget_lines_in(1).attribute9 := p_attribute9;
5539           END IF;
5540 
5541           IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5542                l_budget_lines_in(1).attribute10 := NULL;
5543           ELSE
5544                l_budget_lines_in(1).attribute10 := p_attribute10;
5545           END IF;
5546 
5547           IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5548                l_budget_lines_in(1).attribute11 := NULL;
5549           ELSE
5550                l_budget_lines_in(1).attribute11 := p_attribute11;
5551           END IF;
5552 
5553           IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5554                l_budget_lines_in(1).attribute12 := NULL;
5555           ELSE
5556                l_budget_lines_in(1).attribute12 := p_attribute12;
5557           END IF;
5558 
5559           IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5560                l_budget_lines_in(1).attribute13 := NULL;
5561           ELSE
5562                l_budget_lines_in(1).attribute13 := p_attribute13;
5563           END IF;
5564 
5565           IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5566                l_budget_lines_in(1).attribute14 := NULL;
5567           ELSE
5568                l_budget_lines_in(1).attribute14 := p_attribute14;
5569           END IF;
5570 
5571           IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5572                l_budget_lines_in(1).attribute15 := NULL;
5573           ELSE
5574                l_budget_lines_in(1).attribute15 := p_attribute15;
5575           END IF;
5576 
5577           IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5578                l_budget_lines_in(1).txn_currency_code := NULL;
5579           ELSE
5580                l_budget_lines_in(1).txn_currency_code := p_currency_code;
5581           END IF;
5582 
5583           IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5584                l_budget_lines_in(1).change_reason_code := NULL;
5585           ELSE
5586                l_budget_lines_in(1).change_reason_code := p_change_reason_code;
5587           END IF;
5588 
5589           --Since currency attributes are defaulted to G_MISS values in
5590           --PA_BUDGET_PUB.budget_line_in_rec_type so we have to explicitly
5591           --make them null
5592           l_budget_lines_in(1).projfunc_cost_rate_type      := NULL;
5593           l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
5594           l_budget_lines_in(1).projfunc_cost_rate_date      := NULL;
5595           l_budget_lines_in(1).projfunc_cost_exchange_rate  := NULL;
5596           l_budget_lines_in(1).projfunc_rev_rate_type       := NULL;
5597           l_budget_lines_in(1).projfunc_rev_rate_date_type  := NULL;
5598           l_budget_lines_in(1).projfunc_rev_rate_date       := NULL;
5599           l_budget_lines_in(1).projfunc_rev_exchange_rate   := NULL;
5600           l_budget_lines_in(1).project_cost_rate_type       := NULL;
5601           l_budget_lines_in(1).project_cost_rate_date_type  := NULL;
5602           l_budget_lines_in(1).project_cost_rate_date       := NULL;
5603           l_budget_lines_in(1).project_cost_exchange_rate   := NULL;
5604           l_budget_lines_in(1).project_rev_rate_type        := NULL;
5605           l_budget_lines_in(1).project_rev_rate_date_type   := NULL;
5606           l_budget_lines_in(1).project_rev_rate_date        := NULL;
5607           l_budget_lines_in(1).project_rev_exchange_rate    := NULL;
5608 
5609 
5610           --Send the budget version id to validate_budget_lines API for
5611           --actuals on FORECAST check
5612           l_version_info_rec.x_budget_version_id := l_budget_version_id;
5613 
5614           --Get entry method options and validate them against cost, rev and quantity passed
5615           l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
5616 
5617           PA_FIN_PLAN_UTILS.get_plan_amount_flags(
5618                          P_AMOUNT_SET_ID      => l_amount_set_id
5619                         ,X_RAW_COST_FLAG      => lx_raw_cost_flag
5620                         ,X_BURDENED_FLAG      => lx_burdened_cost_flag
5621                         ,X_REVENUE_FLAG       => lx_revenue_flag
5622                         ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
5623                         ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
5624                         ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
5625                         ,X_BILL_RATE_FLAG     => l_bill_rate_flag
5626                         ,X_COST_RATE_FLAG     => l_cost_rate_flag
5627                         ,X_BURDEN_RATE_FLAG   => l_burden_rate_flag
5628                         ,x_message_count      => p_msg_count
5629                         ,x_return_status      => p_return_status
5630                         ,x_message_data       => p_msg_data) ;
5631 
5632           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5633           THEN
5634                IF(l_debug_mode='Y') THEN
5635                     pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
5636                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5637                END IF;
5638                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5639           END IF;
5640 
5641           --Derive the value of all_qty_flag based on version_type
5642           IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
5643                l_allow_qty_flag := lx_cost_qty_flag;
5644           ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
5645                l_allow_qty_flag := lx_revenue_qty_flag;
5646           ELSE
5647                l_allow_qty_flag :=  lx_all_qty_flag;
5648           END IF;
5649 
5650 
5651           --Validate the budget line data
5652           PA_BUDGET_PVT.Validate_Budget_Lines
5653                ( p_calling_context             => 'BUDGET_LINE_LEVEL_VALIDATION'
5654                 ,p_pa_project_id               => l_project_id
5655                 ,p_budget_type_code            => l_budget_type_code
5656                 ,p_fin_plan_type_id            => l_fin_plan_type_id
5657                 ,p_version_type                => l_version_type
5658                 ,p_resource_list_id            => l_resource_list_id
5659                 ,p_time_phased_code            => l_time_phased_code
5660                 ,p_budget_entry_method_code    => l_budget_entry_method_code
5661                 ,p_entry_level_code            => l_entry_level_code
5662                 ,p_allow_qty_flag              => l_allow_qty_flag
5663                 ,p_allow_raw_cost_flag         => lx_raw_cost_flag
5664                 ,p_allow_burdened_cost_flag    => lx_burdened_cost_flag
5665                 ,p_allow_revenue_flag          => lx_revenue_flag
5666                 ,p_multi_currency_flag         => l_multi_curr_flag
5667                 ,p_project_cost_rate_type      => NULL
5668                 ,p_project_cost_rate_date_typ  => NULL
5669                 ,p_project_cost_rate_date      => NULL
5670                 ,p_project_cost_exchange_rate  => NULL
5671                 ,p_projfunc_cost_rate_type     => NULL
5672                 ,p_projfunc_cost_rate_date_typ => NULL
5673                 ,p_projfunc_cost_rate_date     => NULL
5674                 ,p_projfunc_cost_exchange_rate => NULL
5675                 ,p_project_rev_rate_type       => NULL
5676                 ,p_project_rev_rate_date_typ   => NULL
5677                 ,p_project_rev_rate_date       => NULL
5678                 ,p_project_rev_exchange_rate   => NULL
5679                 ,p_projfunc_rev_rate_type      => NULL
5680                 ,p_projfunc_rev_rate_date_typ  => NULL
5681                 ,p_projfunc_rev_rate_date      => NULL
5682                 ,p_projfunc_rev_exchange_rate  => NULL
5683                 ,p_version_info_rec            => l_version_info_rec
5684                 ,px_budget_lines_in            => l_budget_lines_in
5685                 ,x_budget_lines_out            => l_budget_lines_out_tbl
5686                 ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
5687                 ,x_etc_method_code_tbl         => l_etc_method_code_tbl
5688                 ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
5689                 ,x_msg_count                   => p_msg_count
5690                 ,x_msg_data                    => p_msg_data
5691                 ,x_return_status               => p_return_status );
5692 
5693           IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5694                 IF(l_debug_mode='Y') THEN
5695                       pa_debug.g_err_stage := 'validate budget lines API falied';
5696                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5697                 END IF;
5698                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5699           END IF;
5700 
5701 
5702           --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
5703 
5704           l_finplan_lines_tab(1).system_reference1            := l_budget_lines_in(1).pa_task_id;
5705           l_finplan_lines_tab(1).system_reference2            := l_budget_lines_in(1).resource_list_member_id;
5706           l_finplan_lines_tab(1).start_date                   := l_budget_lines_in(1).budget_start_date;
5707           l_finplan_lines_tab(1).end_date                     := l_budget_lines_in(1).budget_end_date;
5708           l_finplan_lines_tab(1).period_name                  := l_budget_lines_in(1).period_name;
5709           l_finplan_lines_tab(1).txn_currency_code            := l_budget_lines_in(1).txn_currency_code;
5710           l_finplan_lines_tab(1).txn_raw_cost                 := l_budget_lines_in(1).raw_cost;
5711           l_finplan_lines_tab(1).txn_burdened_cost            := l_budget_lines_in(1).burdened_cost;
5712           l_finplan_lines_tab(1).txn_revenue                  := l_budget_lines_in(1).revenue;
5713           l_finplan_lines_tab(1).quantity                     := l_budget_lines_in(1).quantity;
5714           l_finplan_lines_tab(1).change_reason_code           := l_budget_lines_in(1).change_reason_code;
5715           l_finplan_lines_tab(1).description                  := l_budget_lines_in(1).description;
5716           l_finplan_lines_tab(1).attribute_category           := l_budget_lines_in(1).attribute_category;
5717           l_finplan_lines_tab(1).attribute1                   := l_budget_lines_in(1).attribute1;
5718           l_finplan_lines_tab(1).attribute2                   := l_budget_lines_in(1).attribute2;
5719           l_finplan_lines_tab(1).attribute3                   := l_budget_lines_in(1).attribute3;
5720           l_finplan_lines_tab(1).attribute4                   := l_budget_lines_in(1).attribute4;
5721           l_finplan_lines_tab(1).attribute5                   := l_budget_lines_in(1).attribute5;
5722           l_finplan_lines_tab(1).attribute6                   := l_budget_lines_in(1).attribute6;
5723           l_finplan_lines_tab(1).attribute7                   := l_budget_lines_in(1).attribute7;
5724           l_finplan_lines_tab(1).attribute8                   := l_budget_lines_in(1).attribute8;
5725           l_finplan_lines_tab(1).attribute9                   := l_budget_lines_in(1).attribute9;
5726           l_finplan_lines_tab(1).attribute10                  := l_budget_lines_in(1).attribute10;
5727           l_finplan_lines_tab(1).attribute11                  := l_budget_lines_in(1).attribute11;
5728           l_finplan_lines_tab(1).attribute12                  := l_budget_lines_in(1).attribute12;
5729           l_finplan_lines_tab(1).attribute13                  := l_budget_lines_in(1).attribute13;
5730           l_finplan_lines_tab(1).attribute14                  := l_budget_lines_in(1).attribute14;
5731           l_finplan_lines_tab(1).attribute15                  := l_budget_lines_in(1).attribute15;
5732           l_finplan_lines_tab(1).projfunc_cost_rate_type      := l_budget_lines_in(1).projfunc_cost_rate_type;
5733           l_finplan_lines_tab(1).projfunc_cost_rate_date_type := l_budget_lines_in(1).projfunc_cost_rate_date_type;
5734           l_finplan_lines_tab(1).projfunc_cost_rate_date      := l_budget_lines_in(1).projfunc_cost_rate_date;
5735           l_finplan_lines_tab(1).projfunc_cost_exchange_rate  := l_budget_lines_in(1).projfunc_cost_exchange_rate;
5736           l_finplan_lines_tab(1).projfunc_rev_rate_type       := l_budget_lines_in(1).projfunc_rev_rate_type;
5737           l_finplan_lines_tab(1).projfunc_rev_rate_date_type  := l_budget_lines_in(1).projfunc_rev_rate_date_type;
5738           l_finplan_lines_tab(1).projfunc_rev_rate_date       := l_budget_lines_in(1).projfunc_rev_rate_date;
5739           l_finplan_lines_tab(1).projfunc_rev_exchange_rate   := l_budget_lines_in(1).projfunc_rev_exchange_rate;
5740           l_finplan_lines_tab(1).project_cost_rate_type       := l_budget_lines_in(1).project_cost_rate_type;
5741           l_finplan_lines_tab(1).project_cost_rate_date_type  := l_budget_lines_in(1).project_cost_rate_date_type;
5742           l_finplan_lines_tab(1).project_cost_rate_date       := l_budget_lines_in(1).project_cost_rate_date;
5743           l_finplan_lines_tab(1).project_cost_exchange_rate   := l_budget_lines_in(1).project_cost_exchange_rate;
5744           l_finplan_lines_tab(1).project_rev_rate_type        := l_budget_lines_in(1).project_rev_rate_type;
5745           l_finplan_lines_tab(1).project_rev_rate_date_type   := l_budget_lines_in(1).project_rev_rate_date_type;
5746           l_finplan_lines_tab(1).project_rev_rate_date        := l_budget_lines_in(1).project_rev_rate_date;
5747           l_finplan_lines_tab(1).project_rev_exchange_rate    := l_budget_lines_in(1).project_rev_exchange_rate;
5748           l_finplan_lines_tab(1).pm_product_code              := l_budget_lines_in(1).pm_product_code;
5749           l_finplan_lines_tab(1).pm_budget_line_reference     := l_budget_lines_in(1).pm_budget_line_reference;
5750           l_finplan_lines_tab(1).quantity_source              := 'I';
5751           l_finplan_lines_tab(1).raw_cost_source              := 'I';
5752           l_finplan_lines_tab(1).burdened_cost_source         := 'I';
5753           l_finplan_lines_tab(1).revenue_source               := 'I';
5754           l_finplan_lines_tab(1).resource_assignment_id       := -1;
5755 
5756 
5757           --Lock the budget version before inserting a budget line
5758           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5759                                      (p_budget_version_id => l_budget_version_id);
5760 
5761           PA_FIN_PLAN_PVT.lock_unlock_version
5762           ( p_budget_version_id       => l_budget_version_id
5763            ,p_record_version_number   => l_record_version_number
5764            ,p_action                  => 'L'
5765            ,p_user_id                 => FND_GLOBAL.User_id
5766            ,p_person_id               => null
5767            ,x_return_status           => p_return_status
5768            ,x_msg_count               => p_msg_count
5769            ,x_msg_data                => p_msg_data);
5770 
5771           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
5772                 -- Error message is not added here as the api lock_unlock_version
5773                 -- adds the message to stack
5774                 IF(l_debug_mode='Y') THEN
5775                       pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
5776                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5777                 END IF;
5778                 RAISE  FND_API.G_EXC_ERROR;
5779           END IF;
5780 
5781           --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of inserting
5782           --budget lines data in all relevant tables.
5783           PA_FIN_PLAN_PVT.add_fin_plan_lines
5784                ( p_calling_context      => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
5785                 ,p_fin_plan_version_id  => l_budget_version_id
5786                 ,p_finplan_lines_tab    => l_finplan_lines_tab
5787                 ,x_return_status        => p_return_status
5788                 ,x_msg_count            => p_msg_count
5789                 ,x_msg_data             => p_msg_data );
5790 
5791           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5792           THEN
5793                IF(l_debug_mode='Y') THEN
5794                     pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
5795                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5796                END IF;
5797                RAISE  FND_API.G_EXC_ERROR;
5798           END IF;
5799 
5800 
5801           --unlock the budget version after inserting the budget line
5802           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5803                                      (p_budget_version_id => l_budget_version_id);
5804 
5805           PA_FIN_PLAN_PVT.lock_unlock_version
5806           ( p_budget_version_id       => l_budget_version_id
5807            ,p_record_version_number   => l_record_version_number
5808            ,p_action                  => 'U'
5809            ,p_user_id                 => FND_GLOBAL.User_id
5810            ,p_person_id               => null
5811            ,x_return_status           => p_return_status
5812            ,x_msg_count               => p_msg_count
5813            ,x_msg_data                => p_msg_data);
5814 
5815           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
5816                 -- Error message is not added here as the api lock_unlock_version
5817                 -- adds the message to stack
5818                 IF(l_debug_mode='Y') THEN
5819                       pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
5820                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5821                 END IF;
5822                 RAISE  FND_API.G_EXC_ERROR;
5823           END IF;
5824 
5825 
5826      END IF; --end of code to insert budget line
5827 
5828 
5829      IF FND_API.to_boolean( p_commit )
5830      THEN
5831           COMMIT;
5832      END IF;
5833 
5834      IF(l_debug_mode='Y') THEN
5835            pa_debug.g_err_stage := 'Exiting ' || l_api_name;
5836            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5837      END IF;
5838 
5839      IF ( l_debug_mode = 'Y' ) THEN
5840            pa_debug.reset_curr_function;
5841      END IF;
5842 
5843 EXCEPTION
5844 
5845      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
5846      THEN
5847 
5848      ROLLBACK TO add_budget_line_pub;
5849 
5850      p_return_status := FND_API.G_RET_STS_ERROR;
5851      l_msg_count := FND_MSG_PUB.count_msg;
5852 
5853      IF l_msg_count = 1 and p_msg_data IS NULL THEN
5854            PA_INTERFACE_UTILS_PUB.get_messages
5855            (p_encoded        => FND_API.G_TRUE
5856            ,p_msg_index      => 1
5857            ,p_msg_count      => l_msg_count
5858            ,p_msg_data       => l_msg_data
5859            ,p_data           => l_data
5860            ,p_msg_index_out  => l_msg_index_out);
5861            p_msg_data  := l_data;
5862            p_msg_count := l_msg_count;
5863      ELSE
5864            p_msg_count := l_msg_count;
5865      END IF;
5866 
5867      IF ( l_debug_mode = 'Y' ) THEN
5868            pa_debug.reset_curr_function;
5869      END IF;
5870 
5871      RETURN;
5872 
5873 
5874      WHEN FND_API.G_EXC_ERROR
5875      THEN
5876 
5877      ROLLBACK TO add_budget_line_pub;
5878 
5879      p_return_status := FND_API.G_RET_STS_ERROR;
5880 
5881      FND_MSG_PUB.count_and_get
5882      (   p_count     =>  p_msg_count ,
5883          p_data      =>  p_msg_data  );
5884 
5885      IF ( l_debug_mode = 'Y' ) THEN
5886            pa_debug.reset_curr_function;
5887      END IF;
5888 
5889 
5890      WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5891      THEN
5892 
5893      ROLLBACK TO add_budget_line_pub;
5894 
5895      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5896 
5897      FND_MSG_PUB.count_and_get
5898      (   p_count     =>  p_msg_count ,
5899          p_data      =>  p_msg_data  );
5900 
5901      IF ( l_debug_mode = 'Y' ) THEN
5902            pa_debug.reset_curr_function;
5903      END IF;
5904 
5905 
5906      WHEN ROW_ALREADY_LOCKED
5907      THEN
5908 
5909      ROLLBACK TO add_budget_line_pub;
5910 
5911      p_return_status := FND_API.G_RET_STS_ERROR;
5912 
5913      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5914      THEN
5915            FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
5916            FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
5917            FND_MESSAGE.set_token('TASK', l_amg_task_number);
5918            FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
5919            FND_MESSAGE.set_token('SOURCE_NAME', '');
5920            FND_MESSAGE.set_token('START_DATE', '');
5921            FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
5922            FND_MSG_PUB.add;
5923      END IF;
5924 
5925      FND_MSG_PUB.count_and_get
5926      (   p_count     =>  p_msg_count ,
5927          p_data      =>  p_msg_data  );
5928 
5929      IF ( l_debug_mode = 'Y' ) THEN
5930            pa_debug.reset_curr_function;
5931      END IF;
5932 
5933 
5934      WHEN OTHERS
5935      THEN
5936 
5937      ROLLBACK TO add_budget_line_pub;
5938 
5939      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5940 
5941      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5942      THEN
5943         FND_MSG_PUB.add_exc_msg
5944         (  p_pkg_name       => G_PKG_NAME
5945         ,  p_procedure_name => l_api_name );
5946      END IF;
5947 
5948      FND_MSG_PUB.count_and_get
5949      (   p_count     =>  p_msg_count ,
5950          p_data      =>  p_msg_data  );
5951 
5952      IF ( l_debug_mode = 'Y' ) THEN
5953            pa_debug.reset_curr_function;
5954      END IF;
5955 
5956 END Add_Budget_Line;
5957 
5958 
5959 ----------------------------------------------------------------------------------------
5960 --Name:               delete_draft_budget
5961 --Type:               Procedure
5962 --Description:        This procedure can be used to delete a draft budget
5963 --
5964 --
5965 --Called subprograms:
5966 --
5967 --
5968 --
5969 --History:
5970 --    07-OCT-1996        L. de Werker    Created
5971 --    07-DEC-1996        L. de Werker    Added locking mechanism
5972 --    19-MAR-2003        Srikanth        Made Changes to make this api work for Fin Plan Model
5973 --    11-APR-2005        Rishukla        Bug 4224464: FP M Changes for delete_draft_budget
5974 
5975 PROCEDURE delete_draft_budget
5976 ( p_api_version_number          IN  NUMBER
5977  ,p_commit                      IN  VARCHAR2    := FND_API.G_FALSE
5978  ,p_init_msg_list               IN  VARCHAR2    := FND_API.G_FALSE
5979  ,p_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5980  ,p_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5981  ,p_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5982  ,p_pm_product_code             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5983  ,p_pa_project_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5984  ,p_pm_project_reference        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5985  ,p_budget_type_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5986 
5987  -- Parameters required for Fin Plan Model
5988  ,p_fin_plan_type_name          IN  pa_fin_plan_types_vl.name%TYPE
5989  ,p_fin_plan_type_id            IN  pa_fin_plan_types_b.fin_plan_type_id%TYPE
5990  ,p_version_number              IN  pa_budget_versions.version_number%TYPE
5991  ,p_version_type                IN  pa_budget_versions.version_type%TYPE
5992  )
5993 
5994 IS
5995 
5996       CURSOR l_budget_version_csr
5997       ( p_project_id NUMBER
5998       , p_budget_type_code VARCHAR2  )
5999       IS
6000       SELECT budget_version_id
6001       FROM pa_budget_versions
6002       WHERE project_id = p_project_id
6003       AND   budget_type_code = p_budget_type_code
6004       AND   budget_status_code = 'W'
6005       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
6006 
6007 
6008       CURSOR l_budget_type_csr
6009       ( p_budget_type_code VARCHAR2 )
6010       IS
6011       SELECT 1
6012       FROM   pa_budget_types
6013       WHERE  budget_type_code = p_budget_type_code;
6014 
6015       --Bug 4224464: Following cursor has been added as part of
6016       --FP M Changes for delete_draft_budget
6017       --This cursor is used to check if a fin_plan_type_id is
6018       --used to store workplan data
6019       CURSOR l_use_for_wp_csr
6020       ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
6021       IS
6022       SELECT 1
6023       FROM pa_fin_plan_types_b
6024       WHERE fin_plan_type_id = p_fin_plan_type_id
6025       AND   use_for_workplan_flag = 'Y';
6026 
6027 
6028       CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
6029       IS
6030       SELECT 'x'
6031       FROM   pa_budget_versions bv
6032       ,      pa_resource_assignments ra
6033       ,      pa_budget_lines bl
6034       WHERE  bv.budget_version_id = p_budget_version_id
6035       AND    bv.budget_version_id = ra.budget_version_id (+)
6036       AND    ra.resource_assignment_id = bl.resource_assignment_id (+)
6037       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
6038 
6039       FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
6040 
6041       l_api_name               CONSTANT    VARCHAR2(30)        := 'delete_draft_budget';
6042 
6043       i                                NUMBER;
6044       l_return_status                  VARCHAR2(1);
6045       l_err_code                       NUMBER;
6046       l_err_stage                      VARCHAR2(120);
6047       l_err_stack                      VARCHAR2(630);
6048       l_dummy                          NUMBER :=0;
6049       l_budget_version_id              NUMBER;
6050       l_ci_id                          pa_budget_versions.ci_id%TYPE;
6051       l_project_id                     NUMBER;
6052       l_budget_type_code               VARCHAR2(30);
6053       l_msg_count                      NUMBER ;
6054       l_msg_data                       VARCHAR2(2000);
6055       l_function_allowed               VARCHAR2(1);
6056       l_resp_id                        NUMBER := 0;
6057       l_user_id                        NUMBER := 0;
6058       l_module_name                    VARCHAR2(80) := g_module_name ||'.DELETE_DRAFT_BUDGET';
6059       l_fp_options_id                  NUMBER;
6060 
6061       --needed to get the field values associated to a AMG message
6062 
6063       CURSOR   l_amg_project_csr
6064       (p_pa_project_id pa_projects.project_id%type)
6065       IS
6066       SELECT   segment1
6067       FROM     pa_projects p
6068       WHERE p.project_id = p_pa_project_id;
6069 
6070       l_amg_segment1       VARCHAR2(25);
6071 
6072       --Included the following variables as part of Changes due to Fin Plan Model
6073       l_any_error_occurred_flag        VARCHAR2(1):='N';
6074       l_baseline_funding_flag          VARCHAR2(1):='N';
6075       l_data                           VARCHAR2(2000);
6076       l_msg_index_out                  NUMBER;
6077       l_debug_mode                     VARCHAR2(1);
6078 
6079       l_debug_level3                   CONSTANT NUMBER := 3;
6080       l_debug_level5                   CONSTANT NUMBER := 5;
6081       l_security_ret_code              VARCHAR2(1);
6082       l_fin_plan_type_id               NUMBER;
6083       l_version_type                   pa_budget_versions.version_type%TYPE;
6084       l_proj_fp_options_id             NUMBER;
6085       l_result                         VARCHAR2(1);
6086       l_record_version_number          pa_budget_versions.record_version_number%TYPE;
6087       l_fin_plan_type_name             pa_fin_plan_types_tl.name%TYPE;
6088 --Added by Xin Liu. 28-APR-03
6089       ll_fin_plan_type_id               pa_proj_fp_options.fin_plan_type_id%TYPE;
6090       ll_fin_plan_type_name             pa_fin_plan_types_tl.name%TYPE;
6091       ll_version_type                   pa_budget_versions.version_type%TYPE;
6092       ll_version_number                 pa_budget_versions.version_number%TYPE;
6093 
6094 BEGIN
6095 
6096       --  Standard begin of API savepoint
6097 
6098       SAVEPOINT delete_draft_budget_pub;
6099 
6100       --  Standard call to check for call compatibility.
6101 
6102       IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
6103                                          p_api_version_number   ,
6104                                          l_api_name             ,
6105                                          G_PKG_NAME             )
6106       THEN
6107 
6108             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6109 
6110       END IF;
6111 
6112       p_msg_count := 0;
6113       p_return_status := FND_API.G_RET_STS_SUCCESS;
6114       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6115 
6116       IF ( l_debug_mode = 'Y' )
6117       THEN
6118             pa_debug.set_curr_function( p_function   => 'delete_draft_budget',
6119                                         p_debug_mode => l_debug_mode );
6120       END IF;
6121 
6122       --  Initialize the message table if requested.
6123 
6124       IF FND_API.TO_BOOLEAN( p_init_msg_list )
6125       THEN
6126 
6127             FND_MSG_PUB.initialize;
6128 
6129       END IF;
6130       -- This api will initialize the data that will be used by the map_new_amg_msg.
6131       l_resp_id := FND_GLOBAL.Resp_id;
6132       l_user_id := FND_GLOBAL.User_id;
6133 
6134        -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
6135        -- 28-APR-03
6136       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6137                         ll_fin_plan_type_id := NULL;
6138       ELSE
6139                         ll_fin_plan_type_id := p_fin_plan_type_id;
6140       END IF;
6141 
6142       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6143                         ll_fin_plan_type_name := NULL;
6144       ELSE
6145                         ll_fin_plan_type_name := p_fin_plan_type_name;
6146       END IF;
6147 
6148       IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6149                         ll_version_number := NULL;
6150       ELSE
6151                         ll_version_number := p_version_number;
6152       END IF;
6153 
6154 
6155       -- Changes done.
6156 
6157 
6158       -- Both Budget Type Code and Fin Plan Type Id should not be null
6159       -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6160       IF ((p_budget_type_code IS NULL  OR
6161            p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )  AND
6162           (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
6163           (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
6164 
6165             PA_UTILS.ADD_MESSAGE
6166                   (p_app_short_name => 'PA',
6167                   p_msg_name        => 'PA_BUDGET_FP_BOTH_MISSING');
6168 
6169             IF l_debug_mode = 'Y' THEN
6170                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
6171                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6172             END IF;
6173 
6174             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6175 
6176       END IF;
6177 
6178       -- Both Budget Type Code and Fin Plan Type Id should not be not null
6179       -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6180       IF ((p_budget_type_code IS NOT NULL AND
6181           p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  AND
6182         ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
6183          (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
6184 
6185             PA_UTILS.ADD_MESSAGE
6186                   (p_app_short_name => 'PA',
6187                   p_msg_name        => 'PA_BUDGET_FP_BOTH_NOT_NULL');
6188 
6189             IF l_debug_mode = 'Y' THEN
6190                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
6191                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6192             END IF;
6193 
6194             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6195 
6196       END IF;
6197 
6198 
6199 --  product_code is mandatory
6200 
6201       IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6202       OR p_pm_product_code IS NULL
6203       THEN
6204             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6205             THEN
6206                   pa_interface_utils_pub.map_new_amg_msg
6207                   ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
6208                    ,p_msg_attribute    => 'CHANGE'
6209                    ,p_resize_flag      => 'N'
6210                    ,p_msg_context      => 'GENERAL'
6211                    ,p_attribute1       => ''
6212                    ,p_attribute2       => ''
6213                    ,p_attribute3       => ''
6214                    ,p_attribute4       => ''
6215                    ,p_attribute5       => '');
6216             END IF;
6217             IF l_debug_mode = 'Y' THEN
6218                   pa_debug.g_err_stage := 'Product code is missing' ;
6219                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6220             END IF;
6221 
6222              -- RAISE FND_API.G_EXC_ERROR;
6223              l_any_error_occurred_flag:='Y' ;
6224       END IF;
6225 
6226       l_pm_product_code :='Z';
6227       /*added for bug no :2413400*/
6228       OPEN p_product_code_csr (p_pm_product_code);
6229       FETCH p_product_code_csr INTO l_pm_product_code;
6230       CLOSE p_product_code_csr;
6231       IF l_pm_product_code <> 'X'
6232       THEN
6233 
6234             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6235             THEN
6236                   pa_interface_utils_pub.map_new_amg_msg
6237                   ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
6238                   ,p_msg_attribute    => 'CHANGE'
6239                   ,p_resize_flag      => 'N'
6240                   ,p_msg_context      => 'GENERAL'
6241                   ,p_attribute1       => ''
6242                   ,p_attribute2       => ''
6243                   ,p_attribute3       => ''
6244                   ,p_attribute4       => ''
6245                   ,p_attribute5       => '');
6246             END IF;
6247             p_return_status             := FND_API.G_RET_STS_ERROR;
6248             --RAISE FND_API.G_EXC_ERROR;
6249             l_any_error_occurred_flag:='Y';
6250             IF l_debug_mode = 'Y' THEN
6251                   pa_debug.g_err_stage := 'Product code is invalid' ;
6252                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6253             END IF;
6254 
6255       END IF;
6256 
6257 
6258       -- convert pm_project_reference to id
6259 
6260       Pa_project_pvt.Convert_pm_projref_to_id (
6261          p_pm_project_reference  => p_pm_project_reference,
6262          p_pa_project_id         => p_pa_project_id,
6263          p_out_project_id        => l_project_id,
6264          p_return_status         => l_return_status );
6265 
6266 
6267       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
6268       THEN
6269             IF l_debug_mode = 'Y' THEN
6270                   pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
6271                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6272             END IF;
6273 
6274             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6275 
6276       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6277       THEN
6278             IF l_debug_mode = 'Y' THEN
6279                   pa_debug.g_err_stage := 'Error while getting project id' ;
6280                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6281             END IF;
6282 
6283             RAISE  FND_API.G_EXC_ERROR;
6284 
6285       END IF;
6286 
6287       -- Get segment1 for AMG messages
6288 
6289       OPEN l_amg_project_csr( l_project_id );
6290       FETCH l_amg_project_csr INTO l_amg_segment1;
6291       CLOSE l_amg_project_csr;
6292 
6293      --Do the processing required for budget model
6294      IF  (p_budget_type_code IS NOT NULL AND
6295           p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  THEN
6296 
6297             --Check for the security
6298             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6299                                                p_api_version_number => p_api_version_number
6300                                               ,p_project_id         => l_project_id
6301                                               ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
6302                                               ,p_function_name      => 'PA_PM_DELETE_DRAFT_BUDGET'
6303                                               ,p_version_type       => null
6304                                               ,x_return_status      => p_return_status
6305                                               ,x_ret_code           => l_security_ret_code );
6306 
6307             -- the above API adds the error message to stack. Hence the message is not added here.
6308             -- Also, as security check is important further validations are not done in case this
6309             -- validation fails.
6310             IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR
6311                 l_security_ret_code = 'N') THEN
6312                    -- dbms_output.put_line('Security api failed l_security_ret_code '||l_security_ret_code);
6313                   IF l_debug_mode = 'Y' THEN
6314                         pa_debug.g_err_stage:= 'Security API Failed';
6315                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6316                   END IF;
6317 
6318                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6319             END IF;
6320 
6321             OPEN l_budget_type_csr( p_budget_type_code );
6322 
6323             FETCH l_budget_type_csr INTO l_dummy;
6324 
6325             IF l_budget_type_csr%NOTFOUND
6326             THEN
6327                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6328                   THEN
6329                         pa_interface_utils_pub.map_new_amg_msg
6330                         (p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
6331                         ,p_msg_attribute    => 'CHANGE'
6332                         ,p_resize_flag      => 'N'
6333                         ,p_msg_context      => 'BUDG'
6334                         ,p_attribute1       => l_amg_segment1
6335                         ,p_attribute2       => ''
6336                         ,p_attribute3       => p_budget_type_code
6337                         ,p_attribute4       => ''
6338                         ,p_attribute5       => '');
6339                   END IF;
6340                   IF l_debug_mode = 'Y' THEN
6341                         pa_debug.g_err_stage := 'Budget Type is invalid' ;
6342                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6343                   END IF;
6344 
6345 
6346                   CLOSE l_budget_type_csr;
6347                   RAISE FND_API.G_EXC_ERROR;
6348 
6349             END IF;
6350 
6351             CLOSE l_budget_type_csr;
6352 
6353             --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
6354             IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
6355                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6356                   THEN
6357                         PA_UTILS.add_message
6358                         (p_app_short_name => 'PA',
6359                          p_msg_name       => 'PA_FP_CANT_EDIT_FCST_BUD_TYPE');
6360                   END IF;
6361                   IF l_debug_mode = 'Y' THEN
6362                         pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
6363                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6364                   END IF;
6365                   l_any_error_occurred_flag := 'Y';
6366             END IF;
6367 
6368             -- get the corresponding budget_version_id
6369             -- we do not verify p_version_number here because
6370             -- as per FD, this parameter should be ignored for
6371             -- FORMS budget model.
6372             OPEN l_budget_version_csr
6373               (p_project_id       => l_project_id
6374               ,p_budget_type_code => p_budget_type_code );
6375 
6376             FETCH l_budget_version_csr INTO l_budget_version_id;
6377 
6378             IF l_budget_version_csr%NOTFOUND
6379             THEN
6380                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6381                   THEN
6382                         pa_interface_utils_pub.map_new_amg_msg
6383                         ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
6384                         ,p_msg_attribute    => 'CHANGE'
6385                         ,p_resize_flag      => 'N'
6386                         ,p_msg_context      => 'BUDG'
6387                         ,p_attribute1       => l_amg_segment1
6388                         ,p_attribute2       => ''
6389                         ,p_attribute3       => p_budget_type_code
6390                         ,p_attribute4       => ''
6391                         ,p_attribute5       => '');
6392                   END IF;
6393                   IF l_debug_mode = 'Y' THEN
6394                         pa_debug.g_err_stage := 'Budget version does not exist' ;
6395                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6396                   END IF;
6397 
6398 
6399                   CLOSE l_budget_version_csr;
6400                   RAISE FND_API.G_EXC_ERROR;
6401 
6402             END IF;
6403 
6404             CLOSE l_budget_version_csr;
6405 
6406 
6407             --Check if budgetary control is enabled for this project and budget version
6408             --If a record is present for this budget version in PA_BC_BALANCES table
6409             --then we do not proceed with delete.
6410             IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_id) )
6411             THEN
6412                   IF(l_debug_mode='Y') THEN
6413                         pa_debug.g_err_stage := 'Cannnot delete budget version - '
6414                                              || 'budgetary control is enabled';
6415                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6416                   END IF;
6417 
6418                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6419                   THEN
6420                         PA_UTILS.ADD_MESSAGE(
6421                                  p_app_short_name  => 'PA'
6422                                 ,p_msg_name        => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
6423                                 ,p_token1          => 'PROJECT'
6424                                 ,p_value1          => l_amg_segment1
6425                                 ,p_token2          => 'BUDGET_TYPE'
6426                                 ,p_value2          => p_budget_type_code
6427                                 ,p_token3          => 'BUDGET_VERSION_ID'
6428                                 ,p_value3          => l_budget_version_id);
6429                   END IF;
6430 
6431                   RAISE FND_API.G_EXC_ERROR;
6432 
6433             END IF;--budgetary control enabled check
6434 
6435 
6436             OPEN l_lock_budget_csr( l_budget_version_id );
6437 
6438             --Stop Further processing if any errors are reported
6439             IF(l_any_error_occurred_flag='Y') THEN
6440                   IF(l_debug_mode='Y') THEN
6441                         pa_debug.g_err_stage := 'About to display all the messages';
6442                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6443                   END IF;
6444                   p_return_status := FND_API.G_RET_STS_ERROR;
6445                   l_any_error_occurred_flag := 'Y';
6446                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6447             END IF;
6448 
6449             PA_BUDGET_UTILS.delete_draft( x_budget_version_id   => l_budget_version_id
6450                                          ,x_err_code            => l_err_code
6451                                          ,x_err_stage           => l_err_stage
6452                                          ,x_err_stack           => l_err_stack  );
6453 
6454             IF l_err_code > 0
6455             THEN
6456 
6457                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6458                   THEN
6459 
6460                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
6461                         THEN
6462                               IF(l_debug_mode='Y') THEN
6463                                     pa_debug.g_err_stage := 'Delete draft falied';
6464                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6465                               END IF;
6466                               pa_interface_utils_pub.map_new_amg_msg
6467                               ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
6468                               ,p_msg_attribute    => 'CHANGE'
6469                               ,p_resize_flag      => 'N'
6470                               ,p_msg_context      => 'BUDG'
6471                               ,p_attribute1       => l_amg_segment1
6472                               ,p_attribute2       => ''
6473                               ,p_attribute3       => p_budget_type_code
6474                               ,p_attribute4       => ''
6475                               ,p_attribute5       => '');
6476                         ELSE
6477                               IF(l_debug_mode='Y') THEN
6478                                     pa_debug.g_err_stage := 'Error in Delete draft';
6479                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6480                               END IF;
6481 
6482                               pa_interface_utils_pub.map_new_amg_msg
6483                               ( p_old_message_code => l_err_stage
6484                               ,p_msg_attribute    => 'CHANGE'
6485                               ,p_resize_flag      => 'N'
6486                               ,p_msg_context      => 'BUDG'
6487                               ,p_attribute1       => l_amg_segment1
6488                               ,p_attribute2       => ''
6489                               ,p_attribute3       => p_budget_type_code
6490                               ,p_attribute4       => ''
6491                               ,p_attribute5       => '');
6492                               END IF;
6493 
6494                         END IF;
6495 
6496                   RAISE FND_API.G_EXC_ERROR;
6497 
6498             ELSIF l_err_code < 0
6499             THEN
6500 
6501 
6502                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6503                   THEN
6504                         IF(l_debug_mode='Y') THEN
6505                               pa_debug.g_err_stage := 'Unexpected Error in Delete draft';
6506                               pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6507                         END IF;
6508 
6509                         FND_MSG_PUB.add_exc_msg
6510                         (  p_pkg_name       => 'PA_BUDGET_UTILS'
6511                         ,  p_procedure_name => 'DELETE_DRAFT'
6512                         ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
6513 
6514                   END IF;
6515 
6516                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6517 
6518             END IF;
6519 
6520             CLOSE l_lock_budget_csr; --FYI, does not release locks
6521 
6522 
6523       ELSE -- Fin Plan Model
6524 
6525 
6526             -- validate the plan type passed
6527             PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
6528                                            ( p_fin_plan_type_id    => ll_fin_plan_type_id
6529                                             ,p_fin_plan_type_name  => ll_fin_plan_type_name
6530                                             ,x_fin_plan_type_id    => l_fin_plan_type_id
6531                                             ,x_return_status       => p_return_status
6532                                             ,x_msg_count           => p_msg_count
6533                                             ,x_msg_data            => p_msg_data);
6534             -- Throw the error if the above API is not successfully executed
6535             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6536 
6537                   IF l_debug_mode = 'Y' THEN
6538                         pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
6539                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6540                   END IF;
6541 
6542                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6543 
6544             END IF;
6545 
6546             --Bug 4224464: Following validation has been added as part of
6547             --FP M Changes for delete_draft_budget
6548             --check if the fin_plan_type_id is used to store workplan data
6549             --first reset the value of l_dummy
6550             l_dummy := 0;
6551             OPEN l_use_for_wp_csr( l_fin_plan_type_id );
6552             FETCH l_use_for_wp_csr INTO l_dummy;
6553             CLOSE l_use_for_wp_csr;
6554 
6555             IF l_dummy = 1
6556             THEN
6557                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6558                   THEN
6559                         PA_UTILS.add_message
6560                         (p_app_short_name => 'PA',
6561                          p_msg_name       => 'PA_FP_CANT_DEL_WP_DATA');
6562                   END IF;
6563                   IF l_debug_mode = 'Y' THEN
6564                         pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
6565                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6566                   END IF;
6567 
6568                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6569 
6570             END IF;
6571 
6572             --Validate / get the version type
6573             --Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR.  24-APR-03
6574             IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6575                  l_version_type := NULL;
6576             ELSE
6577                  l_version_type := p_version_type;
6578             END IF;
6579             --Changes Done.
6580 
6581             pa_fin_plan_utils.get_version_type
6582                  ( p_project_id        => l_project_id
6583                   ,p_fin_plan_type_id  => l_fin_plan_type_id
6584                   ,px_version_type     => l_version_type
6585                   ,x_return_status     => p_return_status
6586                   ,x_msg_count         => p_msg_count
6587                   ,x_msg_data          => p_msg_data);
6588 
6589             IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
6590 
6591                   IF l_debug_mode = 'Y' THEN
6592                         pa_debug.g_err_stage := 'Failed in get_Version_type' ;
6593                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6594                   END IF;
6595                                -- dbms_output.put_line('Exc in getting ver type');
6596 
6597                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6598 
6599             END IF;
6600 
6601             --Check for the security
6602             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6603                                                p_api_version_number => p_api_version_number
6604                                               ,p_project_id         => l_project_id
6605                                               ,p_fin_plan_type_id   => l_fin_plan_type_id /* Bug 3139924 */
6606                                               ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
6607                                               ,p_function_name      => 'PA_PM_DELETE_DRAFT_BUDGET'
6608                                               ,p_version_type       => l_version_type
6609                                               ,x_return_status      => p_return_status
6610                                               ,x_ret_code           => l_security_ret_code );
6611 
6612             IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
6613                 l_security_ret_code='N') THEN
6614                  -- dbms_output.put_line('Exc in security');
6615                   IF l_debug_mode = 'Y' THEN
6616                         pa_debug.g_err_stage := 'Security API failed' ;
6617                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6618                   END IF;
6619                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6620             END IF;
6621 
6622             --Bug 4224464: Following validation has been added as part of
6623             --FP M Changes for delete_draft_budget.
6624             --If version number is null, then current working version should be
6625             --deleted. If current working version doesn't exist then error
6626             --message is thrown
6627             IF ll_version_number IS NULL THEN
6628 
6629                   PA_FIN_PLAN_UTILS.get_curr_working_version_info
6630                   ( p_project_id          => l_project_id
6631                    ,p_fin_plan_type_id    => l_fin_plan_type_id
6632                    ,p_version_type        => l_version_type
6633                    ,x_fp_options_id       => l_fp_options_id
6634                    ,x_fin_plan_version_id => l_budget_version_id
6635                    ,x_return_status       => p_return_status
6636                    ,x_msg_count           => p_msg_count
6637                    ,x_msg_data            => p_msg_data );
6638 
6639             ELSE --version_number not NULL
6640             --Derive the version Id depending on the parameters passed as input.
6641 
6642                   PA_FIN_PLAN_UTILS.get_version_id
6643                   (  p_project_id        => l_project_id
6644                     ,p_fin_plan_type_id  => l_fin_plan_type_id
6645                     ,p_version_type      => l_version_type
6646                     ,p_version_number    => ll_version_number
6647                     ,x_budget_version_id => l_budget_version_id
6648                     ,x_ci_id             => l_ci_id  -- 2863564
6649                     ,x_return_status     => p_return_status
6650                     ,x_msg_count         => p_msg_count
6651                     ,x_msg_data          => p_msg_data );
6652 
6653                   -- If the budget version is a control item version throw error
6654                   IF l_ci_id IS NOT NULL THEN
6655                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6656                               PA_UTILS.ADD_MESSAGE(
6657                               p_app_short_name  => 'PA'
6658                              ,p_msg_name        => 'PA_FP_CI_VERSION_NON_EDITABLE'
6659                              ,p_token1          => 'BUDGET_VERSION_ID'
6660                              ,p_value1          => l_budget_version_id);
6661                         END IF;
6662                         IF l_debug_mode = 'Y' THEN
6663                               pa_debug.g_err_stage := 'i/p version is ci version' ;
6664                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6665                         END IF;
6666                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6667                   END IF;
6668 
6669             END IF; --version_number IS NULL
6670 
6671             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6672                   IF l_debug_mode = 'Y' THEN
6673                         pa_debug.g_err_stage := 'get Version Id Failed ' ;
6674                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6675                   END IF;
6676 
6677                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6678             END IF;
6679 
6680             IF l_budget_version_id IS NULL THEN
6681 
6682                   --Get the plan type name
6683                   SELECT  name
6684                   INTO    l_fin_plan_type_name
6685                   FROM    pa_fin_plan_types_vl
6686                   WHERE   fin_plan_type_id = l_fin_plan_type_id;
6687 
6688                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6689                   THEN
6690                         PA_UTILS.add_message
6691                         (p_app_short_name => 'PA'
6692                         ,p_msg_name       => 'PA_FP_NO_WORKING_VERSION'
6693                         ,p_token1         => 'PROJECT'
6694                         ,p_value1         => l_amg_segment1
6695                         ,p_token2         => 'PLAN_TYPE'
6696                         ,p_value2         => l_fin_plan_type_name
6697                         ,p_token3         => 'VERSION_NUMBER'
6698                         ,p_value3         => ll_version_number );
6699                   END IF;
6700 
6701                   IF l_debug_mode = 'Y' THEN
6702                        pa_debug.g_err_stage := 'Working Budget Version does not exist' ;
6703                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6704                   END IF;
6705                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6706 
6707             END IF;
6708 
6709             --Bug 4224464: Following validation has been added as part of
6710             --FP M Changes for delete_draft_budget. If the budget version
6711             --belongs to an org forecast project then throw an error
6712             IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
6713             THEN
6714                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6715                   THEN
6716                         PA_UTILS.add_message
6717                         (p_app_short_name => 'PA',
6718                          p_msg_name       => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
6719                   END IF;
6720                   IF l_debug_mode = 'Y' THEN
6721                         pa_debug.g_err_stage := 'Cannot delete draft budgets attached' ||
6722                                                 'to an organisation forecasting project';
6723                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6724                   END IF;
6725 
6726                   p_return_status    := FND_API.G_RET_STS_ERROR;
6727                   l_any_error_occurred_flag:='Y' ;
6728             END IF; --org_forecast = 'Y'
6729 
6730             --Lock the version before deleting it
6731             l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6732                                        (p_budget_version_id => l_budget_version_id);
6733             pa_fin_plan_pvt.lock_unlock_version
6734             ( p_budget_version_id       => l_budget_version_id
6735              ,p_record_version_number   => l_record_version_number
6736              ,p_action                  => 'L'
6737              ,p_user_id                 => l_user_id
6738              ,p_person_id               => null
6739              ,x_return_status           => p_return_status
6740              ,x_msg_count               => p_msg_count
6741              ,x_msg_data                => p_msg_data);
6742 
6743              IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
6744                   -- Error message is not added here as the api lock_unlock_version
6745                   -- adds the message to stack
6746                   IF(l_debug_mode='Y') THEN
6747                         pa_debug.g_err_stage := 'Failed in locking the version';
6748                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6749                   END IF;
6750                   l_any_error_occurred_flag:='Y';
6751             END IF;
6752 
6753             --Stop Further processing if any errors are reported
6754             IF(l_any_error_occurred_flag='Y') THEN
6755                   IF(l_debug_mode='Y') THEN
6756                         pa_debug.g_err_stage := 'About to display all the messages';
6757                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6758                   END IF;
6759                   p_return_status := FND_API.G_RET_STS_ERROR;
6760                   l_any_error_occurred_flag := 'Y';
6761                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6762             END IF;
6763 
6764             --Delete the version
6765             l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6766                                        (p_budget_version_id => l_budget_version_id);
6767             PA_FIN_PLAN_PUB.Delete_Version
6768             ( p_project_id               => l_project_id
6769              ,p_budget_version_id        => l_budget_version_id
6770              ,p_record_version_number    => l_record_version_number
6771              ,x_return_status            => p_return_status
6772              ,x_msg_count                => p_msg_count
6773              ,x_msg_data                 => p_msg_data );
6774 
6775              IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6776 
6777                   IF(l_debug_mode='Y') THEN
6778                         pa_debug.g_err_stage := 'Failed in deleting the version';
6779                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6780                   END IF;
6781                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6782             END IF;
6783 
6784             --Bug 4224464: Following DMLs have been added as part of
6785             --FP M Changes for delete_draft_budget
6786             --If the budget version being deleted is a generation source
6787             --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
6788             --pa_proj_fp_options table and increase the record_version_no
6789             IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
6790             THEN
6791                   UPDATE pa_proj_fp_options
6792                   SET    gen_src_cost_plan_version_id = NULL,
6793                          record_version_number = record_version_number + 1,
6794                          last_update_date = SYSDATE,
6795                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6796                          last_update_login = FND_GLOBAL.LOGIN_ID
6797                   WHERE  project_id = l_project_id
6798                   AND    gen_src_cost_plan_version_id = l_budget_version_id;
6799             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
6800             THEN
6801                   UPDATE pa_proj_fp_options
6802                   SET    gen_src_rev_plan_version_id = NULL,
6803                          record_version_number = record_version_number + 1,
6804                          last_update_date = SYSDATE,
6805                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6806                          last_update_login = FND_GLOBAL.LOGIN_ID
6807                   WHERE  project_id = l_project_id
6808                   AND    gen_src_rev_plan_version_id = l_budget_version_id;
6809             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
6810             THEN
6811                   UPDATE pa_proj_fp_options
6812                   SET    gen_src_all_plan_version_id = NULL,
6813                          record_version_number = record_version_number + 1,
6814                          last_update_date = SYSDATE,
6815                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6816                          last_update_login = FND_GLOBAL.LOGIN_ID
6817                   WHERE  project_id = l_project_id
6818                   AND    gen_src_all_plan_version_id = l_budget_version_id;
6819             END IF;
6820 
6821             --if any record had been updated in pa_proj_fp_options then
6822             --we do a dummy update in pa_budget_versions also for the
6823             --budget version that is being updated to increase the record version number
6824             IF SQL%ROWCOUNT > 0 THEN
6825                   UPDATE pa_budget_versions
6826                   SET record_version_number = record_version_number + 1,
6827                   last_update_date = SYSDATE,
6828                   last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6829                   last_update_login = FND_GLOBAL.LOGIN_ID
6830                   WHERE project_id = l_project_id
6831                   AND   budget_version_id = l_budget_version_id;
6832             END IF;
6833 
6834 
6835       END IF;
6836 
6837 
6838       IF fnd_api.to_boolean(p_commit)
6839       THEN
6840             COMMIT;
6841       END IF;
6842 
6843 
6844       IF(l_debug_mode='Y') THEN
6845             pa_debug.g_err_stage := 'Exiting delete draft budget';
6846             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
6847       END IF;
6848 
6849       IF ( l_debug_mode = 'Y' ) THEN
6850             pa_debug.reset_curr_function;
6851       END IF;
6852 
6853 EXCEPTION
6854       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
6855 
6856             p_return_status := FND_API.G_RET_STS_ERROR;
6857             l_msg_count := FND_MSG_PUB.count_msg;
6858 
6859             IF l_msg_count = 1 and p_msg_data IS NULL THEN
6860                 PA_INTERFACE_UTILS_PUB.get_messages
6861                     (p_encoded        => FND_API.G_TRUE
6862                     ,p_msg_index      => 1
6863                     ,p_msg_count      => l_msg_count
6864                     ,p_msg_data       => l_msg_data
6865                     ,p_data           => l_data
6866                     ,p_msg_index_out  => l_msg_index_out);
6867                 p_msg_data := l_data;
6868                 p_msg_count := l_msg_count;
6869             ELSE
6870                 p_msg_count := l_msg_count;
6871             END IF;
6872             IF ( l_debug_mode = 'Y' ) THEN
6873                   pa_debug.reset_curr_function;
6874             END IF;
6875             RETURN;
6876 
6877     WHEN FND_API.G_EXC_ERROR
6878     THEN
6879 
6880     ROLLBACK TO delete_draft_budget_pub;
6881 
6882     p_return_status := FND_API.G_RET_STS_ERROR;
6883 
6884     FND_MSG_PUB.Count_And_Get
6885     (   p_count     =>  p_msg_count ,
6886         p_data      =>  p_msg_data  );
6887      IF ( l_debug_mode = 'Y' ) THEN
6888           pa_debug.reset_curr_function;
6889      END IF;
6890 
6891     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
6892     THEN
6893 
6894     ROLLBACK TO delete_draft_budget_pub;
6895 
6896     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6897 
6898     FND_MSG_PUB.Count_And_Get
6899     (   p_count     =>  p_msg_count ,
6900         p_data      =>  p_msg_data  );
6901     IF ( l_debug_mode = 'Y' ) THEN
6902           pa_debug.reset_curr_function;
6903      END IF;
6904 
6905     WHEN ROW_ALREADY_LOCKED
6906     THEN
6907     ROLLBACK TO delete_draft_budget_pub;
6908 
6909     p_return_status := FND_API.G_RET_STS_ERROR;
6910 
6911     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6912     THEN
6913       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
6914       FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
6915       FND_MESSAGE.SET_TOKEN('TASK',    '');
6916       FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
6917       FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
6918       FND_MESSAGE.SET_TOKEN('START_DATE', '');
6919       FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
6920       FND_MSG_PUB.ADD;
6921     END IF;
6922 
6923     FND_MSG_PUB.Count_And_Get
6924             (   p_count     =>  p_msg_count ,
6925                 p_data      =>  p_msg_data  );
6926      IF ( l_debug_mode = 'Y' ) THEN
6927           pa_debug.reset_curr_function;
6928      END IF;
6929 
6930     WHEN OTHERS THEN
6931 
6932     ROLLBACK TO delete_draft_budget_pub;
6933 
6934     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6935 
6936     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6937     THEN
6938         FND_MSG_PUB.add_exc_msg
6939             (  p_pkg_name       => G_PKG_NAME
6940             ,  p_procedure_name => l_api_name );
6941 
6942     END IF;
6943 
6944     FND_MSG_PUB.Count_And_Get
6945     (   p_count     =>  p_msg_count ,
6946         p_data      =>  p_msg_data  );
6947      IF ( l_debug_mode = 'Y' ) THEN
6948           pa_debug.reset_curr_function;
6949      END IF;
6950 
6951 END delete_draft_budget;
6952 
6953 
6954 ----------------------------------------------------------------------------------------
6955 --Name:               delete_baseline_budget
6956 --Type:               Procedure
6957 --Description:        This procedure can be used to delete an existing baseline budget
6958 --                    version except the current original and current baseline budget
6959 --                    versions.
6960 --
6961 --Called subprograms:
6962 --    FND_API.compatible_api_call
6963 --    PA_PROJECT_PVT.convert_pm_projref_to_id
6964 --    PA_PM_FUNCTION_SECURITY_PUB.check_budget_security
6965 --    PA_BUDGET_UTILS.delete_draft
6966 --    PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
6967 --    PA_FIN_PLAN_UTILS.get_version_type
6968 --    PA_FIN_PLAN_UTILS.is_orgforecast_plan
6969 --    PA_FIN_PLAN_UTILS.retrieve_record_version_number
6970 --    PA_FIN_PLAN_PVT.lock_unlock_version
6971 --    PA_FIN_PLAN_PUB.delete_version
6972 --
6973 --History:
6974 --    05-APR-2005     Rishukla    Created.
6975 
6976 PROCEDURE delete_baseline_budget
6977 ( p_api_version_number          IN  NUMBER
6978  ,p_commit                      IN  VARCHAR2    := FND_API.G_FALSE
6979  ,p_init_msg_list               IN  VARCHAR2    := FND_API.G_FALSE
6980  ,p_msg_count                   OUT NOCOPY NUMBER
6981  ,p_msg_data                    OUT NOCOPY VARCHAR2
6982  ,p_return_status               OUT NOCOPY VARCHAR2
6983  ,p_pm_product_code             IN  pa_projects_all.pm_product_code%TYPE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6984  ,p_pa_project_id               IN  pa_projects_all.project_id%TYPE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6985  ,p_pm_project_reference        IN  pa_projects_all.pm_project_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6986  ,p_budget_type_code            IN  pa_budget_versions.budget_type_code%TYPE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6987  ,p_fin_plan_type_id            IN  pa_fin_plan_types_b.fin_plan_type_id%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6988  ,p_fin_plan_type_name          IN  pa_fin_plan_types_vl.name%TYPE            :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6989  ,p_version_type                IN  pa_budget_versions.version_type%TYPE      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6990  ,p_version_number              IN  pa_budget_versions.version_number%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6991  )
6992 
6993 IS
6994 
6995       --This cursor is used to check if a valid combination of
6996       --project_id, budget_type_code and version_number has
6997       --been passed to this api for a baseline budget
6998       --version. If yes, then current and current_original
6999       --flags and budget_version_id are retrieved
7000       CURSOR l_budget_version_no_csr
7001       ( p_project_id NUMBER
7002       , p_budget_type_code VARCHAR2
7003       , p_version_number NUMBER )
7004       IS
7005       SELECT budget_version_id
7006             ,current_flag
7007             ,current_original_flag
7008       FROM pa_budget_versions
7009       WHERE project_id = p_project_id
7010       AND   budget_type_code = p_budget_type_code
7011       AND   version_number = p_version_number
7012       AND   budget_status_code = 'B';
7013 
7014       l_budget_version_no_rec   l_budget_version_no_csr%ROWTYPE;
7015 
7016 
7017       --This cursor is used to check if a valid combination of
7018       --project_id, fin_plan_type_id, version_type and version_number
7019       --has been passed to this api for a baseline budget
7020       --version. If yes, then budget_version_id is retrieved
7021       CURSOR l_finplan_version_no_csr
7022       ( p_project_id NUMBER
7023       , p_fin_plan_type_id NUMBER
7024       , p_version_type VARCHAR2
7025       , p_version_number NUMBER )
7026       IS
7027       SELECT budget_version_id
7028       FROM pa_budget_versions
7029       WHERE project_id = p_project_id
7030       AND   fin_plan_type_id = p_fin_plan_type_id
7031       AND   version_type = p_version_type
7032       AND   version_number = p_version_number
7033       AND   ci_id IS NULL --Added for better readability (Venketesh's suggestion)
7034       AND   budget_status_code = 'B';
7035 
7036       --This cursor is used to verify a budget_type_code
7037       CURSOR l_budget_type_csr
7038       ( p_budget_type_code VARCHAR2 )
7039       IS
7040       SELECT 1
7041       FROM   pa_budget_types
7042       WHERE  budget_type_code = p_budget_type_code;
7043 
7044       --This cursor is used to check if a fin_plan_type_id is
7045       --used to store workplan data
7046       CURSOR l_use_for_wp_csr
7047       ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
7048       IS
7049       SELECT 1
7050       FROM pa_fin_plan_types_b
7051       WHERE fin_plan_type_id = p_fin_plan_type_id
7052       AND   use_for_workplan_flag = 'Y';
7053 
7054       --needed to get the field values associated to a AMG message
7055       CURSOR   l_amg_project_csr
7056       (p_pa_project_id pa_projects.project_id%type)
7057       IS
7058       SELECT   segment1
7059       FROM     pa_projects p
7060       WHERE p.project_id = p_pa_project_id;
7061 
7062       l_amg_segment1                   VARCHAR2(25);
7063 
7064       l_api_name              CONSTANT VARCHAR2(30)   := 'DELETE_BASELINE_BUDGET';
7065       l_module_name           CONSTANT VARCHAR2(100)  := g_module_name || '.DELETE_BASELINE_BUDGET';
7066 
7067       l_return_status                  VARCHAR2(1);
7068       l_err_code                       NUMBER;
7069       l_err_stage                      VARCHAR2(120);
7070       l_err_stack                      VARCHAR2(630);
7071       l_dummy                          NUMBER := 0;
7072 
7073       l_msg_count                      NUMBER := 0;
7074       l_msg_data                       VARCHAR2(2000);
7075       l_msg_index_out                  NUMBER;
7076       l_data                           VARCHAR2(2000);
7077 
7078       l_any_error_occurred_flag        VARCHAR2(1):='N';
7079 
7080       l_debug_mode                     VARCHAR2(1);
7081       l_debug_level2          CONSTANT NUMBER := 2;
7082       l_debug_level3          CONSTANT NUMBER := 3;
7083       l_debug_level4          CONSTANT NUMBER := 4;
7084       l_debug_level5          CONSTANT NUMBER := 5;
7085 
7086       l_security_ret_code              VARCHAR2(1);
7087       l_function_name                  VARCHAR2(80);
7088       l_record_version_number          pa_budget_versions.record_version_number%TYPE;
7089 
7090       l_project_id                     NUMBER;
7091       l_budget_type_code               pa_budget_versions.budget_type_code%TYPE;
7092       l_budget_version_id              NUMBER;
7093       l_fin_plan_type_id               NUMBER;
7094       l_fin_plan_type_name             pa_fin_plan_types_vl.name%TYPE;
7095       l_version_type                   pa_budget_versions.version_type%TYPE;
7096       l_version_number                 NUMBER;
7097       l_pm_product_code                pa_projects_all.pm_product_code%TYPE;
7098 
7099 
7100 BEGIN
7101 
7102       --Standard begin of API savepoint
7103 
7104       SAVEPOINT delete_baseline_budget_pub;
7105 
7106       p_msg_count := 0;
7107       p_return_status := FND_API.G_RET_STS_SUCCESS;
7108       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7109 
7110       IF ( l_debug_mode = 'Y' )
7111       THEN
7112             pa_debug.set_curr_function( p_function   => 'delete_baseline_budget',
7113                                         p_debug_mode => l_debug_mode );
7114       END IF;
7115 
7116       IF ( l_debug_mode = 'Y' )
7117       THEN
7118             pa_debug.g_err_stage:='Entering ' || l_api_name;
7119             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7120       END IF;
7121 
7122       --Initialize the message table if requested.
7123 
7124       IF FND_API.to_boolean( p_init_msg_list )
7125       THEN
7126             FND_MSG_PUB.initialize;
7127       END IF;
7128 
7129       --Standard call to check for call compatibility.
7130 
7131       IF NOT FND_API.compatible_api_call ( g_api_version_number   ,
7132                                          p_api_version_number   ,
7133                                          l_api_name             ,
7134                                          G_PKG_NAME             )
7135       THEN
7136             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7137       END IF;
7138 
7139       --Convert following IN parameters from G_PA_MISS_XXX to null
7140 
7141       IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7142             l_project_id := NULL;
7143       ELSE
7144             l_project_id := p_pa_project_id;
7145       END IF;
7146 
7147       IF p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7148             l_budget_type_code := NULL;
7149       ELSE
7150             l_budget_type_code := p_budget_type_code;
7151       END IF;
7152 
7153       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7154             l_fin_plan_type_id := NULL;
7155       ELSE
7156             l_fin_plan_type_id := p_fin_plan_type_id;
7157       END IF;
7158 
7159       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7160             l_fin_plan_type_name := NULL;
7161       ELSE
7162             l_fin_plan_type_name := p_fin_plan_type_name;
7163       END IF;
7164 
7165       IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7166             l_version_type := NULL;
7167       ELSE
7168             l_version_type := p_version_type;
7169       END IF;
7170 
7171       IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7172             l_version_number := NULL;
7173       ELSE
7174             l_version_number := p_version_number;
7175       END IF;
7176 
7177       --Both Budget Type Code and Fin Plan Type Id should not be null simultaneously
7178 
7179       IF (l_budget_type_code IS NULL  AND  l_fin_plan_type_name IS NULL  AND  l_fin_plan_type_id IS NULL)
7180       THEN
7181 
7182             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7183                   PA_UTILS.add_message
7184                   (p_app_short_name => 'PA',
7185                    p_msg_name       => 'PA_BUDGET_FP_BOTH_MISSING');
7186             END IF;
7187 
7188             IF l_debug_mode = 'Y' THEN
7189                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
7190                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7191             END IF;
7192 
7193             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7194 
7195       END IF;
7196 
7197       --Both Budget Type Code and Fin Plan Type Id should not be not null simultaneously
7198 
7199       IF ((l_budget_type_code IS NOT NULL)  AND
7200          (l_fin_plan_type_name IS NOT NULL OR l_fin_plan_type_id IS NOT NULL ))
7201       THEN
7202 
7203             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7204                   PA_UTILS.add_message
7205                   (p_app_short_name => 'PA',
7206                    p_msg_name       => 'PA_BUDGET_FP_BOTH_NOT_NULL');
7207             END IF;
7208 
7209             IF l_debug_mode = 'Y' THEN
7210                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
7211                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7212             END IF;
7213 
7214             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7215 
7216       END IF;
7217 
7218 
7219       --product_code is mandatory
7220       IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7221       OR p_pm_product_code IS NULL
7222       THEN
7223             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7224             --This function checks if the message being written to the message table
7225             --is higher or equal to the message level threshold.
7226             THEN
7227                   PA_UTILS.add_message
7228                   (p_app_short_name => 'PA',
7229                    p_msg_name       => 'PA_PRODUCT_CODE_IS_MISSING_AMG');
7230             END IF;
7231             IF l_debug_mode = 'Y' THEN
7232                   pa_debug.g_err_stage := 'Product code is missing' ;
7233                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7234             END IF;
7235 
7236             p_return_status    := FND_API.G_RET_STS_ERROR;
7237             l_any_error_occurred_flag:='Y' ;
7238 
7239       ELSE --p_pm_product_code is not null
7240 
7241             l_pm_product_code :='Z';
7242             OPEN p_product_code_csr (p_pm_product_code);
7243             FETCH p_product_code_csr INTO l_pm_product_code;
7244             CLOSE p_product_code_csr;
7245 
7246             IF l_pm_product_code <> 'X'
7247             THEN
7248 
7249                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7250                   THEN
7251                         PA_UTILS.add_message
7252                         (p_app_short_name => 'PA',
7253                          p_msg_name       => 'PA_PRODUCT_CODE_IS_INVALID_AMG');
7254                   END IF;
7255                   p_return_status    := FND_API.G_RET_STS_ERROR;
7256                   l_any_error_occurred_flag:='Y';
7257                   IF l_debug_mode = 'Y' THEN
7258                         pa_debug.g_err_stage := 'Product code is invalid' ;
7259                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7260                   END IF;
7261 
7262             END IF; --l_pm_product_code <> 'X'
7263 
7264       END IF; --p_pm_product_code IS NULL
7265 
7266 
7267       --p_version_number is mandatory
7268       IF l_version_number IS NULL
7269       THEN
7270             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7271             THEN
7272                   PA_UTILS.add_message
7273                   (p_app_short_name => 'PA',
7274                    p_msg_name       => 'PA_FP_VERSION_NUMBER_REQD');
7275             END IF;
7276             IF l_debug_mode = 'Y' THEN
7277                   pa_debug.g_err_stage := 'Version Number is missing' ;
7278                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7279             END IF;
7280 
7281             p_return_status    := FND_API.G_RET_STS_ERROR;
7282             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7283 
7284       END IF; --l_version_number IS NULL
7285 
7286 
7287       --convert pm_project_reference to id
7288       PA_PROJECT_PVT.convert_pm_projref_to_id (
7289          p_pm_project_reference  => p_pm_project_reference,
7290          p_pa_project_id         => l_project_id,
7291          p_out_project_id        => l_project_id,
7292          p_return_status         => l_return_status );
7293 
7294       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
7295       THEN
7296             IF l_debug_mode = 'Y' THEN
7297                   pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
7298                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7299             END IF;
7300 
7301             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
7302 
7303       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7304       THEN
7305             IF l_debug_mode = 'Y' THEN
7306                   pa_debug.g_err_stage := 'Error while getting project id' ;
7307                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7308             END IF;
7309 
7310             RAISE  FND_API.G_EXC_ERROR;
7311 
7312       END IF;
7313 
7314       -- Get segment1 for AMG messages
7315       OPEN l_amg_project_csr( l_project_id );
7316       FETCH l_amg_project_csr INTO l_amg_segment1;
7317       CLOSE l_amg_project_csr;
7318 
7319 
7320       --Do the processing required for budget model
7321       IF  (l_budget_type_code IS NOT NULL)  THEN
7322 
7323             --Verify the budget type code passed
7324             OPEN l_budget_type_csr( l_budget_type_code );
7325             FETCH l_budget_type_csr INTO l_dummy;
7326 
7327             IF l_budget_type_csr%NOTFOUND
7328             THEN
7329                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7330                   THEN
7331                         PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7332                         ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
7333                         ,p_msg_attribute    => 'CHANGE'
7334                         ,p_resize_flag      => 'N'
7335                         ,p_msg_context      => 'BUDG'
7336                         ,p_attribute1       => l_amg_segment1
7337                         ,p_attribute2       => ''
7338                         ,p_attribute3       => l_budget_type_code
7339                         ,p_attribute4       => ''
7340                         ,p_attribute5       => '');
7341                   END IF;
7342                   IF l_debug_mode = 'Y' THEN
7343                         pa_debug.g_err_stage := 'Budget Type is invalid' ;
7344                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7345                   END IF;
7346 
7347                   CLOSE l_budget_type_csr;
7348                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7349 
7350             END IF; --l_budget_type_csr%NOTFOUND
7351             CLOSE l_budget_type_csr;
7352 
7353             --Verify the version number passed and derive budget_version_id if it is valid
7354             OPEN l_budget_version_no_csr
7355               (p_project_id       => l_project_id
7356               ,p_budget_type_code => l_budget_type_code
7357               ,p_version_number   => l_version_number);
7358             FETCH l_budget_version_no_csr INTO l_budget_version_no_rec;
7359             CLOSE l_budget_version_no_csr;
7360 
7361             IF (l_budget_version_no_rec.budget_version_id IS NULL)
7362             THEN
7363                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7364                   THEN
7365                         PA_UTILS.add_message
7366                         (p_app_short_name => 'PA',
7367                          p_msg_name       => 'PA_FP_VERSION_NO_IS_INVALID');
7368                   END IF;
7369                   IF l_debug_mode = 'Y' THEN
7370                         pa_debug.g_err_stage := 'Budget version number is invalid' ;
7371                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7372                   END IF;
7373 
7374                   p_return_status    := FND_API.G_RET_STS_ERROR;
7375                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7376 
7377             ELSE --l_budget_version_no_rec has been fetched
7378 
7379                   IF (l_budget_version_no_rec.current_flag = 'Y'
7380                   OR  l_budget_version_no_rec.current_original_flag = 'Y') THEN
7381                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7382                               PA_UTILS.add_message
7383                               (p_app_short_name => 'PA',
7384                                p_msg_name       => 'PA_FP_DEL_CUR_OR_ORIG_BASELINE');
7385                         END IF;
7386 
7387                         IF l_debug_mode = 'Y' THEN
7388                               pa_debug.g_err_stage := 'baseline versions marked as current' ||
7389                                                       'or current original can not be deleted';
7390                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7391                         END IF;
7392 
7393                         p_return_status    := FND_API.G_RET_STS_ERROR;
7394                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7395                   END IF;
7396             END IF; --l_budget_version_no_rec.budget_version_id IS NULL
7397 
7398             --Check for the security. We select the function security based
7399             --on whether the budget type is Approved or not.
7400             IF (l_budget_type_code = 'AC' OR l_budget_type_code = 'AR')
7401             THEN
7402                   --Approved Budget (Cost or Revenue)
7403                   l_function_name:='PA_FP_DEL_BSLN_APPRVD_BDGT';
7404             ELSE --for baseline budgets the only other values should be 'FR' or user defined
7405                   --Budget (not approved cost or revenue)
7406                   l_function_name:='PA_FP_DEL_BSLN_BDGT';
7407             END IF;
7408 
7409             PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7410                                                p_api_version_number => p_api_version_number
7411                                               ,p_project_id         => l_project_id
7412                                               ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
7413                                               ,p_function_name      => l_function_name
7414                                               ,p_version_type       => null
7415                                               ,x_return_status      => p_return_status
7416                                               ,x_ret_code           => l_security_ret_code );
7417 
7418             -- the above API adds the error message to stack. Hence the message is not added here.
7419             -- Also, as security check is important further validations are not done in case this
7420             -- validation fails.
7421             IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR l_security_ret_code = 'N')
7422             THEN
7423                   IF l_debug_mode = 'Y' THEN
7424                         pa_debug.g_err_stage:= 'Security API Failed';
7425                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7426                   END IF;
7427 
7428                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7429             END IF;
7430 
7431 
7432             --Check if budgetary control is enabled for this project and budget version
7433             --If a record is present for this budget version in PA_BC_BALANCES table
7434             --then we do not proceed with delete.
7435             IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_no_rec.budget_version_id) )
7436             THEN
7437                   IF(l_debug_mode='Y') THEN
7438                         pa_debug.g_err_stage := 'Cannnot delete budget version - '
7439                                              || 'budgetary control is enabled';
7440                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7441                   END IF;
7442 
7443                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7444                   THEN
7445                         PA_UTILS.ADD_MESSAGE(
7446                                  p_app_short_name  => 'PA'
7447                                 ,p_msg_name        => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
7448                                 ,p_token1          => 'PROJECT'
7449                                 ,p_value1          => l_amg_segment1
7450                                 ,p_token2          => 'BUDGET_TYPE'
7451                                 ,p_value2          => l_budget_type_code
7452                                 ,p_token3          => 'BUDGET_VERSION_ID'
7453                                 ,p_value3          => l_budget_version_no_rec.budget_version_id);
7454                   END IF;
7455 
7456                   RAISE FND_API.G_EXC_ERROR;
7457 
7458             END IF;--budgetary control enabled check
7459 
7460 
7461             --Stop Further processing if any errors are reported
7462             IF(l_any_error_occurred_flag='Y') THEN
7463                   IF(l_debug_mode='Y') THEN
7464                         pa_debug.g_err_stage := 'About to display all the messages';
7465                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7466                   END IF;
7467                   p_return_status := FND_API.G_RET_STS_ERROR;
7468                   l_any_error_occurred_flag := 'Y';
7469                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7470             END IF;
7471 
7472             --Calling delete API
7473             PA_BUDGET_UTILS.delete_draft( x_budget_version_id   => l_budget_version_no_rec.budget_version_id
7474                                          ,x_err_code            => l_err_code
7475                                          ,x_err_stage           => l_err_stage
7476                                          ,x_err_stack           => l_err_stack );
7477 
7478             IF l_err_code > 0  THEN
7479 
7480                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7481                   THEN
7482                         IF NOT PA_PROJECT_PVT.check_valid_message(l_err_stage)
7483                         THEN
7484                               IF(l_debug_mode='Y') THEN
7485                                     pa_debug.g_err_stage := 'PA_BUDGET_UTILS.DELETE_DRAFT falied';
7486                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7487                               END IF;
7488                               PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7489                               ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
7490                               ,p_msg_attribute    => 'CHANGE'
7491                               ,p_resize_flag      => 'N'
7492                               ,p_msg_context      => 'BUDG'
7493                               ,p_attribute1       => l_amg_segment1
7494                               ,p_attribute2       => ''
7495                               ,p_attribute3       => l_budget_type_code
7496                               ,p_attribute4       => ''
7497                               ,p_attribute5       => '');
7498 
7499                         ELSE   --valid error message has been returned by Delete_Draft
7500 
7501                               IF(l_debug_mode='Y') THEN
7502                                     pa_debug.g_err_stage := 'Error in Delete_draft api';
7503                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7504                               END IF;
7505                               PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7506                               ( p_old_message_code => l_err_stage
7507                               ,p_msg_attribute    => 'CHANGE'
7508                               ,p_resize_flag      => 'N'
7509                               ,p_msg_context      => 'BUDG'
7510                               ,p_attribute1       => l_amg_segment1
7511                               ,p_attribute2       => ''
7512                               ,p_attribute3       => l_budget_type_code
7513                               ,p_attribute4       => ''
7514                               ,p_attribute5       => '');
7515                         END IF;
7516 
7517                   END IF; --FND_MSG_PUB.check_msg_level
7518                   RAISE FND_API.G_EXC_ERROR;
7519 
7520             ELSIF l_err_code < 0  THEN
7521 
7522                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7523                   THEN
7524                         IF(l_debug_mode='Y') THEN
7525                               pa_debug.g_err_stage := 'Unexpected Error in Delete_draft api';
7526                               pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7527                         END IF;
7528 
7529                         FND_MSG_PUB.add_exc_msg
7530                         (  p_pkg_name       => 'PA_BUDGET_UTILS'
7531                         ,  p_procedure_name => 'DELETE_DRAFT'
7532                         ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
7533                   END IF; --FND_MSG_PUB.check_msg_level
7534 
7535                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7536 
7537             END IF; --l_err_code > 0
7538 
7539       ELSE --finplan model
7540 
7541             --validate the plan type passed
7542             PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
7543                          ( p_fin_plan_type_id    => l_fin_plan_type_id
7544                           ,p_fin_plan_type_name  => l_fin_plan_type_name
7545                           ,x_fin_plan_type_id    => l_fin_plan_type_id
7546                           ,x_return_status       => p_return_status
7547                           ,x_msg_count           => p_msg_count
7548                           ,x_msg_data            => p_msg_data);
7549             --Throw the error if the above API is not successfully executed
7550             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7551                   IF l_debug_mode = 'Y' THEN
7552                         pa_debug.g_err_stage := 'Cannot get the value of Fin Plan Type Id' ;
7553                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7554                   END IF;
7555                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7556 
7557             END IF;
7558 
7559             --check if the fin_plan_type_id is used to store workplan data
7560             --first reset the l_dummy value
7561             l_dummy := 0;
7562             OPEN l_use_for_wp_csr( l_fin_plan_type_id );
7563             FETCH l_use_for_wp_csr INTO l_dummy;
7564             CLOSE l_use_for_wp_csr;
7565 
7566             IF l_dummy = 1
7567             THEN
7568                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7569                   THEN
7570                         PA_UTILS.add_message
7571                         (p_app_short_name => 'PA',
7572                          p_msg_name       => 'PA_FP_CANT_DEL_WP_DATA');
7573                   END IF;
7574                   IF l_debug_mode = 'Y' THEN
7575                         pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
7576                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7577                   END IF;
7578 
7579                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7580 
7581             END IF;
7582 
7583             --Validate / get the version type
7584             PA_FIN_PLAN_UTILS.get_version_type
7585                  ( p_project_id        => l_project_id
7586                   ,p_fin_plan_type_id  => l_fin_plan_type_id
7587                   ,px_version_type     => l_version_type
7588                   ,x_return_status     => p_return_status
7589                   ,x_msg_count         => p_msg_count
7590                   ,x_msg_data          => p_msg_data);
7591 
7592             IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
7593                   IF l_debug_mode = 'Y' THEN
7594                         pa_debug.g_err_stage := 'Failed in get_Version_type' ;
7595                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7596                   END IF;
7597                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7598             END IF;
7599 
7600             --Check for the security
7601             l_function_name:='PA_PM_DELETE_BASELINE_BUDGET';
7602             PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7603                                         p_api_version_number => p_api_version_number
7604                                        ,p_project_id         => l_project_id
7605                                        ,p_fin_plan_type_id   => l_fin_plan_type_id
7606                                        ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
7607                                        ,p_function_name      => l_function_name
7608                                        ,p_version_type       => l_version_type
7609                                        ,x_return_status      => p_return_status
7610                                        ,x_ret_code           => l_security_ret_code );
7611 
7612             IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
7613                 l_security_ret_code='N') THEN
7614                   IF l_debug_mode = 'Y' THEN
7615                         pa_debug.g_err_stage := 'Security API failed' ;
7616                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7617                   END IF;
7618                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7619             END IF;
7620 
7621             --Verify the version number passed and derive budget_version_id if it is valid
7622             OPEN l_finplan_version_no_csr
7623               (p_project_id       => l_project_id
7624               ,p_fin_plan_type_id => l_fin_plan_type_id
7625               ,p_version_type     => l_version_type
7626               ,p_version_number   => l_version_number);
7627             FETCH l_finplan_version_no_csr INTO l_budget_version_id;
7628             CLOSE l_finplan_version_no_csr;
7629 
7630             IF (l_budget_version_id IS NULL)
7631             THEN
7632                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7633                   THEN
7634                         PA_UTILS.add_message
7635                         (p_app_short_name => 'PA',
7636                          p_msg_name       => 'PA_FP_VERSION_NO_IS_INVALID');
7637                   END IF;
7638                   IF l_debug_mode = 'Y' THEN
7639                         pa_debug.g_err_stage := 'Budget version number is invalid' ;
7640                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7641                   END IF;
7642 
7643                   p_return_status    := FND_API.G_RET_STS_ERROR;
7644                   l_any_error_occurred_flag:='Y' ;
7645             END IF; --l_budget_version_id IS NULL
7646 
7647             --if the budget version belongs to an org forecast project then throw an error
7648             IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
7649             THEN
7650                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7651                   THEN
7652                         PA_UTILS.add_message
7653                         (p_app_short_name => 'PA',
7654                          p_msg_name       => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
7655                   END IF;
7656                   IF l_debug_mode = 'Y' THEN
7657                         pa_debug.g_err_stage := 'Cannot delete baseline budgets attached' ||
7658                                                 'to an organisation forecasting project';
7659                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7660                   END IF;
7661 
7662                   p_return_status    := FND_API.G_RET_STS_ERROR;
7663                   l_any_error_occurred_flag:='Y' ;
7664             END IF; --org_forecast = 'Y'
7665 
7666             --Stop Further processing if any errors are reported
7667             IF(l_any_error_occurred_flag='Y') THEN
7668                   IF(l_debug_mode='Y') THEN
7669                         pa_debug.g_err_stage := 'About to display all the messages';
7670                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7671                   END IF;
7672                   p_return_status := FND_API.G_RET_STS_ERROR;
7673                   l_any_error_occurred_flag := 'Y';
7674                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7675             END IF;
7676 
7677             --Delete the version
7678             l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
7679                                        (p_budget_version_id => l_budget_version_id);
7680             PA_FIN_PLAN_PUB.delete_version
7681             ( p_project_id               => l_project_id
7682              ,p_budget_version_id        => l_budget_version_id
7683              ,p_record_version_number    => l_record_version_number
7684              ,x_return_status            => p_return_status
7685              ,x_msg_count                => p_msg_count
7686              ,x_msg_data                 => p_msg_data );
7687 
7688              IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7689 
7690                   IF(l_debug_mode='Y') THEN
7691                         pa_debug.g_err_stage := 'Failed in deleting the version';
7692                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7693                   END IF;
7694                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7695             END IF;
7696 
7697             --If the budget version being deleted is a generation source
7698             --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
7699             --pa_proj_fp_options table and increase the record_version_no
7700             IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
7701             THEN
7702                   UPDATE pa_proj_fp_options
7703                   SET    gen_src_cost_plan_version_id = NULL,
7704                          record_version_number = record_version_number + 1,
7705                          last_update_date = SYSDATE,
7706                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7707                          last_update_login = FND_GLOBAL.LOGIN_ID
7708                   WHERE  project_id = l_project_id
7709                   AND    gen_src_cost_plan_version_id = l_budget_version_id;
7710             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
7711             THEN
7712                   UPDATE pa_proj_fp_options
7713                   SET    gen_src_rev_plan_version_id = NULL,
7714                          record_version_number = record_version_number + 1,
7715                          last_update_date = SYSDATE,
7716                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7717                          last_update_login = FND_GLOBAL.LOGIN_ID
7718                   WHERE  project_id = l_project_id
7719                   AND    gen_src_rev_plan_version_id = l_budget_version_id;
7720             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
7721             THEN
7722                   UPDATE pa_proj_fp_options
7723                   SET    gen_src_all_plan_version_id = NULL,
7724                          record_version_number = record_version_number + 1,
7725                          last_update_date = SYSDATE,
7726                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7727                          last_update_login = FND_GLOBAL.LOGIN_ID
7728                   WHERE  project_id = l_project_id
7729                   AND    gen_src_all_plan_version_id = l_budget_version_id;
7730             END IF;
7731 
7732             --if any record had been updated in pa_proj_fp_options then
7733             --we do a dummy update in pa_budget_versions also for the
7734             --budget version that is being updated to increase the record version number
7735             IF SQL%ROWCOUNT > 0 THEN
7736                   UPDATE pa_budget_versions
7737                   SET record_version_number = record_version_number + 1,
7738                   last_update_date = SYSDATE,
7739                   last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7740                   last_update_login = FND_GLOBAL.LOGIN_ID
7741                   WHERE project_id = l_project_id
7742                   AND   budget_version_id = l_budget_version_id;
7743             END IF;
7744 
7745       End IF; --l_budget_type_code IS NOT NULL
7746 
7747 
7748       IF fnd_api.to_boolean(p_commit)
7749       THEN
7750             COMMIT;
7751       END IF;
7752 
7753       IF(l_debug_mode='Y') THEN
7754             pa_debug.g_err_stage := 'Exiting delete baseline budget version';
7755             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7756       END IF;
7757 
7758       IF ( l_debug_mode = 'Y' ) THEN
7759             pa_debug.reset_curr_function;
7760       END IF;
7761 
7762 EXCEPTION
7763       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
7764       THEN
7765 
7766       p_return_status := FND_API.G_RET_STS_ERROR;
7767       l_msg_count := FND_MSG_PUB.count_msg;
7768 
7769       IF l_msg_count = 1 and p_msg_data IS NULL THEN
7770             PA_INTERFACE_UTILS_PUB.get_messages
7771             (p_encoded        => FND_API.G_TRUE
7772             ,p_msg_index      => 1
7773             ,p_msg_count      => l_msg_count
7774             ,p_msg_data       => l_msg_data
7775             ,p_data           => l_data
7776             ,p_msg_index_out  => l_msg_index_out);
7777             p_msg_data  := l_data;
7778             p_msg_count := l_msg_count;
7779       ELSE
7780             p_msg_count := l_msg_count;
7781       END IF;
7782 
7783       IF ( l_debug_mode = 'Y' ) THEN
7784             pa_debug.reset_curr_function;
7785       END IF;
7786 
7787       RETURN;
7788 
7789       WHEN FND_API.G_EXC_ERROR
7790       THEN
7791 
7792       ROLLBACK TO delete_baseline_budget_pub;
7793 
7794       p_return_status := FND_API.G_RET_STS_ERROR;
7795 
7796       FND_MSG_PUB.count_and_get
7797       (   p_count     =>  p_msg_count ,
7798           p_data      =>  p_msg_data  );
7799 
7800       IF ( l_debug_mode = 'Y' ) THEN
7801             pa_debug.reset_curr_function;
7802       END IF;
7803 
7804       WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7805       THEN
7806 
7807       ROLLBACK TO delete_baseline_budget_pub;
7808 
7809       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7810 
7811       FND_MSG_PUB.count_and_get
7812       (   p_count     =>  p_msg_count ,
7813           p_data      =>  p_msg_data  );
7814 
7815       IF ( l_debug_mode = 'Y' ) THEN
7816             pa_debug.reset_curr_function;
7817       END IF;
7818 
7819       WHEN ROW_ALREADY_LOCKED
7820       THEN
7821       ROLLBACK TO delete_baseline_budget_pub;
7822 
7823       p_return_status := FND_API.G_RET_STS_ERROR;
7824 
7825       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7826       THEN
7827             FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
7828             FND_MESSAGE.set_token('PROJECT', l_amg_segment1);
7829             FND_MESSAGE.set_token('TASK', '');
7830             FND_MESSAGE.set_token('BUDGET_TYPE', p_budget_type_code);
7831             FND_MESSAGE.set_token('SOURCE_NAME', '');
7832             FND_MESSAGE.set_token('START_DATE', '');
7833             FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_CODE');
7834             FND_MSG_PUB.add;
7835       END IF;
7836 
7837       FND_MSG_PUB.count_and_get
7838       (   p_count     =>  p_msg_count ,
7839           p_data      =>  p_msg_data  );
7840 
7841       IF ( l_debug_mode = 'Y' ) THEN
7842             pa_debug.reset_curr_function;
7843       END IF;
7844 
7845       WHEN OTHERS THEN
7846 
7847       ROLLBACK TO delete_baseline_budget_pub;
7848 
7849       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7850 
7851       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7852       THEN
7853             FND_MSG_PUB.add_exc_msg
7854             (  p_pkg_name       => G_PKG_NAME
7855             ,  p_procedure_name => l_api_name );
7856 
7857       END IF;
7858 
7859       FND_MSG_PUB.count_and_get
7860       (   p_count     =>  p_msg_count ,
7861           p_data      =>  p_msg_data  );
7862 
7863       IF ( l_debug_mode = 'Y' ) THEN
7864             pa_debug.reset_curr_function;
7865       END IF;
7866 
7867 END delete_baseline_budget;
7868 
7869 
7870 
7871 ----------------------------------------------------------------------------------------
7872 --Name:               delete_budget_line
7873 --Type:               Procedure
7874 --Description:        This procedure can be used to delete a budget_line of a draft budget
7875 --
7876 --
7877 --Called subprograms:
7878 --
7879 --
7880 --
7881 --History:
7882 --    07-OCT-1996        L. de Werker    Created
7883 --    28-NOV-1996    L. de Werker    Add parameter p_period_name and functionality to get
7884 --                   start_date from p_period_name
7885 --    07-DEC-1996    L. de Werker    Added locking mechanism
7886 --    16-MAY-2005    Ritesh Shukla   Modified this procedure for FP.M
7887 --    16-Apr-2007    rthumma    Bug# 5998035 : Added call to PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API
7888 --                   for deleting the data from pa_resource_assignments
7889 --    29-Feb-2008    paljain    Bug# 6854131 : Removed second call to close cursor l_budget_line_rowid_csr
7890 --
7891 PROCEDURE delete_budget_line
7892 ( p_api_version_number        IN  NUMBER
7893  ,p_commit                    IN  VARCHAR2
7894  ,p_init_msg_list             IN  VARCHAR2
7895  ,p_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7896  ,p_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7897  ,p_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7898  ,p_pm_product_code           IN  VARCHAR2
7899  ,p_pa_project_id             IN  NUMBER
7900  ,p_pm_project_reference      IN  VARCHAR2
7901  ,p_budget_type_code          IN  VARCHAR2
7902  ,p_pa_task_id                IN  NUMBER
7903  ,p_pm_task_reference         IN  VARCHAR2
7904  ,p_resource_alias            IN  VARCHAR2
7905  ,p_resource_list_member_id   IN  NUMBER
7906  ,p_start_date                IN  DATE
7907  ,p_period_name               IN  VARCHAR2
7908 --Parameters added for FP.M
7909  ,p_fin_plan_type_id          IN  NUMBER
7910  ,p_fin_plan_type_name        IN  VARCHAR2
7911  ,p_version_type              IN  VARCHAR2
7912  ,p_version_number            IN  NUMBER
7913  ,p_currency_code             IN  VARCHAR2 )
7914 
7915 IS
7916 
7917 
7918    CURSOR l_resource_assignment_csr
7919       (p_budget_version_id  NUMBER
7920       ,p_task_id        NUMBER
7921       ,p_member_id      NUMBER  )
7922    IS
7923    SELECT resource_assignment_id
7924    FROM   pa_resource_assignments
7925    WHERE  budget_version_id = p_budget_version_id
7926    AND    task_id = p_task_id
7927    AND    resource_list_member_id = p_member_id;
7928 
7929    CURSOR l_budget_line_rowid_csr
7930      ( p_resource_assignment_id NUMBER
7931       ,p_budget_start_date      DATE
7932       ,p_currency_code          VARCHAR2)
7933    IS
7934    SELECT rowidtochar(rowid)
7935          ,txn_currency_code
7936          ,start_date
7937          ,end_date
7938    FROM   pa_budget_lines
7939    WHERE  resource_assignment_id = p_resource_assignment_id
7940    AND    trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
7941    AND    txn_currency_code = nvl(p_currency_code,txn_currency_code);
7942 
7943    -- FP.M Data Model Logic
7944 
7945    CURSOR l_uncategorized_list_csr
7946    IS
7947    SELECT prlm.resource_list_member_id
7948    FROM   pa_resource_lists prl
7949    ,      pa_resource_list_members prlm
7950    WHERE  prl.resource_list_id = prlm.resource_list_id
7951    AND    prl.uncategorized_flag='Y'
7952    and    prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
7953 
7954    -- End: FP.M Resource LIst Data Model Impact Changes ------
7955 
7956    -- needed to get the budget_start_date of a period
7957    CURSOR   l_budget_periods_csr
7958         (p_period_name          VARCHAR2
7959         ,p_time_phased_type_code    VARCHAR2    )
7960    IS
7961    SELECT trunc(period_start_date)
7962    FROM   pa_budget_periods_v
7963    WHERE  period_name = p_period_name
7964    AND    period_type_code = p_time_phased_type_code;
7965 
7966    --needed to validate to given start_date
7967    CURSOR   l_start_date_csr
7968         (p_start_date           DATE
7969         ,p_time_phased_type_code    VARCHAR2    )
7970    IS
7971    SELECT 1
7972    FROM   pa_budget_periods_v
7973    WHERE  trunc(period_start_date) = trunc(p_start_date)
7974    AND    period_type_code = p_time_phased_type_code;
7975 
7976    --needed to lock the budget line row
7977    CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
7978    IS
7979    SELECT 'x'
7980    FROM   pa_budget_lines
7981    WHERE  rowid = p_budget_line_rowid
7982    FOR UPDATE NOWAIT;
7983 
7984    --This cursor is used to get the approved rev plan type flag of the plan type
7985    CURSOR l_approved_revenue_flag_csr
7986           ( c_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE
7987            ,c_project_id pa_projects_all.project_id%TYPE)
7988    IS
7989    SELECT approved_rev_plan_type_flag
7990    FROM   pa_proj_fp_options
7991    WHERE  project_id=c_project_id
7992    AND    fin_plan_type_id=c_fin_plan_type_id
7993    AND    fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
7994 
7995    l_app_rev_plan_type_flag     VARCHAR2(1);
7996 
7997    --This cursor is used to compare a currency code with pfc
7998    CURSOR l_proj_func_currency_csr
7999           ( c_project_id    NUMBER
8000            ,c_currency_code VARCHAR2)
8001    IS
8002    SELECT 1
8003    FROM  pa_projects_all
8004    WHERE project_id = c_project_id
8005    AND   projfunc_currency_code = c_currency_code;
8006 
8007    --This cursor is used to fetch the txn currencies of the plan version
8008    --and validate currency_code against them.
8009    CURSOR l_plan_ver_txn_curr_csr
8010           ( c_fin_plan_version_id   NUMBER
8011            ,c_currency_code         VARCHAR2)
8012    IS
8013    SELECT 1
8014    FROM   pa_fp_txn_currencies
8015    WHERE  fin_plan_version_id = c_fin_plan_version_id
8016    AND    txn_currency_code   = c_currency_code;
8017 
8018    --Cursor to derive plan_class_code and etc_start_date for a budget version
8019    CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER)
8020    IS
8021    SELECT  pt.plan_class_code
8022           ,bv.etc_start_date
8023    FROM    pa_budget_versions bv,
8024            pa_fin_plan_types_b pt
8025    WHERE   bv.budget_version_id = c_budget_version_id
8026    AND     pt.fin_plan_type_id = bv.fin_plan_type_id;
8027 
8028    l_plan_class_code            pa_fin_plan_types_b.plan_class_code%TYPE;
8029    l_etc_start_date             pa_budget_versions.etc_start_date%TYPE;
8030 
8031    i                            NUMBER := 0;
8032    l_dummy                      NUMBER;
8033 
8034    l_api_name          CONSTANT VARCHAR2(30)        := 'delete_budget_line';
8035 
8036    l_resource_assignment_id     pa_resource_assignments.resource_assignment_id%type;
8037    l_budget_line_rowid          VARCHAR(20);
8038 
8039    l_err_code                   NUMBER;
8040    l_err_stage                  VARCHAR2(120);
8041    l_err_stack                  VARCHAR2(630);
8042 
8043    l_project_id                 NUMBER := p_pa_project_id;
8044    l_budget_type_code           pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
8045    l_fin_plan_type_id           NUMBER := p_fin_plan_type_id;
8046    l_fin_plan_type_name         pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
8047    l_version_type               pa_budget_versions.version_type%TYPE := p_version_type;
8048    l_budget_version_id          NUMBER;
8049    l_budget_entry_method_code   pa_budget_entry_methods.budget_entry_method_code%TYPE;
8050    l_resource_list_id           NUMBER;
8051    l_budget_amount_code         pa_budget_types.budget_amount_code%type;
8052    l_entry_level_code           pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
8053    l_time_phased_code           pa_proj_fp_options.cost_time_phased_code%TYPE;
8054    l_multi_curr_flag            pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
8055    l_categorization_code        pa_budget_entry_methods.categorization_code%TYPE;
8056    l_record_version_number      NUMBER;
8057    l_task_id                    NUMBER;
8058    l_resource_list_member_id    NUMBER;
8059    l_currency_code              VARCHAR2(15);
8060    l_start_date                 DATE;
8061 
8062    l_resource_assignment_tab    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8063    l_delete_budget_lines_tab    SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8064    l_txn_currency_code_tab      SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8065    l_line_start_date_tab        SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8066    l_line_end_date_tab          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8067    l_txn_currency_code          VARCHAR2(15);
8068    l_line_start_date            DATE;
8069    l_line_end_date              DATE;
8070 
8071    l_msg_count                  NUMBER := 0;
8072    l_msg_data                   VARCHAR2(2000);
8073    l_module_name                VARCHAR2(80);
8074    l_data                       VARCHAR2(2000);
8075    l_msg_index_out              NUMBER;
8076 
8077    l_amg_project_number         pa_projects_all.segment1%TYPE;
8078    l_amg_task_number            VARCHAR2(50);
8079 
8080    -- Bug# 5998035
8081    l_call_del_planning_trans            VARCHAR2(1) := 'N';
8082    l_currency_code_tbl           SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8083 
8084    --debug variables
8085    l_debug_mode                 VARCHAR2(1);
8086    l_debug_level2      CONSTANT NUMBER := 2;
8087    l_debug_level3      CONSTANT NUMBER := 3;
8088    l_debug_level4      CONSTANT NUMBER := 4;
8089    l_debug_level5      CONSTANT NUMBER := 5;
8090    --Added for bug 6408139 to pass G_PA_MISS_CHAR
8091    l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
8092 
8093 
8094 BEGIN
8095 
8096 
8097    --Standard begin of API savepoint
8098    SAVEPOINT delete_budget_line_pub;
8099 
8100    p_msg_count := 0;
8101    p_return_status := FND_API.G_RET_STS_SUCCESS;
8102    l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8103    l_module_name := g_module_name || ':Delete_Budget_Line ';
8104 
8105    IF ( l_debug_mode = 'Y' )
8106    THEN
8107          pa_debug.set_curr_function( p_function   => l_api_name
8108                                     ,p_debug_mode => l_debug_mode );
8109    END IF;
8110 
8111    IF ( l_debug_mode = 'Y' )
8112    THEN
8113          pa_debug.g_err_stage:='Entering ' || l_api_name;
8114          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8115    END IF;
8116 
8117    --Initialize the message table if requested.
8118    IF FND_API.TO_BOOLEAN( p_init_msg_list )
8119    THEN
8120         FND_MSG_PUB.initialize;
8121    END IF;
8122 
8123    --Set API return status to success
8124    p_return_status     := FND_API.G_RET_STS_SUCCESS;
8125 
8126    --Call PA_BUDGET_PVT.validate_header_info to do the necessary
8127    --header level validations
8128    PA_BUDGET_PVT.validate_header_info
8129         ( p_api_version_number          => p_api_version_number
8130          ,p_api_name                    => l_api_name
8131          ,p_init_msg_list               => p_init_msg_list
8132          ,px_pa_project_id              => l_project_id
8133          ,p_pm_project_reference        => p_pm_project_reference
8134          ,p_pm_product_code             => p_pm_product_code
8135          ,px_budget_type_code           => l_budget_type_code
8136          ,px_fin_plan_type_id           => l_fin_plan_type_id
8137          ,px_fin_plan_type_name         => l_fin_plan_type_name
8138          ,px_version_type               => l_version_type
8139          ,p_budget_version_number       => p_version_number
8140          ,p_change_reason_code          => NULL
8141          ,p_function_name               => 'PA_PM_DELETE_BUDGET_LINE'
8142          ,x_budget_entry_method_code    => l_budget_entry_method_code
8143          ,x_resource_list_id            => l_resource_list_id
8144          ,x_budget_version_id           => l_budget_version_id
8145          ,x_fin_plan_level_code         => l_entry_level_code
8146          ,x_time_phased_code            => l_time_phased_code
8147          ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
8148          ,x_budget_amount_code          => l_budget_amount_code
8149          ,x_categorization_code         => l_categorization_code
8150          ,x_project_number              => l_amg_project_number
8151          /* Plan Amount Entry flags introduced by bug 6408139 */
8152          /*Passing all as G_PA_MISS_CHAR since validations not required*/
8153          ,px_raw_cost_flag         =>   l_pa_miss_char
8154          ,px_burdened_cost_flag    =>   l_pa_miss_char
8155          ,px_revenue_flag          =>   l_pa_miss_char
8156          ,px_cost_qty_flag         =>   l_pa_miss_char
8157          ,px_revenue_qty_flag      =>   l_pa_miss_char
8158          ,px_all_qty_flag          =>   l_pa_miss_char
8159          ,px_bill_rate_flag        =>   l_pa_miss_char
8160          ,px_cost_rate_flag        =>   l_pa_miss_char
8161          ,px_burden_rate_flag      =>   l_pa_miss_char
8162          /* Plan Amount Entry flags introduced by bug 6408139 */
8163          ,x_msg_count                   => p_msg_count
8164          ,x_msg_data                    => p_msg_data
8165          ,x_return_status               => p_return_status );
8166 
8167    IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8168          IF(l_debug_mode='Y') THEN
8169                pa_debug.g_err_stage := 'validate header info API falied';
8170                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8171          END IF;
8172          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8173    END IF;
8174 
8175 
8176    -- convert pm_task_reference to pa_task_id
8177    -- if both task_id and task_reference are not passed or NULL, then we will default to 0, because this
8178    -- is the value of task_id when budgetting is done at the project level.
8179 
8180    IF (p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8181        OR p_pa_task_id IS NULL )
8182    AND (p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8183         OR p_pm_task_reference IS NULL )
8184    THEN
8185 
8186     l_task_id := 0;
8187 
8188    ELSE
8189 
8190     PA_PROJECT_PVT.Convert_pm_taskref_to_id ( p_pa_project_id       => l_project_id,
8191                               p_pa_task_id          => p_pa_task_id,
8192                               p_pm_task_reference   => p_pm_task_reference,
8193                               p_out_task_id         => l_task_id,
8194                               p_return_status       => p_return_status );
8195 
8196     IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
8197     THEN
8198             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
8199 
8200     ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8201     THEN
8202             RAISE  FND_API.G_EXC_ERROR;
8203         END IF;
8204 
8205    END IF;
8206 
8207    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
8208                         (p_task_number=> ''
8209                         ,p_task_reference => p_pm_task_reference
8210                         ,p_task_id => l_task_id);
8211 
8212    -- convert resource alias to (resource) member id if passed and NOT NULL
8213    -- if resource alias is (passed and not NULL)
8214    -- and resource member is (passed and not NULL)
8215    -- then we convert the alias to the id
8216    -- else we default to the uncategorized resource member
8217 
8218    IF (p_resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8219        AND p_resource_alias IS NOT NULL)
8220    OR (p_resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8221        AND p_resource_list_member_id IS NOT NULL)
8222    THEN
8223 
8224        pa_resource_pub.Convert_alias_to_id
8225              ( p_project_id                  => p_pa_project_id
8226               ,p_resource_list_id            => l_resource_list_id
8227               ,p_alias                       => p_resource_alias
8228               ,p_resource_list_member_id     => p_resource_list_member_id
8229               ,p_out_resource_list_member_id => l_resource_list_member_id
8230               ,p_return_status               => p_return_status  );
8231 
8232        IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
8233        THEN
8234                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
8235        ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8236        THEN
8237                RAISE  FND_API.G_EXC_ERROR;
8238        END IF;
8239 
8240    ELSE
8241 
8242        OPEN l_uncategorized_list_csr;
8243        FETCH l_uncategorized_list_csr INTO l_resource_list_member_id;
8244        CLOSE l_uncategorized_list_csr;
8245 
8246    END IF;
8247 
8248 -- No check has been made to see if RLM id passed belongs to PRL stamped at Budget Version Level
8249 -- Bug 4375976 has been logged to take care of this in API pa_resource_pub.Convert_alias_to_id
8250 
8251    --Check the existence of resource assignment
8252    OPEN l_resource_assignment_csr
8253     (l_budget_version_id
8254     ,l_task_id
8255     ,l_resource_list_member_id);
8256 
8257    FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
8258 
8259    IF l_resource_assignment_csr%NOTFOUND
8260    THEN
8261     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8262     THEN
8263         pa_interface_utils_pub.map_new_amg_msg
8264         ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
8265          ,p_msg_attribute    => 'CHANGE'
8266          ,p_resize_flag      => 'N'
8267          ,p_msg_context      => 'BUDG'
8268          ,p_attribute1       => l_amg_project_number
8269          ,p_attribute2       => l_amg_task_number
8270          ,p_attribute3       => p_budget_type_code
8271          ,p_attribute4       => ''
8272          ,p_attribute5       => to_char(p_start_date));
8273     END IF;
8274 
8275     CLOSE l_resource_assignment_csr;
8276     RAISE FND_API.G_EXC_ERROR;
8277 
8278    END IF;
8279 
8280    CLOSE l_resource_assignment_csr;
8281 
8282 
8283    --Period name/start date check
8284    IF p_period_name IS NOT NULL
8285    AND p_period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8286    THEN
8287 
8288        OPEN l_budget_periods_csr( p_period_name => p_period_name
8289                                  ,p_time_phased_type_code => l_time_phased_code );
8290 
8291        FETCH l_budget_periods_csr INTO l_start_date;
8292 
8293        IF l_budget_periods_csr%NOTFOUND
8294        THEN
8295            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8296            THEN
8297            pa_interface_utils_pub.map_new_amg_msg
8298            ( p_old_message_code => 'PA_PERIOD_NAME_INVALID'
8299             ,p_msg_attribute    => 'CHANGE'
8300             ,p_resize_flag      => 'N'
8301             ,p_msg_context      => 'BUDG'
8302             ,p_attribute1       => l_amg_project_number
8303             ,p_attribute2       => l_amg_task_number
8304             ,p_attribute3       => l_budget_type_code
8305             ,p_attribute4       => ''
8306             ,p_attribute5       => to_char(p_start_date));
8307            END IF;
8308 
8309            CLOSE l_budget_periods_csr;
8310            RAISE FND_API.G_EXC_ERROR;
8311        END IF;
8312        CLOSE l_budget_periods_csr;
8313 
8314    ELSIF p_start_date IS NOT NULL
8315    AND   p_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8316    THEN
8317 
8318         -- Fix: 27-JAN-97, jwhite
8319         --  Added condition for 'G' or 'P' time-phased-type code as only
8320         --  required for period phased budgets.
8321         IF (l_time_phased_code IN ('G', 'P') )  THEN
8322 
8323             OPEN l_start_date_csr(p_start_date            => p_start_date
8324                                  ,p_time_phased_type_code => l_time_phased_code );
8325 
8326             FETCH l_start_date_csr INTO l_dummy;
8327 
8328             IF l_start_date_csr%NOTFOUND
8329             THEN
8330                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8331                 THEN
8332                 pa_interface_utils_pub.map_new_amg_msg
8333                 ( p_old_message_code => 'PA_START_DATE_INVALID'
8334                  ,p_msg_attribute    => 'CHANGE'
8335                  ,p_resize_flag      => 'N'
8336                  ,p_msg_context      => 'PROJ'
8337                  ,p_attribute1       => l_amg_project_number
8338                  ,p_attribute2       => ''
8339                  ,p_attribute3       => ''
8340                  ,p_attribute4       => ''
8341                  ,p_attribute5       => '');
8342                 END IF;
8343 
8344                 CLOSE l_start_date_csr;
8345                 RAISE FND_API.G_EXC_ERROR;
8346             END IF;
8347 
8348             CLOSE l_start_date_csr;
8349 
8350         END IF;--(l_time_phased_code IN ('G', 'P') )
8351 
8352         l_start_date := p_start_date;
8353 
8354    ELSE
8355 
8356         /* Added code for Bug# 5998035 */
8357         -- If start_date and period_name are passed as NULL
8358         IF (p_period_name IS NULL and p_start_date IS NULL) THEN
8359                 -- If time phased then set l_call_del_planning_trans to 'Y'
8360                 IF (l_time_phased_code IN ('G', 'P')  AND l_fin_plan_type_id IS NOT NULL) THEN
8361                         l_call_del_planning_trans := 'Y';
8362                 END IF;
8363         END IF;
8364         /* End of code for Bug# 5998035 */
8365 	l_start_date := NULL;   --when no start_date or period_name is passed or both are NULL
8366                                 --, then all periods will be deleted
8367 
8368    END IF;--Period name/start date check
8369 
8370    --DO G_MISS_CHAR to NULL conv for currency_code
8371    IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
8372         l_currency_code := NULL;
8373    ELSE
8374         l_currency_code := p_currency_code;
8375    END IF;
8376 
8377    --Following validations are required only for the new model
8378    IF l_fin_plan_type_id IS NOT NULL
8379    THEN
8380 
8381          --Validate currency_code if it is not null
8382          --Validate the txn currency code provided by the user. The follwing checks are made.
8383          --If the version is an approved revenue version then the txn curr code should be PFC.
8384          --else If the version is MC enabled then txn curr code should be among the txn
8385          --currencies provided at the version level.
8386 
8387          IF l_currency_code IS NOT NULL THEN
8388 
8389             l_dummy := 0; --reset the value of l_dummy
8390 
8391             --Get the approved revenue plan type flag
8392             OPEN l_approved_revenue_flag_csr( l_fin_plan_type_id
8393                                              ,l_project_id);
8394             FETCH l_approved_revenue_flag_csr INTO l_app_rev_plan_type_flag;
8395             CLOSE l_approved_revenue_flag_csr;
8396 
8397             -- check for approved rev plan type flag is made here because in case plan type is at
8398             -- cost and revenue separately then version can have currencies other than PFC.
8399             IF( nvl(l_app_rev_plan_type_flag,'N') = 'Y' AND
8400                 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
8401             THEN
8402 
8403                  OPEN l_proj_func_currency_csr( l_project_id
8404                                                ,l_currency_code);
8405                  FETCH l_proj_func_currency_csr INTO l_dummy;
8406                  CLOSE l_proj_func_currency_csr;
8407 
8408                  IF l_dummy = 0 THEN --currency_code not equal to PFC
8409 
8410                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8411                      THEN
8412                           PA_UTILS.ADD_MESSAGE
8413                             ( p_app_short_name => 'PA',
8414                               p_msg_name       => 'PA_FP_TXN_NOT_PFC_FOR_APP_REV',
8415                               p_token1         => 'PROJECT',
8416                               p_value1         =>  l_amg_project_number,
8417                               p_token2         => 'PLAN_TYPE',
8418                               p_value2         =>  l_fin_plan_type_name,
8419                               p_token3         => 'CURRENCY',
8420                               p_value3         =>  l_currency_code);
8421                      END IF;
8422 
8423                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8424 
8425                  END IF;--l_dummy = 0
8426 
8427             ELSE-- Version is not approved for revenue. The txn curr must be available in fp txn curr table
8428 
8429                  OPEN l_plan_ver_txn_curr_csr( l_budget_version_id
8430                                               ,l_currency_code);
8431                  FETCH l_plan_ver_txn_curr_csr INTO l_dummy;
8432                  CLOSE l_plan_ver_txn_curr_csr;
8433 
8434                  IF l_dummy = 0 THEN --currency_code is not valid
8435 
8436                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8437                      THEN
8438                           PA_UTILS.ADD_MESSAGE
8439                             ( p_app_short_name => 'PA',
8440                               p_msg_name       => 'PA_FP_TXN_NOT_ADDED_FOR_PT',
8441                               p_token1         => 'PROJECT',
8442                               p_value1         =>  l_amg_project_number,
8443                               p_token2         => 'PLAN_TYPE',
8444                               p_value2         =>  l_fin_plan_type_name,
8445                               p_token3         => 'CURRENCY',
8446                               p_value3         =>  l_currency_code);
8447                      END IF;
8448 
8449                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8450 
8451                  END IF;--l_dummy = 0
8452 
8453             END IF;
8454 
8455          END IF;--l_currency_code IS NOT NULL
8456 
8457          --If multi-currency is enabled and one of period_name or start_date is
8458          --not null, then currency_code cannot be null.
8459          IF (l_multi_curr_flag = 'Y' AND
8460              l_currency_code IS NULL AND
8461              l_start_date IS NOT NULL)
8462          THEN
8463                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8464                THEN
8465                      PA_UTILS.add_message
8466                      (p_app_short_name => 'PA'
8467                      ,p_msg_name       => 'PA_FP_CURRENCY_NULL_AMG'
8468                      ,p_token1         => 'PROJECT'
8469                      ,p_value1         => l_amg_project_number
8470                      ,p_token2         => 'PLAN_TYPE'
8471                      ,p_value2         => l_fin_plan_type_name
8472                      ,p_token3         => 'TASK'
8473                      ,p_value3         => l_amg_task_number
8474                      ,p_token4         => 'START_DATE'
8475                      ,p_value4         => to_char(l_start_date) );
8476                END IF;
8477 
8478                IF l_debug_mode = 'Y' THEN
8479                      pa_debug.g_err_stage := 'For multi-currency enabled, currency code is'
8480                                           || 'null but start_date is not null';
8481                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8482                END IF;
8483 
8484                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8485          END IF;
8486 
8487 
8488          --In case of new model, check if Actuals have been entered for the FORECAST Line.
8489          OPEN budget_version_info_cur(l_budget_version_id);
8490          FETCH budget_version_info_cur
8491          INTO  l_plan_class_code
8492               ,l_etc_start_date;
8493          CLOSE budget_version_info_cur;
8494          --Since we have already validated the presence of a budget version id
8495          --in PA_BUDGET_PVT.validate_header_info, hence we do not check for
8496          --budget_version_info_cur%NOT FOUND here.
8497 
8498 	 /* Added for Bug# 5998035 */
8499          IF ( l_time_phased_code NOT IN ('G', 'P') AND l_etc_start_date IS NULL) THEN
8500                 l_call_del_planning_trans := 'Y';
8501         END IF;
8502          IF (l_plan_class_code IS NOT NULL AND
8503              l_plan_class_code = 'FORECAST' AND
8504              l_etc_start_date IS NOT NULL AND
8505              ((l_start_date IS NOT NULL AND l_etc_start_date > l_start_date) OR l_start_date IS NULL) AND        -- Bug 5998035
8506              l_time_phased_code IS NOT NULL AND
8507              l_time_phased_code <> 'N')
8508          THEN
8509                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8510                THEN
8511                      PA_UTILS.add_message
8512                      (p_app_short_name => 'PA'
8513                      ,p_msg_name       => 'PA_FP_FCST_ACTUALS_AMG'
8514                      ,p_token1         => 'PROJECT'
8515                      ,p_value1         => l_amg_project_number
8516                      ,p_token2         => 'PLAN_TYPE'
8517                      ,p_value2         => l_fin_plan_type_name
8518                      ,p_token3         => 'TASK'
8519                      ,p_value3         => l_amg_task_number
8520                      ,p_token4         => 'CURRENCY'
8521                      ,p_value4         => l_currency_code
8522                      ,p_token5         => 'START_DATE'
8523                      ,p_value5         => to_char(l_start_date) );
8524                END IF;
8525 
8526                IF l_debug_mode = 'Y' THEN
8527                      pa_debug.g_err_stage := 'Forecast Line has actuals and hence cannot be edited';
8528                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8529                END IF;
8530 
8531                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8532          END IF;--end of actuals-on-FORECAST check
8533 
8534    ELSE -- old FORMS based Budgets Model
8535 
8536          --Currency_code value, even if specified, should be ignored in
8537          --case of old Budgets Model
8538          l_currency_code := NULL;
8539 
8540    END IF; --l_fin_plan_type_id IS NOT NULL
8541 
8542 
8543    --Checking existence of budget line
8544    /* Added code for Bug# 5998035 */
8545    --Skipping this loop while calling delete_planning_transactions
8546    IF ( l_call_del_planning_trans <> 'Y' ) THEN --Bug# 5998035
8547    OPEN l_budget_line_rowid_csr( l_resource_assignment_id
8548                                 ,l_start_date
8549                                 ,l_currency_code );
8550 
8551    FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8552                                      ,l_txn_currency_code
8553                                      ,l_line_start_date
8554                                      ,l_line_end_date ;
8555 
8556    IF l_budget_line_rowid_csr%NOTFOUND
8557    THEN
8558     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8559     THEN
8560         pa_interface_utils_pub.map_new_amg_msg
8561         ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
8562          ,p_msg_attribute    => 'CHANGE'
8563          ,p_resize_flag      => 'N'
8564          ,p_msg_context      => 'BUDG'
8565          ,p_attribute1       => l_amg_project_number
8566          ,p_attribute2       => l_amg_task_number
8567          ,p_attribute3       => l_budget_type_code
8568          ,p_attribute4       => ''
8569          ,p_attribute5       => to_char(l_start_date));
8570     END IF;
8571 
8572     CLOSE l_budget_line_rowid_csr;
8573     RAISE FND_API.G_EXC_ERROR;
8574 
8575    END IF;
8576 
8577    --Loop for deleting budget lines begins
8578    WHILE l_budget_line_rowid_csr%FOUND LOOP
8579 
8580       --Do the processing for FORMS based Budgets Model
8581       IF l_budget_type_code IS NOT NULL
8582       THEN
8583            BEGIN
8584 
8585            OPEN l_lock_budget_line_csr( l_budget_line_rowid );
8586            CLOSE l_lock_budget_line_csr;
8587 
8588                 /*FPB2: MRC PA_BUDGET_LINES_V_PKG.delete_row( l_budget_line_rowid ); */
8589                 pa_budget_lines_v_pkg.delete_row(X_Rowid => l_budget_line_rowid);
8590                                      -- Bug Fix: 4569365. Removed MRC code.
8591              --,  x_mrc_flag => 'Y');  /* FPB2: Added x_mrc_flag for MRC changes */
8592 
8593 
8594            --this exception part is here because this procedure doesn't handle the exceptions itself.
8595            EXCEPTION
8596            WHEN ROW_ALREADY_LOCKED THEN RAISE;
8597 
8598            WHEN OTHERS
8599            THEN
8600 
8601                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8602                THEN
8603                    FND_MSG_PUB.add_exc_msg
8604                    (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
8605                    ,  p_procedure_name => 'DELETE_ROW'
8606                    ,  p_error_text     => SQLCODE          );
8607 
8608                END IF;
8609 
8610                CLOSE l_budget_line_rowid_csr;
8611 
8612                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8613            END;
8614 
8615       ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8616       THEN
8617 
8618            i := i + 1; --incrementing the counter
8619 
8620            --Store the data for PA_FP_CALC_PLAN_PKG.calculate API call
8621            l_resource_assignment_tab.extend(1);
8622            l_delete_budget_lines_tab.extend(1);
8623            l_txn_currency_code_tab.extend(1);
8624            l_line_start_date_tab.extend(1);
8625            l_line_end_date_tab.extend(1);
8626 
8627            l_resource_assignment_tab(i) := l_resource_assignment_id;
8628            l_delete_budget_lines_tab(i) := 'Y';
8629            l_txn_currency_code_tab(i)   := l_txn_currency_code;
8630            l_line_start_date_tab(i)     := l_line_start_date;
8631            l_line_end_date_tab(i)       := l_line_end_date;
8632 
8633       END IF;--l_budget_type_code IS NOT NULL
8634 
8635       FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8636                                         ,l_txn_currency_code
8637                                         ,l_line_start_date
8638                                         ,l_line_end_date ;
8639 
8640    END LOOP;
8641 
8642    /* Added for Bug# 5998035 */
8643    ELSE
8644 
8645         l_resource_assignment_tab.extend(1);
8646         l_currency_code_tbl.extend(1);
8647 
8648         l_resource_assignment_tab(1) := l_resource_assignment_id;
8649         l_currency_code_tbl(1) := l_currency_code;
8650 
8651    END IF;      -- Bug# 5998035
8652 
8653    IF l_budget_line_rowid_csr%ISOPEN THEN               -- Bug 5998035
8654     -- Bug 6854131
8655     CLOSE l_budget_line_rowid_csr;
8656    END IF;
8657 
8658    IF l_budget_type_code IS NOT NULL --old budgets model
8659    THEN
8660         --summarizing the totals in the table pa_budget_versions
8661         PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
8662                                                 , x_err_code          => l_err_code
8663                                                 , x_err_stage         => l_err_stage
8664                                                 , x_err_stack         => l_err_stack );
8665 
8666         IF l_err_code > 0
8667         THEN
8668 
8669         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8670         THEN
8671 
8672             IF NOT pa_project_pvt.check_valid_message(l_err_stage)
8673             THEN
8674             pa_interface_utils_pub.map_new_amg_msg
8675             ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
8676              ,p_msg_attribute    => 'CHANGE'
8677              ,p_resize_flag      => 'N'
8678              ,p_msg_context      => 'BUDG'
8679              ,p_attribute1       => l_amg_project_number
8680              ,p_attribute2       => l_amg_task_number
8681              ,p_attribute3       => p_budget_type_code
8682              ,p_attribute4       => ''
8683              ,p_attribute5       => to_char(p_start_date));
8684             ELSE
8685             pa_interface_utils_pub.map_new_amg_msg
8686             ( p_old_message_code => l_err_stage
8687              ,p_msg_attribute    => 'CHANGE'
8688              ,p_resize_flag      => 'N'
8689              ,p_msg_context      => 'BUDG'
8690              ,p_attribute1       => l_amg_project_number
8691              ,p_attribute2       => l_amg_task_number
8692              ,p_attribute3       => p_budget_type_code
8693              ,p_attribute4       => ''
8694              ,p_attribute5       => to_char(p_start_date));
8695             END IF;
8696 
8697         END IF;
8698 
8699         RAISE FND_API.G_EXC_ERROR;
8700 
8701         ELSIF l_err_code < 0
8702         THEN
8703 
8704         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8705         THEN
8706 
8707             FND_MSG_PUB.add_exc_msg
8708                 (  p_pkg_name       => 'PA_BUDGET_UTILS'
8709                 ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
8710                 ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
8711 
8712         END IF;
8713 
8714         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8715 
8716         END IF;
8717 
8718    ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8719    THEN
8720 
8721         --Lock the budget version before deleting a budget line
8722         l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8723                                    (p_budget_version_id => l_budget_version_id);
8724 
8725         PA_FIN_PLAN_PVT.lock_unlock_version
8726         ( p_budget_version_id       => l_budget_version_id
8727          ,p_record_version_number   => l_record_version_number
8728          ,p_action                  => 'L'
8729          ,p_user_id                 => FND_GLOBAL.User_id
8730          ,p_person_id               => null
8731          ,x_return_status           => p_return_status
8732          ,x_msg_count               => p_msg_count
8733          ,x_msg_data                => p_msg_data);
8734 
8735         IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8736               -- Error message is not added here as the api lock_unlock_version
8737               -- adds the message to stack
8738               IF(l_debug_mode='Y') THEN
8739                     pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
8740                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8741               END IF;
8742               RAISE  FND_API.G_EXC_ERROR;
8743         END IF;
8744 
8745         --Call PA_FP_CALC_PLAN_PKG.calculate api to delete the budget line(s)
8746 	/* Added the following code for Bug# 5998035 */
8747         IF (l_call_del_planning_trans = 'Y') THEN
8748         -- Call PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions if period_name and start_date are NULL
8749         PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions
8750                         (p_context                        => l_plan_class_code
8751                         ,p_task_or_res                => 'ASSIGNMENT'
8752                         ,p_resource_assignment_tbl        => l_resource_assignment_tab
8753                         ,p_currency_code_tbl        => l_currency_code_tbl
8754                         ,x_return_status           => p_return_status
8755                         ,x_msg_count               => p_msg_count
8756                         ,x_msg_data                => p_msg_data
8757                         );
8758          IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8759               IF(l_debug_mode='Y') THEN
8760                     pa_debug.g_err_stage := 'PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API has thrown error';
8761                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8762               END IF;
8763               RAISE  FND_API.G_EXC_ERROR;
8764          END IF;
8765          /* End of code for Bug# 5998035 */
8766         ELSE
8767         PA_FP_CALC_PLAN_PKG.calculate
8768                            (p_project_id              => l_project_id
8769                            ,p_budget_version_id       => l_budget_version_id
8770                            ,p_spread_required_flag    => 'N'
8771                            ,p_source_context          => 'BUDGET_LINE'
8772                            ,p_calling_module          => PA_FP_CONSTANTS_PKG.G_AMG_API
8773                            ,p_resource_assignment_tab => l_resource_assignment_tab
8774                            ,p_delete_budget_lines_tab => l_delete_budget_lines_tab
8775                            ,p_txn_currency_code_tab   => l_txn_currency_code_tab
8776                            ,p_line_start_date_tab     => l_line_start_date_tab
8777                            ,p_line_end_date_tab       => l_line_end_date_tab
8778                            ,x_return_status           => p_return_status
8779                            ,x_msg_count               => p_msg_count
8780                            ,x_msg_data                => p_msg_data );
8781 	END IF;
8782 
8783         IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8784               IF(l_debug_mode='Y') THEN
8785                     pa_debug.g_err_stage := 'PA_FP_CALC_PLAN_PKG.calculate API has thrown error';
8786                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8787               END IF;
8788               RAISE  FND_API.G_EXC_ERROR;
8789         END IF;
8790 
8791         --unlock the budget version after deleting the budget line
8792         l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8793                                    (p_budget_version_id => l_budget_version_id);
8794 
8795         PA_FIN_PLAN_PVT.lock_unlock_version
8796         ( p_budget_version_id       => l_budget_version_id
8797          ,p_record_version_number   => l_record_version_number
8798          ,p_action                  => 'U'
8799          ,p_user_id                 => FND_GLOBAL.User_id
8800          ,p_person_id               => null
8801          ,x_return_status           => p_return_status
8802          ,x_msg_count               => p_msg_count
8803          ,x_msg_data                => p_msg_data);
8804 
8805         IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8806               -- Error message is not added here as the api lock_unlock_version
8807               -- adds the message to stack
8808               IF(l_debug_mode='Y') THEN
8809                     pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
8810                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8811               END IF;
8812               RAISE  FND_API.G_EXC_ERROR;
8813         END IF;
8814 
8815    END IF;--end of code to delete budget line
8816 
8817    IF fnd_api.to_boolean(p_commit)
8818    THEN
8819        COMMIT;
8820    END IF;
8821 
8822    IF ( l_debug_mode = 'Y' ) THEN
8823          pa_debug.reset_curr_function;
8824    END IF;
8825 
8826 
8827 EXCEPTION
8828 
8829    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
8830    THEN
8831 
8832    ROLLBACK TO delete_budget_line_pub;
8833 
8834    p_return_status := FND_API.G_RET_STS_ERROR;
8835    l_msg_count := FND_MSG_PUB.count_msg;
8836 
8837    IF l_msg_count = 1 and p_msg_data IS NULL THEN
8838          PA_INTERFACE_UTILS_PUB.get_messages
8839          (p_encoded        => FND_API.G_TRUE
8840          ,p_msg_index      => 1
8841          ,p_msg_count      => l_msg_count
8842          ,p_msg_data       => l_msg_data
8843          ,p_data           => l_data
8844          ,p_msg_index_out  => l_msg_index_out);
8845          p_msg_data  := l_data;
8846          p_msg_count := l_msg_count;
8847    ELSE
8848          p_msg_count := l_msg_count;
8849    END IF;
8850 
8851    IF ( l_debug_mode = 'Y' ) THEN
8852          pa_debug.reset_curr_function;
8853    END IF;
8854 
8855    RETURN;
8856 
8857 
8858    WHEN FND_API.G_EXC_ERROR
8859    THEN
8860 
8861    ROLLBACK TO delete_budget_line_pub;
8862 
8863    p_return_status := FND_API.G_RET_STS_ERROR;
8864 
8865    FND_MSG_PUB.Count_And_Get
8866    (   p_count     =>  p_msg_count ,
8867        p_data      =>  p_msg_data  );
8868 
8869    IF ( l_debug_mode = 'Y' ) THEN
8870          pa_debug.reset_curr_function;
8871    END IF;
8872 
8873 
8874    WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8875    THEN
8876 
8877    ROLLBACK TO delete_budget_line_pub;
8878 
8879    p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8880 
8881    FND_MSG_PUB.Count_And_Get
8882    (   p_count     =>  p_msg_count ,
8883        p_data      =>  p_msg_data  );
8884 
8885    IF ( l_debug_mode = 'Y' ) THEN
8886          pa_debug.reset_curr_function;
8887    END IF;
8888 
8889 
8890    WHEN ROW_ALREADY_LOCKED
8891    THEN
8892    ROLLBACK TO delete_budget_line_pub;
8893 
8894    p_return_status := FND_API.G_RET_STS_ERROR;
8895 
8896    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8897    THEN
8898      FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
8899      FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_project_number);
8900      FND_MESSAGE.SET_TOKEN('TASK',    l_amg_task_number);
8901      FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
8902      FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
8903      FND_MESSAGE.SET_TOKEN('START_DATE',fnd_date.date_to_chardate(p_start_date));
8904      FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_LINE_CODE');
8905      FND_MSG_PUB.ADD;
8906    END IF;
8907 
8908    FND_MSG_PUB.Count_And_Get
8909            (   p_count     =>  p_msg_count ,
8910                p_data      =>  p_msg_data  );
8911 
8912    IF ( l_debug_mode = 'Y' ) THEN
8913          pa_debug.reset_curr_function;
8914    END IF;
8915 
8916 
8917    WHEN OTHERS THEN
8918 
8919    ROLLBACK TO delete_budget_line_pub;
8920 
8921    p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8922 
8923    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8924    THEN
8925        FND_MSG_PUB.add_exc_msg
8926        (  p_pkg_name       => G_PKG_NAME
8927        ,  p_procedure_name => l_api_name );
8928 
8929    END IF;
8930 
8931    FND_MSG_PUB.Count_And_Get
8932    (   p_count     =>  p_msg_count ,
8933        p_data      =>  p_msg_data  );
8934 
8935     IF ( l_debug_mode = 'Y' ) THEN
8936           pa_debug.reset_curr_function;
8937     END IF;
8938 
8939 END delete_budget_line;
8940 
8941 
8942 ----------------------------------------------------------------------------------------
8943 --Name:               update_budget
8944 --Type:               Procedure
8945 --Description:        This procedure can be used to update a working budget and it's
8946 --                budget lines.
8947 --
8948 --Called subprograms:   pa_budget_pvt.insert_budget_line
8949 --          pa_budget_pvt.update_budget_line_sql
8950 --
8951 --
8952 --
8953 --History:
8954 --    14-OCT-1996        L. de Werker    Created
8955 --    19-NOV-1996    L. de Werker    Changed for use of INSERT_BUDGET_LINE and
8956 --                   UPDATE_BUDGET_LINE_SQL
8957 --    28-NOV-1996    L. de Werker    Added 16 parameters for descriptive flexfields
8958 --    05-DEC-1996    L. de Werker    Added validation for change_reason_code
8959 --                   Corrected error when no resource assignment is found.
8960 --    26-APR-2005    Bug 4224464. Changed the procedure update_budget to support finplan model.
8961 
8962 PROCEDURE update_budget
8963 ( p_api_version_number      IN  NUMBER
8964  ,p_commit          IN  VARCHAR2        := FND_API.G_FALSE
8965  ,p_init_msg_list       IN  VARCHAR2        := FND_API.G_FALSE
8966  ,p_msg_count           OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8967  ,p_msg_data            OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8968  ,p_return_status       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8969  ,p_pm_product_code     IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8970  ,p_pa_project_id       IN  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8971  ,p_pm_project_reference    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8972  ,p_budget_type_code        IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8973  ,p_change_reason_code      IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8974  ,p_description         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8975  ,p_attribute_category      IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8976  ,p_attribute1          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8977  ,p_attribute2          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8978  ,p_attribute3          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8979  ,p_attribute4          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8980  ,p_attribute5          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8981  ,p_attribute6          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8982  ,p_attribute7          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8983  ,p_attribute8          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8984  ,p_attribute9          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8985  ,p_attribute10         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8986  ,p_attribute11         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8987  ,p_attribute12         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8988  ,p_attribute13         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8989  ,p_attribute14         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8990  ,p_attribute15         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8991  ,p_budget_lines_in     IN  budget_line_in_tbl_type
8992  ,p_budget_lines_out        OUT NOCOPY budget_line_out_tbl_type
8993   --Added for the bug 3453650
8994  ,p_resource_list_id              IN   pa_budget_versions.resource_list_id%TYPE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8995  ,p_set_current_working_flag      IN   pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8996 -- ,p_locked_by_person_id           IN   pa_budget_versions.locked_by_person_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8997  ,p_budget_version_number         IN   pa_budget_versions.version_number%TYPE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8998  ,p_budget_version_name           IN   pa_budget_versions.version_name%TYPE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8999  ,p_version_type                  IN   pa_budget_versions.version_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  -- 3453650
9000  ,p_finplan_type_id               IN   pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9001  ,p_finplan_type_name             IN   pa_fin_plan_types_vl.name%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9002  ,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
9003  ,p_time_phased_code              IN   pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9004  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9005  ,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
9006  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9007  ,p_projfunc_cost_exchange_rate   IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9008  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9009  ,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
9010  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9011  ,p_projfunc_rev_exchange_rate    IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9012  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9013  ,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
9014  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9015  ,p_project_cost_exchange_rate    IN  pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9016  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9017  ,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
9018  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9019  ,p_project_rev_exchange_rate     IN  pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9020 /* Plan Amount Entry flags introduced by bug 6408139 */
9021  ,p_raw_cost_flag                 IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9022  ,p_burdened_cost_flag            IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9023  ,p_revenue_flag                  IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9024  ,p_cost_qty_flag                 IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9025  ,p_revenue_qty_flag              IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9026  ,p_all_qty_flag                  IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9027  ,p_bill_rate_flag                IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9028  ,p_cost_rate_flag                IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9029  ,p_burden_rate_flag              IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9030 )
9031 IS
9032 
9033 
9034    --needed to check the validity of the incoming budget type
9035 
9036    CURSOR l_budget_type_csr
9037       (p_budget_type_code   VARCHAR2 )
9038    IS
9039    SELECT budget_amount_code
9040    FROM   pa_budget_types
9041    WHERE  budget_type_code = p_budget_type_code;
9042 
9043    --needed to check whether budget line already exists
9044 
9045    CURSOR l_budget_line_csr
9046       (p_resource_assigment_id NUMBER
9047       ,p_budget_start_date     DATE )
9048    IS
9049    SELECT 'X'
9050    FROM   pa_budget_lines
9051    WHERE  resource_assignment_id = p_resource_assigment_id
9052    AND    start_date = p_budget_start_date;
9053 
9054    --needed to get the current budget version data
9055 
9056    CURSOR l_budget_version_csr
9057           ( p_project_id NUMBER
9058           , p_budget_type_code VARCHAR2 )
9059    IS
9060    SELECT budget_version_id
9061    ,      budget_entry_method_code
9062    ,      resource_list_id
9063    ,      change_reason_code
9064    ,      description
9065    FROM   pa_budget_versions
9066    WHERE  project_id        = p_project_id
9067    AND    budget_type_code  = p_budget_type_code
9068    AND    budget_status_code    = 'W';
9069 
9070    --needed to get the current budget entry method data
9071 
9072    CURSOR l_budget_entry_method_csr
9073           ( p_budget_entry_method_code VARCHAR2)
9074    IS
9075    SELECT time_phased_type_code
9076    ,      entry_level_code
9077    ,      categorization_code
9078    FROM   pa_budget_entry_methods
9079    WHERE  budget_entry_method_code = p_budget_entry_method_code;
9080 
9081    --needed to get the resource assignment for this budget_version / task / member combination
9082 
9083    CURSOR l_resource_assignment_csr
9084       (p_budget_version_id  NUMBER
9085       ,p_task_id        NUMBER
9086       ,p_member_id      NUMBER  )
9087    IS
9088    SELECT resource_assignment_id
9089    FROM   pa_resource_assignments
9090    WHERE  budget_version_id = p_budget_version_id
9091    AND    task_id = p_task_id
9092    AND    resource_list_member_id = p_member_id;
9093 
9094    -- needed to get the budget_start_date of a period
9095 
9096    CURSOR   l_budget_periods_csr
9097         (p_period_name      VARCHAR2
9098         ,p_period_type_code VARCHAR2    )
9099    IS
9100    SELECT trunc(period_start_date)
9101    FROM   pa_budget_periods_v
9102    WHERE  period_name = p_period_name
9103    AND    period_type_code = p_period_type_code;
9104 
9105    -- the uncategorized resource list
9106 
9107 
9108 
9109 
9110    -- FP.M Resource LIst Data Model Impact Changes, 09-JUN-04, jwhite -----------------------------
9111 
9112    -- Augmented original code with additional filter
9113 
9114 /* -- Original Logic
9115 
9116    CURSOR l_uncategorized_list_csr
9117    IS
9118    SELECT prlm.resource_list_member_id
9119    FROM   pa_resource_lists prl
9120    ,      pa_resource_list_members prlm
9121    WHERE  prl.resource_list_id = prlm.resource_list_id
9122    AND    prl.uncategorized_flag='Y';
9123 
9124 */
9125 
9126    -- FP.M Data Model Logic
9127 
9128    CURSOR l_uncategorized_list_csr
9129    IS
9130    SELECT prlm.resource_list_member_id
9131    FROM   pa_resource_lists prl
9132    ,      pa_resource_list_members prlm
9133    WHERE  prl.resource_list_id = prlm.resource_list_id
9134    AND    prl.uncategorized_flag='Y'
9135    and    prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
9136 
9137 
9138    -- End: FP.M Resource LIst Data Model Impact Changes -----------------------------
9139 
9140 
9141 
9142 
9143    CURSOR   l_budget_change_reason_csr ( p_change_reason_code VARCHAR2 )
9144    IS
9145    SELECT 'x'
9146    FROM   pa_lookups
9147    WHERE  lookup_type = 'BUDGET CHANGE REASON'
9148    AND    lookup_code = p_change_reason_code;
9149 
9150    --needed for locking of budget rows
9151 
9152    CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
9153    IS
9154    SELECT 'x'
9155    FROM   pa_budget_versions bv
9156    ,      pa_resource_assignments ra
9157    ,      pa_budget_lines bl
9158    WHERE  bv.budget_version_id = p_budget_version_id
9159    AND    bv.budget_version_id = ra.budget_version_id (+)
9160    AND    ra.resource_assignment_id = bl.resource_assignment_id (+)
9161    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
9162    FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
9163 
9164    l_api_name           CONSTANT    VARCHAR2(30)        := 'update_budget';
9165 
9166    l_return_status              VARCHAR2(1);
9167    l_project_id                 NUMBER;
9168    l_task_id                    NUMBER;
9169    l_dummy                  VARCHAR2(1);
9170    l_budget_version_id              NUMBER;
9171    l_budget_entry_method_code           VARCHAR2(30);
9172    l_change_reason_code             VARCHAR2(30);
9173    l_description                VARCHAR2(255);
9174    l_budget_line_index              NUMBER;
9175    l_budget_line_in_rec             pa_budget_pub.budget_line_in_rec_type;
9176    l_time_phased_type_code          VARCHAR2(30);
9177    l_resource_assignment_id         NUMBER;
9178    l_budget_start_date              DATE;
9179    l_resource_list_id               NUMBER;
9180    l_resource_list_member_id            NUMBER;
9181    l_resource_name              VARCHAR2(80); --bug 3711693
9182    l_budget_amount_code             VARCHAR2(30);
9183    l_entry_level_code               VARCHAR2(30);
9184    l_categorization_code            VARCHAR2(30);
9185 
9186    l_msg_count                  NUMBER;
9187    l_msg_data                   VARCHAR2(2000);
9188 
9189    l_err_code                   NUMBER;
9190    l_err_stage                  VARCHAR2(120);
9191    l_err_stack                  VARCHAR2(630);
9192 
9193    --used by dynamic SQL
9194    l_statement                  VARCHAR2(2000);
9195    l_update_yes_flag                VARCHAR2(1);
9196    l_cursor_id                  NUMBER;
9197    l_rows                   NUMBER;
9198    l_new_resource_assignment            BOOLEAN;
9199    l_function_allowed               VARCHAR2(1);
9200    l_resp_id                    NUMBER := 0;
9201    l_user_id                                NUMBER := 0;
9202    l_module_name                                VARCHAR2(80);
9203    l_budget_rlmid                               NUMBER;
9204    l_budget_alias                               VARCHAR2(80);  --bug 3711693
9205    l_uncategorized_list_id          NUMBER;
9206    l_uncategorized_rlmid                        NUMBER;
9207    l_uncategorized_resid                        NUMBER;
9208    l_track_as_labor_flag                        VARCHAR2(1);
9209    l_multi_currency_billing_flag      PA_PROJECTS_ALL.MULTI_CURRENCY_BILLING_FLAG%TYPE;
9210 
9211 l_amg_segment1       VARCHAR2(25);
9212 l_amg_task_number       VARCHAR2(50);
9213 
9214 --needed to get the field values associated to a AMG message
9215 
9216    CURSOR   l_amg_project_csr
9217       (p_pa_project_id pa_projects.project_id%type)
9218    IS
9219    SELECT   segment1
9220    FROM     pa_projects p
9221    WHERE p.project_id = p_pa_project_id;
9222 
9223    CURSOR   l_amg_task_csr
9224       (p_pa_task_id pa_tasks.task_id%type)
9225    IS
9226    SELECT   task_number
9227    FROM     pa_tasks p
9228    WHERE p.task_id = p_pa_task_id;
9229 
9230 p_multiple_task_msg     VARCHAR2(1) := 'T';
9231 
9232 --Added for the bug 3453650
9233    CURSOR l_budget_attrs_csr(p_budget_type_code VARCHAR2,p_project_id number)
9234    IS
9235    SELECT BUDGET_VERSION_ID,version_name,budget_entry_method_code,
9236    RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION
9237    FROM PA_BUDGET_VERSIONS
9238    --WHERE VERSION_NAME=p_budget_version_number
9239    Where budget_type_code=p_budget_type_code
9240    and project_id = p_project_id
9241    and budget_status_code    = 'W';
9242 
9243    /* Version number is mandatory for the finplan model */
9244    CURSOR l_finplan_attrs_csr(c_budget_version_id NUMBER)
9245    IS
9246    SELECT version_name,CURRENT_WORKING_FLAG,
9247    RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION,version_type
9248    FROM PA_BUDGET_VERSIONS
9249    WHERE budget_version_id = c_budget_version_id;
9250 
9251    CURSOR l_finplan_type_name_csr(p_finplan_type_id NUMBER)
9252    IS
9253    SELECT name
9254    FROM pa_fin_plan_types_vl
9255    WHERE fin_plan_type_id=p_finplan_type_id;
9256 
9257 
9258 
9259    CURSOR get_resource_list_name_csr(p_resource_list_id NUMBER)
9260    IS
9261    SELECT name
9262    FROM pa_resource_lists
9263    WHERE p_resource_list_id=p_resource_list_id;
9264 
9265    CURSOR get_status_code_csr(p_budget_version_id NUMBER)
9266    IS
9267    select budget_status_code
9268    from pa_budget_versions
9269    where budget_version_id = p_budget_version_id;
9270 
9271    CURSOR l_finplan_line_csr
9272       (p_resource_assigment_id NUMBER
9273       ,p_budget_start_date     DATE
9274       ,p_txn_currency_code VARCHAR2)
9275    IS
9276    SELECT 'X'
9277    FROM   pa_budget_lines
9278    WHERE  resource_assignment_id = p_resource_assigment_id
9279    AND    start_date = p_budget_start_date
9280    AND    txn_currency_code = p_txn_currency_code;
9281 
9282 /*Added a new cursor c_dff_values for Bug 6417360*/
9283    cursor c_dff_values(p_budget_version_id NUMBER)
9284    is
9285    select attribute_category,
9286    attribute1,
9287    attribute2,
9288    attribute3,
9289    attribute4,
9290    attribute5,
9291    attribute6,
9292    attribute7,
9293    attribute8,
9294    attribute9,
9295    attribute10,
9296    attribute11,
9297    attribute12,
9298    attribute13,
9299    attribute14,
9300    attribute15
9301    from pa_budget_versions
9302    where budget_version_id = p_budget_version_id;
9303 /*End of code for Bug 6417360*/
9304 
9305    l_budget_version_name       pa_budget_versions.version_name%TYPE := null;
9306    l_fin_plan_type_id          number;
9307    l_fin_plan_type_name        pa_fin_plan_types_tl.name%TYPE:=null;
9308    l_current_working_flag      pa_budget_versions.current_working_flag%TYPE :=null;
9309    l_budget_entry_code         pa_budget_versions.budget_entry_method_code%TYPE :=null;
9310 --   l_locked_by_person_id       pa_budget_versions.locked_by_person_id%TYPE;
9311    l_record_version_number     pa_budget_versions.record_version_number%TYPE;
9312 
9313    l_amount_set_id             pa_proj_fp_options.all_amount_set_id%TYPE;
9314    l_fin_plan_level_code            pa_proj_fp_options.cost_fin_plan_level_code%TYPE :=null;
9315    l_person_id per_all_people_f.person_id%TYPE;
9316    l_resource_id per_all_people_f.person_id%TYPE;
9317    l_baselined_version_id NUMBER;
9318    l_debug_mode VARCHAR2(1);
9319    l_version_type pa_budget_versions.version_type%TYPE;
9320    l_curr_work_version_id VARCHAR2(15);
9321    l_debug_level5            CONSTANT NUMBER :=5;
9322    l_baselined_Ver_options_id VARCHAR2(15);
9323    l_budget_lines_in                budget_line_in_tbl_type;
9324    l_debug_level3          CONSTANT NUMBER := 3;
9325    l_finplan_lines_tab              pa_fin_plan_pvt.budget_lines_tab;
9326    l_uncategorized_res_list_id pa_resource_list_members.resource_list_id%TYPE;
9327    l_unit_of_measure pa_resources.unit_of_measure%TYPE;
9328    l_unc_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
9329    l_unc_unit_of_measure            pa_resources.unit_of_measure%TYPE;
9330    -- Bug Fix: 4569365. Removed MRC code.
9331    -- l_calling_context               pa_mrc_finplan.g_calling_module%TYPE;
9332    l_calling_context               VARCHAR2(30);
9333 
9334    l_budget_status_code     pa_budget_versions.budget_status_code%TYPE;
9335 
9336    lx_budget_version_name       pa_budget_versions.version_name%TYPE := null;
9337    lx_budget_version_number    pa_budget_versions.version_number%TYPE  :=null;
9338    lx_version_type             pa_budget_versions.version_type%TYPE := null;
9339    lx_fin_plan_type_id         pa_fin_plan_types_b.fin_plan_type_id%TYPE :=null;
9340    lx_fin_plan_type_name       pa_fin_plan_types_tl.name%TYPE:=null;
9341    lx_set_current_working_flag      pa_budget_versions.current_working_flag%TYPE :=null;
9342    lx_locked_by_person_id       pa_budget_versions.locked_by_person_id%TYPE;
9343    lx_resource_list_id         pa_budget_versions.resource_list_id%TYPE;
9344    lx_plan_in_multi_curr_flag  pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
9345    lx_time_phased_type_code    pa_proj_fp_options.cost_time_phased_code%TYPE;
9346    lx_resource_list_name       pa_resource_lists_all_bg.Name%TYPE := null;
9347    lx_raw_cost_flag                  VARCHAR2(1) ;
9348    lx_burdened_cost_flag             VARCHAR2(1);
9349    lx_revenue_flag                   VARCHAR2(1);
9350    lx_cost_qty_flag                  VARCHAR2(1);
9351    lx_revenue_qty_flag               VARCHAR2(1);
9352    lx_all_qty_flag                   VARCHAR2(1);
9353    x_return_status VARCHAR2(1);
9354    lx_projfunc_cost_rate_type        pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9355    lx_projfunc_cost_rate_date_typ    pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
9356    lx_projfunc_cost_rate_date        pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
9357    lx_projfunc_rev_rate_type         pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9358    lx_projfunc_rev_rate_date_typ     pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
9359    lx_projfunc_rev_rate_date         pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
9360    lx_project_cost_rate_type         pa_proj_fp_options.project_cost_rate_type%TYPE ;
9361    lx_project_cost_rate_date_typ     pa_proj_fp_options.project_cost_rate_date_type%TYPE  ;
9362    lx_project_cost_rate_date         pa_proj_fp_options.project_cost_rate_date%TYPE ;
9363    lx_project_rev_rate_type          pa_proj_fp_options.project_rev_rate_type%TYPE  ;
9364    lx_project_rev_rate_date_typ      pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
9365    lx_project_rev_rate_date          pa_proj_fp_options.project_rev_rate_date%TYPE ;
9366 
9367    l_project_currency_code            pa_projects_all.project_currency_code%TYPE;  -- 3453650
9368    l_projfunc_currency_code           pa_projects_all.projfunc_currency_code%TYPE; -- 3453650
9369 
9370    i number;
9371    j number;
9372    lx_change_reason_code VARCHAR2(30);
9373 
9374    l_data                       VARCHAR2(2000);
9375    l_msg_index_out               NUMBER;
9376 
9377 /*Commenting the old variables and adding new ones for bug 6408139*/
9378    /*Earlier they were not being used anywhere else, but now will be used */
9379 --   l_bill_rate_flag        pa_fin_plan_amount_sets.bill_rate_flag%type;
9380 --   l_cost_rate_flag        pa_fin_plan_amount_sets.cost_rate_flag%type;
9381 --   l_burden_rate_flag      pa_fin_plan_amount_sets.burden_rate_flag%type;
9382    lx_bill_rate_flag        pa_fin_plan_amount_sets.bill_rate_flag%type;
9383    lx_cost_rate_flag        pa_fin_plan_amount_sets.cost_rate_flag%type;
9384    lx_burden_rate_flag      pa_fin_plan_amount_sets.burden_rate_flag%type;
9385    l_using_resource_lists_flag           VARCHAR2(1);
9386    l_mfc_cost_type_id_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9387    l_etc_method_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
9388    l_spread_curve_id_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9389    l_budget_type_code                    pa_budget_types.budget_type_code%TYPE;
9390    l_amg_project_number                  pa_projects_all.segment1%TYPE;
9391    l_proj_fp_options_id             pa_proj_fp_options.proj_fp_options_id%TYPE;
9392    l_CW_version_id                  pa_budget_versions.budget_version_id%TYPE;
9393    l_CW_record_version_number       pa_budget_versions.record_Version_number%TYPE;
9394    l_allow_qty_flag                  VARCHAR2(1);
9395    l_conv_attrs_to_be_validated     VARCHAR2(30);
9396    l_is_rate_type_valid             BOOLEAN;
9397    l_call_validate_curr_api_flg     VARCHAR2(1);
9398    l_projfunc_cost_rate_type        pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9399    l_projfunc_rev_rate_type         pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9400    l_project_cost_rate_type         pa_proj_fp_options.project_cost_rate_type%TYPE ;
9401    l_project_rev_rate_type          pa_proj_fp_options.project_rev_rate_type%TYPE ;
9402    l_projfunc_cost_exchange_rate    pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
9403    l_projfunc_rev_exchange_rate     pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
9404    l_project_cost_exchange_rate     pa_budget_lines.project_cost_exchange_rate%TYPE;
9405    l_project_rev_exchange_rate      pa_budget_lines.project_rev_exchange_rate%TYPE;
9406 
9407    l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
9408    /*Added local variables for bug 6408139*/
9409    l_plan_pref_code        pa_proj_fp_options.fin_plan_preference_code%TYPE;
9410    l_cost_amount_set_id    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9411    l_rev_amount_set_id     pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9412    l_all_amount_set_id     pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9413    l_proj_fp_options_id_new             pa_proj_fp_options.proj_fp_options_id%TYPE;
9414 
9415 
9416 /*Added local variables for Bug 6417360*/
9417    l_attribute_category   pa_budget_versions.attribute_category%type;
9418    l_attribute1           pa_budget_versions.attribute1%type;
9419    l_attribute2           pa_budget_versions.attribute2%type;
9420    l_attribute3           pa_budget_versions.attribute3%type;
9421    l_attribute4           pa_budget_versions.attribute4%type;
9422    l_attribute5           pa_budget_versions.attribute5%type;
9423    l_attribute6           pa_budget_versions.attribute6%type;
9424    l_attribute7           pa_budget_versions.attribute7%type;
9425    l_attribute8           pa_budget_versions.attribute8%type;
9426    l_attribute9           pa_budget_versions.attribute9%type;
9427    l_attribute10          pa_budget_versions.attribute10%type;
9428    l_attribute11          pa_budget_versions.attribute11%type;
9429    l_attribute12          pa_budget_versions.attribute12%type;
9430    l_attribute13          pa_budget_versions.attribute13%type;
9431    l_attribute14          pa_budget_versions.attribute14%type;
9432    l_attribute15          pa_budget_versions.attribute15%type;
9433 
9434    l_validate_status      varchar2(1);
9435 /*End of code for Bug 6417360*/
9436 
9437 BEGIN
9438 
9439 --  Standard begin of API savepoint
9440 
9441     SAVEPOINT update_budget_pub;
9442 
9443     --Added for the bug 3453650
9444     IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9445       lx_change_reason_code := NULL;
9446     ELSE
9447       lx_change_reason_code              :=   p_change_reason_code ;
9448     END IF;
9449 
9450     IF p_set_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9451       lx_set_current_working_flag := NULL;
9452     ELSE
9453       lx_set_current_working_flag              :=   p_set_current_working_flag  ;
9454     END IF;
9455 
9456     IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9457       lx_budget_version_number := NULL;
9458     ELSE
9459       lx_budget_version_number              :=   p_budget_version_number  ;
9460     END IF;
9461 
9462     IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9463       lx_projfunc_cost_rate_type := NULL;
9464     ELSE
9465       lx_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
9466     END IF;
9467 
9468      IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9469       lx_projfunc_cost_rate_date_typ  := NULL;
9470     ELSE
9471       lx_projfunc_cost_rate_date_typ   :=   p_projfunc_cost_rate_date_typ  ;
9472     END IF;
9473 
9474     IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9475       lx_projfunc_cost_rate_date := NULL;
9476     ELSE
9477       lx_projfunc_cost_rate_date       :=   p_projfunc_cost_rate_date      ;
9478     END IF;
9479 
9480     IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9481       lx_projfunc_rev_rate_type := NULL;
9482     ELSE
9483       lx_projfunc_rev_rate_type        :=   p_projfunc_rev_rate_type       ;
9484     END IF;
9485 
9486     IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9487       lx_projfunc_rev_rate_date_typ  := NULL;
9488     ELSE
9489       lx_projfunc_rev_rate_date_typ    :=   p_projfunc_rev_rate_date_typ   ;
9490     END IF;
9491 
9492     IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9493       lx_projfunc_rev_rate_date := NULL;
9494     ELSE
9495       lx_projfunc_rev_rate_date        :=   p_projfunc_rev_rate_date       ;
9496     END IF;
9497 
9498     IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9499       lx_project_cost_rate_type := NULL;
9500     ELSE
9501       lx_project_cost_rate_type        :=   p_project_cost_rate_type       ;
9502     END IF;
9503 
9504     IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9505       lx_project_cost_rate_date_typ  := NULL;
9506     ELSE
9507       lx_project_cost_rate_date_typ    :=   p_project_cost_rate_date_typ   ;
9508     END IF;
9509 
9510     IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9511       lx_project_cost_rate_date := NULL;
9512     ELSE
9513       lx_project_cost_rate_date        :=   p_project_cost_rate_date       ;
9514     END IF;
9515 
9516     IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9517       lx_project_rev_rate_type := NULL;
9518     ELSE
9519       lx_project_rev_rate_type         :=   p_project_rev_rate_type        ;
9520     END IF;
9521 
9522     IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9523       lx_project_rev_rate_date_typ  := NULL;
9524     ELSE
9525       lx_project_rev_rate_date_typ     :=   p_project_rev_rate_date_typ    ;
9526     END IF;
9527 
9528     IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9529       lx_project_rev_rate_date := NULL;
9530     ELSE
9531       lx_project_rev_rate_date         :=   p_project_rev_rate_date        ;
9532     END IF;
9533     /*Added checks for Plan Amount Entry Flags for bug 6408139*/
9534     /*If the flags are PASSED as NULL, then it would mean that */
9535     /*user wants to make the flag as 'N' */
9536     IF p_raw_cost_flag = NULL THEN
9537       lx_raw_cost_flag  := 'N';
9538     ELSE
9539       lx_raw_cost_flag                 :=   p_raw_cost_flag                ;
9540     END IF;
9541 
9542     IF p_burdened_cost_flag = NULL THEN
9543       lx_burdened_cost_flag  := 'N';
9544     ELSE
9545       lx_burdened_cost_flag            :=   p_burdened_cost_flag           ;
9546     END IF;
9547 
9548     IF p_revenue_flag = NULL THEN
9549       lx_revenue_flag  := 'N';
9550     ELSE
9551       lx_revenue_flag                  :=   p_revenue_flag                 ;
9552     END IF;
9553 
9554     IF p_cost_qty_flag = NULL THEN
9555       lx_cost_qty_flag  := 'N';
9556     ELSE
9557       lx_cost_qty_flag                 :=   p_cost_qty_flag                ;
9558     END IF;
9559 
9560     IF p_revenue_qty_flag = NULL THEN
9561       lx_revenue_qty_flag  := 'N';
9562     ELSE
9563       lx_revenue_qty_flag              :=   p_revenue_qty_flag             ;
9564     END IF;
9565 
9566     IF p_all_qty_flag = NULL THEN
9567       lx_all_qty_flag  := 'N';
9568     ELSE
9569       lx_all_qty_flag                  :=   p_all_qty_flag                 ;
9570     END IF;
9571 
9572     IF p_bill_rate_flag = NULL THEN
9573       lx_bill_rate_flag  := 'N';
9574     ELSE
9575       lx_bill_rate_flag                  :=   p_bill_rate_flag                 ;
9576     END IF;
9577 
9578     IF p_cost_rate_flag = NULL THEN
9579       lx_cost_rate_flag  := 'N';
9580     ELSE
9581       lx_cost_rate_flag                  :=   p_cost_rate_flag                 ;
9582     END IF;
9583 
9584     IF p_burden_rate_flag = NULL THEN
9585       lx_burden_rate_flag  := 'N';
9586     ELSE
9587       lx_burden_rate_flag                 :=   p_burden_rate_flag                 ;
9588     END IF;
9589     /*Checks End for Plan Amount Entry Flags for bug 6408139*/
9590 
9591     l_user_id := FND_GLOBAL.User_id;
9592 
9593 /*  The G_MISS_XXX/null handling for these variables below has been deleted from the existing code in update_budget
9594     . This handling would be done in validate_header_info now */
9595     l_project_id          :=  p_pa_project_id;
9596     l_budget_type_code    :=  p_budget_type_code;
9597     l_fin_plan_type_id    :=  p_finplan_type_id;
9598     lx_fin_plan_type_name :=  p_finplan_type_name;
9599     lx_version_type       :=  p_version_type  ;
9600 
9601      --Call PA_BUDGET_PVT.validate_header_info to do the necessary
9602      --header level validations
9603      PA_BUDGET_PVT.validate_header_info
9604           ( p_api_version_number          => p_api_version_number
9605            ,p_api_name                    => l_api_name
9606            ,p_init_msg_list               => p_init_msg_list
9607            ,px_pa_project_id              => l_project_id
9608            ,p_pm_project_reference        => p_pm_project_reference
9609            ,p_pm_product_code             => p_pm_product_code
9610            ,px_budget_type_code           => l_budget_type_code
9611            ,px_fin_plan_type_id           => l_fin_plan_type_id
9612            ,px_fin_plan_type_name         => lx_fin_plan_type_name
9613            ,px_version_type               => lx_version_type
9614            ,p_budget_version_number       => p_budget_version_number
9615            ,p_change_reason_code          => lx_change_reason_code
9616            ,p_function_name               => 'PA_PM_UPDATE_BUDGET'
9617            ,x_budget_entry_method_code    => l_budget_entry_method_code
9618            ,x_resource_list_id            => lx_resource_list_id
9619            ,x_budget_version_id           => l_budget_version_id
9620            ,x_fin_plan_level_code         => l_fin_plan_level_code
9621            ,x_time_phased_code            => lx_time_phased_type_code
9622            ,x_plan_in_multi_curr_flag     => lx_plan_in_multi_curr_flag
9623            ,x_budget_amount_code          => l_budget_amount_code
9624            ,x_categorization_code         => l_categorization_code
9625            ,x_project_number              => l_amg_project_number
9626            /* Plan Amount Entry flags introduced by bug 6408139 */
9627            ,px_raw_cost_flag              => lx_raw_cost_flag
9628            ,px_burdened_cost_flag         => lx_burdened_cost_flag
9629            ,px_revenue_flag               => lx_revenue_flag
9630            ,px_cost_qty_flag              => lx_cost_qty_flag
9631            ,px_revenue_qty_flag           => lx_revenue_qty_flag
9632            ,px_all_qty_flag               => lx_all_qty_flag
9633            ,px_bill_rate_flag             => lx_bill_rate_flag
9634            ,px_cost_rate_flag             => lx_cost_rate_flag
9635            ,px_burden_rate_flag           => lx_burden_rate_flag
9636            /* Plan Amount Entry flags introduced by bug 6408139 */
9637            ,x_msg_count                   => p_msg_count
9638            ,x_msg_data                    => p_msg_data
9639            ,x_return_status               => p_return_status );
9640 
9641      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9642            IF(l_debug_mode='Y') THEN
9643                  pa_debug.g_err_stage := 'validate header info API falied';
9644                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
9645            END IF;
9646            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9647      END IF;
9648 
9649       OPEN l_amg_project_csr( l_project_id );
9650       FETCH l_amg_project_csr INTO l_amg_segment1;
9651       CLOSE l_amg_project_csr;
9652 
9653     IF l_budget_type_code IS NOT NULL THEN
9654 
9655        OPEN l_budget_attrs_csr(l_budget_type_code,l_project_id);
9656        FETCH l_budget_attrs_csr INTO l_budget_version_id,l_budget_version_name,l_budget_entry_method_code,
9657        l_resource_list_id,l_change_reason_code,l_description;
9658        CLOSE l_budget_attrs_csr;
9659 
9660 
9661        OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
9662        FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
9663                        , l_entry_level_code
9664                        , l_categorization_code;
9665        CLOSE l_budget_entry_method_csr;
9666 
9667     ELSE
9668 
9669      --Bug 5031071 l_budget_version_id fetched above and will contain the value
9670        OPEN l_finplan_attrs_csr(l_budget_version_id);
9671        FETCH l_finplan_attrs_csr INTO l_budget_version_name,l_current_working_flag,
9672        l_resource_list_id,l_change_reason_code,l_description,l_version_type;
9673        CLOSE l_finplan_attrs_csr;
9674 
9675 
9676     END IF;
9677 
9678 
9679       IF l_budget_version_id IS NULL THEN
9680 
9681                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9682                 THEN
9683                       pa_interface_utils_pub.map_new_amg_msg
9684                        ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
9685                         ,p_msg_attribute    => 'CHANGE'
9686                         ,p_resize_flag      => 'N'
9687                         ,p_msg_context      => 'BUDG'
9688                         ,p_attribute1       => l_amg_segment1
9689                         ,p_attribute2       => ''
9690                         ,p_attribute3       => lx_fin_plan_type_name
9691                         ,p_attribute4       => ''
9692                         ,p_attribute5       => '');
9693                 END IF;
9694           p_multiple_task_msg  := 'F';  -- 3453650
9695       END IF;
9696 
9697   IF l_budget_type_code IS NULL THEN
9698         PA_COMP_PROFILE_PUB.GET_USER_INFO
9699                 (p_user_id         => l_user_id,
9700                  x_person_id       => l_person_id,
9701                  x_resource_id     => l_resource_id,
9702                  x_resource_name   => l_resource_name);
9703 
9704             l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
9705                                          (p_budget_version_id => l_budget_version_id);
9706 
9707       --Try to lock the version before updating the version. This is required so that nobody else can access it.
9708            pa_fin_plan_pvt.lock_unlock_version
9709                     (p_budget_version_id       => l_budget_version_id,
9710                      p_record_version_number   => l_record_version_number,
9711                      p_action                  => 'L',
9712                      p_user_id                 => l_user_id,
9713                      p_person_id               => lx_locked_by_person_id,
9714                      x_return_status           => x_return_status,
9715                      x_msg_count               => l_msg_count,
9716                      x_msg_data                => l_msg_data) ;
9717 
9718 
9719                 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
9720 
9721                      IF l_debug_mode = 'Y' THEN
9722                            pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
9723                            pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,5);
9724                      END IF;
9725 
9726                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9727                 END IF;
9728   END IF; -- END IF FOR l_budget_type_code is not null
9729 
9730 
9731      l_time_phased_type_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
9732 
9733 IF p_multiple_task_msg = 'F' THEN
9734 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9735 END IF;
9736 
9737      IF (p_budget_version_name IS NOT NULL AND p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9738         --(p_budget_version_name <> l_budget_version_name) THEN
9739         ((p_budget_version_name <> l_budget_version_name OR l_budget_version_name IS NULL)) THEN       --Bug 6600625
9740         lx_budget_version_name := p_budget_version_name;
9741      ELSE
9742        lx_budget_version_name := l_budget_version_name;
9743      END IF;
9744 
9745 /*Commenting for bug 6408139 */
9746 /*
9747  --Added after review comments
9748  IF l_budget_type_code IS NULL THEN
9749 -- dbms_output.put_line ('about to get plan amt flags ');
9750         l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9751 
9752                  PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9753                       P_AMOUNT_SET_ID      => l_amount_set_id
9754                      ,X_RAW_COST_FLAG      => lx_raw_cost_flag
9755                      ,X_BURDENED_FLAG      => lx_burdened_cost_flag
9756                      ,X_REVENUE_FLAG       => lx_revenue_flag
9757                      ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9758                      ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
9759                      ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
9760                      ,X_BILL_RATE_FLAG     => l_bill_rate_flag
9761                      ,X_COST_RATE_FLAG     => l_cost_rate_flag
9762                      ,X_BURDEN_RATE_FLAG   => l_burden_rate_flag
9763                      ,x_message_count      => l_msg_count
9764                      ,x_return_status      => x_return_status
9765                      ,x_message_data       => l_msg_data) ;
9766 
9767                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9768                     THEN
9769                          -- RAISE  FND_API.G_EXC_ERROR;
9770                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9771                     END IF;
9772   END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL. */
9773   /*Commenting ends for bug 6408139 */
9774 
9775 
9776   /* Modified code for bug 6408139*/
9777   /* Bug 6408139 : Get Plan Amount Entry flags ONLY if ALL the passed ones are G_PA_MISS_CHAR */
9778   /* If even a single flag has been passed as NOT G_PA_MISS_CHAR, then we have already got the */
9779   /* flags from validate_header_info */
9780  IF l_budget_type_code IS NULL THEN
9781 
9782     IF (  ( lx_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9783           ( lx_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9784       ( lx_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9785       ( lx_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9786       ( lx_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9787       ( lx_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9788       ( lx_bill_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9789       ( lx_cost_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9790       ( lx_burden_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) THEN
9791 
9792         l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9793 
9794                  PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9795                       P_AMOUNT_SET_ID      => l_amount_set_id
9796                      ,X_RAW_COST_FLAG      => lx_raw_cost_flag
9797                      ,X_BURDENED_FLAG      => lx_burdened_cost_flag
9798                      ,X_REVENUE_FLAG       => lx_revenue_flag
9799                      ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9800                      ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
9801                      ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
9802                      ,X_BILL_RATE_FLAG     => lx_bill_rate_flag -- l_bill_rate_flag
9803                      ,X_COST_RATE_FLAG     => lx_cost_rate_flag -- l_cost_rate_flag
9804                      ,X_BURDEN_RATE_FLAG   => lx_burden_rate_flag -- l_burden_rate_flag
9805                      ,x_message_count      => l_msg_count
9806                      ,x_return_status      => x_return_status
9807                      ,x_message_data       => l_msg_data) ;
9808 
9809                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9810                     THEN
9811                          -- RAISE  FND_API.G_EXC_ERROR;
9812                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9813                     END IF;
9814 
9815     END IF ; -- Getting plan flags only when all are passed as G_PA_MISS_CHAR
9816    END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL.
9817    /*Modified code ends for bug 6408139*/
9818 
9819 
9820    OPEN l_lock_budget_csr( l_budget_version_id ); -- 3453650
9821    CLOSE l_lock_budget_csr;             --FYI, does not release locks
9822 
9823 /*   -- Changes made by Xin Liu for using of SQL BIND VARIABLE 12-MAY-2003 */
9824     --building the dynamic SQL statement
9825 
9826     l_statement := ' UPDATE PA_BUDGET_VERSIONS SET ';
9827 
9828     IF  (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
9829     AND    nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9830     THEN
9831 
9832              l_statement := l_statement ||
9833                            ' DESCRIPTION = :xDescription'||',';
9834 
9835             l_update_yes_flag := 'Y';
9836     END IF;
9837 
9838     IF  (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
9839     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)
9840     THEN
9841 
9842     IF ( p_change_reason_code IS NOT NULL AND
9843              p_change_reason_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
9844         THEN
9845 
9846             OPEN l_budget_change_reason_csr( p_change_reason_code );
9847             FETCH l_budget_change_reason_csr INTO l_dummy;
9848 
9849             IF l_budget_change_reason_csr%NOTFOUND
9850             THEN
9851                 CLOSE l_budget_change_reason_csr;
9852 
9853             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9854             THEN
9855             pa_interface_utils_pub.map_new_amg_msg
9856              ( p_old_message_code => 'PA_CHANGE_REASON_INVALID'
9857               ,p_msg_attribute    => 'CHANGE'
9858               ,p_resize_flag      => 'N'
9859               ,p_msg_context      => 'BUDG'
9860               ,p_attribute1       => l_amg_segment1
9861               ,p_attribute2       => ''
9862               ,p_attribute3       => l_budget_type_code
9863               ,p_attribute4       => ''
9864               ,p_attribute5       => '');
9865             END IF;
9866 
9867                 RAISE FND_API.G_EXC_ERROR;
9868             END IF;
9869 
9870         CLOSE l_budget_change_reason_csr;
9871 
9872         END IF;
9873 
9874         l_statement := l_statement ||
9875                        ' CHANGE_REASON_CODE = :xChangeReasonCode'||',';
9876 
9877         l_update_yes_flag := 'Y';
9878 
9879     END IF;
9880 
9881 /*Addition for the bug 3453650 starts */
9882 -- commented below code for the bug 4702500/4730094
9883 /*
9884 IF l_budget_type_code IS NULL THEN
9885 
9886         IF (p_set_current_working_flag IS  NULL
9887         OR p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
9888         AND (nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
9889          nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
9890         THEN
9891           l_statement := l_statement || 'CURRENT_WORKING_FLAG = :xSetCurrentWorkingFlag' || ',';
9892         l_update_yes_flag := 'Y';
9893 
9894         END IF;
9895 
9896 END IF; --l_budget_type_code is null
9897 */
9898 
9899 IF (p_budget_version_name IS NULL
9900 OR p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
9901 AND  (nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
9902          nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
9903 then
9904   l_statement := l_statement || 'VERSION_NAME = :xBudgetVersionName' || ',';
9905 
9906   l_update_yes_flag := 'Y';
9907 end if;
9908 
9909 /*Addition for the bug 3453650 ends */
9910 
9911 /*Below code is added for Bug 6417360*/
9912 
9913    open c_dff_values(l_budget_version_id);
9914 
9915    fetch c_dff_values into l_attribute_category,
9916                            l_attribute1,
9917                            l_attribute2,
9918                            l_attribute3,
9919                            l_attribute4,
9920                            l_attribute5,
9921                            l_attribute6,
9922                            l_attribute7,
9923                            l_attribute8,
9924                            l_attribute9,
9925                            l_attribute10,
9926                            l_attribute11,
9927                            l_attribute12,
9928                            l_attribute13,
9929                            l_attribute14,
9930                            l_attribute15;
9931     close c_dff_values;
9932 
9933     --Validate PA_BUDGET_VERSIONS_DESC_FLEX
9934 
9935 -- 6188316 Adding double quotes for all 15 attributes and category values being appended to Update Query String
9936 
9937     if ((p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9938          or p_attribute_category is null)
9939         and nvl(p_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9940         <> nvl(l_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9941             l_attribute_category := p_attribute_category;
9942             if l_attribute_category is null then
9943 
9944                  l_statement := l_statement ||
9945                            ' ATTRIBUTE_CATEGORY = null,';
9946             else
9947                 l_statement := l_statement ||
9948                            ' ATTRIBUTE_CATEGORY = '''||l_attribute_category||''',';
9949             end if;
9950              l_update_yes_flag := 'Y';
9951     end if;
9952 
9953     if ((p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9954          or p_attribute1 is null)
9955         and nvl(p_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9956         <> nvl(l_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9957             l_attribute1 := p_attribute1;
9958            -- dbms_output.put_line(' came inside the outer if ');
9959              if l_attribute1 is null then
9960                --  dbms_output.put_line(' came inside the inner if ');
9961                  l_statement := l_statement ||
9962                                ' ATTRIBUTE1 = null,';
9963              else
9964                 l_statement := l_statement ||
9965                                ' ATTRIBUTE1 = '''||l_attribute1||''',';
9966              end if;
9967              l_update_yes_flag := 'Y';
9968     end if;
9969 
9970     if ((p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9971          or p_attribute2 is null)
9972         and nvl(p_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9973         <> nvl(l_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9974             l_attribute2 := p_attribute2;
9975              if l_attribute2 is null then
9976                  l_statement := l_statement ||
9977                                ' ATTRIBUTE2 = null,';
9978              else
9979                 l_statement := l_statement ||
9980                                ' ATTRIBUTE2 = '''||l_attribute2||''',';
9981              end if;
9982              l_update_yes_flag := 'Y';
9983     end if;
9984 
9985     if ((p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9986          or p_attribute3 is null)
9987         and nvl(p_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9988         <> nvl(l_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9989             l_attribute3 := p_attribute3;
9990              if l_attribute3 is null then
9991                  l_statement := l_statement ||
9992                                ' ATTRIBUTE3 = null,';
9993              else
9994                 l_statement := l_statement ||
9995                                ' ATTRIBUTE3 = '''||l_attribute3||''',';
9996              end if;
9997              l_update_yes_flag := 'Y';
9998     end if;
9999 
10000     if ((p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10001          or p_attribute4 is null)
10002         and nvl(p_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10003         <> nvl(l_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10004             l_attribute4 := p_attribute4;
10005              if l_attribute4 is null then
10006                  l_statement := l_statement ||
10007                                ' ATTRIBUTE4 = null,';
10008              else
10009                 l_statement := l_statement ||
10010                                ' ATTRIBUTE4 = '''||l_attribute4||''',';
10011              end if;
10012              l_update_yes_flag := 'Y';
10013     end if;
10014 
10015     if ((p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10016          or p_attribute5 is null)
10017         and nvl(p_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10018         <> nvl(l_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10019             l_attribute5 := p_attribute5;
10020              if l_attribute5 is null then
10021                  l_statement := l_statement ||
10022                                ' ATTRIBUTE5 = null,';
10023              else
10024                 l_statement := l_statement ||
10025                                ' ATTRIBUTE5 = '''||l_attribute5||''',';
10026              end if;
10027              l_update_yes_flag := 'Y';
10028     end if;
10029 
10030     if ((p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10031          or p_attribute6 is null)
10032         and nvl(p_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10033         <> nvl(l_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10034             l_attribute6 := p_attribute6;
10035              if l_attribute6 is null then
10036                  l_statement := l_statement ||
10037                                ' ATTRIBUTE6 = null,';
10038              else
10039                 l_statement := l_statement ||
10040                                ' ATTRIBUTE6 = '''||l_attribute6||''',';
10041              end if;
10042              l_update_yes_flag := 'Y';
10043     end if;
10044 
10045     if ((p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10046          or p_attribute7 is null)
10047         and nvl(p_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10048         <> nvl(l_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10049             l_attribute7 := p_attribute7;
10050              if l_attribute7 is null then
10051                  l_statement := l_statement ||
10052                                ' ATTRIBUTE7 = null,';
10053              else
10054                 l_statement := l_statement ||
10055                                ' ATTRIBUTE7 = '''||l_attribute7||''',';
10056              end if;
10057               l_update_yes_flag := 'Y';
10058     end if;
10059 
10060     if ((p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10061          or p_attribute8 is null)
10062         and nvl(p_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10063         <> nvl(l_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10064             l_attribute8 := p_attribute8;
10065              if l_attribute8 is null then
10066                  l_statement := l_statement ||
10067                                ' ATTRIBUTE8 = null,';
10068              else
10069                 l_statement := l_statement ||
10070                                ' ATTRIBUTE8 = '''||l_attribute8||''',';
10071              end if;
10072              l_update_yes_flag := 'Y';
10073     end if;
10074 
10075     if ((p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10076          or p_attribute9 is null)
10077         and nvl(p_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10078         <> nvl(l_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10079             l_attribute9 := p_attribute9;
10080              if l_attribute9 is null then
10081                  l_statement := l_statement ||
10082                                ' ATTRIBUTE9 = null,';
10083              else
10084                 l_statement := l_statement ||
10085                                ' ATTRIBUTE9 = '''||l_attribute9||''',';
10086              end if;
10087              l_update_yes_flag := 'Y';
10088     end if;
10089 
10090     if ((p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10091          or p_attribute10 is null)
10092         and nvl(p_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10093         <> nvl(l_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10094             l_attribute10 := p_attribute10;
10095              if l_attribute10 is null then
10096                  l_statement := l_statement ||
10097                                ' ATTRIBUTE10 = null,';
10098              else
10099                 l_statement := l_statement ||
10100                                ' ATTRIBUTE10 = '''||l_attribute10||''',';
10101              end if;
10102              l_update_yes_flag := 'Y';
10103     end if;
10104 
10105     if ((p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10106          or p_attribute11 is null)
10107         and nvl(p_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10108         <> nvl(l_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10109             l_attribute11 := p_attribute11;
10110              if l_attribute11 is null then
10111                  l_statement := l_statement ||
10112                                ' ATTRIBUTE11 = null,';
10113              else
10114                 l_statement := l_statement ||
10115                                ' ATTRIBUTE11 = '''||l_attribute11||''',';
10116              end if;
10117              l_update_yes_flag := 'Y';
10118     end if;
10119 
10120     if ((p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10121          or p_attribute12 is null)
10122         and nvl(p_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10123         <> nvl(l_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10124             l_attribute12 := p_attribute12;
10125              if l_attribute12 is null then
10126                  l_statement := l_statement ||
10127                                ' ATTRIBUTE12 = null,';
10128              else
10129                 l_statement := l_statement ||
10130                                ' ATTRIBUTE12 = '''||l_attribute12||''',';
10131              end if;
10132              l_update_yes_flag := 'Y';
10133     end if;
10134 
10135     if ((p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10136          or p_attribute13 is null)
10137         and nvl(p_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10138         <> nvl(l_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10139             l_attribute13 := p_attribute13;
10140              if l_attribute13 is null then
10141                  l_statement := l_statement ||
10142                                ' ATTRIBUTE13 = null,';
10143              else
10144                 l_statement := l_statement ||
10145                                ' ATTRIBUTE13 = '''||l_attribute13||''',';
10146              end if;
10147              l_update_yes_flag := 'Y';
10148     end if;
10149 
10150     if ((p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10151          or p_attribute14 is null)
10152         and nvl(p_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10153         <> nvl(l_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10154             l_attribute14 := p_attribute14;
10155              if l_attribute14 is null then
10156                  l_statement := l_statement ||
10157                                ' ATTRIBUTE14 = null,';
10158              else
10159                 l_statement := l_statement ||
10160                                ' ATTRIBUTE14 = '''||l_attribute14||''',';
10161              end if;
10162              l_update_yes_flag := 'Y';
10163     end if;
10164 
10165     if ((p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10166          or p_attribute15 is null)
10167         and nvl(p_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10168         <> nvl(l_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10169             l_attribute15 := p_attribute15;
10170              if l_attribute15 is null then
10171                  l_statement := l_statement ||
10172                                ' ATTRIBUTE15 = null,';
10173              else
10174                 l_statement := l_statement ||
10175                                ' ATTRIBUTE15 = '''||l_attribute15||''',';
10176              end if;
10177              l_update_yes_flag := 'Y';
10178     end if;
10179 /*
10180     dbms_output.put_line('statement ');
10181     dbms_output.put_line('l_attribute_category '||l_attribute_category);
10182     dbms_output.put_line('l_attribute1 '||l_attribute1);
10183     dbms_output.put_line('l_attribute2 '||l_attribute2);
10184     dbms_output.put_line('l_attribute3 '||l_attribute3);
10185     dbms_output.put_line('l_attribute4 '||l_attribute4);
10186     dbms_output.put_line('l_attribute5 '||l_attribute5);
10187 
10188     dbms_output.put_line('l_attribute6 '||l_attribute6);
10189     dbms_output.put_line('l_attribute7 '||l_attribute7);
10190     dbms_output.put_line('l_attribute8 '||l_attribute8);
10191     dbms_output.put_line('l_attribute9 '||l_attribute9);
10192     dbms_output.put_line('l_attribute10 '||l_attribute10);
10193 
10194     dbms_output.put_line('l_attribute11 '||l_attribute11);
10195     dbms_output.put_line('l_attribute12 '||l_attribute12);
10196     dbms_output.put_line('l_attribute13 '||l_attribute13);
10197     dbms_output.put_line('l_attribute14 '||l_attribute14);
10198     dbms_output.put_line('l_attribute15 '||l_attribute15);*/
10199 
10200 
10201     pa_task_utils.validate_flex_fields(
10202           p_desc_flex_name        => 'PA_BUDGET_VERSIONS_DESC_FLEX'
10203          ,p_attribute_category    => l_attribute_category
10204          ,p_attribute1            => l_attribute1
10205          ,p_attribute2            => l_attribute2
10206          ,p_attribute3            => l_attribute3
10207          ,p_attribute4            => l_attribute4
10208          ,p_attribute5            => l_attribute5
10209          ,p_attribute6            => l_attribute6
10210          ,p_attribute7            => l_attribute7
10211          ,p_attribute8            => l_attribute8
10212          ,p_attribute9            => l_attribute9
10213          ,p_attribute10           => l_attribute10
10214          ,p_attribute11           => l_attribute11
10215          ,p_attribute12           => l_attribute12
10216          ,p_attribute13           => l_attribute13
10217          ,p_attribute14           => l_attribute14
10218          ,p_attribute15           => l_attribute15
10219          ,p_RETURN_msg            => l_msg_data
10220          ,p_validate_status       => l_validate_status
10221          );
10222      IF l_validate_status = 'N'
10223         THEN
10224              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10225              THEN
10226                   pa_interface_utils_pub.map_new_amg_msg
10227                             ( p_old_message_code => 'PA_INVALID_FF_VALUES'
10228                             ,p_msg_attribute    => 'CHANGE'
10229                             ,p_resize_flag      => 'N'
10230                             ,p_msg_context      => 'FLEX'
10231                             ,p_attribute1       => l_msg_data
10232                             ,p_attribute2       => ''
10233                             ,p_attribute3       => ''
10234                             ,p_attribute4       => ''
10235                             ,p_attribute5       => '');
10236             END IF;
10237         RAISE FND_API.G_EXC_ERROR;
10238      END IF;
10239 
10240 /*End of code for Bug 6417360*/
10241 
10242     IF l_update_yes_flag = 'Y'
10243     THEN
10244             l_statement := l_statement ||
10245                            ' LAST_UPDATE_DATE = '||''''||
10246                            SYSDATE||''''||',';
10247 
10248             l_statement := l_statement ||
10249                            ' LAST_UPDATED_BY = '||G_USER_ID||',';
10250 
10251             l_statement := l_statement ||
10252                            ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
10253 
10254             l_statement := l_statement ||
10255             ' WHERE BUDGET_VERSION_ID  = '||TO_CHAR(l_budget_version_id);
10256 
10257         l_cursor_id := DBMS_SQL.open_cursor;
10258         DBMS_SQL.parse(l_cursor_id, l_statement, DBMS_SQL.native);
10259 
10260     IF  (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
10261          AND    nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10262                 nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10263     THEN
10264       DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xDescription', p_description);
10265 
10266     END IF;
10267 
10268     IF  (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
10269     AND  nvl(p_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10270          nvl(l_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10271     THEN
10272       DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xChangeReasonCode', p_change_reason_code);
10273 
10274     END IF;
10275 
10276 
10277 /*Addition for the bug 3453650 starts */
10278 IF l_budget_type_code IS NULL THEN
10279     IF  (p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_set_current_working_flag IS NULL)
10280     AND  nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10281          nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10282     THEN
10283             -- Get the details of the current working version so as to pass it to the
10284             -- Set Current Working API.
10285             pa_fin_plan_utils.Get_Curr_Working_Version_Info(
10286                    p_project_id            => l_project_id
10287                   ,p_fin_plan_type_id      => l_fin_plan_type_id
10288                   ,p_version_type          => lx_version_type
10289                   ,x_fp_options_id         => l_proj_fp_options_id
10290                   ,x_fin_plan_version_id   => l_CW_version_id
10291                   ,x_return_status         => x_return_status
10292                   ,x_msg_count             => l_msg_count
10293                   ,x_msg_data              => l_msg_data );
10294 
10295             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10296                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10297             END IF;
10298 
10299             -- Further processing is required only if the version to be updated is not the current working verion
10300             IF  l_budget_version_id <>  l_CW_version_id THEN
10301 
10302                   --Get the record version number of the current working version
10303                   l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10304 
10305                   --Get the record version number of the version to be updated
10306                   l_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_budget_version_id);
10307 
10308                   pa_fin_plan_pvt.lock_unlock_version
10309                        (p_budget_version_id       => l_CW_version_id,
10310                         p_record_version_number   => l_CW_record_version_number,
10311                         p_action                  => 'L',
10312                         p_user_id                 => l_user_id,
10313                         p_person_id               => lx_locked_by_person_id,
10314                         x_return_status           => x_return_status,
10315                         x_msg_count               => l_msg_count,
10316                         x_msg_data                => l_msg_data) ;
10317 
10318                   IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
10319 
10320                         IF l_debug_mode = 'Y' THEN
10321                               pa_debug.g_err_stage := 'Error executing lock unlock version';
10322                               pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10323                         END IF;
10324 
10325                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10326 
10327                   END IF;
10328 
10329                   IF l_debug_mode = 'Y' THEN
10330                         pa_debug.g_err_stage := 'About to call set current working version';
10331                         pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10332                   END IF;
10333 
10334                   -- Getting the rec ver number again as it will be incremented by the api  lock_unlock_version
10335                   l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10336 
10337                   pa_fin_plan_pub.Set_Current_Working
10338                         (p_project_id                  => l_project_id,
10339                          p_budget_version_id           => l_budget_version_id,
10340                          p_record_version_number       => l_record_version_number,
10341                          p_orig_budget_version_id      => l_CW_version_id,
10342                          p_orig_record_version_number  => l_CW_record_version_number,
10343                          x_return_status               => x_return_status,
10344                          x_msg_count                   => l_msg_count,
10345                          x_msg_data                    => l_msg_data);
10346 
10347                   IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
10348                         IF  l_debug_mode= 'Y' THEN
10349                               pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
10350                               pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
10351                         END IF;
10352                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10353                   END IF;
10354 
10355             END IF; --  IF  l_created_version_id <>  l_CW_version_id THEN
10356 
10357 
10358     END IF;
10359 
10360 END IF; -- l_budget_type_code IS NULL
10361 
10362     IF  (p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_budget_version_name IS NULL)
10363     AND  nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10364          nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10365     THEN
10366         DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xBudgetVersionName', lx_budget_version_name);
10367 
10368     END IF;
10369 /*Addition for the bug 3453650 ends */
10370 
10371         l_rows   := DBMS_SQL.execute(l_cursor_id);
10372 
10373         IF DBMS_SQL.is_open (l_cursor_id)
10374         THEN
10375             DBMS_SQL.close_cursor (l_cursor_id);
10376         END IF;
10377 
10378    END IF;
10379 
10380 /* Bug 6408139 : We are setting the amount_set_id ONLY when atleast some of the */
10381 /* input amount entry flags ARE not G_PA_MISS_CHAR , which means, user wants to */
10382 /* change some flag*/
10383 IF l_budget_type_code IS NULL THEN   -- finplan model
10384 
10385   IF (( lx_raw_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10386           ( lx_burdened_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10387           ( lx_revenue_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10388           ( lx_cost_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10389           ( lx_revenue_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10390           ( lx_all_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10391           ( lx_bill_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10392           ( lx_cost_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10393           ( lx_burden_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) ) THEN
10394 
10395         --Get the preference code
10396         IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10397                 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
10398         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10399                 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
10400         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10401                 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
10402         END IF;
10403 
10404         IF l_debug_mode = 'Y' THEN
10405           pa_debug.g_err_stage := 'Preference code is -> ' || l_plan_pref_code;
10406           pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10407         END IF;
10408 
10409 
10410         --Get the amount set id.
10411         pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
10412         (
10413                  p_raw_cost_flag            => lx_raw_cost_flag
10414                 ,p_burdened_cost_flag       => lx_burdened_cost_flag
10415                 ,p_revenue_flag             => lx_revenue_flag
10416                 ,p_cost_qty_flag            => lx_cost_qty_flag
10417                 ,p_revenue_qty_flag         => lx_revenue_qty_flag
10418                 ,p_all_qty_flag             => lx_all_qty_flag
10419                 ,p_plan_pref_code           => l_plan_pref_code
10420                 ,p_bill_rate_flag           => lx_bill_rate_flag
10421                 ,p_cost_rate_flag           => lx_cost_rate_flag
10422                 ,p_burden_rate_flag         => lx_burden_rate_flag
10423                 ,x_cost_amount_set_id       => l_cost_amount_set_id
10424                 ,x_revenue_amount_set_id    => l_rev_amount_set_id
10425                 ,x_all_amount_set_id        => l_all_amount_set_id
10426                 ,x_message_count            => l_msg_count
10427                 ,x_return_status            => x_return_status
10428                 ,x_message_data             => l_msg_data
10429         );
10430 
10431         IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10432                 l_amount_set_id := l_cost_amount_set_id;
10433         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10434                 l_amount_set_id := l_rev_amount_set_id;
10435         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10436                 l_amount_set_id := l_all_amount_set_id;
10437         END IF;
10438 
10439         IF l_debug_mode = 'Y' THEN
10440            pa_debug.g_err_stage:= 'Amount set id is -> ' || l_amount_set_id;
10441            pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10442         END IF;
10443 
10444         l_proj_fp_options_id_new :=  PA_PROJ_FP_OPTIONS_PUB.Get_FP_Option_ID
10445                                      (p_project_id => l_project_id
10446                                      ,p_plan_type_id => l_fin_plan_type_id
10447                                      ,p_plan_version_id => l_budget_version_id
10448                                      );
10449 
10450 
10451         IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10452          UPDATE pa_proj_fp_options
10453          SET    cost_amount_set_id           =   l_amount_set_id
10454          WHERE  proj_fp_options_id = l_proj_fp_options_id_new;
10455         ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10456          UPDATE pa_proj_fp_options
10457          SET    revenue_amount_set_id         =   l_amount_set_id
10458          WHERE  proj_fp_options_id = l_proj_fp_options_id_new;
10459         ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL THEN
10460          UPDATE pa_proj_fp_options
10461          SET    all_amount_set_id             =   l_amount_set_id
10462          WHERE  proj_fp_options_id = l_proj_fp_options_id_new;
10463        END IF;
10464 
10465   END IF ; -- G_PA_MISS_CHAR condition
10466 
10467 END IF ; --IF l_budget_type_code IS NULL THEN
10468 
10469 /*Bug 6408139 : Code addition ends*/
10470 
10471   l_budget_lines_in := p_budget_lines_in;
10472 -- Changes for the bug 3453650
10473             IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
10474 
10475                   IF l_debug_mode = 'Y' THEN
10476                         pa_debug.g_err_stage := 'About to call validate budget lines in Budgets model';
10477                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10478                   END IF;
10479 
10480                 --Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
10481                 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
10482 
10483                              IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10484                                     l_budget_lines_in(i).pa_task_id   :=  NULL;
10485                              END IF;
10486 
10487                              IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10488                                     l_budget_lines_in(i).pm_task_reference  :=  NULL;
10489                               END IF;
10490 
10491                              IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10492                                     l_budget_lines_in(i).resource_alias :=  NULL;
10493                               END IF;
10494 
10495                              IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10496                                     l_budget_lines_in(i).resource_list_member_id:=  NULL;
10497                               END IF;
10498 
10499                              IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10500                                     l_budget_lines_in(i).budget_start_date:=  NULL;
10501                               END IF;
10502                              IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10503                                     l_budget_lines_in(i).budget_end_date:=  NULL;
10504                               END IF;
10505 
10506                               IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10507                                     l_budget_lines_in(i).period_name := NULL;
10508                               END IF;
10509 
10510                               IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10511                                     l_budget_lines_in(i).raw_cost   :=  NULL;
10512                               END IF;
10513 
10514                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10515                                     l_budget_lines_in(i).burdened_cost  := NULL;
10516                               END IF;
10517 
10518                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10519                                     l_budget_lines_in(i).revenue  := NULL;
10520                               END IF;
10521 
10522                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10523                                     l_budget_lines_in(i).quantity  := NULL;
10524                               END IF;
10525 
10526 
10527                               IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10528                                     l_budget_lines_in(i).change_reason_code  :=NULL;
10529                               END IF;
10530 
10531                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10532                                     l_budget_lines_in(i).description     :=  NULL;
10533                               END IF;
10534 
10535                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10536                                     l_budget_lines_in(i).attribute_category     :=  NULL;
10537                               END IF;
10538 
10539                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10540                                     l_budget_lines_in(i).attribute1     :=  NULL;
10541                               END IF;
10542 
10543                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10544                                     l_budget_lines_in(i).attribute2     :=  NULL;
10545                               END IF;
10546 
10547                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10548                                     l_budget_lines_in(i).attribute3     :=  NULL;
10549                               END IF;
10550 
10551                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10552                                     l_budget_lines_in(i).attribute4     :=  NULL;
10553                               END IF;
10554 
10555                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10556                                     l_budget_lines_in(i).attribute5     :=  NULL;
10557                               END IF;
10558 
10559                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10560                                     l_budget_lines_in(i).attribute6     :=  NULL;
10561                               END IF;
10562 
10563                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10564                                     l_budget_lines_in(i).attribute7     :=  NULL;
10565                               END IF;
10566 
10567                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10568                                     l_budget_lines_in(i).attribute8     :=  NULL;
10569                               END IF;
10570 
10571                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10572                                     l_budget_lines_in(i).attribute9     :=  NULL;
10573                               END IF;
10574 
10575                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10576                                     l_budget_lines_in(i).attribute10     :=  NULL;
10577                               END IF;
10578 
10579                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10580                                     l_budget_lines_in(i).attribute11     :=  NULL;
10581                               END IF;
10582 
10583                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10584                                     l_budget_lines_in(i).attribute12     :=  NULL;
10585                               END IF;
10586 
10587                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10588                                     l_budget_lines_in(i).attribute13     :=  NULL;
10589                               END IF;
10590 
10591                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10592                                     l_budget_lines_in(i).attribute14     :=  NULL;
10593                               END IF;
10594 
10595                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10596                                     l_budget_lines_in(i).attribute15     :=  NULL;
10597                               END IF;
10598 
10599                               IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10600                                     l_budget_lines_in(i).txn_currency_code := NULL;
10601                               END IF;
10602 
10603                               IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10604                                 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
10605                               END IF;
10606 
10607                               IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10608                               l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
10609                               END IF;
10610 
10611                               IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10612                               l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE     := NULL;
10613                               END IF;
10614 
10615                               IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10616                               l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
10617                               END IF;
10618 
10619                               IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10620                                l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE      := NULL;
10621                               END IF;
10622 
10623                               IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10624                               l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
10625                               END IF;
10626 
10627                               IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10628                               l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE      := NULL;
10629                               END IF;
10630 
10631                               IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10632                               l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
10633                               END IF;
10634 
10635                               IF  l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10636                               l_budget_lines_in(i).PROJECT_COST_RATE_TYPE      := NULL;
10637                               END IF;
10638 
10639                               IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10640                               l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
10641                               END IF;
10642 
10643                               IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE    THEN
10644                               l_budget_lines_in(i).PROJECT_COST_RATE_DATE      := NULL;
10645                               END IF;
10646 
10647                               IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
10648                               l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE  := NULL;
10649                               END IF;
10650 
10651                               IF  l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
10652                               l_budget_lines_in(i).PROJECT_REV_RATE_TYPE       := NULL;
10653                               END IF;
10654 
10655                               IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
10656                               l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE  := NULL;
10657                               END IF;
10658 
10659                               IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10660                               l_budget_lines_in(i).PROJECT_REV_RATE_DATE       := NULL;
10661                               END IF;
10662 
10663                               IF  l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
10664                               l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE   := NULL;
10665                               END IF;
10666 
10667                               IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
10668                               l_budget_lines_in(i).pm_product_code             := NULL;
10669                               END IF;
10670 
10671                               IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10672                               l_budget_lines_in(i).pm_budget_line_reference    := NULL;
10673                               END IF;
10674                 END LOOP;
10675 END IF; -- ( nvl(l_budget_lines_in.last,0) > 0 )
10676 
10677 l_version_info_rec.x_budget_version_id := l_budget_version_id;  --Added for bug 4290310.
10678 
10679 IF l_budget_type_code IS NOT NULL THEN
10680 
10681                   pa_budget_pvt.Validate_Budget_Lines
10682                   (p_pa_project_id               => l_project_id
10683                   ,p_budget_type_code            => l_budget_type_code
10684                   ,p_fin_plan_type_id            => NULL
10685                   ,p_version_type                => NULL
10686                   ,p_resource_list_id            => lx_resource_list_id
10687                   ,p_time_phased_code            => lx_time_phased_type_code
10688                   ,p_budget_entry_method_code    => l_budget_entry_method_code
10689                   ,p_entry_level_code            => l_entry_level_code
10690                   ,p_allow_qty_flag              => NULL
10691                   ,p_allow_raw_cost_flag         => NULL
10692                   ,p_allow_burdened_cost_flag    => NULL
10693                   ,p_allow_revenue_flag          => NULL
10694                   ,p_multi_currency_flag         => NULL
10695                   ,p_project_cost_rate_type      => NULL
10696                   ,p_project_cost_rate_date_typ  => NULL
10697                   ,p_project_cost_rate_date      => NULL
10698                   ,p_project_cost_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10699                   ,p_projfunc_cost_rate_type     => NULL
10700                   ,p_projfunc_cost_rate_date_typ => NULL
10701                   ,p_projfunc_cost_rate_date     => NULL
10702                   ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10703                   ,p_project_rev_rate_type       => NULL
10704                   ,p_project_rev_rate_date_typ   => NULL
10705                   ,p_project_rev_rate_date       => NULL
10706                   ,p_project_rev_exchange_rate   => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10707                   ,p_projfunc_rev_rate_type      => NULL
10708                   ,p_projfunc_rev_rate_date_typ  => NULL
10709                   ,p_projfunc_rev_rate_date      => NULL
10710                   ,p_projfunc_rev_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10711                   ,px_budget_lines_in            => l_budget_lines_in
10712                   ,x_budget_lines_out            => p_budget_lines_out /* Bug 3368135*/
10713 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10714                   ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
10715                   ,x_etc_method_code_tbl         => l_etc_method_code_tbl
10716                   ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
10717                   ,x_msg_count                   => p_msg_count
10718                   ,x_msg_data                    => p_msg_data
10719                   ,x_return_status               => p_return_status);
10720 
10721             IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN  -- 3453650
10722                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10723                   END IF;
10724 
10725 ELSE --l_budget_type_code IS NOT NULL
10726 
10727                  IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10728                       l_allow_qty_flag := lx_cost_qty_flag;
10729                  ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10730                       l_allow_qty_flag := lx_revenue_qty_flag;
10731                  ELSE
10732                       l_allow_qty_flag :=  lx_all_qty_flag;
10733                  END IF;
10734 
10735                   --Validate the finplan lines passed
10736                   pa_budget_pvt.Validate_Budget_Lines
10737                   ( p_pa_project_id              => l_project_id
10738                   ,p_budget_type_code            => NULL
10739                   ,p_fin_plan_type_id            => l_fin_plan_type_id
10740                   ,p_version_type                => lx_version_type
10741                   ,p_resource_list_id            => lx_resource_list_id
10742                   ,p_time_phased_code            => lx_time_phased_type_code
10743                   ,p_budget_entry_method_code    => NULL
10744                   ,p_entry_level_code            => l_fin_plan_level_code
10745                   ,p_allow_qty_flag              => l_allow_qty_flag
10746                   ,p_allow_raw_cost_flag         => lx_raw_cost_flag
10747                   ,p_allow_burdened_cost_flag    => lx_burdened_cost_flag
10748                   ,p_allow_revenue_flag          => lx_revenue_flag  --Bug 4422201.Passing the correct flag for this parameter.
10749                   ,p_multi_currency_flag         => lx_plan_in_multi_curr_flag
10750                   ,p_project_cost_rate_type      => lx_project_cost_rate_type
10751                   ,p_project_cost_rate_date_typ  => lx_project_cost_rate_date_typ
10752                   ,p_project_cost_rate_date      => lx_project_cost_rate_date
10753                   ,p_project_cost_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10754                   ,p_projfunc_cost_rate_type     => lx_projfunc_cost_rate_type
10755                   ,p_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
10756                   ,p_projfunc_cost_rate_date     => lx_projfunc_cost_rate_date
10757                   ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10758                   ,p_project_rev_rate_type       => lx_project_rev_rate_type
10759                   ,p_project_rev_rate_date_typ   => lx_project_rev_rate_date_typ
10760                   ,p_project_rev_rate_date       => lx_project_rev_rate_date
10761                   ,p_project_rev_exchange_rate   => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10762                   ,p_projfunc_rev_rate_type      => lx_projfunc_rev_rate_type
10763                   ,p_projfunc_rev_rate_date_typ  => lx_projfunc_rev_rate_date_typ
10764                   ,p_projfunc_rev_rate_date      => lx_projfunc_rev_rate_date
10765                   ,p_projfunc_rev_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10766                   ,p_version_info_rec            => l_version_info_rec  -- Added for bug 4290310.
10767                   ,px_budget_lines_in            => l_budget_lines_in
10768                   ,x_budget_lines_out            => p_budget_lines_out /* Bug 3368135*/
10769 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10770                   ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
10771                   ,x_etc_method_code_tbl         => l_etc_method_code_tbl
10772                   ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
10773                   ,x_msg_count                   => p_msg_count
10774                   ,x_msg_data                    => p_msg_data
10775                   ,x_return_status               => p_return_status);
10776 
10777                   IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10778                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10779                   END IF;
10780 END IF; --l_budget_type_code IS NOT NULL
10781 
10782 --In the below code for finplan model validate header level currency conversion attributes and update them.
10783 IF (l_budget_type_code IS NULL)
10784 THEN
10785         IF(lx_plan_in_multi_curr_flag = 'N')
10786         THEN
10787                IF((p_projfunc_cost_rate_type is null OR p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10788                   (p_projfunc_cost_rate_date_typ is null OR p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10789                   (p_projfunc_cost_rate_date is null OR p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10790                   (p_projfunc_rev_rate_type is null OR  p_projfunc_rev_rate_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10791                   (p_projfunc_rev_rate_date_typ is null OR p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10792                   (p_projfunc_rev_rate_date is null OR p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10793                   (p_project_cost_rate_type is null OR p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10794                   (p_project_cost_rate_date_typ is null OR p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10795                   (p_project_cost_rate_date is null OR p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10796                   (p_project_rev_rate_type is null OR p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10797                   (p_project_rev_rate_date_typ is null OR p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10798                   (p_project_rev_rate_date is null OR p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ))
10799                THEN
10800                    NULL;
10801                ELSE
10802                /*even if one of the currency conversion attributes is not null then call validate header info
10803                 *coz its possible tht multi currency flag could be No and we can still have values for the currency conversion
10804                 *attributes*/
10805                l_call_validate_curr_api_flg := 'Y'; --Setting this flag to call the validate_currency_conversion API later.
10806                END IF;
10807         ELSIF (lx_plan_in_multi_curr_flag = 'Y') THEN
10808               IF( p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10809                   p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10810                   p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
10811                   p_projfunc_rev_rate_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10812                   p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10813                   p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
10814                   p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10815                   p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10816                   p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
10817                   p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10818                   p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10819                   p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
10820                THEN --if the user doesnt want them to change then we need not call validate API
10821                    NULL;
10822                ELSE
10823              /*Here there could be two cases. All the passed MC conversion attributes could be null or one of them could be not null
10824              *When even one of them is not null then validate_conversion_attributes API has to be called surely for validating the attribute
10825              * which has been passed.
10826              *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
10827              *of now assuming validate_conversion_attribute api would raise this error we are calling the validate conversion API. If this
10828              * API doesnt raise the error for this case then we will raise the error from here itself*/
10829              /*validate_conversion_attribute API raises the error when all the MC conversion attributes are null. So we are not
10830              raising this error from here.*/
10831 
10832                l_call_validate_curr_api_flg := 'Y';--Setting this flag to call the validate_currency_conversion API later.
10833                END IF;
10834         END IF;
10835 
10836         IF(l_call_validate_curr_api_flg = 'Y')  --Now call the validate_currency_conversion API
10837         THEN
10838                             -- Depending on px_version_type initialise l_conv_attrs_to_be_validated
10839 
10840                  IF (lx_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL) THEN
10841                       l_conv_attrs_to_be_validated := lx_version_type;
10842                  ELSE
10843                       l_conv_attrs_to_be_validated := PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_BOTH;
10844                  END IF;
10845 
10846                  IF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10847 
10848                        lx_project_rev_rate_type      :=NULL;
10849                        lx_project_rev_rate_date_typ  :=NULL;
10850                        lx_project_rev_rate_date      :=NULL;
10851 
10852                        lx_projfunc_rev_rate_type     :=NULL;
10853                        lx_projfunc_rev_rate_date_typ :=NULL;
10854                        lx_projfunc_rev_rate_date     :=NULL;
10855 
10856                  ELSIF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10857 
10858                        lx_project_cost_rate_type      :=NULL;
10859                        lx_project_cost_rate_date_typ  :=NULL;
10860                        lx_project_cost_rate_date      :=NULL;
10861 
10862                        lx_projfunc_cost_rate_type     :=NULL;
10863                        lx_projfunc_cost_rate_date_typ :=NULL;
10864                        lx_projfunc_cost_rate_date     :=NULL;
10865 
10866                  END IF;
10867 
10868                  SELECT p.project_currency_code
10869                        ,p.projfunc_currency_code
10870                  INTO   l_project_currency_code
10871                        ,l_projfunc_currency_code
10872                  FROM   pa_projects_all p
10873                  WHERE  p.project_id = l_project_id;
10874 
10875 
10876               SELECT projfunc_cost_rate_type
10877                     ,projfunc_rev_rate_type
10878                     ,project_cost_rate_type
10879                     ,project_rev_rate_type
10880               INTO l_projfunc_cost_rate_type
10881                   ,l_projfunc_rev_rate_type
10882                   ,l_project_cost_rate_type
10883                   ,l_project_rev_rate_type
10884               FROM   pa_proj_fp_options
10885               WHERE  project_id = l_project_id
10886               AND    fin_plan_type_id=l_fin_plan_type_id
10887               AND    fin_plan_version_id IS NULL
10888               AND    fin_plan_option_level_code= PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
10889 
10890                   pa_budget_pvt.valid_rate_type
10891                     (p_pt_project_cost_rate_type => l_project_cost_rate_type,
10892                      p_pt_project_rev_rate_type  => l_project_rev_rate_type,
10893                      p_pt_projfunc_cost_rate_type=> l_projfunc_cost_rate_type,
10894                      p_pt_projfunc_rev_rate_type => l_projfunc_rev_rate_type,
10895                      p_pv_project_cost_rate_type => lx_project_cost_rate_type,
10896                      p_pv_project_rev_rate_type  => lx_projfunc_rev_rate_type,
10897                      p_pv_projfunc_cost_rate_type=> lx_projfunc_cost_rate_type,
10898                      p_pv_projfunc_rev_rate_type => lx_projfunc_rev_rate_date,
10899                      x_is_rate_type_valid        => l_is_rate_type_valid,
10900                      x_return_status             => p_return_status,
10901                      x_msg_count                 => p_msg_count,
10902                      x_msg_data                  => p_msg_data);
10903 
10904                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10905                        IF l_debug_mode = 'Y' THEN
10906                                    pa_debug.g_err_stage:= 'valid_rate_type returned error';
10907                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10908                        END IF;
10909                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10910                  END IF;
10911 
10912                  pa_fin_plan_utils.validate_currency_attributes
10913                  (px_project_cost_rate_type      => lx_project_cost_rate_type
10914                  ,px_project_cost_rate_date_typ  => lx_project_cost_rate_date_typ
10915                  ,px_project_cost_rate_date      => lx_project_cost_rate_date
10916                  ,px_project_cost_exchange_rate  => l_project_cost_exchange_rate
10917                  ,px_projfunc_cost_rate_type     => lx_projfunc_cost_rate_type
10918                  ,px_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
10919                  ,px_projfunc_cost_rate_date     => lx_projfunc_cost_rate_date
10920                  ,px_projfunc_cost_exchange_rate => l_projfunc_cost_exchange_rate
10921                  ,px_project_rev_rate_type       => lx_project_rev_rate_type
10922                  ,px_project_rev_rate_date_typ   => lx_project_rev_rate_date_typ
10923                  ,px_project_rev_rate_date       => lx_project_rev_rate_date
10924                  ,px_project_rev_exchange_rate   => l_project_rev_exchange_rate
10925                  ,px_projfunc_rev_rate_type      => lx_projfunc_rev_rate_type
10926                  ,px_projfunc_rev_rate_date_typ  => lx_projfunc_rev_rate_date_typ
10927                  ,px_projfunc_rev_rate_date      => lx_projfunc_rev_rate_date
10928                  ,px_projfunc_rev_exchange_rate  => l_projfunc_rev_exchange_rate
10929                  ,p_project_currency_code        => l_project_currency_code
10930                  ,p_projfunc_currency_code       => l_projfunc_currency_code
10931                  ,p_context                      => PA_FP_CONSTANTS_PKG.G_AMG_API_HEADER
10932                  ,p_attrs_to_be_validated        => l_conv_attrs_to_be_validated
10933                  ,x_return_status                => p_return_status
10934                  ,x_msg_count                    => p_msg_count
10935                  ,x_msg_data                     => p_msg_data);
10936 
10937                  IF (p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10938                       p_return_status:=FND_API.G_RET_STS_ERROR;
10939                       IF l_debug_mode = 'Y' THEN
10940                             pa_debug.g_err_stage:= 'Validate currency attributes returned error';
10941                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10942                       END IF;
10943                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10944                  END IF;
10945 
10946                  IF l_debug_mode = 'Y' THEN
10947                        pa_debug.g_err_stage := 'Updating pa_proj_fp_options with multi currency conversion attributes';
10948                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10949                  END IF;
10950 
10951                update pa_proj_fp_options
10952                set
10953                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)
10954               ,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)
10955               ,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)
10956               ,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)
10957               ,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)
10958               ,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)
10959               ,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)
10960               ,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)
10961               ,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)
10962               ,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)
10963               ,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)
10964               ,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)
10965               ,record_version_number         = record_version_number +1
10966               ,last_update_date     =    SYSDATE
10967               ,last_updated_by      =    G_USER_ID
10968               ,last_update_login    =    G_LOGIN_ID
10969               where project_id = l_project_id
10970               and fin_plan_type_id = l_fin_plan_type_id
10971               and fin_plan_version_id = l_budget_version_id;
10972         END IF;  --(l_call_validate_curr_api_flg = 'Y')
10973 END IF;--For finplan model validate header level currency conversion attributes.
10974 
10975 --Major changes for the bug 3453650
10976 
10977      -- BUDGET LINES
10978 
10979     l_budget_line_index := p_budget_lines_in.first;
10980 
10981 IF p_budget_lines_in.exists(l_budget_line_index)
10982 THEN
10983       IF l_budget_type_code IS NOT NULL THEN   -- bug 3453650
10984           OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
10985           FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
10986                           , l_entry_level_code
10987                          , l_categorization_code;
10988           CLOSE l_budget_entry_method_csr;
10989       END IF;
10990 
10991      --Initializing the variable j which is used to build the l_finplan_lines_tab for the finplan model.
10992      j:=1;
10993       <<budget_line>>
10994       WHILE l_budget_line_index IS NOT NULL LOOP
10995 
10996  --dbms_output.put_line('In budget lines LOOP');
10997 
10998     --initialize return status for budget line to success
10999     p_budget_lines_out(l_budget_line_index).return_status   := FND_API.G_RET_STS_SUCCESS;
11000 
11001    /*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
11002     *.output parameter of vallidate_budget_lines(this call to validate_budget_lines has been made before this point in code).  */
11003     l_budget_line_in_rec := l_budget_lines_in(l_budget_line_index);--p_budget_lines_in(l_budget_line_index);
11004 
11005 
11006         IF l_budget_line_in_rec.period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11007         AND l_budget_line_in_rec.period_name IS NOT NULL
11008         THEN
11009 
11010             OPEN l_budget_periods_csr( l_budget_line_in_rec.period_name
11011                           ,l_time_phased_type_code);
11012 
11013             FETCH l_budget_periods_csr INTO l_budget_start_date;  --is needed to be able to identify a budgetline
11014 
11015             IF   l_budget_periods_csr%NOTFOUND
11016             THEN
11017 
11018             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11019             THEN
11020             pa_interface_utils_pub.map_new_amg_msg
11021              ( p_old_message_code => 'PA_BUDGET_PERIOD_IS_INVALID'
11022               ,p_msg_attribute    => 'CHANGE'
11023               ,p_resize_flag      => 'Y'
11024               ,p_msg_context      => 'BUDG'
11025               ,p_attribute1       => l_amg_segment1
11026               ,p_attribute2       => ''
11027               ,p_attribute3       => l_budget_type_code
11028               ,p_attribute4       => ''
11029               ,p_attribute5       => '');
11030             END IF;
11031 
11032             CLOSE l_budget_periods_csr;
11033                 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11034          p_multiple_task_msg  := 'F';
11035 
11036 
11037             END IF;
11038 
11039             CLOSE l_budget_periods_csr;
11040 
11041         ELSIF  l_budget_line_in_rec.budget_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11042            AND l_budget_line_in_rec.budget_start_date IS NOT NULL
11043         THEN
11044 
11045             l_budget_start_date := trunc(l_budget_line_in_rec.budget_start_date);
11046 
11047         ELSE
11048 
11049             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11050         THEN
11051             pa_interface_utils_pub.map_new_amg_msg
11052              ( p_old_message_code => 'PA_START_DATE_MISSING'
11053               ,p_msg_attribute    => 'CHANGE'
11054               ,p_resize_flag      => 'N'
11055               ,p_msg_context      => 'BUDG'
11056               ,p_attribute1       => l_amg_segment1
11057               ,p_attribute2       => ''
11058               ,p_attribute3       => l_budget_type_code
11059               ,p_attribute4       => ''
11060               ,p_attribute5       => '');
11061         END IF;
11062 
11063         p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11064         p_multiple_task_msg  := 'F';
11065 --        RAISE  FND_API.G_EXC_ERROR;
11066 
11067         END IF;
11068 
11069 
11070     -- if resource alias is (passed and not NULL)
11071     -- and resource member is (passed and not NULL)
11072     -- then we convert the alias to the id
11073     -- else we default to the uncategorized resource member
11074 
11075 IF l_budget_type_code IS NOT NULL THEN
11076 
11077   IF l_categorization_code = 'N' THEN
11078        pa_get_resource.Get_Uncateg_Resource_Info
11079                         (p_resource_list_id          => l_uncategorized_list_id,
11080                          p_resource_list_member_id   => l_uncategorized_rlmid,
11081                          p_resource_id               => l_uncategorized_resid,
11082                          p_track_as_labor_flag       => l_track_as_labor_flag,
11083                          p_err_code                  => l_err_code,
11084                          p_err_stage                 => l_err_stage,
11085                          p_err_stack                 => l_err_stack );
11086        IF l_err_code <> 0 THEN
11087       IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11088             pa_interface_utils_pub.map_new_amg_msg
11089              ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11090               ,p_msg_attribute    => 'CHANGE'
11091               ,p_resize_flag      => 'N'
11092               ,p_msg_context      => 'BUDG'
11093               ,p_attribute1       => l_amg_segment1
11094               ,p_attribute2       => ''
11095               ,p_attribute3       => l_budget_type_code
11096               ,p_attribute4       => ''
11097               ,p_attribute5       => to_char(l_budget_start_date));
11098           ELSE
11099             pa_interface_utils_pub.map_new_amg_msg
11100              ( p_old_message_code => l_err_stage
11101               ,p_msg_attribute    => 'CHANGE'
11102               ,p_resize_flag      => 'N'
11103               ,p_msg_context      => 'BUDG'
11104               ,p_attribute1       => l_amg_segment1
11105               ,p_attribute2       => ''
11106               ,p_attribute3       => l_budget_type_code
11107               ,p_attribute4       => ''
11108               ,p_attribute5       => to_char(l_budget_start_date));
11109           END IF;
11110           p_multiple_task_msg := 'F';
11111 --        RAISE  FND_API.G_EXC_ERROR;
11112        END IF;
11113 
11114        l_resource_list_member_id := l_uncategorized_rlmid;
11115        l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11116 
11117   ELSIF l_categorization_code = 'R' THEN
11118     IF (l_budget_line_in_rec.resource_alias <>
11119         PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11120         AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11121     OR (l_budget_line_in_rec.resource_list_member_id
11122        <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11123        AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL) THEN
11124 
11125          pa_resource_pub.convert_alias_to_id
11126             ( p_project_id                  =>  l_project_id --Passing the project id here.
11127              ,p_resource_list_id            =>  lx_resource_list_id  --3453650
11128              ,p_alias                       =>l_budget_line_in_rec.resource_alias
11129              ,p_resource_list_member_id     =>l_budget_line_in_rec.resource_list_member_id
11130              ,p_out_resource_list_member_id => l_resource_list_member_id
11131              ,p_return_status               => l_return_status  );
11132 
11133      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11134         p_budget_lines_out(l_budget_line_index).return_status :=
11135             l_return_status;
11136             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11137      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11138         p_budget_lines_out(l_budget_line_index).return_status :=
11139             l_return_status;
11140             p_multiple_task_msg  := 'F';
11141 --        RAISE  FND_API.G_EXC_ERROR;
11142      END IF;
11143          l_budget_alias := l_budget_line_in_rec.resource_alias;
11144      END IF;   -- If l_budget_line_in_rec.resource_alias <>
11145   END IF; -- If l_categorization_code = 'N'
11146 
11147         -- convert pm_task_reference to pa_task_id
11148         -- only if entry_level_code in ('L','M','T')
11149    IF l_entry_level_code = 'P' THEN
11150       l_task_id := 0;
11151    END IF;
11152 
11153    IF l_entry_level_code in ('T','L','M') THEN
11154       Pa_project_pvt.Convert_pm_taskref_to_id
11155         (p_pa_project_id       => l_project_id,
11156          p_pa_task_id          => l_budget_line_in_rec.pa_task_id,
11157          p_pm_task_reference   => l_budget_line_in_rec.pm_task_reference,
11158          p_out_task_id         => l_task_id,
11159          p_return_status       => l_return_status );
11160       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11161          p_budget_lines_out(l_budget_line_index).return_status :=
11162          l_return_status;
11163          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11164       ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11165          p_budget_lines_out(l_budget_line_index).return_status :=
11166          l_return_status;
11167         p_multiple_task_msg   := 'F';
11168 --        RAISE  FND_API.G_EXC_ERROR;
11169       END IF;
11170    END IF;
11171 
11172 ELSE -- Bug 3453650 budget_type_code is not null
11173 
11174             pa_get_resource.Get_Uncateg_Resource_Info
11175                         (p_resource_list_id          => l_uncategorized_list_id,
11176                          p_resource_list_member_id   => l_uncategorized_rlmid,
11177                          p_resource_id               => l_uncategorized_resid,
11178                          p_track_as_labor_flag       => l_track_as_labor_flag,
11179                          p_err_code                  => l_err_code,
11180                          p_err_stage                 => l_err_stage,
11181                          p_err_stack                 => l_err_stack );
11182        IF l_err_code <> 0 THEN
11183       IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11184             pa_interface_utils_pub.map_new_amg_msg
11185              ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11186               ,p_msg_attribute    => 'CHANGE'
11187               ,p_resize_flag      => 'N'
11188               ,p_msg_context      => 'BUDG'
11189               ,p_attribute1       => l_amg_segment1
11190               ,p_attribute2       => ''
11191               ,p_attribute3       => lx_fin_plan_type_name
11192               ,p_attribute4       => ''
11193               ,p_attribute5       => to_char(l_budget_start_date));
11194           ELSE
11195             pa_interface_utils_pub.map_new_amg_msg
11196              ( p_old_message_code => l_err_stage
11197               ,p_msg_attribute    => 'CHANGE'
11198               ,p_resize_flag      => 'N'
11199               ,p_msg_context      => 'BUDG'
11200               ,p_attribute1       => l_amg_segment1
11201               ,p_attribute2       => ''
11202               ,p_attribute3       => lx_fin_plan_type_name
11203               ,p_attribute4       => ''
11204               ,p_attribute5       => to_char(l_budget_start_date));
11205           END IF;
11206           p_multiple_task_msg := 'F';
11207        END IF;
11208 
11209      IF (nvl(l_uncategorized_list_id,-99) = lx_resource_list_id) THEN
11210 
11211                l_budget_line_in_rec.resource_list_member_id :=l_uncategorized_rlmid;
11212                l_budget_line_in_rec.resource_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11213             l_resource_list_member_id := l_uncategorized_rlmid; -- bug 3453650
11214 
11215      ELSE
11216 --end comment for 3453650
11217 
11218           -- convert resource alias to (resource) member id
11219           -- if resource alias is (passed and not NULL)
11220           -- and resource member is (passed and not NULL)
11221           -- then we convert the alias to the id
11222           -- else we default to the uncategorized resource member
11223 
11224           IF (l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11225              AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11226               OR (l_budget_line_in_rec.resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11227              AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL)
11228           THEN
11229                 pa_resource_pub.Convert_alias_to_id
11230                         ( p_project_id                  => l_project_id
11231                          ,p_resource_list_id            => lx_resource_list_id  -- 3453650
11232                          ,p_alias                       => l_budget_line_in_rec.resource_alias
11233                          ,p_resource_list_member_id     => l_budget_line_in_rec.resource_list_member_id
11234                          ,p_out_resource_list_member_id => l_resource_list_member_id  -- 3453650
11235                          ,p_return_status               => x_return_status   );
11236 
11237                 IF x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11238                         p_budget_lines_out(l_budget_line_index).return_status := x_return_status;
11239                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11240                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11241                     p_budget_lines_out(l_budget_line_index).return_status :=
11242                         x_return_status;
11243                         p_multiple_task_msg  := 'F';
11244                END IF;
11245                l_budget_alias := l_budget_line_in_rec.resource_alias;
11246 
11247           END IF; -- l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11248        END IF; -- nvl(l_uncategorized_res_list_id,-99) = lx_resource_list_id   Bug 3454650
11249    IF l_fin_plan_level_code = 'P' THEN
11250       l_task_id := 0;
11251    END IF;
11252 
11253    IF l_fin_plan_level_code in ('T','L','M') THEN
11254       Pa_project_pvt.Convert_pm_taskref_to_id
11255         (p_pa_project_id       => l_project_id,
11256          p_pa_task_id          => l_budget_line_in_rec.pa_task_id,
11257          p_pm_task_reference   => l_budget_line_in_rec.pm_task_reference,
11258          p_out_task_id         => l_task_id,
11259          p_return_status       => l_return_status );
11260       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11261          p_budget_lines_out(l_budget_line_index).return_status :=
11262          l_return_status;
11263          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11264       ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11265          p_budget_lines_out(l_budget_line_index).return_status :=
11266          l_return_status;
11267         p_multiple_task_msg   := 'F';
11268 
11269       END IF;
11270    END IF; -- l_fin_plan_level_code in ('T','L','M')
11271   END IF; -- IF BUDGET TYPE CODE IS NOT NULL
11272 
11273    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
11274     (p_task_number=> ''
11275     ,p_task_reference => ''
11276     ,p_task_id => l_task_id);
11277 
11278     --get the resource assignment id
11279 
11280         OPEN l_resource_assignment_csr( l_budget_version_id
11281                            ,l_task_id
11282                            ,l_resource_list_member_id);
11283 
11284         FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
11285 
11286         IF l_resource_assignment_csr%NOTFOUND
11287         THEN
11288            l_new_resource_assignment := TRUE;
11289         ELSE
11290            l_new_resource_assignment := FALSE;
11291         END IF;
11292 
11293         CLOSE l_resource_assignment_csr;
11294 
11295 
11296         IF l_budget_line_in_rec.pm_budget_line_reference =
11297            PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
11298            l_budget_line_in_rec.pm_budget_line_reference := NULL;
11299         END IF;
11300 
11301 /* Bug: 3453650 Added the below code*/
11302 
11303  l_dummy := Null;    --  Added for bug 4192109
11304 
11305 IF l_budget_type_code IS NOT NULL THEN
11306  -- dbms_output.put_line('Checking existence of budget line . l_budget_start_date = ' || l_budget_start_date);
11307      OPEN l_budget_line_csr( l_resource_assignment_id, l_budget_start_date);
11308 
11309      FETCH l_budget_line_csr INTO l_dummy;
11310      CLOSE l_budget_line_csr;
11311 ELSE
11312      IF l_budget_line_in_rec.txn_currency_code IS NULL THEN
11313           pa_interface_utils_pub.map_new_amg_msg
11314           ( p_old_message_code => 'PA_NO_TXN_CURRENCY_CODE'
11315           ,p_msg_attribute    => 'CHANGE'
11316           ,p_resize_flag      => 'N'
11317           ,p_msg_context      => 'BUDG'
11318           ,p_attribute1       => l_amg_segment1
11319           ,p_attribute2       => ''
11320           ,p_attribute3       => lx_fin_plan_type_name
11321           ,p_attribute4       => ''
11322           ,p_attribute5       => '');
11323 
11324                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11325         END IF;
11326 
11327      OPEN l_finplan_line_csr(l_resource_assignment_id
11328                          ,l_budget_start_date
11329                       ,l_budget_line_in_rec.txn_currency_code);
11330      FETCH l_finplan_line_csr into l_dummy;
11331      CLOSE l_finplan_line_csr;
11332 END IF; -- l_budget_type_code IS NOT NULL
11333 
11334 IF l_budget_type_code IS NOT NULL THEN
11335      --if new line then call insert_budget_line (for old model)
11336      IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11337           pa_budget_pvt.insert_budget_line
11338           ( p_return_status      => l_return_status
11339           ,p_pa_project_id      => l_project_id
11340           ,p_budget_type_code   => l_budget_type_code
11341           ,p_pa_task_id         => l_budget_line_in_rec.pa_task_id
11342           ,p_pm_task_reference  => l_budget_line_in_rec.pm_task_reference
11343           ,p_resource_alias     => l_budget_alias
11344           ,p_member_id          => l_resource_list_member_id
11345           ,p_budget_start_date  => l_budget_line_in_rec.budget_start_date
11346           ,p_budget_end_date    => l_budget_line_in_rec.budget_end_date
11347           ,p_period_name        => l_budget_line_in_rec.period_name
11348           ,p_description        => l_budget_line_in_rec.description
11349           ,p_raw_cost           => l_budget_line_in_rec.raw_cost
11350           ,p_burdened_cost      => l_budget_line_in_rec.burdened_cost
11351           ,p_revenue            => l_budget_line_in_rec.revenue
11352           ,p_quantity           => l_budget_line_in_rec.quantity
11353           ,p_pm_product_code    => l_budget_line_in_rec.pm_product_code
11354           ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
11355           ,p_resource_list_id   => lx_resource_list_id
11356           ,p_attribute_category => l_budget_line_in_rec.attribute_category
11357           ,p_attribute1         => l_budget_line_in_rec.attribute1
11358           ,p_attribute2         => l_budget_line_in_rec.attribute2
11359           ,p_attribute3         => l_budget_line_in_rec.attribute3
11360           ,p_attribute4         => l_budget_line_in_rec.attribute4
11361           ,p_attribute5         => l_budget_line_in_rec.attribute5
11362           ,p_attribute6         => l_budget_line_in_rec.attribute6
11363           ,p_attribute7         => l_budget_line_in_rec.attribute7
11364           ,p_attribute8         => l_budget_line_in_rec.attribute8
11365           ,p_attribute9         => l_budget_line_in_rec.attribute9
11366           ,p_attribute10        => l_budget_line_in_rec.attribute10
11367           ,p_attribute11        => l_budget_line_in_rec.attribute11
11368           ,p_attribute12        => l_budget_line_in_rec.attribute12
11369           ,p_attribute13        => l_budget_line_in_rec.attribute13
11370           ,p_attribute14        => l_budget_line_in_rec.attribute14
11371           ,p_attribute15        => l_budget_line_in_rec.attribute15
11372           ,p_time_phased_type_code => lx_time_phased_type_code
11373           ,p_entry_level_code   => l_entry_level_code
11374           ,p_budget_amount_code => l_budget_amount_code
11375           ,p_budget_entry_method_code => l_budget_entry_method_code
11376           ,p_categorization_code => l_categorization_code
11377           ,p_budget_version_id   => l_budget_version_id
11378           ,p_change_reason_code  => l_budget_line_in_rec.change_reason_code  );
11379 
11380           IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
11381           THEN
11382           p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11383           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11384 
11385           ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11386           THEN
11387           p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11388           p_multiple_task_msg  := 'F';
11389           END IF;
11390 
11391      ELSE -- If the line is already existing, then call update_budget_line_sql
11392           -- ELSE for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR (l
11393 
11394 
11395          /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11396          *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11397          * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11398          * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11399              IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11400                    l_budget_line_in_rec.raw_cost   :=  NULL;
11401              ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
11402                    l_budget_line_in_rec.raw_cost   :=  FND_API.G_MISS_NUM;
11403              ELSE
11404                    l_budget_line_in_rec.raw_cost   :=  l_budget_line_in_rec.raw_cost;
11405              END IF;
11406 
11407              IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11408                    l_budget_line_in_rec.burdened_cost  := NULL;
11409              ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
11410                    l_budget_line_in_rec.burdened_cost   :=  FND_API.G_MISS_NUM;
11411              ELSE
11412                    l_budget_line_in_rec.burdened_cost  := l_budget_line_in_rec.burdened_cost;
11413              END IF;
11414 
11415              IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11416                    l_budget_line_in_rec.revenue  := NULL;
11417              ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
11418                    l_budget_line_in_rec.revenue   :=  FND_API.G_MISS_NUM;
11419              ELSE
11420                    l_budget_line_in_rec.revenue  := l_budget_line_in_rec.revenue;
11421              END IF;
11422 
11423              IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11424                    l_budget_line_in_rec.quantity  := NULL;
11425              ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
11426                    l_budget_line_in_rec.quantity   :=  FND_API.G_MISS_NUM;
11427              ELSE
11428                    l_budget_line_in_rec.quantity  := l_budget_line_in_rec.quantity;
11429              END IF;
11430 
11431              IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11432                    l_budget_line_in_rec.change_reason_code  :=NULL;
11433              ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
11434                    l_budget_line_in_rec.change_reason_code   :=  FND_API.G_MISS_CHAR;
11435              ELSE
11436                    l_budget_line_in_rec.change_reason_code  :=  l_budget_line_in_rec.change_reason_code ;
11437              END IF;
11438 
11439              IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11440                    l_budget_line_in_rec.description     :=  NULL;
11441              ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
11442                    l_budget_line_in_rec.description   :=  FND_API.G_MISS_CHAR;
11443              ELSE
11444                    l_budget_line_in_rec.description     :=  l_budget_line_in_rec.description;
11445              END IF;
11446 
11447              IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11448                    l_budget_line_in_rec.attribute_category     :=  NULL;
11449              ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
11450                    l_budget_line_in_rec.attribute_category   :=  FND_API.G_MISS_CHAR;
11451              ELSE
11452                    l_budget_line_in_rec.attribute_category     :=  l_budget_line_in_rec.attribute_category;
11453              END IF;
11454 
11455              IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11456                    l_budget_line_in_rec.attribute1     :=  NULL;
11457              ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
11458                    l_budget_line_in_rec.attribute1   :=  FND_API.G_MISS_CHAR;
11459              ELSE
11460                    l_budget_line_in_rec.attribute1     :=  l_budget_line_in_rec.attribute1;
11461              END IF;
11462 
11463              IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11464                    l_budget_line_in_rec.attribute2     :=  NULL;
11465              ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
11466                    l_budget_line_in_rec.attribute2   :=  FND_API.G_MISS_CHAR;
11467              ELSE
11468                    l_budget_line_in_rec.attribute2     :=  l_budget_line_in_rec.attribute2;
11469              END IF;
11470 
11471              IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11472                    l_budget_line_in_rec.attribute3     :=  NULL;
11473              ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
11474                    l_budget_line_in_rec.attribute3   :=  FND_API.G_MISS_CHAR;
11475              ELSE
11476                    l_budget_line_in_rec.attribute3     :=  l_budget_line_in_rec.attribute3;
11477              END IF;
11478 
11479              IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11480                    l_budget_line_in_rec.attribute4     :=  NULL;
11481              ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
11482                    l_budget_line_in_rec.attribute4   :=  FND_API.G_MISS_CHAR;
11483              ELSE
11484                    l_budget_line_in_rec.attribute4     :=  l_budget_line_in_rec.attribute4;
11485              END IF;
11486 
11487              IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11488                    l_budget_line_in_rec.attribute5     :=  NULL;
11489              ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
11490                    l_budget_line_in_rec.attribute5   :=  FND_API.G_MISS_CHAR;
11491              ELSE
11492                    l_budget_line_in_rec.attribute5     :=  l_budget_line_in_rec.attribute5;
11493              END IF;
11494 
11495              IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11496                    l_budget_line_in_rec.attribute6     :=  NULL;
11497              ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
11498                    l_budget_line_in_rec.attribute6   :=  FND_API.G_MISS_CHAR;
11499              ELSE
11500                    l_budget_line_in_rec.attribute6     :=  l_budget_line_in_rec.attribute6;
11501              END IF;
11502 
11503              IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11504                    l_budget_line_in_rec.attribute7     :=  NULL;
11505              ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
11506                    l_budget_line_in_rec.attribute7   :=  FND_API.G_MISS_CHAR;
11507              ELSE
11508                    l_budget_line_in_rec.attribute7     :=  l_budget_line_in_rec.attribute7;
11509              END IF;
11510 
11511              IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11512                    l_budget_line_in_rec.attribute8     :=  NULL;
11513              ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
11514                    l_budget_line_in_rec.attribute8   :=  FND_API.G_MISS_CHAR;
11515              ELSE
11516                    l_budget_line_in_rec.attribute8     :=  l_budget_line_in_rec.attribute8;
11517              END IF;
11518 
11519              IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11520                    l_budget_line_in_rec.attribute9     :=  NULL;
11521              ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
11522                    l_budget_line_in_rec.attribute9   :=  FND_API.G_MISS_CHAR;
11523              ELSE
11524                    l_budget_line_in_rec.attribute9     :=  l_budget_line_in_rec.attribute9;
11525              END IF;
11526 
11527              IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11528                    l_budget_line_in_rec.attribute10     :=  NULL;
11529              ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
11530                    l_budget_line_in_rec.attribute10   :=  FND_API.G_MISS_CHAR;
11531              ELSE
11532                    l_budget_line_in_rec.attribute10     :=  l_budget_line_in_rec.attribute10;
11533              END IF;
11534 
11535              IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11536                    l_budget_line_in_rec.attribute11     :=  NULL;
11537              ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
11538                    l_budget_line_in_rec.attribute11   :=  FND_API.G_MISS_CHAR;
11539              ELSE
11540                    l_budget_line_in_rec.attribute11     :=  l_budget_line_in_rec.attribute11;
11541              END IF;
11542 
11543              IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11544                    l_budget_line_in_rec.attribute12     :=  NULL;
11545              ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
11546                    l_budget_line_in_rec.attribute12   :=  FND_API.G_MISS_CHAR;
11547              ELSE
11548                    l_budget_line_in_rec.attribute12     :=  l_budget_line_in_rec.attribute12;
11549              END IF;
11550 
11551              IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11552                    l_budget_line_in_rec.attribute13     :=  NULL;
11553              ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
11554                    l_budget_line_in_rec.attribute13   :=  FND_API.G_MISS_CHAR;
11555              ELSE
11556                    l_budget_line_in_rec.attribute13     :=  l_budget_line_in_rec.attribute13;
11557              END IF;
11558 
11559              IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11560                    l_budget_line_in_rec.attribute14     :=  NULL;
11561              ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
11562                    l_budget_line_in_rec.attribute14   :=  FND_API.G_MISS_CHAR;
11563              ELSE
11564                    l_budget_line_in_rec.attribute14     :=  l_budget_line_in_rec.attribute14;
11565              END IF;
11566 
11567              IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11568                    l_budget_line_in_rec.attribute15     :=  NULL;
11569              ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
11570                    l_budget_line_in_rec.attribute15   :=  FND_API.G_MISS_CHAR;
11571              ELSE
11572                    l_budget_line_in_rec.attribute15     :=  l_budget_line_in_rec.attribute15;
11573              END IF;
11574 
11575           PA_BUDGET_PVT.UPDATE_BUDGET_LINE_SQL
11576           ( p_return_status        => l_return_status
11577           --,p_budget_amount_code         => l_budget_amount_code
11578           ,p_budget_entry_method_code     => l_budget_entry_method_code
11579           ,p_resource_assignment_id       => l_resource_assignment_id
11580           ,p_start_date                   => l_budget_start_date
11581           ,p_time_phased_type_code        => lx_time_phased_type_code
11582           ,p_description                  => l_budget_line_in_rec.description
11583           ,p_quantity                     => l_budget_line_in_rec.quantity
11584           ,p_raw_cost                     => l_budget_line_in_rec.raw_cost
11585           ,p_burdened_cost                => l_budget_line_in_rec.burdened_cost
11586           ,p_revenue                      => l_budget_line_in_rec.revenue
11587           ,p_change_reason_code           => l_budget_line_in_rec.change_reason_code
11588           ,p_attribute_category           => l_budget_line_in_rec.attribute_category
11589           ,p_attribute1                   => l_budget_line_in_rec.attribute1
11590           ,p_attribute2                   => l_budget_line_in_rec.attribute2
11591           ,p_attribute3                   => l_budget_line_in_rec.attribute3
11592           ,p_attribute4                   => l_budget_line_in_rec.attribute4
11593           ,p_attribute5                   => l_budget_line_in_rec.attribute5
11594           ,p_attribute6                   => l_budget_line_in_rec.attribute6
11595           ,p_attribute7                   => l_budget_line_in_rec.attribute7
11596           ,p_attribute8                   => l_budget_line_in_rec.attribute8
11597           ,p_attribute9                   => l_budget_line_in_rec.attribute9
11598           ,p_attribute10                  => l_budget_line_in_rec.attribute10
11599           ,p_attribute11                  => l_budget_line_in_rec.attribute11
11600           ,p_attribute12                  => l_budget_line_in_rec.attribute12
11601           ,p_attribute13                  => l_budget_line_in_rec.attribute13
11602           ,p_attribute14                  => l_budget_line_in_rec.attribute14
11603           ,p_attribute15                  => l_budget_line_in_rec.attribute15
11604           );
11605 
11606           IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11607                p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11608           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11609 
11610           ELSIF l_return_status = FND_API.G_RET_STS_ERROR   THEN
11611                p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11612                p_multiple_task_msg   := 'F';
11613 
11614           END IF;  -- l_return_status =  FND_API.G_RET_STS_UNE
11615 
11616      END IF; -- End for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR
11617 
11618 ELSE -- l_budget_type_code IS NOT NULL (Inserting lines for the finplan model)
11619      --Checking it its a new budget line.
11620     IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11621          --This is a new line case.
11622           --Get the uncategorized resource list info.
11623           pa_fin_plan_utils.Get_Uncat_Resource_List_Info
11624           (x_resource_list_id           => l_uncategorized_res_list_id,
11625            x_resource_list_member_id    => l_uncategorized_rlmid,
11626            x_track_as_labor_flag        => l_unc_track_as_labor_flag,
11627            x_unit_of_measure            => l_unc_unit_of_measure,
11628            x_return_status              => p_return_status,
11629            x_msg_count                  => p_msg_count,
11630            x_msg_data                   => p_msg_data);
11631 
11632           i := l_budget_line_index;
11633 
11634                 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
11635                l_budget_lines_in(i).period_name := NULL;
11636                 END IF;
11637 
11638                  --Lines should be processed only if atleast one of the amounts exist
11639                  IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
11640                nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
11641                nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
11642                nvl(l_budget_lines_in(i).revenue,0) <>0) THEN
11643 
11644                 -- Get UOM and track as labor flag only if the resource list is not uncategorized
11645                 -- If it is is uncategorized then we can make use of the uom and track as labor
11646                 -- flag obtained earlier
11647                 --Commented out the below code to get the unit of measure and track_as_labor_flag value
11648                 --because these values are used only while passing to add_fin_plan_lines(and further to create_fin_plan_lines )
11649                 --where they are simply populated in pa_fp_rollup_tmp but are not used anywhere.
11650           /*      IF (lx_resource_list_id <> l_uncategorized_res_list_id) THEN  -- bug 3453650
11651 
11652                       SELECT pr.unit_of_measure
11653                          ,prlm.track_as_labor_flag
11654                       INTO   l_unit_of_measure
11655                          ,l_track_as_labor_flag
11656                       FROM   pa_resources pr
11657                          ,pa_resource_lists prl
11658                          ,pa_resource_list_members prlm
11659                       WHERE  prl.resource_list_id = lx_resource_list_id  -- bug 3453650
11660                       AND    pr.resource_id = prlm.resource_id
11661                       AND    prl.resource_list_id = prlm.resource_list_id
11662                       AND    prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
11663 
11664                   END IF;*/
11665 
11666                        -- dbms_output.put_line('copying from budget to rollup finplan');
11667                        -- Convert flex field attributes to NULL if they have Miss Char as value
11668 
11669                        l_finplan_lines_tab(j).system_reference1           :=  l_budget_lines_in(i).pa_task_id;
11670                        l_finplan_lines_tab(j).system_reference2           :=  l_budget_lines_in(i).resource_list_member_id;
11671                        l_finplan_lines_tab(j).start_date                  :=  l_budget_lines_in(i).budget_start_date;
11672                        l_finplan_lines_tab(j).end_date                    :=  l_budget_lines_in(i).budget_end_date;
11673                        l_finplan_lines_tab(j).period_name                 :=  l_budget_lines_in(i).period_name;
11674                        l_finplan_lines_tab(j).system_reference4           :=  l_unit_of_measure     ;
11675                        l_finplan_lines_tab(j).system_reference5           :=  l_track_as_labor_flag  ;
11676                        l_finplan_lines_tab(j).txn_currency_code           :=  l_budget_lines_in(i).txn_currency_code;
11677                        l_finplan_lines_tab(j).projfunc_raw_cost           :=  NULL;
11678                        l_finplan_lines_tab(j).projfunc_burdened_cost      :=  NULL;
11679                        l_finplan_lines_tab(j).projfunc_revenue            :=  NULL;
11680                        l_finplan_lines_tab(j).project_raw_cost            :=  NULL ;
11681                        l_finplan_lines_tab(j).project_burdened_cost       :=  NULL;
11682                        l_finplan_lines_tab(j).project_revenue             :=  NULL;
11683 
11684                       /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11685                       *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11686                       * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11687                       * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11688                        IF p_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11689                              l_finplan_lines_tab(j).txn_raw_cost   :=  NULL;
11690                        ELSIF(p_budget_lines_in(i).raw_cost is null) THEN
11691                              l_finplan_lines_tab(j).txn_raw_cost   :=  FND_API.G_MISS_NUM;
11692                        ELSE
11693                              l_finplan_lines_tab(j).txn_raw_cost   :=  l_budget_lines_in(i).raw_cost;
11694                        END IF;
11695 
11696                        IF p_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11697                              l_finplan_lines_tab(j).txn_burdened_cost  := NULL;
11698                        ELSIF(p_budget_lines_in(i).burdened_cost is null) THEN
11699                              l_finplan_lines_tab(j).txn_burdened_cost   :=  FND_API.G_MISS_NUM;
11700                        ELSE
11701                              l_finplan_lines_tab(j).txn_burdened_cost  := l_budget_lines_in(i).burdened_cost;
11702                        END IF;
11703 
11704                        IF p_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11705                              l_finplan_lines_tab(j).txn_revenue  := NULL;
11706                        ELSIF(p_budget_lines_in(i).revenue is null) THEN
11707                              l_finplan_lines_tab(j).txn_revenue   :=  FND_API.G_MISS_NUM;
11708                        ELSE
11709                              l_finplan_lines_tab(j).txn_revenue  := l_budget_lines_in(i).revenue;
11710                        END IF;
11711 
11712                        IF p_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11713                              l_finplan_lines_tab(j).quantity  := NULL;
11714                        ELSIF(p_budget_lines_in(i).quantity is null) THEN
11715                              l_finplan_lines_tab(j).quantity   :=  FND_API.G_MISS_NUM;
11716                        ELSE
11717                              l_finplan_lines_tab(j).quantity  := l_budget_lines_in(i).quantity;
11718                        END IF;
11719 
11720                        IF p_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11721                              l_finplan_lines_tab(j).change_reason_code  :=NULL;
11722                        ELSIF(p_budget_lines_in(i).change_reason_code is null) THEN
11723                              l_finplan_lines_tab(j).change_reason_code   :=  FND_API.G_MISS_CHAR;
11724                        ELSE
11725                              l_finplan_lines_tab(j).change_reason_code  :=  l_budget_lines_in(i).change_reason_code ;
11726                        END IF;
11727 
11728                        IF p_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11729                              l_finplan_lines_tab(j).description     :=  NULL;
11730                        ELSIF(p_budget_lines_in(i).description is null) THEN
11731                              l_finplan_lines_tab(j).description   :=  FND_API.G_MISS_CHAR;
11732                        ELSE
11733                              l_finplan_lines_tab(j).description     :=  l_budget_lines_in(i).description;
11734                        END IF;
11735 
11736                        IF p_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11737                              l_finplan_lines_tab(j).attribute_category     :=  NULL;
11738                        ELSIF(p_budget_lines_in(i).attribute_category is null) THEN
11739                              l_finplan_lines_tab(j).attribute_category   :=  FND_API.G_MISS_CHAR;
11740                        ELSE
11741                              l_finplan_lines_tab(j).attribute_category     :=  l_budget_lines_in(i).attribute_category;
11742                        END IF;
11743 
11744                        IF p_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11745                              l_finplan_lines_tab(j).attribute1     :=  NULL;
11746                        ELSIF(p_budget_lines_in(i).attribute1 is null) THEN
11747                              l_finplan_lines_tab(j).attribute1   :=  FND_API.G_MISS_CHAR;
11748                        ELSE
11749                              l_finplan_lines_tab(j).attribute1     :=  l_budget_lines_in(i).attribute1;
11750                        END IF;
11751 
11752                        IF p_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11753                              l_finplan_lines_tab(j).attribute2     :=  NULL;
11754                        ELSIF(p_budget_lines_in(i).attribute2 is null) THEN
11755                              l_finplan_lines_tab(j).attribute2   :=  FND_API.G_MISS_CHAR;
11756                        ELSE
11757                              l_finplan_lines_tab(j).attribute2     :=  l_budget_lines_in(i).attribute2;
11758                        END IF;
11759 
11760                        IF p_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11761                              l_finplan_lines_tab(j).attribute3     :=  NULL;
11762                        ELSIF(p_budget_lines_in(i).attribute3 is null) THEN
11763                              l_finplan_lines_tab(j).attribute3   :=  FND_API.G_MISS_CHAR;
11764                        ELSE
11765                              l_finplan_lines_tab(j).attribute3     :=  l_budget_lines_in(i).attribute3;
11766                        END IF;
11767 
11768                        IF p_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11769                              l_finplan_lines_tab(j).attribute4     :=  NULL;
11770                        ELSIF(p_budget_lines_in(i).attribute4 is null) THEN
11771                              l_finplan_lines_tab(j).attribute4   :=  FND_API.G_MISS_CHAR;
11772                        ELSE
11773                              l_finplan_lines_tab(j).attribute4     :=  l_budget_lines_in(i).attribute4;
11774                        END IF;
11775 
11776                        IF p_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11777                              l_finplan_lines_tab(j).attribute5     :=  NULL;
11778                        ELSIF(p_budget_lines_in(i).attribute5 is null) THEN
11779                              l_finplan_lines_tab(j).attribute5   :=  FND_API.G_MISS_CHAR;
11780                        ELSE
11781                              l_finplan_lines_tab(j).attribute5     :=  l_budget_lines_in(i).attribute5;
11782                        END IF;
11783 
11784                        IF p_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11785                              l_finplan_lines_tab(j).attribute6     :=  NULL;
11786                        ELSIF(p_budget_lines_in(i).attribute6 is null) THEN
11787                              l_finplan_lines_tab(j).attribute6   :=  FND_API.G_MISS_CHAR;
11788                        ELSE
11789                              l_finplan_lines_tab(j).attribute6     :=  l_budget_lines_in(i).attribute6;
11790                        END IF;
11791 
11792                        IF p_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11793                              l_finplan_lines_tab(j).attribute7     :=  NULL;
11794                        ELSIF(p_budget_lines_in(i).attribute7 is null) THEN
11795                              l_finplan_lines_tab(j).attribute7   :=  FND_API.G_MISS_CHAR;
11796                        ELSE
11797                              l_finplan_lines_tab(j).attribute7     :=  l_budget_lines_in(i).attribute7;
11798                        END IF;
11799 
11800                        IF p_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11801                              l_finplan_lines_tab(j).attribute8     :=  NULL;
11802                        ELSIF(p_budget_lines_in(i).attribute8 is null) THEN
11803                              l_finplan_lines_tab(j).attribute8   :=  FND_API.G_MISS_CHAR;
11804                        ELSE
11805                              l_finplan_lines_tab(j).attribute8     :=  l_budget_lines_in(i).attribute8;
11806                        END IF;
11807 
11808                        IF p_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11809                              l_finplan_lines_tab(j).attribute9     :=  NULL;
11810                        ELSIF(p_budget_lines_in(i).attribute9 is null) THEN
11811                              l_finplan_lines_tab(j).attribute9   :=  FND_API.G_MISS_CHAR;
11812                        ELSE
11813                              l_finplan_lines_tab(j).attribute9     :=  l_budget_lines_in(i).attribute9;
11814                        END IF;
11815 
11816                        IF p_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11817                              l_finplan_lines_tab(j).attribute10     :=  NULL;
11818                        ELSIF(p_budget_lines_in(i).attribute10 is null) THEN
11819                              l_finplan_lines_tab(j).attribute10   :=  FND_API.G_MISS_CHAR;
11820                        ELSE
11821                              l_finplan_lines_tab(j).attribute10     :=  l_budget_lines_in(i).attribute10;
11822                        END IF;
11823 
11824                        IF p_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11825                              l_finplan_lines_tab(j).attribute11     :=  NULL;
11826                        ELSIF(p_budget_lines_in(i).attribute11 is null) THEN
11827                              l_finplan_lines_tab(j).attribute11   :=  FND_API.G_MISS_CHAR;
11828                        ELSE
11829                              l_finplan_lines_tab(j).attribute11     :=  l_budget_lines_in(i).attribute11;
11830                        END IF;
11831 
11832                        IF p_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11833                              l_finplan_lines_tab(j).attribute12     :=  NULL;
11834                        ELSIF(p_budget_lines_in(i).attribute12 is null) THEN
11835                              l_finplan_lines_tab(j).attribute12   :=  FND_API.G_MISS_CHAR;
11836                        ELSE
11837                              l_finplan_lines_tab(j).attribute12     :=  l_budget_lines_in(i).attribute12;
11838                        END IF;
11839 
11840                        IF p_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11841                              l_finplan_lines_tab(j).attribute13     :=  NULL;
11842                        ELSIF(p_budget_lines_in(i).attribute13 is null) THEN
11843                              l_finplan_lines_tab(j).attribute13   :=  FND_API.G_MISS_CHAR;
11844                        ELSE
11845                              l_finplan_lines_tab(j).attribute13     :=  l_budget_lines_in(i).attribute13;
11846                        END IF;
11847 
11848                        IF p_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11849                              l_finplan_lines_tab(j).attribute14     :=  NULL;
11850                        ELSIF(p_budget_lines_in(i).attribute14 is null) THEN
11851                              l_finplan_lines_tab(j).attribute14   :=  FND_API.G_MISS_CHAR;
11852                        ELSE
11853                              l_finplan_lines_tab(j).attribute14     :=  l_budget_lines_in(i).attribute14;
11854                        END IF;
11855 
11856                        IF p_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11857                              l_finplan_lines_tab(j).attribute15     :=  NULL;
11858                        ELSIF(p_budget_lines_in(i).attribute15 is null) THEN
11859                              l_finplan_lines_tab(j).attribute15   :=  FND_API.G_MISS_CHAR;
11860                        ELSE
11861                              l_finplan_lines_tab(j).attribute15     :=  l_budget_lines_in(i).attribute15;
11862                        END IF;
11863 
11864                        IF p_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11865                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
11866                        ELSIF(p_budget_lines_in(i).projfunc_cost_rate_type is null) THEN
11867                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
11868                        ELSE
11869                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE     :=  l_budget_lines_in(i).projfunc_cost_rate_type;
11870                        END IF;
11871 
11872                        IF p_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11873                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
11874                        ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date_type is null) THEN
11875                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
11876                        ELSE
11877                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type;
11878                        END IF;
11879 
11880                        IF p_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
11881                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     := NULL;
11882                        ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date is null) THEN
11883                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
11884                        ELSE
11885                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     :=  l_budget_lines_in(i).projfunc_cost_rate_date            ;
11886                        END IF;
11887 
11888                        IF p_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11889                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
11890                        ELSIF(p_budget_lines_in(i).projfunc_cost_exchange_rate is null) THEN
11891                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
11892                        ELSE
11893                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE :=  l_budget_lines_in(i).projfunc_cost_exchange_rate        ;
11894                        END IF;
11895 
11896                        IF p_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11897                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      := NULL;
11898                        ELSIF(p_budget_lines_in(i).projfunc_rev_rate_type is null) THEN
11899                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
11900                        ELSE
11901                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      :=  l_budget_lines_in(i).projfunc_rev_rate_type             ;
11902                        END IF;
11903 
11904                        IF p_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11905                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
11906                        ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date_type is null) THEN
11907                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
11908                        ELSE
11909                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE :=  l_budget_lines_in(i).projfunc_rev_rate_date_type ;
11910                        END IF;
11911 
11912                        IF p_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
11913                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      := NULL;
11914                        ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date is null) THEN
11915                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
11916                        ELSE
11917                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      :=  l_budget_lines_in(i).projfunc_rev_rate_date;
11918                        END IF;
11919 
11920                        IF p_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11921                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
11922                        ELSIF(p_budget_lines_in(i).projfunc_rev_exchange_rate is null) THEN
11923                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
11924                        ELSE
11925                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  :=  l_budget_lines_in(i).projfunc_rev_exchange_rate ;
11926                        END IF;
11927 
11928                        IF  p_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11929                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      := NULL;
11930                        ELSIF(p_budget_lines_in(i).project_cost_rate_type is null) THEN
11931                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
11932                        ELSE
11933                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      :=  l_budget_lines_in(i).project_cost_rate_type;
11934                        END IF;
11935 
11936                        IF p_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11937                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
11938                        ELSIF(p_budget_lines_in(i).project_cost_rate_date_type is null) THEN
11939                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
11940                        ELSE
11941                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE :=  l_budget_lines_in(i).project_cost_rate_date_type ;
11942                        END IF;
11943 
11944                        IF p_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
11945                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      := NULL;
11946                        ELSIF(p_budget_lines_in(i).project_cost_rate_date is null) THEN
11947                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
11948                        ELSE
11949                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      :=  l_budget_lines_in(i).project_cost_rate_date;
11950                        END IF;
11951 
11952                        IF p_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
11953                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  := NULL;
11954                        ELSIF(p_budget_lines_in(i).project_cost_exchange_rate is null) THEN
11955                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
11956                        ELSE
11957                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  :=  l_budget_lines_in(i).project_cost_exchange_rate ;
11958                        END IF;
11959 
11960                        IF  p_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
11961                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       := NULL;
11962                        ELSIF(p_budget_lines_in(i).project_rev_rate_type is null) THEN
11963                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
11964                        ELSE
11965                               l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       :=  l_budget_lines_in(i).project_rev_rate_type  ;
11966                        END IF;
11967 
11968                        IF p_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
11969                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  := NULL;
11970                        ELSIF(p_budget_lines_in(i).project_rev_rate_date_type is null) THEN
11971                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
11972                        ELSE
11973                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  :=  l_budget_lines_in(i).project_rev_rate_date_type;
11974                        END IF;
11975 
11976                        IF p_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
11977                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       := NULL;
11978                        ELSIF(p_budget_lines_in(i).project_rev_rate_date is null) THEN
11979                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
11980                        ELSE
11981                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       :=  l_budget_lines_in(i).project_rev_rate_date ;
11982                        END IF;
11983 
11984                        IF p_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
11985                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   := NULL;
11986                        ELSIF(p_budget_lines_in(i).project_rev_exchange_rate is null) THEN
11987                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
11988                        ELSE
11989                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  l_budget_lines_in(i).project_rev_exchange_rate          ;
11990                        END IF;
11991 
11992                        IF p_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
11993                              l_finplan_lines_tab(j).pm_product_code             := NULL;
11994                        ELSIF(p_budget_lines_in(i).pm_product_code is null) THEN
11995                              l_finplan_lines_tab(j).pm_product_code   :=  FND_API.G_MISS_CHAR;
11996                        ELSE
11997                              l_finplan_lines_tab(j).pm_product_code             :=  l_budget_lines_in(i).pm_product_code      ;
11998                        END IF;
11999 
12000                        IF p_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12001                              l_finplan_lines_tab(j).pm_budget_line_reference    := NULL;
12002                        ELSIF(p_budget_lines_in(i).pm_budget_line_reference is null) THEN
12003                              l_finplan_lines_tab(j).pm_budget_line_reference   :=  FND_API.G_MISS_CHAR;
12004                        ELSE
12005                              l_finplan_lines_tab(j).pm_budget_line_reference    :=  l_budget_lines_in(i).pm_budget_line_reference        ;
12006                        END IF;
12007 
12008                        l_finplan_lines_tab(j).quantity_source             :=  'I';
12009                        l_finplan_lines_tab(j).raw_cost_source             :=  'I';
12010                        l_finplan_lines_tab(j).burdened_cost_source        :=  'I';
12011                        l_finplan_lines_tab(j).revenue_source              :=  'I';
12012                        l_finplan_lines_tab(j).resource_assignment_id      :=  -1 ;
12013 
12014                        --increment the index for fin plan lines table
12015                        j := j+1;
12016                        END IF; --IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
12017     ELSE
12018           --its an already existing budget line
12019           i := l_budget_line_index;
12020 
12021                        l_finplan_lines_tab(j).system_reference1           :=  l_budget_line_in_rec.pa_task_id;
12022                        l_finplan_lines_tab(j).system_reference2           :=  l_budget_line_in_rec.resource_list_member_id;
12023                        l_finplan_lines_tab(j).start_date                  :=  l_budget_line_in_rec.budget_start_date;
12024                        l_finplan_lines_tab(j).end_date                    :=  l_budget_line_in_rec.budget_end_date;
12025                        l_finplan_lines_tab(j).period_name                 :=  l_budget_line_in_rec.period_name;
12026                        l_finplan_lines_tab(j).system_reference4           :=  l_unit_of_measure     ;
12027                        l_finplan_lines_tab(j).system_reference5           :=  l_track_as_labor_flag  ;
12028                        l_finplan_lines_tab(j).txn_currency_code           :=  l_budget_line_in_rec.txn_currency_code;
12029                        l_finplan_lines_tab(j).projfunc_raw_cost           :=  NULL;
12030                        l_finplan_lines_tab(j).projfunc_burdened_cost      :=  NULL;
12031                        l_finplan_lines_tab(j).projfunc_revenue            :=  NULL;
12032                        l_finplan_lines_tab(j).project_raw_cost            :=  NULL ;
12033                        l_finplan_lines_tab(j).project_burdened_cost       :=  NULL;
12034                        l_finplan_lines_tab(j).project_revenue             :=  NULL;
12035 
12036                       /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
12037                       *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
12038                       * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
12039                       * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
12040                        IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12041                              l_finplan_lines_tab(j).txn_raw_cost   :=  NULL;
12042                        ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
12043                              l_finplan_lines_tab(j).txn_raw_cost   :=  FND_API.G_MISS_NUM;
12044                        ELSE
12045                              l_finplan_lines_tab(j).txn_raw_cost   :=  l_budget_line_in_rec.raw_cost;
12046                        END IF;
12047 
12048                        IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12049                              l_finplan_lines_tab(j).txn_burdened_cost  := NULL;
12050                        ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
12051                              l_finplan_lines_tab(j).txn_burdened_cost   :=  FND_API.G_MISS_NUM;
12052                        ELSE
12053                              l_finplan_lines_tab(j).txn_burdened_cost  := l_budget_line_in_rec.burdened_cost;
12054                        END IF;
12055 
12056                        IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12057                              l_finplan_lines_tab(j).txn_revenue  := NULL;
12058                        ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
12059                              l_finplan_lines_tab(j).txn_revenue   :=  FND_API.G_MISS_NUM;
12060                        ELSE
12061                              l_finplan_lines_tab(j).txn_revenue  := l_budget_line_in_rec.revenue;
12062                        END IF;
12063 
12064                        IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12065                              l_finplan_lines_tab(j).quantity  := NULL;
12066                        ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
12067                              l_finplan_lines_tab(j).quantity   :=  FND_API.G_MISS_NUM;
12068                        ELSE
12069                              l_finplan_lines_tab(j).quantity  := l_budget_line_in_rec.quantity;
12070                        END IF;
12071 
12072                        IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12073                              l_finplan_lines_tab(j).change_reason_code  :=NULL;
12074                        ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
12075                              l_finplan_lines_tab(j).change_reason_code   :=  FND_API.G_MISS_CHAR;
12076                        ELSE
12077                              l_finplan_lines_tab(j).change_reason_code  :=  l_budget_line_in_rec.change_reason_code ;
12078                        END IF;
12079 
12080                        IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12081                              l_finplan_lines_tab(j).description     :=  NULL;
12082                        ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
12083                              l_finplan_lines_tab(j).description   :=  FND_API.G_MISS_CHAR;
12084                        ELSE
12085                              l_finplan_lines_tab(j).description     :=  l_budget_line_in_rec.description;
12086                        END IF;
12087 
12088                        IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12089                              l_finplan_lines_tab(j).attribute_category     :=  NULL;
12090                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
12091                              l_finplan_lines_tab(j).attribute_category   :=  FND_API.G_MISS_CHAR;
12092                        ELSE
12093                              l_finplan_lines_tab(j).attribute_category     :=  l_budget_line_in_rec.attribute_category;
12094                        END IF;
12095 
12096                        IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12097                              l_finplan_lines_tab(j).attribute1     :=  NULL;
12098                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
12099                              l_finplan_lines_tab(j).attribute1   :=  FND_API.G_MISS_CHAR;
12100                        ELSE
12101                              l_finplan_lines_tab(j).attribute1     :=  l_budget_line_in_rec.attribute1;
12102                        END IF;
12103 
12104                        IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12105                              l_finplan_lines_tab(j).attribute2     :=  NULL;
12106                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
12107                              l_finplan_lines_tab(j).attribute2   :=  FND_API.G_MISS_CHAR;
12108                        ELSE
12109                              l_finplan_lines_tab(j).attribute2     :=  l_budget_line_in_rec.attribute2;
12110                        END IF;
12111 
12112                        IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12113                              l_finplan_lines_tab(j).attribute3     :=  NULL;
12114                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
12115                              l_finplan_lines_tab(j).attribute3   :=  FND_API.G_MISS_CHAR;
12116                        ELSE
12117                              l_finplan_lines_tab(j).attribute3     :=  l_budget_line_in_rec.attribute3;
12118                        END IF;
12119 
12120                        IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12121                              l_finplan_lines_tab(j).attribute4     :=  NULL;
12122                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
12123                              l_finplan_lines_tab(j).attribute4   :=  FND_API.G_MISS_CHAR;
12124                        ELSE
12125                              l_finplan_lines_tab(j).attribute4     :=  l_budget_line_in_rec.attribute4;
12126                        END IF;
12127 
12128                        IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12129                              l_finplan_lines_tab(j).attribute5     :=  NULL;
12130                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
12131                              l_finplan_lines_tab(j).attribute5   :=  FND_API.G_MISS_CHAR;
12132                        ELSE
12133                              l_finplan_lines_tab(j).attribute5     :=  l_budget_line_in_rec.attribute5;
12134                        END IF;
12135 
12136                        IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12137                              l_finplan_lines_tab(j).attribute6     :=  NULL;
12138                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
12139                              l_finplan_lines_tab(j).attribute6   :=  FND_API.G_MISS_CHAR;
12140                        ELSE
12141                              l_finplan_lines_tab(j).attribute6     :=  l_budget_line_in_rec.attribute6;
12142                        END IF;
12143 
12144                        IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12145                              l_finplan_lines_tab(j).attribute7     :=  NULL;
12146                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
12147                              l_finplan_lines_tab(j).attribute7   :=  FND_API.G_MISS_CHAR;
12148                        ELSE
12149                              l_finplan_lines_tab(j).attribute7     :=  l_budget_line_in_rec.attribute7;
12150                        END IF;
12151 
12152                        IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12153                              l_finplan_lines_tab(j).attribute8     :=  NULL;
12154                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
12155                              l_finplan_lines_tab(j).attribute8   :=  FND_API.G_MISS_CHAR;
12156                        ELSE
12157                              l_finplan_lines_tab(j).attribute8     :=  l_budget_line_in_rec.attribute8;
12158                        END IF;
12159 
12160                        IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12161                              l_finplan_lines_tab(j).attribute9     :=  NULL;
12162                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
12163                              l_finplan_lines_tab(j).attribute9   :=  FND_API.G_MISS_CHAR;
12164                        ELSE
12165                              l_finplan_lines_tab(j).attribute9     :=  l_budget_line_in_rec.attribute9;
12166                        END IF;
12167 
12168                        IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12169                              l_finplan_lines_tab(j).attribute10     :=  NULL;
12170                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
12171                              l_finplan_lines_tab(j).attribute10   :=  FND_API.G_MISS_CHAR;
12172                        ELSE
12173                              l_finplan_lines_tab(j).attribute10     :=  l_budget_line_in_rec.attribute10;
12174                        END IF;
12175 
12176                        IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12177                              l_finplan_lines_tab(j).attribute11     :=  NULL;
12178                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
12179                              l_finplan_lines_tab(j).attribute11   :=  FND_API.G_MISS_CHAR;
12180                        ELSE
12181                              l_finplan_lines_tab(j).attribute11     :=  l_budget_line_in_rec.attribute11;
12182                        END IF;
12183 
12184                        IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12185                              l_finplan_lines_tab(j).attribute12     :=  NULL;
12186                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
12187                              l_finplan_lines_tab(j).attribute12   :=  FND_API.G_MISS_CHAR;
12188                        ELSE
12189                              l_finplan_lines_tab(j).attribute12     :=  l_budget_line_in_rec.attribute12;
12190                        END IF;
12191 
12192                        IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12193                              l_finplan_lines_tab(j).attribute13     :=  NULL;
12194                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
12195                              l_finplan_lines_tab(j).attribute13   :=  FND_API.G_MISS_CHAR;
12196                        ELSE
12197                              l_finplan_lines_tab(j).attribute13     :=  l_budget_line_in_rec.attribute13;
12198                        END IF;
12199 
12200                        IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12201                              l_finplan_lines_tab(j).attribute14     :=  NULL;
12202                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
12203                              l_finplan_lines_tab(j).attribute14   :=  FND_API.G_MISS_CHAR;
12204                        ELSE
12205                              l_finplan_lines_tab(j).attribute14     :=  l_budget_line_in_rec.attribute14;
12206                        END IF;
12207 
12208                        IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12209                              l_finplan_lines_tab(j).attribute15     :=  NULL;
12210                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
12211                              l_finplan_lines_tab(j).attribute15   :=  FND_API.G_MISS_CHAR;
12212                        ELSE
12213                              l_finplan_lines_tab(j).attribute15     :=  l_budget_line_in_rec.attribute15;
12214                        END IF;
12215 
12216                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12217                             l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
12218                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type is null) THEN
12219                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12220                        ELSE
12221                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE     :=  l_budget_line_in_rec.projfunc_cost_rate_type;
12222                        END IF;
12223 
12224                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12225                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
12226                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type is null) THEN
12227                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12228                        ELSE
12229                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_line_in_rec.projfunc_cost_rate_date_type;
12230                        END IF;
12231 
12232                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12233                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     := NULL;
12234                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date is null) THEN
12235                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
12236                        ELSE
12237                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     :=  l_budget_line_in_rec.projfunc_cost_rate_date            ;
12238                        END IF;
12239 
12240                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12241                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
12242                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate is null) THEN
12243                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12244                        ELSE
12245                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE :=  l_budget_line_in_rec.projfunc_cost_exchange_rate        ;
12246                        END IF;
12247 
12248                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12249                               l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      := NULL;
12250                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type is null) THEN
12251                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12252                        ELSE
12253                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      :=  l_budget_line_in_rec.projfunc_rev_rate_type             ;
12254                        END IF;
12255 
12256                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12257                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
12258                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type is null) THEN
12259                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12260                        ELSE
12261                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE :=  l_budget_line_in_rec.projfunc_rev_rate_date_type ;
12262                        END IF;
12263 
12264                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12265                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      := NULL;
12266                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date is null) THEN
12267                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
12268                        ELSE
12269                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      :=  l_budget_line_in_rec.projfunc_rev_rate_date;
12270                        END IF;
12271 
12272                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12273                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
12274                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate is null) THEN
12275                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12276                        ELSE
12277                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  :=  l_budget_line_in_rec.projfunc_rev_exchange_rate ;
12278                        END IF;
12279 
12280                        IF  p_budget_lines_in(l_budget_line_index).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12281                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      := NULL;
12282                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_type is null) THEN
12283                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12284                        ELSE
12285                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      :=  l_budget_line_in_rec.project_cost_rate_type;
12286                        END IF;
12287 
12288                        IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12289                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
12290                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type is null) THEN
12291                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12292                        ELSE
12293                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE :=  l_budget_line_in_rec.project_cost_rate_date_type ;
12294                        END IF;
12295 
12296                        IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
12297                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      := NULL;
12298                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date is null) THEN
12299                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
12300                        ELSE
12301                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      :=  l_budget_line_in_rec.project_cost_rate_date;
12302                        END IF;
12303 
12304                        IF p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
12305                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  := NULL;
12306                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate is null) THEN
12307                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12308                        ELSE
12309                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  :=  l_budget_line_in_rec.project_cost_exchange_rate ;
12310                        END IF;
12311 
12312                        IF  p_budget_lines_in(l_budget_line_index).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12313                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       := NULL;
12314                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_type is null) THEN
12315                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12316                        ELSE
12317                               l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       :=  l_budget_line_in_rec.project_rev_rate_type  ;
12318                        END IF;
12319 
12320                        IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12321                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  := NULL;
12322                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type is null) THEN
12323                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12324                        ELSE
12325                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  :=  l_budget_line_in_rec.project_rev_rate_date_type;
12326                        END IF;
12327 
12328                        IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
12329                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       := NULL;
12330                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date is null) THEN
12331                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
12332                        ELSE
12333                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       :=  l_budget_line_in_rec.project_rev_rate_date ;
12334                        END IF;
12335 
12336                        IF p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
12337                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   := NULL;
12338                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate is null) THEN
12339                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12340                        ELSE
12341                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  l_budget_line_in_rec.project_rev_exchange_rate;
12342                        END IF;
12343 
12344                        IF p_budget_lines_in(l_budget_line_index).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12345                              l_finplan_lines_tab(j).pm_product_code             := NULL;
12346                        ELSIF(p_budget_lines_in(l_budget_line_index).pm_product_code is null) THEN
12347                              l_finplan_lines_tab(j).pm_product_code   :=  FND_API.G_MISS_CHAR;
12348                        ELSE
12349                              l_finplan_lines_tab(j).pm_product_code             :=  l_budget_line_in_rec.pm_product_code ;
12350                        END IF;
12351 
12352                        IF p_budget_lines_in(l_budget_line_index).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12353                              l_finplan_lines_tab(j).pm_budget_line_reference    := NULL;
12354                        ELSIF(p_budget_lines_in(l_budget_line_index).pm_budget_line_reference is null) THEN
12355                              l_finplan_lines_tab(j).pm_budget_line_reference   :=  FND_API.G_MISS_CHAR;
12356                        ELSE
12357                              l_finplan_lines_tab(j).pm_budget_line_reference    :=  l_budget_line_in_rec.pm_budget_line_reference  ;
12358                        END IF;
12359 
12360                        l_finplan_lines_tab(j).quantity_source             :=  'I';
12361                        l_finplan_lines_tab(j).raw_cost_source             :=  'I';
12362                        l_finplan_lines_tab(j).burdened_cost_source        :=  'I';
12363                        l_finplan_lines_tab(j).revenue_source              :=  'I';
12364                        l_finplan_lines_tab(j).resource_assignment_id      :=  l_resource_assignment_id ;
12365                        --increment the index for fin plan lines table
12366                        j := j+1;
12367     END IF;
12368                  -- Actual insertion will take place outside the loop as
12369                  -- as the call to CREATE_FINPLAN_LINES expects a table
12370                  -- of budget line records.
12371      --Major changes for the bug 3453650 for the finplan model.
12372 
12373 
12374 END IF; -- l_budget_type_code IS NOT NULL
12375 
12376      l_budget_line_index := p_budget_lines_in.next(l_budget_line_index);
12377 
12378 END LOOP budget_line;
12379 
12380 IF l_budget_type_code IS NULL THEN
12381 
12382      -- Bug : 3453650: Calling the create finplan lines api to create the
12383      -- budget lines for the finplan model and passing the l_finplan_lines_tab
12384      -- table which was built earlier in the api
12385 
12386      IF ( nvl(l_finplan_lines_tab.last,0) > 0 ) THEN
12387 
12388           -- dbms_output.put_line ('Calling add_finplan_lines');
12389 
12390                PA_FIN_PLAN_PVT.ADD_FIN_PLAN_LINES
12391                    ( p_calling_context         => PA_FP_CONSTANTS_PKG.G_AMG_API /* Bug# 2674353 */
12392                     ,p_fin_plan_version_id     => l_budget_version_id
12393                     ,p_finplan_lines_tab        => l_finplan_lines_tab
12394                     ,x_return_status           => l_return_status
12395                     ,x_msg_count               => l_msg_count
12396                     ,x_msg_data                => l_msg_data );
12397 
12398           -- dbms_output.put_line ('after Calling add_finplan_lines ' || l_return_status || ' p_multiple_task_msg ' || p_multiple_task_msg);
12399 
12400                IF (l_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
12401                     pa_debug.g_err_stage:= 'Error Calling ADD_FINPLAN_LINES';
12402                     IF L_DEBUG_MODE = 'Y' THEN
12403                        pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
12404                     END IF;
12405                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12406                END IF;
12407      END IF;
12408 
12409 
12410         -- Unlock the version now that the budget version is updated.
12411         l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
12412                                      (p_budget_version_id => l_budget_version_id);
12413 
12414       --Try to lock the version before updating the version. This is required so that nobody else can access it.
12415         pa_fin_plan_pvt.lock_unlock_version
12416                     (p_budget_version_id       => l_budget_version_id,
12417                      p_record_version_number   => l_record_version_number,
12418                      p_action                  => 'U',
12419                      p_user_id                 => l_user_id,
12420                      p_person_id               => lx_locked_by_person_id,
12421                      x_return_status           => x_return_status,
12422                      x_msg_count               => l_msg_count,
12423                      x_msg_data                => l_msg_data) ;
12424 
12425         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
12426 
12427              IF l_debug_mode = 'Y' THEN
12428                    pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
12429                    pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,5);
12430              END IF;
12431 
12432              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12433          END IF;
12434 
12435 END IF; -- END OF l_budget_type_code is null
12436 
12437 IF p_multiple_task_msg = 'F' THEN
12438      RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12439 END IF;
12440 
12441     --summarizing the totals in the table pa_budget_versions
12442 /*Added the below if condition for the bug 3453650*/
12443 IF l_budget_type_code IS NOT NULL THEN
12444 
12445 -- check for overlapping dates
12446     pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id  => l_budget_version_id      --IN
12447                               ,x_resource_name  => l_resource_name      --OUT
12448                               ,x_err_code       => l_err_code       );
12449 
12450 -- dbms_output.put_line ('after calling pa_budget_lines_v_pkg.check_overlapping_dates ' || l_err_code );
12451 
12452       IF l_err_code > 0 THEN
12453             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12454                   FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
12455                   FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
12456 
12457                   FND_MSG_PUB.add;
12458             END IF;
12459             RAISE FND_API.G_EXC_ERROR;
12460       ELSIF l_err_code < 0 THEN
12461             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12462                   FND_MSG_PUB.add_exc_msg
12463                       (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
12464                       ,  p_procedure_name => 'CHECK_OVERLAPPING_DATES'
12465                       ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12466             END IF;
12467             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12468       END IF;
12469 
12470 
12471         PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
12472                                     , x_err_code      => l_err_code
12473                             , x_err_stage     => l_err_stage
12474                             , x_err_stack     => l_err_stack        );
12475 
12476         IF l_err_code > 0 THEN
12477              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12478                IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
12479                     pa_interface_utils_pub.map_new_amg_msg
12480                     ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
12481                     ,p_msg_attribute    => 'CHANGE'
12482                     ,p_resize_flag      => 'N'
12483                     ,p_msg_context      => 'BUDG'
12484                     ,p_attribute1       => l_amg_segment1
12485                     ,p_attribute2       => l_amg_task_number
12486                     ,p_attribute3       => l_budget_type_code
12487                     ,p_attribute4       => ''
12488                     ,p_attribute5       => to_char(l_budget_start_date));
12489                ELSE
12490                     pa_interface_utils_pub.map_new_amg_msg
12491                     ( p_old_message_code => l_err_stage
12492                     ,p_msg_attribute    => 'CHANGE'
12493                     ,p_resize_flag      => 'N'
12494                     ,p_msg_context      => 'BUDG'
12495                     ,p_attribute1       => l_amg_segment1
12496                     ,p_attribute2       => l_amg_task_number
12497                     ,p_attribute3       => l_budget_type_code
12498                     ,p_attribute4       => ''
12499                     ,p_attribute5       => to_char(l_budget_start_date));
12500                END IF;
12501           END IF;
12502           RAISE FND_API.G_EXC_ERROR;
12503      ELSIF l_err_code < 0 THEN
12504           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12505                FND_MSG_PUB.add_exc_msg
12506                (  p_pkg_name       => 'PA_BUDGET_UTILS'
12507                ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
12508                ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12509 
12510           END IF;
12511           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12512         END IF; -- l_err_code > 0
12513  END IF; -- l_budget_type_code IS NOT NULL
12514 
12515 END IF;  --if there are budget lines
12516 
12517 IF FND_API.TO_BOOLEAN( p_commit ) THEN
12518      COMMIT;
12519 END IF;
12520 
12521 
12522 EXCEPTION
12523 
12524       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12525           -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || FND_MSG_PUB.count_msg);
12526         ROLLBACK TO update_budget_pub;
12527 
12528         IF p_return_status IS NULL OR
12529            p_return_status =  FND_API.G_RET_STS_SUCCESS THEN
12530               p_return_status := FND_API.G_RET_STS_ERROR;
12531         END IF;
12532 
12533         l_msg_count := FND_MSG_PUB.count_msg;
12534         -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12535 
12536         IF l_msg_count = 1 AND p_msg_data IS NULL THEN
12537                PA_INTERFACE_UTILS_PUB.get_messages
12538                    (p_encoded        => FND_API.G_TRUE,
12539                     p_msg_index      => 1,
12540                     p_msg_count      => l_msg_count,
12541                     p_msg_data       => l_msg_data,
12542                     p_data           => l_data,
12543                     p_msg_index_out  => l_msg_index_out);
12544 
12545                p_msg_data  := l_data;
12546                p_msg_count := l_msg_count;
12547         ELSE
12548                p_msg_count := l_msg_count;
12549         END IF;
12550         --Changes for bug 3182963
12551         IF l_debug_mode = 'Y' THEN
12552           pa_debug.reset_curr_function;
12553         END IF;
12554           -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12555 
12556         RETURN;
12557 
12558     WHEN FND_API.G_EXC_ERROR
12559     THEN
12560 
12561 
12562             ROLLBACK TO update_budget_pub;
12563 
12564             p_return_status := FND_API.G_RET_STS_ERROR;
12565 
12566             FND_MSG_PUB.Count_And_Get
12567             (   p_count     =>  p_msg_count ,
12568                 p_data      =>  p_msg_data  );
12569 
12570     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
12571     THEN
12572 
12573 
12574             ROLLBACK TO update_budget_pub;
12575 
12576             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12577 
12578             FND_MSG_PUB.Count_And_Get
12579             (   p_count     =>  p_msg_count ,
12580                 p_data      =>  p_msg_data  );
12581 
12582     WHEN ROW_ALREADY_LOCKED
12583     THEN
12584         ROLLBACK TO update_budget_pub;
12585 
12586         p_return_status := FND_API.G_RET_STS_ERROR;
12587 
12588         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12589         THEN
12590          FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
12591          FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
12592          FND_MESSAGE.SET_TOKEN('TASK',    l_amg_task_number);
12593          FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
12594          FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
12595    --    FND_MESSAGE.SET_TOKEN('START_DATE', to_char(l_budget_start_date));
12596          FND_MESSAGE.SET_TOKEN('START_DATE',
12597                                 fnd_date.date_to_chardate(l_budget_start_date));
12598          FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
12599          FND_MSG_PUB.ADD;
12600         END IF;
12601 
12602         FND_MSG_PUB.Count_And_Get
12603                 (   p_count     =>  p_msg_count ,
12604                     p_data      =>  p_msg_data  );
12605 
12606     WHEN OTHERS
12607     THEN
12608 
12609 
12610             ROLLBACK TO update_budget_pub;
12611 
12612             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12613 
12614             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12615             THEN
12616                 FND_MSG_PUB.add_exc_msg
12617                 (  p_pkg_name       => G_PKG_NAME
12618                 ,  p_procedure_name => l_api_name );
12619 
12620             END IF;
12621 
12622             FND_MSG_PUB.Count_And_Get
12623             (   p_count     =>  p_msg_count ,
12624                 p_data      =>  p_msg_data  );
12625 
12626 
12627 END update_budget;
12628 
12629 
12630 ----------------------------------------------------------------------------------------
12631 --Name:               execute_update_budget
12632 --Type:               Procedure
12633 --Description:        This procedure can be used to update a working (draft) budget
12634 --                    using global PL/SQL tables.
12635 --
12636 --Called subprograms:
12637 --
12638 --
12639 --
12640 --History:
12641 --    14-OCT-1996        L. de Werker    Created
12642 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
12643 --
12644 
12645 PROCEDURE execute_update_budget
12646 ( p_api_version_number          IN  NUMBER
12647  ,p_commit              IN  VARCHAR2    := FND_API.G_FALSE
12648  ,p_init_msg_list           IN  VARCHAR2    := FND_API.G_FALSE
12649  ,p_msg_count               OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12650  ,p_msg_data                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12651  ,p_return_status           OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12652  ,p_pm_product_code         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12653  ,p_pa_project_id           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12654  ,p_pm_project_reference        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12655  ,p_budget_type_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12656  ,p_change_reason_code          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12657  ,p_description             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12658  ,p_attribute_category          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12659  ,p_attribute1              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12660  ,p_attribute2              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12661  ,p_attribute3              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12662  ,p_attribute4              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12663  ,p_attribute5              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12664  ,p_attribute6              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12665  ,p_attribute7              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12666  ,p_attribute8              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12667  ,p_attribute9              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12668  ,p_attribute10             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12669  ,p_attribute11             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12670  ,p_attribute12             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12671  ,p_attribute13             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12672  ,p_attribute14             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12673  ,p_attribute15             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12674    --Added for the bug 3453650
12675  ,p_resource_list_id              IN   pa_budget_versions.resource_list_id%TYPE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12676  ,p_set_current_working_flag      IN   pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12677  ,p_budget_version_number         IN   pa_budget_versions.version_number%TYPE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12678  ,p_budget_version_name           IN   pa_budget_versions.version_name%TYPE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12679  ,p_version_type                  IN   pa_budget_versions.version_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12680  ,p_finplan_type_id               IN   pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12681  ,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
12682  ,p_time_phased_code              IN   pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12683  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12684  ,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
12685  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12686  ,p_projfunc_cost_exchange_rate   IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12687  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12688  ,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
12689  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12690  ,p_projfunc_rev_exchange_rate    IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12691  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12692  ,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
12693  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12694  ,p_project_cost_exchange_rate    IN  pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12695  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12696  ,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
12697  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12698  ,p_project_rev_exchange_rate     IN  pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12699  )
12700 
12701 IS
12702 
12703    l_api_name               CONSTANT    VARCHAR2(30)        := 'execute_update_budget';
12704 
12705    i                            NUMBER;
12706    l_return_status                  VARCHAR2(1);
12707    l_err_stage                      VARCHAR2(120);
12708 
12709 
12710 BEGIN
12711 
12712 --  Standard begin of API savepoint
12713 
12714     SAVEPOINT execute_update_budget_pub;
12715 
12716 --  Standard call to check for call compatibility.
12717 
12718     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
12719                                          p_api_version_number   ,
12720                                          l_api_name             ,
12721                                          G_PKG_NAME             )
12722     THEN
12723 
12724     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12725 
12726     END IF;
12727 
12728 --  Initialize the message table if requested.
12729 
12730     IF FND_API.TO_BOOLEAN( p_init_msg_list )
12731     THEN
12732 
12733     FND_MSG_PUB.initialize;
12734 
12735     END IF;
12736 
12737 --  Set API return status to success
12738 
12739     p_return_status := FND_API.G_RET_STS_SUCCESS;
12740 
12741 
12742 --  product_code is mandatory
12743 
12744     IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12745     OR p_pm_product_code IS NULL
12746     THEN
12747     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12748     THEN
12749       pa_interface_utils_pub.map_new_amg_msg
12750       ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
12751        ,p_msg_attribute    => 'CHANGE'
12752        ,p_resize_flag      => 'N'
12753        ,p_msg_context      => 'GENERAL'
12754        ,p_attribute1       => ''
12755        ,p_attribute2       => ''
12756        ,p_attribute3       => ''
12757        ,p_attribute4       => ''
12758        ,p_attribute5       => '');
12759     END IF;
12760 
12761         RAISE FND_API.G_EXC_ERROR;
12762 
12763     END IF;
12764 
12765     l_pm_product_code :='Z';
12766     /*added for bug no :2413400*/
12767     OPEN p_product_code_csr (p_pm_product_code);
12768     FETCH p_product_code_csr INTO l_pm_product_code;
12769     CLOSE p_product_code_csr;
12770     IF l_pm_product_code <> 'X'
12771     THEN
12772 
12773            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12774     THEN
12775          pa_interface_utils_pub.map_new_amg_msg
12776            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
12777             ,p_msg_attribute    => 'CHANGE'
12778             ,p_resize_flag      => 'N'
12779             ,p_msg_context      => 'GENERAL'
12780             ,p_attribute1       => ''
12781             ,p_attribute2       => ''
12782             ,p_attribute3       => ''
12783             ,p_attribute4       => ''
12784             ,p_attribute5       => '');
12785     END IF;
12786     p_return_status             := FND_API.G_RET_STS_ERROR;
12787     RAISE FND_API.G_EXC_ERROR;
12788     END IF;
12789 
12790 
12791 /*   -- dbms_output.put_line('Before update_budget'); */
12792 
12793           update_budget( p_api_version_number   => p_api_version_number
12794                     ,p_commit       => FND_API.G_FALSE
12795                     ,p_init_msg_list    => FND_API.G_FALSE
12796                 ,p_msg_count        => p_msg_count
12797                 ,p_msg_data     => p_msg_data
12798                 ,p_return_status    => l_return_status
12799                 ,p_pm_product_code  => p_pm_product_code
12800                 ,p_pa_project_id    => p_pa_project_id
12801                 ,p_pm_project_reference => p_pm_project_reference
12802                 ,p_budget_type_code => p_budget_type_code
12803                 ,p_change_reason_code   => p_change_reason_code
12804                 ,p_description      => p_description
12805                 ,p_budget_lines_in  => G_budget_lines_in_tbl
12806                 ,p_budget_lines_out => G_budget_lines_out_tbl
12807                 -- Added for bug 4224464
12808                 --Added the new parameters for the bug 3453650
12809                 ,p_resource_list_id              =>   p_resource_list_id
12810                 ,p_set_current_working_flag      =>   p_set_current_working_flag
12811                 ,p_budget_version_number         =>   p_budget_version_number
12812                 ,p_budget_version_name           =>   p_budget_version_name
12813                 ,p_version_type                  =>   p_version_type  -- 3453650
12814                 ,p_finplan_type_id               =>   p_finplan_type_id
12815                 ,p_plan_in_multi_curr_flag       =>   p_plan_in_multi_curr_flag
12816                 ,p_time_phased_code              =>   p_time_phased_code
12817                 ,p_projfunc_cost_rate_type       =>   p_projfunc_cost_rate_type
12818                 ,p_projfunc_cost_rate_date_typ   =>   p_projfunc_cost_rate_date_typ
12819                 ,p_projfunc_cost_rate_date       =>   p_projfunc_cost_rate_date
12820                 ,p_projfunc_cost_exchange_rate   =>   p_projfunc_cost_exchange_rate
12821                 ,p_projfunc_rev_rate_type        =>   p_projfunc_rev_rate_type
12822                 ,p_projfunc_rev_rate_date_typ    =>   p_projfunc_rev_rate_date_typ
12823                 ,p_projfunc_rev_rate_date        =>   p_projfunc_rev_rate_date
12824                 ,p_projfunc_rev_exchange_rate    =>   p_projfunc_rev_exchange_rate
12825                 ,p_project_cost_rate_type        =>   p_project_cost_rate_type
12826                 ,p_project_cost_rate_date_typ    =>   p_project_cost_rate_date_typ
12827                 ,p_project_cost_rate_date        =>   p_project_cost_rate_date
12828                 ,p_project_cost_exchange_rate    =>   p_project_cost_exchange_rate
12829                 ,p_project_rev_rate_type         =>   p_project_rev_rate_type
12830                 ,p_project_rev_rate_date_typ     =>   p_project_rev_rate_date_typ
12831                 ,p_project_rev_rate_date         =>   p_project_rev_rate_date
12832                 ,p_project_rev_exchange_rate     =>   p_project_rev_exchange_rate );
12833 
12834 /*   -- dbms_output.put_line('After update_budget'); */
12835 
12836 /*   -- dbms_output.put_line('Return status update_budget: '||l_return_status); */
12837 
12838     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12839         THEN
12840 
12841             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12842 
12843         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
12844         THEN
12845 
12846             RAISE FND_API.G_EXC_ERROR;
12847         END IF;
12848 
12849         IF fnd_api.to_boolean(p_commit)
12850         THEN
12851             COMMIT;
12852         END IF;
12853 
12854 
12855 EXCEPTION
12856 
12857     WHEN FND_API.G_EXC_ERROR
12858     THEN
12859 
12860 /*   -- dbms_output.put_line('handling an G_EXC_ERROR exception in execute_update_budget'); */
12861 
12862     ROLLBACK TO execute_update_budget_pub;
12863 
12864     p_return_status := FND_API.G_RET_STS_ERROR;
12865 
12866     FND_MSG_PUB.Count_And_Get
12867     (   p_count     =>  p_msg_count ,
12868         p_data      =>  p_msg_data  );
12869 
12870     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
12871     THEN
12872 
12873 /*   -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
12874 
12875     ROLLBACK TO execute_update_budget_pub;
12876 
12877     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12878 
12879     FND_MSG_PUB.Count_And_Get
12880     (   p_count     =>  p_msg_count ,
12881         p_data      =>  p_msg_data  );
12882 
12883     WHEN OTHERS THEN
12884 
12885 /*   -- dbms_output.put_line('handling an OTHERS exception in execute_update_budget'); */
12886 
12887     ROLLBACK TO execute_update_budget_pub;
12888 
12889     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12890 
12891     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12892     THEN
12893         FND_MSG_PUB.add_exc_msg
12894             (  p_pkg_name       => G_PKG_NAME
12895             ,  p_procedure_name => l_api_name );
12896 
12897     END IF;
12898 
12899     FND_MSG_PUB.Count_And_Get
12900     (   p_count     =>  p_msg_count ,
12901         p_data      =>  p_msg_data  );
12902 
12903 END execute_update_budget;
12904 
12905 
12906 ----------------------------------------------------------------------------------------
12907 --Name:               update_budget_line
12908 --Type:               Procedure
12909 --Description:        This procedure can be used to update a budgetline of an
12910 --                    existing WORKING budget.
12911 --
12912 --Called subprograms: pa_budget_pvt.update_budget_line_sql
12913 --
12914 --
12915 --
12916 --
12917 --History:
12918 --    10-OCT-1996        L. de Werker    Created
12919 --    19-NOV-1996    L. de Werker    Changed to let it use update_budget_line_sql
12920 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
12921 --    11-MAY-2005    Ritesh Shukla   Bug 4224464: FP.M Changes for update_budget_line
12922 
12923 PROCEDURE update_budget_line
12924 ( p_api_version_number            IN  NUMBER
12925  ,p_commit                        IN  VARCHAR2   := FND_API.G_FALSE
12926  ,p_init_msg_list                 IN  VARCHAR2   := FND_API.G_FALSE
12927  ,p_msg_count                     OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12928  ,p_msg_data                      OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12929  ,p_return_status                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12930  ,p_pm_product_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12931  ,p_pa_project_id                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12932  ,p_pm_project_reference          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12933  ,p_budget_type_code              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12934  ,p_pa_task_id                    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12935  ,p_pm_task_reference             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12936  ,p_resource_alias                IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12937  ,p_resource_list_member_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12938  ,p_budget_start_date             IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12939  ,p_budget_end_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12940  ,p_period_name                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12941  ,p_description                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12942  ,p_raw_cost                      IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12943  ,p_burdened_cost                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12944  ,p_revenue                       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12945  ,p_quantity                      IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12946  ,p_attribute_category            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12947  ,p_attribute1                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12948  ,p_attribute2                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12949  ,p_attribute3                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12950  ,p_attribute4                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12951  ,p_attribute5                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12952  ,p_attribute6                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12953  ,p_attribute7                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12954  ,p_attribute8                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12955  ,p_attribute9                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12956  ,p_attribute10                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12957  ,p_attribute11                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12958  ,p_attribute12                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12959  ,p_attribute13                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12960  ,p_attribute14                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12961  ,p_attribute15                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12962  --Parameters added for FP.M
12963  ,p_fin_plan_type_id              IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12964  ,p_fin_plan_type_name            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12965  ,p_version_type                  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12966  ,p_version_number                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12967  ,p_currency_code                 IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12968  ,p_change_reason_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12969  ,p_projfunc_cost_rate_type       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12970  ,p_projfunc_cost_rate_date_typ   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12971  ,p_projfunc_cost_rate_date       IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12972  ,p_projfunc_cost_exchange_rate   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12973  ,p_projfunc_rev_rate_type        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12974  ,p_projfunc_rev_rate_date_typ    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12975  ,p_projfunc_rev_rate_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12976  ,p_projfunc_rev_exchange_rate    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12977  ,p_project_cost_rate_type        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12978  ,p_project_cost_rate_date_typ    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12979  ,p_project_cost_rate_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12980  ,p_project_cost_exchange_rate    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12981  ,p_project_rev_rate_type         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12982  ,p_project_rev_rate_date_typ     IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12983  ,p_project_rev_rate_date         IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12984  ,p_project_rev_exchange_rate     IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12985 )
12986 
12987 IS
12988 
12989 
12990      --needed to get the resource assignment for this budget_version / task / member combination
12991      CURSOR l_resource_assignment_csr
12992         (p_budget_version_id  NUMBER
12993         ,p_task_id            NUMBER
12994         ,p_member_id          NUMBER  )
12995      IS
12996      SELECT resource_assignment_id
12997      FROM   pa_resource_assignments
12998      WHERE  budget_version_id = p_budget_version_id
12999      AND    task_id = p_task_id
13000      AND    resource_list_member_id = p_member_id;
13001 
13002      --needed to check whether budget line already exists
13003      CURSOR l_budget_line_csr
13004         (p_resource_assigment_id NUMBER
13005         ,p_budget_start_date     DATE
13006         ,p_currency_code         VARCHAR2)
13007      IS
13008      SELECT rowidtochar(rowid)
13009            ,budget_line_id
13010      FROM   pa_budget_lines
13011      WHERE  resource_assignment_id = p_resource_assigment_id
13012      AND    trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
13013      AND    txn_currency_code = nvl(p_currency_code,txn_currency_code);
13014 
13015      --needed to lock the budget line row
13016      CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
13017      IS
13018      SELECT 'x'
13019      FROM   pa_budget_lines
13020      WHERE  rowid = p_budget_line_rowid
13021      FOR UPDATE NOWAIT;
13022 
13023      l_api_name          CONSTANT VARCHAR2(30)        := 'update_budget_line';
13024 
13025      l_resource_assignment_id     NUMBER;
13026      l_budget_line_id             NUMBER;
13027      l_budget_line_rowid          VARCHAR(20);
13028 
13029      l_err_code                   NUMBER;
13030      l_err_stage                  VARCHAR2(120);
13031      l_err_stack                  VARCHAR2(630);
13032 
13033      l_project_id                 NUMBER := p_pa_project_id;
13034      l_budget_type_code           pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
13035      l_fin_plan_type_id           NUMBER := p_fin_plan_type_id;
13036      l_fin_plan_type_name         pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
13037      l_version_type               pa_budget_versions.version_type%TYPE := p_version_type;
13038      l_budget_version_id          NUMBER;
13039      l_budget_entry_method_code   pa_budget_entry_methods.budget_entry_method_code%TYPE;
13040      l_resource_list_id           NUMBER;
13041      l_budget_amount_code         pa_budget_types.budget_amount_code%type;
13042      l_entry_level_code           pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
13043      l_time_phased_code           pa_proj_fp_options.cost_time_phased_code%TYPE;
13044      l_multi_curr_flag            pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
13045      l_categorization_code        pa_budget_entry_methods.categorization_code%TYPE;
13046      l_record_version_number      pa_budget_versions.record_version_number%TYPE;
13047 
13048      l_budget_lines_in            budget_line_in_tbl_type;
13049      l_budget_lines_out_tbl       budget_line_out_tbl_type;
13050      l_mfc_cost_type_id_tbl       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13051      l_etc_method_code_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
13052      l_spread_curve_id_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13053 
13054      l_finplan_lines_tab          pa_fin_plan_pvt.budget_lines_tab;
13055      l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
13056 
13057      --Following parameters are needed for amounts check
13058      l_amount_set_id              NUMBER;
13059      lx_raw_cost_flag             VARCHAR2(1) := NULL;
13060      lx_burdened_cost_flag        VARCHAR2(1) := NULL;
13061      lx_revenue_flag              VARCHAR2(1) := NULL;
13062      lx_cost_qty_flag             VARCHAR2(1) := NULL;
13063      lx_revenue_qty_flag          VARCHAR2(1) := NULL;
13064      lx_all_qty_flag              VARCHAR2(1) := NULL;
13065      l_bill_rate_flag             pa_fin_plan_amount_sets.bill_rate_flag%type;
13066      l_cost_rate_flag             pa_fin_plan_amount_sets.cost_rate_flag%type;
13067      l_burden_rate_flag           pa_fin_plan_amount_sets.burden_rate_flag%type;
13068      l_allow_qty_flag             VARCHAR2(1);
13069 
13070      l_msg_count                  NUMBER := 0;
13071      l_msg_data                   VARCHAR2(2000);
13072      l_function_allowed           VARCHAR2(1);
13073      l_module_name                VARCHAR2(80);
13074      l_data                       VARCHAR2(2000);
13075      l_msg_index_out              NUMBER;
13076 
13077      l_amg_project_number        pa_projects_all.segment1%TYPE;
13078      l_amg_task_number            VARCHAR2(50);
13079 
13080      --debug variables
13081      l_debug_mode                 VARCHAR2(1);
13082      l_debug_level2      CONSTANT NUMBER := 2;
13083      l_debug_level3      CONSTANT NUMBER := 3;
13084      l_debug_level4      CONSTANT NUMBER := 4;
13085      l_debug_level5      CONSTANT NUMBER := 5;
13086      --Added for bug 6408139 to pass G_PA_MISS_CHAR
13087      l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
13088 
13089 
13090 BEGIN
13091 
13092 
13093      --Standard begin of API savepoint
13094      SAVEPOINT update_budget_line_pub;
13095 
13096      p_msg_count := 0;
13097      p_return_status := FND_API.G_RET_STS_SUCCESS;
13098      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
13099      l_module_name := g_module_name || ':Update_Budget_Line ';
13100 
13101      IF ( l_debug_mode = 'Y' )
13102      THEN
13103            pa_debug.set_curr_function( p_function   => l_api_name
13104                                       ,p_debug_mode => l_debug_mode );
13105      END IF;
13106 
13107      IF ( l_debug_mode = 'Y' )
13108      THEN
13109            pa_debug.g_err_stage:='Entering ' || l_api_name;
13110            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
13111      END IF;
13112 
13113      --Initialize the message table if requested.
13114      IF FND_API.TO_BOOLEAN( p_init_msg_list )
13115      THEN
13116           FND_MSG_PUB.initialize;
13117      END IF;
13118 
13119      --Set API return status to success
13120      p_return_status     := FND_API.G_RET_STS_SUCCESS;
13121 
13122      --Call PA_BUDGET_PVT.validate_header_info to do the necessary
13123      --header level validations
13124      PA_BUDGET_PVT.validate_header_info
13125           ( p_api_version_number          => p_api_version_number
13126            ,p_api_name                    => l_api_name
13127            ,p_init_msg_list               => p_init_msg_list
13128            ,px_pa_project_id              => l_project_id
13129            ,p_pm_project_reference        => p_pm_project_reference
13130            ,p_pm_product_code             => p_pm_product_code
13131            ,px_budget_type_code           => l_budget_type_code
13132            ,px_fin_plan_type_id           => l_fin_plan_type_id
13133            ,px_fin_plan_type_name         => l_fin_plan_type_name
13134            ,px_version_type               => l_version_type
13135            ,p_budget_version_number       => p_version_number
13136            ,p_change_reason_code          => NULL
13137            ,p_function_name               => 'PA_PM_UPDATE_BUDGET_LINE'
13138            ,x_budget_entry_method_code    => l_budget_entry_method_code
13139            ,x_resource_list_id            => l_resource_list_id
13140            ,x_budget_version_id           => l_budget_version_id
13141            ,x_fin_plan_level_code         => l_entry_level_code
13142            ,x_time_phased_code            => l_time_phased_code
13143            ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
13144            ,x_budget_amount_code          => l_budget_amount_code
13145            ,x_categorization_code         => l_categorization_code
13146            ,x_project_number              => l_amg_project_number
13147            /* Plan Amount Entry flags introduced by bug 6408139 */
13148            /*Passing all as G_PA_MISS_CHAR since validations not required*/
13149            ,px_raw_cost_flag         =>   l_pa_miss_char
13150            ,px_burdened_cost_flag    =>   l_pa_miss_char
13151            ,px_revenue_flag          =>   l_pa_miss_char
13152            ,px_cost_qty_flag         =>   l_pa_miss_char
13153            ,px_revenue_qty_flag      =>   l_pa_miss_char
13154            ,px_all_qty_flag          =>   l_pa_miss_char
13155            ,px_bill_rate_flag        =>   l_pa_miss_char
13156            ,px_cost_rate_flag        =>   l_pa_miss_char
13157            ,px_burden_rate_flag      =>   l_pa_miss_char
13158            /* Plan Amount Entry flags introduced by bug 6408139 */
13159            ,x_msg_count                   => p_msg_count
13160            ,x_msg_data                    => p_msg_data
13161            ,x_return_status               => p_return_status );
13162 
13163      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13164            IF(l_debug_mode='Y') THEN
13165                  pa_debug.g_err_stage := 'validate header info API falied';
13166                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13167            END IF;
13168            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13169      END IF;
13170 
13171      --Store the budget line data in budget line table
13172 
13173      IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13174           l_budget_lines_in(1).pa_task_id := NULL;
13175      ELSE
13176           l_budget_lines_in(1).pa_task_id := p_pa_task_id;
13177      END IF;
13178 
13179      IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13180           l_budget_lines_in(1).pm_task_reference := NULL;
13181      ELSE
13182           l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
13183      END IF;
13184 
13185      IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13186           l_budget_lines_in(1).resource_alias := NULL;
13187      ELSE
13188           l_budget_lines_in(1).resource_alias := p_resource_alias;
13189      END IF;
13190 
13191      IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13192           l_budget_lines_in(1).resource_list_member_id := NULL;
13193      ELSE
13194           l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
13195      END IF;
13196 
13197      IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13198           l_budget_lines_in(1).budget_start_date := NULL;
13199      ELSE
13200           l_budget_lines_in(1).budget_start_date := p_budget_start_date;
13201      END IF;
13202 
13203      IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13204           l_budget_lines_in(1).budget_end_date := NULL;
13205      ELSE
13206           l_budget_lines_in(1).budget_end_date := p_budget_end_date;
13207      END IF;
13208 
13209      IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13210           l_budget_lines_in(1).period_name := NULL;
13211      ELSE
13212           l_budget_lines_in(1).period_name := p_period_name;
13213      END IF;
13214 
13215      IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13216           l_budget_lines_in(1).description := NULL;
13217      ELSE
13218           l_budget_lines_in(1).description := p_description;
13219      END IF;
13220 
13221      IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13222           l_budget_lines_in(1).raw_cost := NULL;
13223      ELSE
13224           l_budget_lines_in(1).raw_cost := p_raw_cost;
13225      END IF;
13226 
13227      IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13228           l_budget_lines_in(1).burdened_cost := NULL;
13229      ELSE
13230           l_budget_lines_in(1).burdened_cost := p_burdened_cost;
13231      END IF;
13232 
13233      IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13234           l_budget_lines_in(1).revenue := NULL;
13235      ELSE
13236           l_budget_lines_in(1).revenue := p_revenue;
13237      END IF;
13238 
13239      IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13240           l_budget_lines_in(1).quantity := NULL;
13241      ELSE
13242           l_budget_lines_in(1).quantity := p_quantity;
13243      END IF;
13244 
13245      IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13246           l_budget_lines_in(1).pm_product_code := NULL;
13247      ELSE
13248           l_budget_lines_in(1).pm_product_code := p_pm_product_code;
13249      END IF;
13250 
13251      IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13252           l_budget_lines_in(1).attribute_category := NULL;
13253      ELSE
13254           l_budget_lines_in(1).attribute_category := p_attribute_category;
13255      END IF;
13256 
13257      IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13258           l_budget_lines_in(1).attribute1 := NULL;
13259      ELSE
13260           l_budget_lines_in(1).attribute1 := p_attribute1;
13261      END IF;
13262 
13263      IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13264           l_budget_lines_in(1).attribute2 := NULL;
13265      ELSE
13266           l_budget_lines_in(1).attribute2 := p_attribute2;
13267      END IF;
13268 
13269      IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13270           l_budget_lines_in(1).attribute3 := NULL;
13271      ELSE
13272           l_budget_lines_in(1).attribute3 := p_attribute3;
13273      END IF;
13274 
13275      IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13276           l_budget_lines_in(1).attribute4 := NULL;
13277      ELSE
13278           l_budget_lines_in(1).attribute4 := p_attribute4;
13279      END IF;
13280 
13281      IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13282           l_budget_lines_in(1).attribute5 := NULL;
13283      ELSE
13284           l_budget_lines_in(1).attribute5 := p_attribute5;
13285      END IF;
13286 
13287      IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13288           l_budget_lines_in(1).attribute6 := NULL;
13289      ELSE
13290           l_budget_lines_in(1).attribute6 := p_attribute6;
13291      END IF;
13292 
13293      IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13294           l_budget_lines_in(1).attribute7 := NULL;
13295      ELSE
13296           l_budget_lines_in(1).attribute7 := p_attribute7;
13297      END IF;
13298 
13299      IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13300           l_budget_lines_in(1).attribute8 := NULL;
13301      ELSE
13302           l_budget_lines_in(1).attribute8 := p_attribute8;
13303      END IF;
13304 
13305      IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13306           l_budget_lines_in(1).attribute9 := NULL;
13307      ELSE
13308           l_budget_lines_in(1).attribute9 := p_attribute9;
13309      END IF;
13310 
13311      IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13312           l_budget_lines_in(1).attribute10 := NULL;
13313      ELSE
13314           l_budget_lines_in(1).attribute10 := p_attribute10;
13315      END IF;
13316 
13317      IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13318           l_budget_lines_in(1).attribute11 := NULL;
13319      ELSE
13320           l_budget_lines_in(1).attribute11 := p_attribute11;
13321      END IF;
13322 
13323      IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13324           l_budget_lines_in(1).attribute12 := NULL;
13325      ELSE
13326           l_budget_lines_in(1).attribute12 := p_attribute12;
13327      END IF;
13328 
13329      IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13330           l_budget_lines_in(1).attribute13 := NULL;
13331      ELSE
13332           l_budget_lines_in(1).attribute13 := p_attribute13;
13333      END IF;
13334 
13335      IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13336           l_budget_lines_in(1).attribute14 := NULL;
13337      ELSE
13338           l_budget_lines_in(1).attribute14 := p_attribute14;
13339      END IF;
13340 
13341      IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13342           l_budget_lines_in(1).attribute15 := NULL;
13343      ELSE
13344           l_budget_lines_in(1).attribute15 := p_attribute15;
13345      END IF;
13346 
13347      IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13348           l_budget_lines_in(1).txn_currency_code := NULL;
13349      ELSE
13350           l_budget_lines_in(1).txn_currency_code := p_currency_code;
13351      END IF;
13352 
13353      IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13354           l_budget_lines_in(1).projfunc_cost_rate_type := NULL;
13355      ELSE
13356           l_budget_lines_in(1).projfunc_cost_rate_type := p_projfunc_cost_rate_type;
13357      END IF;
13358 
13359      IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13360           l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
13361      ELSE
13362           l_budget_lines_in(1).projfunc_cost_rate_date_type := p_projfunc_cost_rate_date_typ;
13363      END IF;
13364 
13365      IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13366           l_budget_lines_in(1).projfunc_cost_rate_date := NULL;
13367      ELSE
13368           l_budget_lines_in(1).projfunc_cost_rate_date := p_projfunc_cost_rate_date;
13369      END IF;
13370 
13371      IF p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13372           l_budget_lines_in(1).projfunc_cost_exchange_rate := NULL;
13373      ELSE
13374           l_budget_lines_in(1).projfunc_cost_exchange_rate := p_projfunc_cost_exchange_rate;
13375      END IF;
13376 
13377      IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13378           l_budget_lines_in(1).projfunc_rev_rate_type := NULL;
13379      ELSE
13380           l_budget_lines_in(1).projfunc_rev_rate_type := p_projfunc_rev_rate_type;
13381      END IF;
13382 
13383      IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13384           l_budget_lines_in(1).projfunc_rev_rate_date_type := NULL;
13385      ELSE
13386           l_budget_lines_in(1).projfunc_rev_rate_date_type := p_projfunc_rev_rate_date_typ;
13387      END IF;
13388 
13389      IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13390           l_budget_lines_in(1).projfunc_rev_rate_date := NULL;
13391      ELSE
13392           l_budget_lines_in(1).projfunc_rev_rate_date := p_projfunc_rev_rate_date;
13393      END IF;
13394 
13395      IF p_projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13396           l_budget_lines_in(1).projfunc_rev_exchange_rate := NULL;
13397      ELSE
13398           l_budget_lines_in(1).projfunc_rev_exchange_rate := p_projfunc_rev_exchange_rate;
13399      END IF;
13400 
13401      IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13402           l_budget_lines_in(1).project_cost_rate_type := NULL;
13403      ELSE
13404           l_budget_lines_in(1).project_cost_rate_type := p_project_cost_rate_type;
13405      END IF;
13406 
13407      IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13408           l_budget_lines_in(1).project_cost_rate_date_type := NULL;
13409      ELSE
13410           l_budget_lines_in(1).project_cost_rate_date_type := p_project_cost_rate_date_typ;
13411      END IF;
13412 
13413      IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13414           l_budget_lines_in(1).project_cost_rate_date := NULL;
13415      ELSE
13416           l_budget_lines_in(1).project_cost_rate_date := p_project_cost_rate_date;
13417      END IF;
13418 
13419      IF p_project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13420           l_budget_lines_in(1).project_cost_exchange_rate := NULL;
13421      ELSE
13422           l_budget_lines_in(1).project_cost_exchange_rate := p_project_cost_exchange_rate;
13423      END IF;
13424 
13425      IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13426           l_budget_lines_in(1).project_rev_rate_type := NULL;
13427      ELSE
13428           l_budget_lines_in(1).project_rev_rate_type := p_project_rev_rate_type;
13429      END IF;
13430 
13431      IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13432           l_budget_lines_in(1).project_rev_rate_date_type := NULL;
13433      ELSE
13434           l_budget_lines_in(1).project_rev_rate_date_type := p_project_rev_rate_date_typ;
13435      END IF;
13436 
13437      IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13438           l_budget_lines_in(1).project_rev_rate_date := NULL;
13439      ELSE
13440           l_budget_lines_in(1).project_rev_rate_date := p_project_rev_rate_date;
13441      END IF;
13442 
13443      IF p_project_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13444           l_budget_lines_in(1).project_rev_exchange_rate := NULL;
13445      ELSE
13446           l_budget_lines_in(1).project_rev_exchange_rate := p_project_rev_exchange_rate;
13447      END IF;
13448 
13449      IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13450           l_budget_lines_in(1).change_reason_code := NULL;
13451      ELSE
13452           l_budget_lines_in(1).change_reason_code := p_change_reason_code;
13453      END IF;
13454 
13455      --Send the budget version id to validate_budget_lines API for
13456      --actuals on FORECAST check
13457      l_version_info_rec.x_budget_version_id := l_budget_version_id;
13458 
13459      --Get entry method options and validate them against cost, rev and quantity passed
13460      IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13461      THEN
13462 
13463           l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
13464 
13465           PA_FIN_PLAN_UTILS.get_plan_amount_flags(
13466                          P_AMOUNT_SET_ID      => l_amount_set_id
13467                         ,X_RAW_COST_FLAG      => lx_raw_cost_flag
13468                         ,X_BURDENED_FLAG      => lx_burdened_cost_flag
13469                         ,X_REVENUE_FLAG       => lx_revenue_flag
13470                         ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
13471                         ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
13472                         ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
13473                         ,X_BILL_RATE_FLAG     => l_bill_rate_flag
13474                         ,X_COST_RATE_FLAG     => l_cost_rate_flag
13475                         ,X_BURDEN_RATE_FLAG   => l_burden_rate_flag
13476                         ,x_message_count      => p_msg_count
13477                         ,x_return_status      => p_return_status
13478                         ,x_message_data       => p_msg_data) ;
13479 
13480           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
13481           THEN
13482                IF(l_debug_mode='Y') THEN
13483                     pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
13484                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13485                END IF;
13486                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13487           END IF;
13488 
13489           --Derive the value of all_qty_flag based on version_type
13490           IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
13491                l_allow_qty_flag := lx_cost_qty_flag;
13492           ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
13493                l_allow_qty_flag := lx_revenue_qty_flag;
13494           ELSE
13495                l_allow_qty_flag :=  lx_all_qty_flag;
13496           END IF;
13497 
13498      END IF;--IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13499 
13500 
13501      --Validate the budget line data
13502      PA_BUDGET_PVT.Validate_Budget_Lines
13503           ( p_calling_context             => 'BUDGET_LINE_LEVEL_VALIDATION'
13504            ,p_pa_project_id               => l_project_id
13505            ,p_budget_type_code            => l_budget_type_code
13506            ,p_fin_plan_type_id            => l_fin_plan_type_id
13507            ,p_version_type                => l_version_type
13508            ,p_resource_list_id            => l_resource_list_id
13509            ,p_time_phased_code            => l_time_phased_code
13510            ,p_budget_entry_method_code    => l_budget_entry_method_code
13511            ,p_entry_level_code            => l_entry_level_code
13512            ,p_allow_qty_flag              => l_allow_qty_flag
13513            ,p_allow_raw_cost_flag         => lx_raw_cost_flag
13514            ,p_allow_burdened_cost_flag    => lx_burdened_cost_flag
13515            ,p_allow_revenue_flag          => lx_revenue_flag
13516            ,p_multi_currency_flag         => l_multi_curr_flag
13517            ,p_project_cost_rate_type      => NULL
13518            ,p_project_cost_rate_date_typ  => NULL
13519            ,p_project_cost_rate_date      => NULL
13520            ,p_project_cost_exchange_rate  => NULL
13521            ,p_projfunc_cost_rate_type     => NULL
13522            ,p_projfunc_cost_rate_date_typ => NULL
13523            ,p_projfunc_cost_rate_date     => NULL
13524            ,p_projfunc_cost_exchange_rate => NULL
13525            ,p_project_rev_rate_type       => NULL
13526            ,p_project_rev_rate_date_typ   => NULL
13527            ,p_project_rev_rate_date       => NULL
13528            ,p_project_rev_exchange_rate   => NULL
13529            ,p_projfunc_rev_rate_type      => NULL
13530            ,p_projfunc_rev_rate_date_typ  => NULL
13531            ,p_projfunc_rev_rate_date      => NULL
13532            ,p_projfunc_rev_exchange_rate  => NULL
13533            ,p_version_info_rec            => l_version_info_rec
13534            ,px_budget_lines_in            => l_budget_lines_in
13535            ,x_budget_lines_out            => l_budget_lines_out_tbl
13536            ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
13537            ,x_etc_method_code_tbl         => l_etc_method_code_tbl
13538            ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
13539            ,x_msg_count                   => p_msg_count
13540            ,x_msg_data                    => p_msg_data
13541            ,x_return_status               => p_return_status );
13542 
13543      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13544            IF(l_debug_mode='Y') THEN
13545                  pa_debug.g_err_stage := 'validate budget lines API falied';
13546                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13547            END IF;
13548            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13549      END IF;
13550 
13551      --Get Task number for AMG Messages
13552      l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
13553      (p_task_number=> ''
13554      ,p_task_reference => l_budget_lines_in(1).pm_task_reference
13555      ,p_task_id => l_budget_lines_in(1).pa_task_id);
13556 
13557 
13558      --Check the existence of resource assignment
13559      OPEN l_resource_assignment_csr( l_budget_version_id
13560                                     ,l_budget_lines_in(1).pa_task_id
13561                                     ,l_budget_lines_in(1).resource_list_member_id );
13562 
13563      FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
13564 
13565      IF l_resource_assignment_csr%NOTFOUND
13566      THEN
13567           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13568           THEN
13569                pa_interface_utils_pub.map_new_amg_msg
13570                ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
13571                 ,p_msg_attribute    => 'CHANGE'
13572                 ,p_resize_flag      => 'N'
13573                 ,p_msg_context      => 'BUDG'
13574                 ,p_attribute1       => l_amg_project_number
13575                 ,p_attribute2       => l_amg_task_number
13576                 ,p_attribute3       => l_budget_type_code
13577                 ,p_attribute4       => l_budget_lines_in(1).resource_alias
13578                 ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13579           END IF;
13580 
13581           CLOSE l_resource_assignment_csr;
13582           RAISE FND_API.G_EXC_ERROR;
13583      END IF; --l_resource_assignment_csr%NOTFOUND
13584 
13585      CLOSE l_resource_assignment_csr;
13586 
13587      --Currency_code value, even if specified, should be ignored in
13588      --case of old Budgets Model
13589      IF l_budget_type_code IS NOT NULL
13590      THEN
13591           l_budget_lines_in(1).txn_currency_code := NULL;
13592      END IF;
13593 
13594      --Checking existence of budget line
13595      OPEN l_budget_line_csr( l_resource_assignment_id
13596                             ,l_budget_lines_in(1).budget_start_date
13597                             ,l_budget_lines_in(1).txn_currency_code);
13598 
13599      FETCH l_budget_line_csr INTO l_budget_line_rowid
13600                                  ,l_budget_line_id;
13601 
13602      IF l_budget_line_csr%NOTFOUND
13603      THEN
13604           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13605           THEN
13606                pa_interface_utils_pub.map_new_amg_msg
13607                ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
13608                 ,p_msg_attribute    => 'CHANGE'
13609                 ,p_resize_flag      => 'N'
13610                 ,p_msg_context      => 'BUDG'
13611                 ,p_attribute1       => l_amg_project_number
13612                 ,p_attribute2       => l_amg_task_number
13613                 ,p_attribute3       => l_budget_type_code
13614                 ,p_attribute4       => l_budget_lines_in(1).resource_alias
13615                 ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13616           END IF;
13617 
13618      CLOSE l_budget_line_csr;
13619      RAISE FND_API.G_EXC_ERROR;
13620      END IF;--l_budget_line_csr%NOTFOUND
13621 
13622      CLOSE l_budget_line_csr;
13623 
13624 
13625      --Update budget line for old FORMS based Budgets Model
13626      IF l_budget_type_code IS NOT NULL
13627      THEN
13628 
13629           --Take a db lock on the table pa_budget_lines
13630           OPEN l_lock_budget_line_csr( l_budget_line_rowid );
13631           CLOSE l_lock_budget_line_csr;  --FYI, does not release lock
13632 
13633           --Calling update_budget_line_sql to build a dynamic update statement
13634           pa_budget_pvt.update_budget_line_sql
13635                ( p_return_status            => p_return_status
13636                 ,p_budget_entry_method_code => l_budget_entry_method_code
13637                 ,p_resource_assignment_id   => l_resource_assignment_id
13638                 ,p_start_date               => l_budget_lines_in(1).budget_start_date
13639                 ,p_time_phased_type_code    => l_time_phased_code
13640                 ,p_description              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description)
13641                 ,p_quantity                 => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity)
13642                 ,p_raw_cost                 => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost)
13643                 ,p_burdened_cost            => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost)
13644                 ,p_revenue                  => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue)
13645                 ,p_change_reason_code       => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code)
13646                 ,p_attribute_category       => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category)
13647                 ,p_attribute1               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1)
13648                 ,p_attribute2               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2)
13649                 ,p_attribute3               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3)
13650                 ,p_attribute4               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4)
13651                 ,p_attribute5               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5)
13652                 ,p_attribute6               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6)
13653                 ,p_attribute7               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7)
13654                 ,p_attribute8               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8)
13655                 ,p_attribute9               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9)
13656                 ,p_attribute10              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10)
13657                 ,p_attribute11              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11)
13658                 ,p_attribute12              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12)
13659                 ,p_attribute13              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13)
13660                 ,p_attribute14              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14)
13661                 ,p_attribute15              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15)
13662                );
13663 
13664           IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
13665           THEN
13666                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
13667           ELSIF p_return_status = FND_API.G_RET_STS_ERROR
13668           THEN
13669                RAISE  FND_API.G_EXC_ERROR;
13670           END IF;
13671 
13672           --summarizing the totals in the table pa_budget_versions
13673           PA_BUDGET_UTILS.summerize_project_totals
13674                          (x_budget_version_id => l_budget_version_id
13675                          ,x_err_code          => l_err_code
13676                          ,x_err_stage         => l_err_stage
13677                          ,x_err_stack         => l_err_stack );
13678 
13679           IF l_err_code > 0
13680           THEN
13681                IF(l_debug_mode='Y') THEN
13682                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
13683                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13684                END IF;
13685 
13686                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13687                THEN
13688                     IF NOT pa_project_pvt.check_valid_message(l_err_stage)
13689                     THEN
13690                          pa_interface_utils_pub.map_new_amg_msg
13691                          ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
13692                           ,p_msg_attribute    => 'CHANGE'
13693                           ,p_resize_flag      => 'N'
13694                           ,p_msg_context      => 'BUDG'
13695                           ,p_attribute1       => l_amg_project_number
13696                           ,p_attribute2       => l_amg_task_number
13697                           ,p_attribute3       => l_budget_type_code
13698                           ,p_attribute4       => l_budget_lines_in(1).resource_alias
13699                           ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13700                     ELSE
13701                          pa_interface_utils_pub.map_new_amg_msg
13702                          ( p_old_message_code => l_err_stage
13703                           ,p_msg_attribute    => 'CHANGE'
13704                           ,p_resize_flag      => 'N'
13705                           ,p_msg_context      => 'BUDG'
13706                           ,p_attribute1       => l_amg_project_number
13707                           ,p_attribute2       => l_amg_task_number
13708                           ,p_attribute3       => l_budget_type_code
13709                           ,p_attribute4       => l_budget_lines_in(1).resource_alias
13710                           ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13711                     END IF;
13712                END IF;--FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13713 
13714                RAISE FND_API.G_EXC_ERROR;
13715 
13716           ELSIF l_err_code < 0
13717           THEN
13718 
13719                IF(l_debug_mode='Y') THEN
13720                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
13721                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13722                END IF;
13723 
13724                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
13725                THEN
13726                     FND_MSG_PUB.add_exc_msg
13727                     (  p_pkg_name       => 'PA_BUDGET_UTILS'
13728                     ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
13729                     ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
13730                END IF;
13731 
13732                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13733 
13734           END IF;--l_err_code > 0
13735 
13736 
13737      ELSE --insert budget line for new FinPlan model
13738 
13739 
13740           --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
13741           --If an attribute should not be updated then pass it as null, and
13742           --if an attribute should be updated to null then pass it as FND_API.G_MISS_XXX
13743 
13744           l_finplan_lines_tab(1).system_reference1            := l_budget_lines_in(1).pa_task_id;
13745           l_finplan_lines_tab(1).system_reference2            := l_budget_lines_in(1).resource_list_member_id;
13746           l_finplan_lines_tab(1).start_date                   := l_budget_lines_in(1).budget_start_date;
13747           l_finplan_lines_tab(1).end_date                     := l_budget_lines_in(1).budget_end_date;
13748           l_finplan_lines_tab(1).period_name                  := l_budget_lines_in(1).period_name;
13749           l_finplan_lines_tab(1).txn_currency_code            := l_budget_lines_in(1).txn_currency_code;
13750           l_finplan_lines_tab(1).txn_raw_cost                 := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost);
13751           l_finplan_lines_tab(1).txn_burdened_cost            := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost);
13752           l_finplan_lines_tab(1).txn_revenue                  := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue);
13753           l_finplan_lines_tab(1).quantity                     := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity);
13754           l_finplan_lines_tab(1).change_reason_code           := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code);
13755           l_finplan_lines_tab(1).description                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description);
13756           l_finplan_lines_tab(1).attribute_category           := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category);
13757           l_finplan_lines_tab(1).attribute1                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1);
13758           l_finplan_lines_tab(1).attribute2                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2);
13759           l_finplan_lines_tab(1).attribute3                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3);
13760           l_finplan_lines_tab(1).attribute4                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4);
13761           l_finplan_lines_tab(1).attribute5                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5);
13762           l_finplan_lines_tab(1).attribute6                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6);
13763           l_finplan_lines_tab(1).attribute7                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7);
13764           l_finplan_lines_tab(1).attribute8                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8);
13765           l_finplan_lines_tab(1).attribute9                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9);
13766           l_finplan_lines_tab(1).attribute10                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10);
13767           l_finplan_lines_tab(1).attribute11                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11);
13768           l_finplan_lines_tab(1).attribute12                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12);
13769           l_finplan_lines_tab(1).attribute13                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13);
13770           l_finplan_lines_tab(1).attribute14                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14);
13771           l_finplan_lines_tab(1).attribute15                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15);
13772 
13773           IF (p_projfunc_cost_rate_type     = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13774           AND p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13775           AND p_projfunc_cost_rate_date     = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13776           AND p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13777           AND p_projfunc_rev_rate_type      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13778           AND p_projfunc_rev_rate_date_typ  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13779           AND p_projfunc_rev_rate_date      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13780           AND p_projfunc_rev_exchange_rate  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13781           AND p_project_cost_rate_type      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13782           AND p_project_cost_rate_date_typ  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13783           AND p_project_cost_rate_date      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13784           AND p_project_cost_exchange_rate  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13785           AND p_project_rev_rate_type       = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13786           AND p_project_rev_rate_date_typ   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13787           AND p_project_rev_rate_date       = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13788           AND p_project_rev_exchange_rate   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
13789           THEN
13790                l_finplan_lines_tab(1).projfunc_cost_rate_type      := to_char(NULL);
13791                l_finplan_lines_tab(1).projfunc_cost_rate_date_type := to_char(NULL);
13792                l_finplan_lines_tab(1).projfunc_cost_rate_date      := to_date(NULL);
13793                l_finplan_lines_tab(1).projfunc_cost_exchange_rate  := to_number(NULL);
13794                l_finplan_lines_tab(1).projfunc_rev_rate_type       := to_char(NULL);
13795                l_finplan_lines_tab(1).projfunc_rev_rate_date_type  := to_char(NULL);
13796                l_finplan_lines_tab(1).projfunc_rev_rate_date       := to_date(NULL);
13797                l_finplan_lines_tab(1).projfunc_rev_exchange_rate   := to_number(NULL);
13798                l_finplan_lines_tab(1).project_cost_rate_type       := to_char(NULL);
13799                l_finplan_lines_tab(1).project_cost_rate_date_type  := to_char(NULL);
13800                l_finplan_lines_tab(1).project_cost_rate_date       := to_date(NULL);
13801                l_finplan_lines_tab(1).project_cost_exchange_rate   := to_number(NULL);
13802                l_finplan_lines_tab(1).project_rev_rate_type        := to_char(NULL);
13803                l_finplan_lines_tab(1).project_rev_rate_date_type   := to_char(NULL);
13804                l_finplan_lines_tab(1).project_rev_rate_date        := to_date(NULL);
13805                l_finplan_lines_tab(1).project_rev_exchange_rate    := to_number(NULL);
13806           ELSE
13807                l_finplan_lines_tab(1).projfunc_cost_rate_type      := nvl(l_budget_lines_in(1).projfunc_cost_rate_type,FND_API.G_MISS_CHAR);
13808                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);
13809                l_finplan_lines_tab(1).projfunc_cost_rate_date      := nvl(l_budget_lines_in(1).projfunc_cost_rate_date,FND_API.G_MISS_DATE);
13810                l_finplan_lines_tab(1).projfunc_cost_exchange_rate  := nvl(l_budget_lines_in(1).projfunc_cost_exchange_rate,FND_API.G_MISS_NUM);
13811                l_finplan_lines_tab(1).projfunc_rev_rate_type       := nvl(l_budget_lines_in(1).projfunc_rev_rate_type,FND_API.G_MISS_CHAR);
13812                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);
13813                l_finplan_lines_tab(1).projfunc_rev_rate_date       := nvl(l_budget_lines_in(1).projfunc_rev_rate_date,FND_API.G_MISS_DATE);
13814                l_finplan_lines_tab(1).projfunc_rev_exchange_rate   := nvl(l_budget_lines_in(1).projfunc_rev_exchange_rate,FND_API.G_MISS_NUM);
13815                l_finplan_lines_tab(1).project_cost_rate_type       := nvl(l_budget_lines_in(1).project_cost_rate_type,FND_API.G_MISS_CHAR);
13816                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);
13817                l_finplan_lines_tab(1).project_cost_rate_date       := nvl(l_budget_lines_in(1).project_cost_rate_date,FND_API.G_MISS_DATE);
13818                l_finplan_lines_tab(1).project_cost_exchange_rate   := nvl(l_budget_lines_in(1).project_cost_exchange_rate,FND_API.G_MISS_NUM);
13819                l_finplan_lines_tab(1).project_rev_rate_type        := nvl(l_budget_lines_in(1).project_rev_rate_type,FND_API.G_MISS_CHAR);
13820                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);
13821                l_finplan_lines_tab(1).project_rev_rate_date        := nvl(l_budget_lines_in(1).project_rev_rate_date,FND_API.G_MISS_DATE);
13822                l_finplan_lines_tab(1).project_rev_exchange_rate    := nvl(l_budget_lines_in(1).project_rev_exchange_rate,FND_API.G_MISS_NUM);
13823           END IF;
13824 
13825           l_finplan_lines_tab(1).pm_product_code              := l_budget_lines_in(1).pm_product_code;
13826           l_finplan_lines_tab(1).quantity_source              := 'I';
13827           l_finplan_lines_tab(1).raw_cost_source              := 'I';
13828           l_finplan_lines_tab(1).burdened_cost_source         := 'I';
13829           l_finplan_lines_tab(1).revenue_source               := 'I';
13830           l_finplan_lines_tab(1).resource_assignment_id       := l_resource_assignment_id;
13831           l_finplan_lines_tab(1).budget_line_id               := l_budget_line_id;
13832           l_finplan_lines_tab(1).budget_version_id            := l_budget_version_id;
13833 
13834           --Lock the budget version before updating a budget line
13835           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
13836                                      (p_budget_version_id => l_budget_version_id);
13837 
13838           PA_FIN_PLAN_PVT.lock_unlock_version
13839           ( p_budget_version_id       => l_budget_version_id
13840            ,p_record_version_number   => l_record_version_number
13841            ,p_action                  => 'L'
13842            ,p_user_id                 => FND_GLOBAL.User_id
13843            ,p_person_id               => null
13844            ,x_return_status           => p_return_status
13845            ,x_msg_count               => p_msg_count
13846            ,x_msg_data                => p_msg_data);
13847 
13848           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
13849                 -- Error message is not added here as the api lock_unlock_version
13850                 -- adds the message to stack
13851                 IF(l_debug_mode='Y') THEN
13852                       pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
13853                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
13854                 END IF;
13855                 RAISE  FND_API.G_EXC_ERROR;
13856           END IF;
13857 
13858           --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of updating
13859           --budget lines data in all relevant tables.
13860           PA_FIN_PLAN_PVT.add_fin_plan_lines
13861                ( p_calling_context      => PA_FP_CONSTANTS_PKG.G_AMG_API
13862                 ,p_fin_plan_version_id  => l_budget_version_id
13863                 ,p_finplan_lines_tab    => l_finplan_lines_tab
13864                 ,x_return_status        => p_return_status
13865                 ,x_msg_count            => p_msg_count
13866                 ,x_msg_data             => p_msg_data );
13867 
13868           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
13869           THEN
13870                IF(l_debug_mode='Y') THEN
13871                     pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
13872                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13873                END IF;
13874                RAISE  FND_API.G_EXC_ERROR;
13875           END IF;
13876 
13877 
13878           --unlock the budget version after updating the budget line
13879           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
13880                                      (p_budget_version_id => l_budget_version_id);
13881 
13882           PA_FIN_PLAN_PVT.lock_unlock_version
13883           ( p_budget_version_id       => l_budget_version_id
13884            ,p_record_version_number   => l_record_version_number
13885            ,p_action                  => 'U'
13886            ,p_user_id                 => FND_GLOBAL.User_id
13887            ,p_person_id               => null
13888            ,x_return_status           => p_return_status
13889            ,x_msg_count               => p_msg_count
13890            ,x_msg_data                => p_msg_data);
13891 
13892           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
13893                 -- Error message is not added here as the api lock_unlock_version
13894                 -- adds the message to stack
13895                 IF(l_debug_mode='Y') THEN
13896                       pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
13897                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
13898                 END IF;
13899                 RAISE  FND_API.G_EXC_ERROR;
13900           END IF;
13901 
13902 
13903      END IF;--end of code to update budget line
13904 
13905 
13906      IF FND_API.TO_BOOLEAN( p_commit )
13907      THEN
13908           COMMIT;
13909      END IF;
13910 
13911      IF(l_debug_mode='Y') THEN
13912            pa_debug.g_err_stage := 'Exiting ' || l_api_name;
13913            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
13914      END IF;
13915 
13916      IF ( l_debug_mode = 'Y' ) THEN
13917            pa_debug.reset_curr_function;
13918      END IF;
13919 
13920 
13921 EXCEPTION
13922 
13923      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
13924      THEN
13925 
13926      ROLLBACK TO update_budget_line_pub;
13927 
13928      p_return_status := FND_API.G_RET_STS_ERROR;
13929      l_msg_count := FND_MSG_PUB.count_msg;
13930 
13931      IF l_msg_count = 1 and p_msg_data IS NULL THEN
13932            PA_INTERFACE_UTILS_PUB.get_messages
13933            (p_encoded        => FND_API.G_TRUE
13934            ,p_msg_index      => 1
13935            ,p_msg_count      => l_msg_count
13936            ,p_msg_data       => l_msg_data
13937            ,p_data           => l_data
13938            ,p_msg_index_out  => l_msg_index_out);
13939            p_msg_data  := l_data;
13940            p_msg_count := l_msg_count;
13941      ELSE
13942            p_msg_count := l_msg_count;
13943      END IF;
13944 
13945      IF ( l_debug_mode = 'Y' ) THEN
13946            pa_debug.reset_curr_function;
13947      END IF;
13948 
13949      RETURN;
13950 
13951 
13952      WHEN FND_API.G_EXC_ERROR
13953      THEN
13954 
13955      ROLLBACK TO update_budget_line_pub;
13956 
13957      p_return_status := FND_API.G_RET_STS_ERROR;
13958 
13959      FND_MSG_PUB.count_and_get
13960      (   p_count     =>  p_msg_count ,
13961          p_data      =>  p_msg_data  );
13962 
13963      IF ( l_debug_mode = 'Y' ) THEN
13964            pa_debug.reset_curr_function;
13965      END IF;
13966 
13967 
13968      WHEN FND_API.G_EXC_UNEXPECTED_ERROR
13969      THEN
13970 
13971      ROLLBACK TO update_budget_line_pub;
13972 
13973      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13974 
13975      FND_MSG_PUB.count_and_get
13976      (   p_count     =>  p_msg_count ,
13977          p_data      =>  p_msg_data  );
13978 
13979      IF ( l_debug_mode = 'Y' ) THEN
13980            pa_debug.reset_curr_function;
13981      END IF;
13982 
13983 
13984      WHEN ROW_ALREADY_LOCKED
13985      THEN
13986 
13987      ROLLBACK TO update_budget_line_pub;
13988 
13989      p_return_status := FND_API.G_RET_STS_ERROR;
13990 
13991      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13992      THEN
13993            FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
13994            FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
13995            FND_MESSAGE.set_token('TASK', l_amg_task_number);
13996            FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
13997            FND_MESSAGE.set_token('SOURCE_NAME', '');
13998            FND_MESSAGE.set_token('START_DATE', '');
13999            FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
14000            FND_MSG_PUB.add;
14001      END IF;
14002 
14003      FND_MSG_PUB.count_and_get
14004      (   p_count     =>  p_msg_count ,
14005          p_data      =>  p_msg_data  );
14006 
14007      IF ( l_debug_mode = 'Y' ) THEN
14008            pa_debug.reset_curr_function;
14009      END IF;
14010 
14011 
14012      WHEN OTHERS
14013      THEN
14014 
14015      ROLLBACK TO update_budget_line_pub;
14016 
14017      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14018 
14019      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
14020      THEN
14021         FND_MSG_PUB.add_exc_msg
14022         (  p_pkg_name       => G_PKG_NAME
14023         ,  p_procedure_name => l_api_name );
14024      END IF;
14025 
14026      FND_MSG_PUB.count_and_get
14027      (   p_count     =>  p_msg_count ,
14028          p_data      =>  p_msg_data  );
14029 
14030      IF ( l_debug_mode = 'Y' ) THEN
14031            pa_debug.reset_curr_function;
14032      END IF;
14033 
14034 END update_budget_line;
14035 
14036 
14037 ----------------------------------------------------------------------------------------
14038 --Name:             calculate_amounts
14039 --Type:             Procedure
14040 --Description:      This procedure can is used to recalculate raw cost,
14041 --                  burdened cost and revenue by budget line within
14042 --                  a given project.
14043 --
14044 --
14045 --Called subprograms: Pa_Client_Extn_Budget.Calc_Raw_Cost
14046 --                  , Pa_Client_Extn_Budget.Calc_Burdened_Cost
14047 --                  , Pa_Client_Extn_Budget.Calc_Revenue
14048 --
14049 --
14050 --
14051 --History:
14052 --    AUTUMN-1996    R. Krishnamurthy       Created
14053 --    07-DEC-1996    L. de Werker           Changed error handling
14054 --    25-MAR-2003    Rajagopal              Modified the code to make it compatible with
14055 --                                          new Budgets and forecasts model
14056 --
14057 --    27-SEP-05      jwhite                 Bug 4588279
14058 --                                          For budget_type_code Budgetary Control budgets,
14059 --                                          add validation to prevent update to
14060 --                                          periods later than the latest encumbrance year
14061 --                                          for the set-of-books.
14062 --
14063 PROCEDURE Calculate_Amounts
14064 ( p_api_version_number          IN  NUMBER
14065  ,p_commit                      IN  VARCHAR2   := FND_API.G_FALSE
14066  ,p_init_msg_list               IN  VARCHAR2   := FND_API.G_FALSE
14067  ,p_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14068  ,p_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14069  ,p_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14070  ,p_pm_product_code             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14071  ,p_pa_project_id               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14072  ,p_pm_project_reference        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14073  ,p_budget_type_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14074  ,p_calc_raw_cost_yn            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14075  ,p_calc_burdened_cost_yn       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14076  ,p_calc_revenue_yn             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14077  ,p_update_db_flag              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14078  ,p_calc_budget_lines_out       OUT NOCOPY calc_budget_line_out_tbl_type
14079   -- Bug 2863564 Parameters added for new Fin Plan Model
14080  ,p_budget_version_id           IN  pa_budget_versions.budget_version_id%TYPE
14081  ,p_fin_plan_type_id            IN  pa_fin_plan_types_b.fin_plan_type_id%TYPE
14082  ,p_fin_plan_type_name          IN  pa_fin_plan_types_tl.name%TYPE
14083  ,p_version_type                IN  pa_budget_versions.version_type%TYPE
14084  ,p_budget_version_number       IN  pa_budget_versions.version_number%TYPE
14085 ) IS
14086 
14087 CURSOR l_budget_type_csr
14088           (p_budget_type_code   VARCHAR2 )
14089 IS
14090 SELECT 'X'
14091 FROM   pa_budget_types
14092 WHERE  budget_type_code = p_budget_type_code;
14093 
14094 CURSOR l_task_csr (p_task_id IN NUMBER ) IS
14095 SELECT pm_task_reference,
14096        task_name  -- Bug 2863564
14097 FROM   pa_tasks
14098 WHERE  task_id = p_task_id;
14099 
14100 -- Bug 2863564 new variables defined for Financial Planning chnages
14101 
14102 l_task_name                        pa_tasks.task_name%TYPE;
14103 l_context                          VARCHAR2(30);
14104 l_context_finplan         CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN;
14105 l_context_budget          CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET;
14106 
14107 -- Bug 2863564 The cursor has been modified for financial planning changes.
14108 -- The changes include fetching of new columns which aren't included in the
14109 -- view definition. Changing the pa_budget_lines_v view could have a large impact.
14110 -- So, cursor has been modified to be based on the direct tables.
14111 
14112 --<Patchset M: B and F impact changes : AMG:>-- Bug # 3507156
14113 -- Modified the select statement to selecy alias name directly from pa_resource_list_members table
14114 -- instead of PA_RESOURCES_PKG.GET_RESOURCE_NAME(rlm.resource_id,rlm.resource_type_id)
14115 
14116 
14117 
14118 CURSOR l_resource_assignment_csr
14119       ( c_budget_version_id  NUMBER,
14120         c_context            VARCHAR2)
14121 IS
14122 SELECT  bl.rowid   row_id
14123        ,bl.budget_line_id   budget_line_id
14124        ,DECODE(c_context,l_context_finplan,bl.txn_currency_code,bl.projfunc_currency_code) txn_currency_code
14125        ,ra.resource_assignment_id resource_assignment_id
14126        ,ra.task_id     task_id
14127        ,ra.rate_based_flag rate_based_flag
14128        ,rlm.resource_list_id  resource_list_id
14129        ,rlm.resource_list_member_id resource_list_member_id
14130        ,rlm.resource_id  resource_id
14131        ,rlm.alias
14132        ,bl.start_date   start_date
14133        ,bl.end_date     end_date
14134        ,bl.period_name  period_name
14135        ,bl.quantity     quantity
14136        ,bl.display_quantity display_quantity  --IPM Arch Enhancement Bug 4865563
14137        ,DECODE(c_context,l_context_finplan,bl.txn_raw_cost,bl.raw_cost)           txn_raw_cost
14138        ,DECODE(c_context,l_context_finplan,bl.txn_burdened_cost,bl.burdened_cost) txn_burdened_cost
14139        ,DECODE(c_context,l_context_finplan,bl.txn_revenue,bl.revenue)             txn_revenue
14140        ,bl.project_raw_cost         project_raw_cost
14141         ,bl.project_burdened_cost    project_burdened_cost
14142         ,bl.project_revenue          project_revenue
14143         ,bl.raw_cost                 projfunc_raw_cost
14144         ,bl.burdened_cost            projfunc_burdened_cost
14145         ,bl.revenue                  projfunc_revenue
14146 FROM   pa_budget_lines bl,
14147        pa_resource_assignments ra,
14148         pa_resource_list_members rlm
14149 WHERE  bl.budget_version_id = c_budget_version_id
14150   AND  bl.resource_assignment_id = ra.resource_assignment_id
14151   AND  ra.resource_list_member_id = rlm.resource_list_member_id;
14152 
14153 l_resource_assignment_rec        l_resource_assignment_csr%ROWTYPE;
14154 
14155 -- PL/SQL tables that would be used for bulk processing
14156 
14157 l_rowid_tbl                      row_id_tbl_type;
14158 l_budget_line_id_tbl             budget_line_id_tbl_type;
14159 l_txn_currency_code_tbl          txn_currency_code_tbl_type;
14160 l_res_assignment_id_tbl          res_assignment_id_tbl_type;
14161 l_task_id_tbl                    task_id_tbl_type;
14162 l_resource_list_id_tbl           resource_list_id_tbl_type;
14163 l_resource_list_member_id_tbl    res_list_member_id_tbl_type;
14164 l_resource_id_tbl                resource_id_tbl_type;
14165 l_resource_name_tbl              resource_name_tbl_type;
14166 l_start_date_tbl                 date_tbl_type;
14167 l_end_date_tbl                   date_tbl_type;
14168 l_period_name_tbl                period_name_tbl_type;
14169 l_quantity_tbl                   quantity_tbl_type;
14170 l_display_quantity_tbl           display_quantity_tbl_type;  --IPM Arch Enhancement Bug 4865563
14171 l_txn_raw_cost_tbl               raw_cost_tbl_type;
14172 l_txn_burdened_cost_tbl          burdened_cost_tbl_type;
14173 l_txn_revenue_tbl                revenue_tbl_type;
14174 l_project_raw_cost_tbl           raw_cost_tbl_type;
14175 l_project_burdened_cost_tbl      burdened_cost_tbl_type;
14176 l_project_revenue_tbl            revenue_tbl_type;
14177 l_projfunc_raw_cost_tbl          raw_cost_tbl_type;
14178 l_projfunc_burdened_cost_tbl     burdened_cost_tbl_type;
14179 l_projfunc_revenue_tbl           revenue_tbl_type;
14180 l_rate_based_flag_tbl            rate_based_flag_tbl_type;
14181 
14182 /* added for 2207723 */
14183 CURSOR l_get_entry_level_csr (c_budget_version_id IN NUMBER)
14184 IS
14185 SELECT m.entry_level_code
14186 FROM pa_budget_versions v
14187     ,pa_budget_entry_methods m
14188 WHERE v.budget_version_id = c_budget_version_id
14189   AND v.budget_entry_method_code = m.budget_entry_method_code
14190   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
14191 
14192 
14193 l_api_name      CONSTANT    VARCHAR2(30) := 'Calculate_Amounts';
14194 
14195 -- Bug 2863564 l_return_status             VARCHAR2(1);
14196 l_project_id                NUMBER;
14197 l_dummy                     VARCHAR2(30);
14198 l_calculated_raw_cost       NUMBER := 0;
14199 l_calculated_burdened_cost  NUMBER := 0;
14200 l_calculated_revenue        NUMBER := 0;
14201 l_err_code                  NUMBER := 0;
14202 l_err_message               VARCHAR2(100);
14203 l_err_stage                 VARCHAR2(100);
14204 l_err_stack                 VARCHAR2(100);
14205 l_budget_version_id         NUMBER;
14206 l_line_ctr                  NUMBER := 0;
14207 l_labor_flag                VARCHAR2(1);
14208 l_allow_override_flag       VARCHAR2(1);
14209 l_pm_task_reference         VARCHAR2(30);
14210 l_msg_count                 NUMBER := 0;
14211 l_msg_data                  VARCHAR2(2000);
14212 l_function_allowed          VARCHAR2(1);
14213 l_resp_id                   NUMBER := 0;
14214 l_user_id                   NUMBER := 0;
14215 l_module_name               VARCHAR2(80);
14216 l_entry_level               pa_budget_entry_methods.entry_level_code%type; /* 2207723 */
14217 
14218 p_multiple_task_msg         VARCHAR2(1) := 'T';
14219 
14220 l_budget_line_id            pa_budget_lines.budget_line_id%TYPE; /* FPB2 */
14221 
14222 --Included the following variables as part of changes to AMG due to finplan model.
14223 l_txn_currency_code                pa_budget_lines.txn_currency_code%TYPE;
14224 l_multi_currency_billing_flag      pa_projects_all.multi_currency_billing_flag%TYPE;
14225 l_project_currency_code            pa_projects_all.project_currency_code%TYPE;
14226 l_projfunc_currency_code           pa_projects_all.projfunc_currency_code%TYPE;
14227 l_project_cost_rate_type           pa_projects_all.project_rate_type%TYPE;
14228 l_projfunc_cost_rate_type          pa_projects_all.projfunc_cost_rate_type%TYPE;
14229 l_project_bil_rate_type            pa_projects_all.project_bil_rate_type%TYPE;
14230 l_projfunc_bil_rate_type           pa_projects_all.projfunc_bil_rate_type%TYPE;
14231 
14232 l_fin_plan_type_id                 pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14233 l_fin_plan_type_code               pa_fin_plan_types_b.fin_plan_type_code%TYPE;
14234 l_fin_plan_type_name               pa_fin_plan_types_tl.name%TYPE;
14235 
14236 l_version_type                     pa_budget_versions.version_type%TYPE;
14237 l_record_version_number            pa_budget_versions.record_version_number%TYPE;
14238 l_budget_type_code                 pa_budget_versions.budget_type_code%TYPE;
14239 l_ci_id                            pa_budget_versions.ci_id%TYPE;
14240 
14241 l_debug_mode                       VARCHAR2(30):= NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
14242 l_debug_level3            CONSTANT NUMBER := 3;
14243 l_debug_level5            CONSTANT NUMBER := 5;
14244 
14245 l_plsql_max_array_size             NUMBER := 200;
14246 l_security_ret_code                VARCHAR2(30);
14247 l_result                           VARCHAR2(30);
14248 
14249 
14250 ll_fin_plan_type_id                 pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14251 ll_fin_plan_type_name               pa_fin_plan_types_tl.name%TYPE;
14252 ll_version_type                     pa_budget_versions.version_type%TYPE;
14253 ll_version_number                   pa_budget_versions.version_number%TYPE;
14254 --needed to get the field values associated to a AMG message
14255 
14256 --Added baseline_funding flag and querying from pa_projects_all and not from pa_projects
14257 CURSOR   l_amg_project_csr
14258    (p_pa_project_id pa_projects.project_id%type)
14259 IS
14260 SELECT   segment1
14261         ,baseline_funding_flag
14262 FROM     pa_projects_all p
14263 WHERE p.project_id = p_pa_project_id;
14264 
14265 l_amg_project_rec               l_amg_project_csr%ROWTYPE;
14266 --l_amg_segment1       VARCHAR2(25); no more used. Replaced by l_amg_project_rec.segment1
14267 
14268 -- Bug 2863564 added for new financial planning changes
14269 
14270 CURSOR  proj_fp_options_cur
14271         (c_project_id IN NUMBER, c_fin_plan_type_id IN NUMBER) IS
14272 SELECT  'x'
14273 FROM    pa_proj_fp_options pfo
14274 WHERE   pfo.project_id = c_project_id
14275 AND     pfo.fin_plan_type_id = c_fin_plan_type_id
14276 AND     pfo.fin_plan_option_level_code = PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
14277 
14278 proj_fp_options_rec  proj_fp_options_cur%ROWTYPE;
14279 
14280 CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER) IS
14281 SELECT  bv.project_id          project_id
14282        ,bv.budget_type_code    budget_type_code
14283        ,bv.fin_plan_type_id    fin_plan_type_id
14284        ,bv.version_type        version_type
14285        ,bv.budget_status_code  budget_status_code
14286        ,bv.ci_id               ci_id    -- raja
14287        ,pt.fin_plan_type_code  fin_plan_type_code
14288        ,pt.name                fin_plan_type_name
14289        ,pa_fin_plan_utils.get_fin_plan_level_code(bv.budget_version_id) plan_level_code
14290        ,bv.locked_by_person_id
14291        ,bv.request_id
14292        ,pt.plan_class_code
14293        ,bv.etc_start_date
14294        ,nvl(bv.wp_version_flag,'N') wp_version_flag
14295        ,bv.plan_processing_code
14296 FROM   pa_budget_versions bv,
14297        pa_fin_plan_types_vl pt
14298 WHERE  bv.budget_version_id = c_budget_version_id
14299 AND    pt.fin_plan_type_id(+) = bv.fin_plan_type_id
14300 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
14301 
14302 
14303 budget_version_info_rec  budget_version_info_cur%ROWTYPE;
14304 
14305 CURSOR draft_version_cur(
14306        c_project_id         pa_budget_versions.project_id%TYPE
14307       ,c_budget_type_code   pa_budget_versions.budget_type_code%TYPE)
14308 IS
14309 SELECT  budget_version_id
14310 FROM    pa_budget_versions
14311 WHERE   project_id = c_project_id
14312 AND     budget_type_code = c_budget_type_code
14313 AND     budget_status_code = 'W'
14314 AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
14315 
14316 
14317 draft_version_rec    draft_version_cur%ROWTYPE;
14318 
14319 --Added for bug#3636409
14320 l_workplan_flag                  VARCHAR2(1) := NULL;
14321 l_editable_flag                  VARCHAR2(1);
14322 l_autobaseline_flag              VARCHAR2(1) := NULL;
14323 
14324 l_person_id                   fnd_user.employee_id%type;
14325 l_resource_id                 pa_resource_txn_attributes.resource_id%type;
14326 l_resource_name               per_all_people_f.full_name%type;
14327 l_locked_by_name              per_people_x.full_name%type;
14328 
14329 l_rw_cost_rate_override            pa_budget_lines.txn_cost_rate_override%TYPE;
14330 l_burden_cost_rate_override        pa_budget_lines.burden_cost_rate_override%TYPE;
14331 l_bill_rate_override               pa_budget_lines.txn_bill_rate_override%TYPE;
14332 
14333 TYPE l_rw_cost_rate_override_tbl_t      IS TABLE OF pa_budget_lines.txn_cost_rate_override%TYPE
14334       INDEX BY BINARY_INTEGER;
14335 TYPE l_burdn_cst_rte_override_tbl_t      IS TABLE OF pa_budget_lines.burden_cost_rate_override%TYPE
14336       INDEX BY BINARY_INTEGER;
14337 TYPE l_bill_rate_override_tbl_t      IS TABLE OF pa_budget_lines.txn_bill_rate_override%TYPE
14338       INDEX BY BINARY_INTEGER;
14339 
14340 l_rw_cost_rate_override_tbl            l_rw_cost_rate_override_tbl_t;
14341 l_burden_cst_rate_override_tbl        l_burdn_cst_rte_override_tbl_t;
14342 l_bill_rate_override_tbl               l_bill_rate_override_tbl_t;
14343 
14344 
14345 l_budget_version_id_tbl      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14346 l_time_phased_code               pa_proj_fp_options.cost_time_phased_code%TYPE;
14347 l_bdgt_lines_skip_flag           varchar2(1);
14348 l_targ_request_id                pa_budget_versions.request_id%TYPE;
14349 
14350   --This variable will be used to call pa_resource_asgn_curr maintenance api - IPM Arch Enhancement
14351    l_fp_cols_rec              PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
14352 
14353  -- Bug 4588279, 27-SEP-05, jwhite ------------------
14354 
14355  -- Funds Check API Call
14356  l_fck_req_flag                   VARCHAR2(1) := NULL;
14357  l_bdgt_intg_flag                 VARCHAR2(1) := NULL;
14358  l_bdgt_ver_id                    NUMBER      := NULL;
14359  l_encum_type_id                  NUMBER      := NULL;
14360  l_balance_type                   VARCHAR2(1) := NULL;
14361 
14362  --Business Rule Validation
14363  l_period_year                    gl_period_statuses.period_year%TYPE;
14364 
14365  CURSOR l_budget_periods_csr
14366       (p_period_name    VARCHAR2
14367        ,p_period_type_code   VARCHAR2    )
14368    IS
14369    SELECT PERIOD_YEAR
14370    FROM   pa_budget_periods_v
14371    WHERE  period_name = p_period_name
14372    AND    period_type_code = p_period_type_code;
14373 
14374  -- End Bug 4588279, 27-SEP-05, jwhite ------------------
14375 
14376 
14377 
14378 BEGIN
14379 --  Standard begin of API savepoint
14380 
14381     SAVEPOINT calculate_amounts_pub;
14382 
14383 --  Standard call to check for call compatibility.
14384 
14385     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
14386                                          p_api_version_number   ,
14387                                          l_api_name             ,
14388                                          G_PKG_NAME             )
14389     THEN
14390 
14391     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14392 
14393     END IF;
14394     --product_code is mandatory
14395 
14396     IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14397     OR p_pm_product_code IS NULL
14398     THEN
14399          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14400          THEN
14401                 pa_interface_utils_pub.map_new_amg_msg
14402                 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
14403                  ,p_msg_attribute    => 'CHANGE'
14404                  ,p_resize_flag      => 'N'
14405                  ,p_msg_context      => 'GENERAL'
14406                  ,p_attribute1       => ''
14407                  ,p_attribute2       => ''
14408                  ,p_attribute3       => ''
14409                  ,p_attribute4       => ''
14410                  ,p_attribute5       => '');
14411          END IF;
14412 
14413          RAISE FND_API.G_EXC_ERROR;
14414 
14415     END IF;
14416 
14417     l_pm_product_code :='Z';
14418     /*added for bug no :2413400*/
14419     OPEN p_product_code_csr (p_pm_product_code);
14420     FETCH p_product_code_csr INTO l_pm_product_code;
14421     CLOSE p_product_code_csr;
14422 
14423     IF l_pm_product_code <> 'X'
14424     THEN
14425            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14426            THEN
14427                  pa_interface_utils_pub.map_new_amg_msg
14428                    ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
14429                     ,p_msg_attribute    => 'CHANGE'
14430                     ,p_resize_flag      => 'N'
14431                     ,p_msg_context      => 'GENERAL'
14432                     ,p_attribute1       => ''
14433                     ,p_attribute2       => ''
14434                     ,p_attribute3       => ''
14435                     ,p_attribute4       => ''
14436                     ,p_attribute5       => '');
14437             END IF;
14438             p_return_status            := FND_API.G_RET_STS_ERROR;
14439             RAISE FND_API.G_EXC_ERROR;
14440     END IF;
14441 
14442     l_resp_id     := FND_GLOBAL.Resp_id;
14443     l_user_id     := FND_GLOBAL.User_id;
14444 --    l_module_name := 'PA_FP_MAINTAIN_GENERATED_PLAN'; -- 'PA_PM_UPDATE_BUDGET_LINE';
14445 
14446     -- Bug 2863564
14447     -- The code below commented out as all the security checks are shifted to a common API
14448     /*
14449     IF p_update_db_flag = 'Y' THEN
14450            l_resp_id := FND_GLOBAL.Resp_id;
14451            l_user_id := FND_GLOBAL.User_id;
14452            --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_BUDGET_LINE';
14453            l_module_name := 'PA_PM_UPDATE_BUDGET_LINE';
14454 
14455         -- As part of enforcing project security, which would determine
14456         -- whether the user has the necessary privileges to update the project
14457         -- need to call the pa_security package
14458         -- If a user does not have privileges to update the project, then
14459         -- cannot update the budget lines
14460 
14461         pa_security.initialize (X_user_id        => l_user_id,
14462                                 X_calling_module => l_module_name);
14463 
14464         -- Actions performed using the APIs would be subject to
14465         -- function security. If the responsibility does not allow
14466         -- such functions to be executed, the API should not proceed further
14467         -- since the user does not have access to such functions
14468 
14469         PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id;
14470 
14471 
14472         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14473           (p_api_version_number => p_api_version_number,
14474            p_responsibility_id  => l_resp_id,
14475            p_function_name      => 'PA_PM_UPDATE_BUDGET_LINE',
14476            p_msg_count          => l_msg_count,
14477            p_msg_data           => l_msg_data,
14478            p_return_status      => l_return_status,
14479            p_function_allowed   => l_function_allowed );
14480 
14481         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
14482         THEN
14483                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14484 
14485         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
14486         THEN
14487                 RAISE FND_API.G_EXC_ERROR;
14488         END IF;
14489         IF l_function_allowed = 'N' THEN
14490             pa_interface_utils_pub.map_new_amg_msg
14491             ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14492              ,p_msg_attribute    => 'CHANGE'
14493              ,p_resize_flag      => 'Y'
14494              ,p_msg_context      => 'GENERAL'
14495              ,p_attribute1       => ''
14496              ,p_attribute2       => ''
14497              ,p_attribute3       => ''
14498              ,p_attribute4       => ''
14499              ,p_attribute5       => '');
14500              p_return_status := FND_API.G_RET_STS_ERROR;
14501              RAISE FND_API.G_EXC_ERROR;
14502         END IF;
14503     END IF;
14504     */
14505     --  Initialize the message table if requested.
14506 
14507     IF FND_API.TO_BOOLEAN( p_init_msg_list )
14508     THEN
14509 
14510          FND_MSG_PUB.initialize;
14511 
14512     END IF;
14513 
14514     --  Set API return status to success
14515 
14516     p_return_status         := FND_API.G_RET_STS_SUCCESS;
14517 
14518 
14519 --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
14520 
14521     --product_code is mandatory
14522 
14523      -- convert pm_project_reference to id
14524 
14525     Pa_project_pvt.Convert_pm_projref_to_id (
14526          p_pm_project_reference  => p_pm_project_reference,
14527          p_pa_project_id         => p_pa_project_id,
14528          p_out_project_id        => l_project_id,
14529          p_return_status         => p_return_status );
14530 
14531     IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
14532     THEN
14533         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
14534 
14535     ELSIF p_return_status = FND_API.G_RET_STS_ERROR
14536     THEN
14537         RAISE  FND_API.G_EXC_ERROR;
14538     END IF;
14539 
14540     -- Commenting out the code below as all the security checks are shifted to a common API
14541     /*
14542     IF p_update_db_flag = 'Y' THEN
14543 
14544         -- Now verify whether project security allows the user to update
14545         -- project
14546         -- If a user does not have privileges to update the project, then
14547         -- cannot update the budget line
14548 
14549         IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
14550 
14551            -- The user does not have query privileges on this project
14552            -- Hence, cannot update the project.Raise error
14553              pa_interface_utils_pub.map_new_amg_msg
14554              ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14555               ,p_msg_attribute    => 'CHANGE'
14556               ,p_resize_flag      => 'Y'
14557               ,p_msg_context      => 'GENERAL'
14558               ,p_attribute1       => ''
14559               ,p_attribute2       => ''
14560               ,p_attribute3       => ''
14561               ,p_attribute4       => ''
14562               ,p_attribute5       => '');
14563               p_return_status := FND_API.G_RET_STS_ERROR;
14564               RAISE FND_API.G_EXC_ERROR;
14565         ELSE
14566               -- If the user has query privileges, then check whether
14567               -- update privileges are also available
14568               IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
14569 
14570                    -- The user does not have update privileges on this project
14571                    -- Hence , raise error
14572                   pa_interface_utils_pub.map_new_amg_msg
14573                   ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14574                    ,p_msg_attribute    => 'CHANGE'
14575                    ,p_resize_flag      => 'Y'
14576                    ,p_msg_context      => 'GENERAL'
14577                    ,p_attribute1       => ''
14578                    ,p_attribute2       => ''
14579                    ,p_attribute3       => ''
14580                    ,p_attribute4       => ''
14581                    ,p_attribute5       => '');
14582                   p_return_status := FND_API.G_RET_STS_ERROR;
14583                   RAISE FND_API.G_EXC_ERROR;
14584               END IF;
14585         END IF;
14586     END IF;
14587    */
14588    -- Get segment1 for AMG messages
14589 
14590     OPEN l_amg_project_csr( l_project_id );
14591     FETCH l_amg_project_csr INTO l_amg_project_rec;
14592     CLOSE l_amg_project_csr;
14593 
14594     -- Bug 2863564 This is redundant code and thus commented out
14595 /*
14596     -- Get the project and project functional currencies so that they can be used later
14597     pa_fin_plan_utils.Get_Project_Curr_Attributes
14598             (  p_project_id                    => l_project_id
14599               ,x_multi_currency_billing_flag   => l_multi_currency_billing_flag
14600               ,x_project_currency_code         => l_project_currency_code
14601               ,x_projfunc_currency_code        => l_projfunc_currency_code
14602               ,x_project_cost_rate_type        => l_project_cost_rate_type
14603               ,x_projfunc_cost_rate_type       => l_projfunc_cost_rate_type
14604               ,x_project_bil_rate_type         => l_project_bil_rate_type
14605               ,x_projfunc_bil_rate_type        => l_projfunc_bil_rate_type
14606               ,x_return_status                 => l_return_status
14607               ,x_msg_count                     => l_msg_count
14608               ,x_msg_data                      => l_msg_data);
14609 
14610     IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
14611          RAISE  FND_API.G_EXC_ERROR;
14612     END IF;
14613 
14614     -- In budget model intialise txn currency code to PFC
14615     IF p_budget_type_code IS NOT  NULL  AND
14616        p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14617         l_txn_currency_code := l_projfunc_currency_code;
14618     END IF;
14619 */
14620 
14621        -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
14622        -- 28-APR-03
14623 
14624 
14625       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14626                         ll_fin_plan_type_id := NULL;
14627       ELSE
14628                         ll_fin_plan_type_id := p_fin_plan_type_id;
14629       END IF;
14630 
14631       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14632                         ll_fin_plan_type_name := NULL;
14633       ELSE
14634                         ll_fin_plan_type_name := p_fin_plan_type_name;
14635       END IF;
14636 
14637       IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14638                         ll_version_number := NULL;
14639       ELSE
14640                         ll_version_number := p_budget_version_number;
14641       END IF;
14642 
14643       -- Changes done.
14644 
14645 
14646     -- Bug 2863564 New validations included as part of the changes
14647 
14648     -- Budget Version Id, Budget Type Info and Fin Plan Type info all shouldn't be missing
14649 
14650     IF ((p_budget_version_id  IS NULL OR p_budget_version_id  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )  AND
14651         (p_budget_type_code   IS NULL OR p_budget_type_code   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )  AND
14652         (p_fin_plan_type_id   IS NULL OR p_fin_plan_type_id   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )  AND
14653         (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) )
14654     THEN
14655          PA_UTILS.ADD_MESSAGE
14656                (p_app_short_name => 'PA',
14657                 p_msg_name       => 'PA_BUDGET_FP_BOTH_MISSING');
14658 
14659          IF l_debug_mode = 'Y' THEN
14660                pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
14661                pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14662          END IF;
14663          RAISE FND_API.G_EXC_ERROR;
14664     END IF;
14665 
14666     -- Both Budget Type Info and Fin Plan Type info shouldn't be provided
14667 
14668     IF (p_budget_type_code    IS NOT NULL AND p_budget_type_code   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14669        ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
14670         (p_fin_plan_type_id   IS NOT NULL AND p_fin_plan_type_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ))
14671     THEN
14672          PA_UTILS.ADD_MESSAGE
14673                (p_app_short_name => 'PA',
14674                 p_msg_name       => 'PA_BUDGET_FP_BOTH_NOT_NULL');
14675 
14676          IF l_debug_mode = 'Y' THEN
14677                pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
14678                pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14679          END IF;
14680          RAISE FND_API.G_EXC_ERROR;
14681     END IF;
14682 
14683           -- get the person_id: used for locking checks
14684         PA_COMP_PROFILE_PUB.GET_USER_INFO
14685               (p_user_id         => l_user_id,
14686                x_person_id       => l_person_id,
14687                x_resource_id     => l_resource_id,
14688                x_resource_name   => l_resource_name);
14689 
14690     IF (p_budget_version_id IS NOT NULL AND p_budget_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14691     THEN
14692          -- Fetch budget version info
14693          OPEN  budget_version_info_cur(p_budget_version_id);
14694          FETCH budget_version_info_cur INTO budget_version_info_rec;
14695 
14696             IF budget_version_info_cur%NOTFOUND
14697             THEN
14698 
14699                  -- Add the error message that i/p plan version id is invlid
14700 
14701                  PA_UTILS.ADD_MESSAGE(
14702                         p_app_short_name  => 'PA'
14703                        ,p_msg_name        => 'PA_FP_INVALID_VERSION_ID'
14704                        ,p_token1          => 'BUDGET_VERSION_ID'
14705                        ,p_value1          => p_budget_version_id);
14706 
14707                  IF l_debug_mode = 'Y' THEN
14708                        pa_debug.g_err_stage := 'No budget version exists with i/p version id' ;
14709                        pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14710                  END IF;
14711                  CLOSE budget_version_info_cur;
14712                  RAISE FND_API.G_EXC_ERROR;
14713 
14714             ELSE
14715                  -- Check if the budget belongs to the same project
14716 
14717                  IF (budget_version_info_rec.project_id <> l_project_id)
14718                  THEN
14719                       PA_UTILS.ADD_MESSAGE(
14720                            p_app_short_name  => 'PA'
14721                           ,p_msg_name        => 'PA_FP_PROJ_VERSION_MISMATCH');
14722 
14723                       IF l_debug_mode = 'Y' THEN
14724                             pa_debug.g_err_stage := 'i/p version doesnot belong to i/p project' ;
14725                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14726                       END IF;
14727                       CLOSE budget_version_info_cur;
14728                       RAISE FND_API.G_EXC_ERROR;
14729                  END IF;
14730 
14731                  -- The i/p budget version should be a working verion.
14732 
14733                  IF (budget_version_info_rec.budget_status_code <> 'W')
14734                  THEN
14735                       PA_UTILS.ADD_MESSAGE(
14736                            p_app_short_name  => 'PA'
14737                           ,p_msg_name        => 'PA_FP_INVALID_VERSION_STATUS');
14738 
14739                       IF l_debug_mode = 'Y' THEN
14740                             pa_debug.g_err_stage := 'i/p version is not a working version' ;
14741                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14742                       END IF;
14743                       CLOSE budget_version_info_cur;
14744                       RAISE FND_API.G_EXC_ERROR;
14745                  END IF;
14746 
14747                  -- If the budget version is a control item version throw error
14748 
14749                  IF budget_version_info_rec.ci_id IS NOT NULL THEN
14750                       PA_UTILS.ADD_MESSAGE(
14751                             p_app_short_name  => 'PA'
14752                            ,p_msg_name        => 'PA_FP_CI_VERSION_NON_EDITABLE'
14753                            ,p_token1          => 'BUDGET_VERSION_ID'
14754                            ,p_value1          => p_budget_version_id);
14755                       IF l_debug_mode = 'Y' THEN
14756                             pa_debug.g_err_stage := 'i/p version is ci version' ;
14757                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14758                       END IF;
14759                       CLOSE budget_version_info_cur;
14760                       RAISE FND_API.G_EXC_ERROR;
14761                  END IF;
14762             END IF;
14763 
14764 
14765          -- Derive the new / old budgets model context value using the budget version info.
14766 
14767          IF budget_version_info_rec.fin_plan_type_id IS NOT NULL
14768          THEN
14769               l_context            :=  l_context_finplan;
14770               l_fin_plan_type_id   :=  budget_version_info_rec.fin_plan_type_id;
14771               l_version_type       :=  budget_version_info_rec.version_type;
14772               l_fin_plan_type_code :=  budget_version_info_rec.fin_plan_type_code;
14773               l_fin_plan_type_name :=  budget_version_info_rec.fin_plan_type_name;
14774               l_workplan_flag       :=  budget_version_info_rec.wp_version_flag;
14775               l_budget_version_id  :=  p_budget_version_id;
14776 
14777 
14778               IF  l_fin_plan_type_code = 'ORG_FORECAST' THEN
14779 
14780                     -- Add appropriate exception message
14781 
14782                     PA_UTILS.ADD_MESSAGE
14783                          (p_app_short_name => 'PA',
14784                           p_msg_name       => 'PA_FP_ORG_FCST_PLAN_TYPE'
14785                           );
14786 
14787                     IF l_debug_mode = 'Y' THEN
14788                           pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
14789                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14790                     END IF;
14791                     RAISE FND_API.G_EXC_ERROR;
14792               END IF;
14793               --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
14794 
14795               IF  l_workplan_flag = 'Y' THEN
14796 
14797                   IF l_debug_mode = 'Y' THEN
14798                         pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
14799                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14800                   END IF;
14801 
14802                   PA_UTILS.ADD_MESSAGE
14803                            (p_app_short_name => 'PA',
14804                             p_msg_name       => 'PA_FP_WP_BV_NOT_ALLOWED');
14805                    RAISE FND_API.G_EXC_ERROR;
14806               END IF;
14807 
14808               -- version locked by process
14809               IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98)
14810                          AND ( budget_version_info_rec.request_id is NOT NULL )) THEN
14811                      PA_UTILS.ADD_MESSAGE
14812                       ( p_app_short_name => 'PA',
14813                         p_msg_name       => 'PA_FP_LOCKED_BY_PRC');
14814                      CLOSE budget_version_info_cur;
14815                      RAISE FND_API.G_EXC_ERROR;
14816               END IF;
14817 
14818               -- version locked by another user
14819               IF (budget_version_info_rec.locked_by_person_id is not null)  then
14820                   IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
14821 
14822                       l_locked_by_name :=
14823                           pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
14824                       PA_UTILS.ADD_MESSAGE
14825                              ( p_app_short_name => 'PA',
14826                                p_msg_name       => 'PA_FP_LCK_BY_USER',
14827                                p_token1         => 'PERSON_NAME',
14828                                p_value1         => l_locked_by_name);
14829                     CLOSE budget_version_info_cur;
14830                     RAISE FND_API.G_EXC_ERROR;
14831                   END IF;
14832               END IF;
14833                -- Get the status of the current working version. If the status is submitted then
14834             -- it can not be updated/deleted
14835               IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
14836                  IF l_debug_mode = 'Y' THEN
14837                             pa_debug.g_err_stage := 'Version exists in submitted status';
14838                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
14839                  END IF;
14840                  PA_UTILS.ADD_MESSAGE
14841                         ( p_app_short_name => 'PA',
14842                           p_msg_name       => 'PA_FP_VER_SUB_STS');
14843                  CLOSE budget_version_info_cur;
14844                  RAISE FND_API.G_EXC_ERROR;
14845               END IF;
14846 
14847               l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
14848 
14849               l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
14850 
14851               IF l_autobaseline_flag = 'N' THEN
14852 
14853                     pa_fin_plan_utils.Check_if_plan_type_editable (
14854                              P_project_id         => l_project_id
14855                             ,P_fin_plan_type_id   => l_fin_plan_type_id
14856                             ,P_version_type       => l_version_type
14857                             ,X_editable_flag      => l_editable_flag
14858                             ,X_return_status      => p_return_status
14859                             ,X_msg_count          => p_msg_count
14860                             ,X_msg_data           => p_msg_data);
14861 
14862                     -- Throw the error if the above API is not successfully executed
14863 
14864                     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14865 
14866                                     IF l_debug_mode = 'Y' THEN
14867                                           pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
14868                                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
14869                                     END IF;
14870 
14871                          RAISE FND_API.G_EXC_ERROR;
14872                     END IF;
14873 
14874                     --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
14875 
14876                     IF l_editable_flag = 'N'  THEN
14877 
14878                           IF l_debug_mode = 'Y' THEN
14879                                 pa_debug.g_err_stage := 'Plan type is not editable' ;
14880                                 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
14881                           END IF;
14882 
14883                           PA_UTILS.ADD_MESSAGE
14884                                    (p_app_short_name => 'PA',
14885                                     p_msg_name       => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
14886                                     p_token1         => 'PROJECT',
14887                                     p_value1         =>  l_amg_project_rec.segment1,
14888                                     p_token2         => 'PLAN_TYPE',
14889                                     p_value2         =>  l_fin_plan_type_name);
14890 
14891                          RAISE FND_API.G_EXC_ERROR;
14892                     END IF;
14893               END IF;
14894 
14895          ELSE
14896               l_context := l_context_budget;
14897               l_budget_type_code   :=  budget_version_info_rec.budget_type_code;
14898               l_budget_version_id  :=  p_budget_version_id;
14899               /* added for 2207723 to get the entry level of the budget */
14900               OPEN l_get_entry_level_csr(l_budget_version_id);
14901               FETCH l_get_entry_level_csr into l_entry_level;
14902               CLOSE l_get_entry_level_csr;
14903 
14904          END IF;
14905          CLOSE budget_version_info_cur;
14906 
14907     ELSIF (p_fin_plan_type_id   IS NOT NULL AND p_fin_plan_type_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
14908           (p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14909     THEN
14910 
14911          -- Bug 2863564
14912          -- We are in the contex of new budgets model
14913 
14914          l_context := l_context_finplan;
14915 
14916          -- Call convert_plan_type_name_to_id api.
14917          -- If Plan Type Id is passed then the existence of a plan type with that id is checked
14918          -- Else using plan type name provided Plan Type Id is fetched.
14919          -- Proper error messages are stacked by the api if any validations fail.
14920 
14921          -- Change the p_fin_plan_type_id, p_fin_plan_type_name to
14922        --          ll_fin_plan_type_id,ll_fin_plan_type_name
14923          -- Xin Liu. 28-APR-03
14924 
14925          PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
14926                ( p_fin_plan_type_id    => ll_fin_plan_type_id
14927                 ,p_fin_plan_type_name  => ll_fin_plan_type_name
14928                 ,x_fin_plan_type_id    => l_fin_plan_type_id
14929                 ,x_return_status       => p_return_status
14930                 ,x_msg_count           => p_msg_count
14931                 ,x_msg_data            => p_msg_data);
14932 
14933          -- Throw the error if the above API is not successfully executed
14934 
14935          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14936 
14937                IF l_debug_mode = 'Y' THEN
14938                      pa_debug.g_err_stage := 'Plan Type validation have failed' ;
14939                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14940                END IF;
14941                RAISE FND_API.G_EXC_ERROR;
14942          END IF;
14943 
14944          -- Now, we have a valid fin plan type id
14945          -- Check if the fin plan type code is 'ORG_FORECAST' if so throw an error
14946 
14947          BEGIN
14948               SELECT  fin_plan_type_code
14949                      ,name
14950                      , use_for_workplan_flag
14951               INTO    l_fin_plan_type_code
14952                      ,l_fin_plan_type_name
14953                      ,l_workplan_flag
14954               FROM   pa_fin_plan_types_vl
14955               WHERE  fin_plan_type_id = l_fin_plan_type_id;
14956 
14957               IF  l_fin_plan_type_code = 'ORG_FORECAST' THEN
14958 
14959                     -- Add appropriate exception message
14960 
14961                     PA_UTILS.ADD_MESSAGE
14962                          (p_app_short_name => 'PA',
14963                           p_msg_name       => 'PA_FP_ORG_FCST_PLAN_TYPE'
14964                           );
14965 
14966                     IF l_debug_mode = 'Y' THEN
14967                           pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
14968                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14969                     END IF;
14970                     RAISE FND_API.G_EXC_ERROR;
14971               END IF;
14972          EXCEPTION
14973               WHEN OTHERS THEN
14974                    IF l_debug_mode = 'Y' THEN
14975                          pa_debug.g_err_stage := 'Unexpected error while fetching the plan type code'||SQLERRM ;
14976                          pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14977                    END IF;
14978                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14979          END;
14980 
14981             --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
14982 
14983             IF  l_workplan_flag = 'Y' THEN
14984 
14985                   IF l_debug_mode = 'Y' THEN
14986                         pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
14987                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14988                   END IF;
14989 
14990                   PA_UTILS.ADD_MESSAGE
14991                            (p_app_short_name => 'PA',
14992                             p_msg_name       => 'PA_FP_WP_BV_NOT_ALLOWED');
14993                    RAISE FND_API.G_EXC_ERROR;
14994             END IF;
14995             --bug #3636409. Validation for workplan versions ends here.
14996 
14997          -- Bug 2863564 Check if the plan type has been attached to the project or not.
14998 
14999          OPEN  proj_fp_options_cur(l_project_id,l_fin_plan_type_id);
15000          FETCH proj_fp_options_cur INTO proj_fp_options_rec;
15001 
15002            IF proj_fp_options_cur%NOTFOUND THEN
15003 
15004               -- Throw appropriate error message
15005               PA_UTILS.ADD_MESSAGE
15006                       (p_app_short_name => 'PA',
15007                        p_msg_name       => 'PA_FP_NO_PLAN_TYPE_OPTION',
15008                        p_token1         => 'PROJECT',
15009                        p_value1         =>  l_amg_project_rec.segment1,
15010                        p_token2         => 'PLAN_TYPE',
15011                        p_value2         =>  l_fin_plan_type_name);
15012 
15013                IF l_debug_mode = 'Y' THEN
15014                      pa_debug.g_err_stage := 'plan type not attached to project' ;
15015                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15016                END IF;
15017                CLOSE proj_fp_options_cur;
15018                RAISE FND_API.G_EXC_ERROR;
15019            END IF;
15020 
15021          CLOSE proj_fp_options_cur;
15022 
15023       -- Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR.  24-APR-03
15024          IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15025                     l_version_type := NULL;
15026        ELSE
15027                   l_version_type := p_version_type;
15028          END IF;
15029       --Changes Done.
15030 
15031          -- Bug 2863564
15032          -- Call get_version_type api to do the necessary validations regarding the version type
15033          -- If the version type is passed as null,
15034          --      it returns version_type if it can be fethced uniquely.
15035          -- else if passed as not null
15036          --       it validates the passed value against the fin plan preference code
15037 
15038          pa_fin_plan_utils.get_version_type
15039                   ( p_project_id        => l_project_id
15040                    ,p_fin_plan_type_id  => l_fin_plan_type_id
15041                    ,px_version_type     => l_version_type
15042                    ,x_return_status     => p_return_status
15043                    ,x_msg_count         => p_msg_count
15044                    ,x_msg_data          => p_msg_data);
15045 
15046          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15047                IF l_debug_mode = 'Y' THEN
15048                      pa_debug.g_err_stage := 'getversiontype Failed ' ;
15049                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15050                END IF;
15051                RAISE FND_API.G_EXC_ERROR;
15052          END IF;
15053 
15054           --bug #3636409. Validation for allow_edit_after_baseline_flag starts here.
15055          l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
15056 
15057          IF l_autobaseline_flag = 'N' THEN
15058 
15059                pa_fin_plan_utils.Check_if_plan_type_editable (
15060                         P_project_id         => l_project_id
15061                        ,P_fin_plan_type_id   => l_fin_plan_type_id
15062                        ,P_version_type       => l_version_type
15063                        ,X_editable_flag      => l_editable_flag
15064                        ,X_return_status      => p_return_status
15065                        ,X_msg_count          => p_msg_count
15066                        ,X_msg_data           => p_msg_data);
15067 
15068                -- Throw the error if the above API is not successfully executed
15069 
15070                IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15071 
15072                                IF l_debug_mode = 'Y' THEN
15073                                      pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
15074                                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15075                                END IF;
15076 
15077                     RAISE FND_API.G_EXC_ERROR;
15078                END IF;
15079 
15080                --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
15081 
15082                IF l_editable_flag = 'N'  THEN
15083 
15084                      IF l_debug_mode = 'Y' THEN
15085                            pa_debug.g_err_stage := 'Plan type is not editable' ;
15086                            pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15087                      END IF;
15088 
15089                      PA_UTILS.ADD_MESSAGE
15090                               (p_app_short_name => 'PA',
15091                                p_msg_name       => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
15092                                p_token1         => 'PROJECT',
15093                                p_value1         =>  l_amg_project_rec.segment1,
15094                                p_token2         => 'PLAN_TYPE',
15095                                p_value2         =>  l_fin_plan_type_name);
15096 
15097                     RAISE FND_API.G_EXC_ERROR;
15098                END IF;
15099          END IF;
15100            --bug #3636409. Validation for allow_edit_after_baseline_flag ends here.
15101 
15102 
15103          IF   p_budget_version_number IS NOT NULL
15104          AND  p_budget_Version_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15105          THEN
15106               -- Bug 2863564
15107               -- Fetch the working budget version with the unique combination of
15108               -- l_project_id, l_finplan_type_id,l_version_type, version_number provided
15109 
15110               pa_fin_plan_utils.get_version_id
15111                   (  p_project_id        => l_project_id
15112                     ,p_fin_plan_type_id  => l_fin_plan_type_id
15113                     ,p_version_type      => l_version_type
15114                     ,p_version_number    => p_budget_version_number
15115                     ,x_budget_version_id => l_budget_version_id
15116                     ,x_ci_id             => l_ci_id
15117                     ,x_return_status     => p_return_status
15118                     ,x_msg_count         => p_msg_count
15119                     ,x_msg_data          => p_msg_data );
15120 
15121               IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15122                     IF l_debug_mode = 'Y' THEN
15123                           pa_debug.g_err_stage := 'getVersionId api Failed ' ;
15124                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15125                     END IF;
15126                     RAISE FND_API.G_EXC_ERROR;
15127               END IF;
15128 
15129               -- If the budget version is a control item version throw error
15130 
15131               IF l_ci_id IS NOT NULL THEN
15132                   PA_UTILS.ADD_MESSAGE(
15133                          p_app_short_name  => 'PA'
15134                         ,p_msg_name        => 'PA_FP_CI_VERSION_NON_EDITABLE'
15135                         ,p_token1          => 'BUDGET_VERSION_ID'
15136                         ,p_value1          => p_budget_version_id);
15137 
15138                   IF l_debug_mode = 'Y' THEN
15139                         pa_debug.g_err_stage := 'i/p version is ci version' ;
15140                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15141                   END IF;
15142                   RAISE FND_API.G_EXC_ERROR;
15143               END IF;
15144          ELSE
15145               -- Fetch the current working version for the project, finplan type and verion type
15146 
15147               PA_FIN_PLAN_UTILS.Get_Curr_Working_Version_Info(
15148                       p_project_id           =>   l_project_id
15149                      ,p_fin_plan_type_id     =>   l_fin_plan_type_id
15150                      ,p_version_type         =>   l_version_type
15151                      ,x_fp_options_id        =>   l_dummy
15152                      ,x_fin_plan_version_id  =>   l_budget_version_id
15153                      ,x_return_status        =>   p_return_status
15154                      ,x_msg_count            =>   p_msg_count
15155                      ,x_msg_data             =>   p_msg_data );
15156 
15157               IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15158                     IF l_debug_mode = 'Y' THEN
15159                           pa_debug.g_err_stage := 'Get_Curr_Working_Version_Info api Failed ' ;
15160                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15161                     END IF;
15162                     RAISE FND_API.G_EXC_ERROR;
15163               END IF;
15164 
15165          END IF;
15166 
15167          -- Bug 2863564
15168          -- If budget version id can't be found for i/p parameteres throw appropriate error message
15169 
15170        -- Changes done by Xin Liu for post_fpk. Added check for G_PA_MISS_NUM. 24-APR-03
15171          IF l_budget_version_id IS NULL OR l_budget_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
15172 
15173               -- Throw appropriate error message
15174               PA_UTILS.ADD_MESSAGE
15175                       (p_app_short_name => 'PA',
15176                        p_msg_name       => 'PA_FP_NO_WORKING_VERSION',
15177                        p_token1         => 'PROJECT',
15178                        p_value1         =>  l_amg_project_rec.segment1,
15179                        p_token2         => 'PLAN_TYPE',
15180                        p_value2         =>  l_fin_plan_type_name,
15181                        p_token3         => 'VERSION_NUMBER',
15182                        p_value3         =>  p_budget_Version_number );
15183 
15184                IF l_debug_mode = 'Y' THEN
15185                      pa_debug.g_err_stage := 'Budget Version does not exist' ;
15186                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15187                END IF;
15188                RAISE FND_API.G_EXC_ERROR;
15189          Else
15190                 -- Fetch budget version info
15191                 OPEN  budget_version_info_cur(l_budget_version_id);
15192                 FETCH budget_version_info_cur INTO budget_version_info_rec;
15193                 -- version locked by process
15194                 IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98 )
15195                          AND ( budget_version_info_rec.request_id is NOT NULL )    ) THEN
15196 
15197                      PA_UTILS.ADD_MESSAGE
15198                         ( p_app_short_name => 'PA',
15199                           p_msg_name       => 'PA_FP_LOCKED_BY_PRC');
15200 
15201                     CLOSE budget_version_info_cur;
15202                     RAISE FND_API.G_EXC_ERROR;
15203                 END IF;
15204 
15205               -- version locked by another user
15206               IF (budget_version_info_rec.locked_by_person_id is not null)  then
15207                   IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
15208 
15209                       l_locked_by_name := pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
15210                       PA_UTILS.ADD_MESSAGE
15211                                ( p_app_short_name => 'PA',
15212                                  p_msg_name       => 'PA_FP_LCK_BY_USER',
15213                                  p_token1         => 'PERSON_NAME',
15214                                  p_value1         => l_locked_by_name);
15215                       CLOSE budget_version_info_cur;
15216                       RAISE FND_API.G_EXC_ERROR;
15217                   END IF;
15218               END IF;
15219 
15220               -- Get the status of the current working version. If the status is submitted then
15221               -- it can not be updated/deleted
15222               IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
15223                  IF l_debug_mode = 'Y' THEN
15224                             pa_debug.g_err_stage := 'Version exists in submitted status';
15225                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15226                  END IF;
15227                  PA_UTILS.ADD_MESSAGE
15228                         ( p_app_short_name => 'PA',
15229                           p_msg_name       => 'PA_FP_VER_SUB_STS');
15230                  CLOSE budget_version_info_cur;
15231                  RAISE FND_API.G_EXC_ERROR;
15232               END IF;
15233 
15234               IF budget_version_info_rec.plan_processing_code IN ('XLUE','XLUP') THEN
15235 
15236                   pa_fin_plan_utils.return_and_vldt_plan_prc_code
15237                       (p_budget_version_id      =>   l_budget_version_id
15238                        ,p_plan_processing_code  =>   budget_version_info_rec.plan_processing_code
15239                        ,x_final_plan_prc_code    =>  budget_version_info_rec.plan_processing_code
15240                        ,x_targ_request_id        =>  l_targ_request_id
15241                        ,x_return_status          =>   p_return_status
15242                        ,x_msg_count              =>   p_msg_count
15243                        ,x_msg_data               =>   p_msg_data);
15244 
15245                   IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15246                         IF l_debug_mode = 'Y' THEN
15247                               pa_debug.g_err_stage := 'Validate plan processing code api Failed ' ;
15248                               pa_debug.write('Processing Code'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15249                         END IF;
15250                         RAISE FND_API.G_EXC_ERROR;
15251                   END IF;
15252 
15253               END IF;
15254 
15255             CLOSE budget_version_info_cur;
15256          End if;
15257 
15258          -- Bug 2863564
15259          -- Fetch the planning level of the budget version
15260 
15261          l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
15262 
15263     ELSIF p_budget_type_code IS NOT NULL OR p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15264     THEN
15265 
15266          -- Bug 2863564
15267          -- The following validation has been commented as its not relevant any more
15268 
15269          /*
15270          -- budget type code is mandatory
15271          IF p_budget_type_code IS NULL
15272          OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15273 
15274               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15275                  pa_interface_utils_pub.map_new_amg_msg
15276                  ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15277                   ,p_msg_attribute    => 'CHANGE'
15278                   ,p_resize_flag      => 'N'
15279                   ,p_msg_context      => 'BUDG'
15280                   ,p_attribute1       => l_amg_segment1
15281                   ,p_attribute2       => ''
15282                   ,p_attribute3       => p_budget_type_code
15283                   ,p_attribute4       => ''
15284                   ,p_attribute5       => '');
15285               END IF;
15286               RAISE FND_API.G_EXC_ERROR;
15287           ELSE
15288           */
15289 
15290          -- If the budget_type info is passed, we are in the context of old bugets model
15291 
15292          l_context := l_context_budget;
15293          l_budget_type_code := p_budget_type_code;
15294 
15295          -- Validate the budget type code
15296 
15297          OPEN l_budget_type_csr( p_budget_type_code );
15298 
15299          FETCH l_budget_type_csr INTO l_dummy;
15300 
15301          IF l_budget_type_csr%NOTFOUND THEN
15302             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15303                 pa_interface_utils_pub.map_new_amg_msg
15304                 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15305                  ,p_msg_attribute    => 'CHANGE'
15306                  ,p_resize_flag      => 'N'
15307                  ,p_msg_context      => 'BUDG'
15308                  ,p_attribute1       => l_amg_project_rec.segment1
15309                  ,p_attribute2       => ''
15310                  ,p_attribute3       => p_budget_type_code
15311                  ,p_attribute4       => ''
15312                  ,p_attribute5       => '');
15313             END IF;
15314             CLOSE l_budget_type_csr;
15315             RAISE FND_API.G_EXC_ERROR;
15316          END IF;
15317          CLOSE l_budget_type_csr;
15318 
15319          -- fetch the draft version id
15320 
15321          OPEN  draft_version_cur( l_project_id
15322                                  ,p_budget_type_code );
15323          FETCH draft_version_cur INTO draft_version_rec;
15324                IF draft_version_cur%NOTFOUND
15325                THEN
15326                      -- Throw appropriate error message
15327                      PA_UTILS.ADD_MESSAGE
15328                             (p_app_short_name => 'PA',
15329                              p_msg_name       => 'PA_NO_BUDGET_VERSION');
15330 
15331                      IF l_debug_mode = 'Y' THEN
15332                            pa_debug.g_err_stage := 'Draft Budget Version does not exist' ;
15333                            pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15334                      END IF;
15335                      CLOSE draft_version_cur;
15336                      RAISE FND_API.G_EXC_ERROR;
15337                ELSE
15338                      l_budget_version_id := draft_version_rec.budget_version_id;
15339                END IF;
15340          CLOSE draft_version_cur;
15341 
15342          -- Get budget entry method details
15343 
15344          /* added for 2207723 to get the entry level of the budget */
15345          OPEN l_get_entry_level_csr(l_budget_version_id);
15346          FETCH l_get_entry_level_csr into l_entry_level;
15347          CLOSE l_get_entry_level_csr;
15348 
15349 
15350     END IF; -- I/p Budget Version Id not null
15351 
15352     -- Bug 2863564
15353     -- Call the api that performs the autobaseline checks
15354 
15355     PA_FIN_PLAN_UTILS.PERFORM_AUTOBASLINE_CHECKS (
15356            p_budget_version_id  =>   l_budget_version_id
15357           ,x_result             =>   l_result
15358           ,x_return_status      =>   p_return_status
15359           ,x_msg_count          =>   p_msg_count
15360           ,x_msg_data           =>   p_msg_data       );
15361 
15362     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15363           IF(l_debug_mode='Y') THEN
15364                 pa_debug.g_err_stage := 'Auto baseline API falied';
15365                 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15366           END IF;
15367           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15368     END IF;
15369 
15370     IF l_result = 'F' THEN
15371           IF(l_debug_mode='Y') THEN
15372                 pa_debug.g_err_stage := 'Auto baselining enabled for the project';
15373                 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15374           END IF;
15375           PA_UTILS.ADD_MESSAGE(
15376                   p_app_short_name  => 'PA'
15377                  ,p_msg_name        => 'PA_FP_AB_AR_VER_NON_EDITABLE'
15378                  ,p_token1          => 'PROJECT'
15379                  ,p_value1          => l_amg_project_rec.segment1);
15380           RAISE FND_API.G_EXC_ERROR;
15381     END IF;
15382 
15383     IF l_context = l_context_budget
15384     THEN
15385          -- Derive the version type using the budget amount code to restrict
15386          -- the users editing the 'COST' amounts if the version is 'REVENUE_ONLY'
15387 
15388         PA_FIN_PLAN_UTILS.get_version_type_for_bdgt_type
15389              (  p_budget_type_code      => l_budget_type_code
15390                ,x_version_type          => l_version_type
15391                ,x_return_status         => p_return_status
15392                ,x_msg_count             => p_msg_count
15393                ,x_msg_data              => p_msg_data );
15394 
15395         IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15396               IF(l_debug_mode='Y') THEN
15397                     pa_debug.g_err_stage := 'get_version_type_for_bdgt_type API falied';
15398                     pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15399               END IF;
15400               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15401         END IF;
15402     END IF;
15403 
15404     IF p_update_db_flag = 'Y'
15405     THEN
15406            l_module_name := 'PA_PM_UPDATE_BUDGET_LINE'; --4615645.
15407 
15408             -- Bug 2863564 Check for the function security
15409 
15410             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
15411                    p_api_version_number =>   p_api_version_number
15412                   ,p_project_id         =>   l_project_id
15413                   ,p_fin_plan_type_id   =>   l_fin_plan_type_id /* Bug 3139924 */
15414                   ,p_calling_context    =>   l_context
15415                   ,p_function_name      =>   l_module_name
15416                   ,p_version_type       =>   l_version_type
15417                   ,x_return_status      =>   p_return_status
15418                   ,x_ret_code           =>   l_security_ret_code );
15419 
15420             -- The above API adds the error message to stack. Hence the message is not added here.
15421             -- Also, as security check is important further validations are not done in case this
15422             -- validation fails.
15423 
15424             IF (p_return_status <> FND_API.G_RET_STS_SUCCESS OR l_security_ret_code <> 'Y') THEN
15425 
15426                   IF l_debug_mode = 'Y' THEN
15427                         pa_debug.g_err_stage:= 'Security API Failed';
15428                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15429                   END IF;
15430 
15431                   RAISE FND_API.G_EXC_ERROR;
15432             END IF;
15433     END IF;
15434 
15435     -- Bug 2863564
15436     -- For Financial Planning model, we need to lock the plan version explicitly
15437     -- before Updating the version.
15438 
15439     IF p_update_db_flag = 'Y' AND l_context = l_context_finplan THEN
15440 
15441          -- Fetch the record version number of the plan version
15442          l_record_version_number :=
15443                   PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
15444 
15445          PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
15446               ( p_budget_version_id       => l_budget_version_id
15447                ,p_record_version_number   => l_record_version_number
15448                ,p_action                  => 'L'
15449                ,p_user_id                 => FND_GLOBAL.User_id
15450                ,p_person_id               => NULL
15451                ,x_return_status           => p_return_status
15452                ,x_msg_count               => p_msg_count
15453                ,x_msg_data                => p_msg_data);
15454 
15455           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
15456 
15457                -- Error message is not added here as the api lock_unlock_version
15458                -- adds the message to stack
15459                IF(l_debug_mode='Y') THEN
15460                      pa_debug.g_err_stage := 'Failed in locking the version';
15461                      pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15462                END IF;
15463 
15464                RAISE FND_API.G_EXC_ERROR;
15465          END IF;
15466 
15467     END IF;
15468 
15469 
15470 
15471     -- Bug 4588279, 27-SEP-05, jwhite ---------------------------------------------------
15472 
15473     -- For budget_type_code Budgetary Control budgets,
15474     --
15475     -- 1) Add validation rule to prevent update to
15476     --    periods later than the latest encumbrance year for the set-of-books.
15477     --
15478     -- 2) For information purposes, this validation will be performed even if the update mode
15479     --    is disabled ( p_update_db_flag = 'N' )
15480     --
15481     --
15482 
15483     -- Since this initilization is performed here, this global can be used in lieu of a test
15484     -- for the following later in this procedure:
15485     -- 1) Update Mode
15486     -- 2) Budget_type_code model
15487     -- 3) Budgetary Control
15488     --
15489 
15490     PA_BUDGET_PUB.G_Latest_Encumbrance_Year := -99;
15491 
15492 
15493     IF ( p_update_db_flag = 'Y' )
15494      THEN
15495      -- UPDATE MODE
15496 
15497       IF ( p_budget_type_code IS NOT NULL ) -- budget_type_code model
15498          THEN
15499 
15500           -- Test for Budgetary Control
15501 
15502             --Check if budgetary control is enabled for the given project and
15503             --budget type code.
15504             PA_BUDGET_FUND_PKG.get_budget_ctrl_options
15505                             ( p_project_Id       => l_project_id
15506                             , p_budget_type_code => p_budget_type_code
15507                             , p_calling_mode     => 'BUDGET'
15508                             , x_fck_req_flag     => l_fck_req_flag
15509                             , x_bdgt_intg_flag   => l_bdgt_intg_flag
15510                             , x_bdgt_ver_id      => l_bdgt_ver_id
15511                             , x_encum_type_id    => l_encum_type_id
15512                             , x_balance_type     => l_balance_type
15513                             , x_return_status    => p_return_status
15514                             , x_msg_data         => p_msg_data
15515                             , x_msg_count        => p_msg_count
15516                             );
15517 
15518             -- calling api above adds the error message to stack hence not adding the error message here.
15519             IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
15520             THEN
15521                   IF l_debug_mode = 'Y' THEN
15522                         pa_debug.g_err_stage:= 'Calculate_Amounts returned unexp error';
15523                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15524                   END IF;
15525                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
15526             ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15527             THEN
15528                   IF l_debug_mode = 'Y' THEN
15529                         pa_debug.g_err_stage:= 'Calculate_Amounts returned  error';
15530                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15531                   END IF;
15532                   RAISE  FND_API.G_EXC_ERROR;
15533             END IF;
15534 
15535 
15536             --If funds check is required then this budget cannot be updated thru AMG interface
15537             --FOR PERIOD_YEARS THAT FALL AFTER THE LATEST ENCUMBRANCE YEAR.
15538 
15539 
15540             IF (nvl(l_fck_req_flag,'N') = 'Y')
15541             THEN
15542 
15543                  --RE-Populate global for subsequent conditional budget LINE validation
15544                  --  Storing a value other than -99 is essential to conditional LINE validation
15545 
15546                  PA_BUDGET_PVT.Get_Latest_BC_Year
15547                      ( p_pa_project_id            => l_project_id
15548                        ,x_latest_encumbrance_year => PA_BUDGET_PUB.G_Latest_Encumbrance_Year
15549                        ,x_return_status           => p_return_status
15550                        ,x_msg_count               => p_msg_count
15551                        ,x_msg_data                => p_msg_data
15552                       );
15553 
15554 
15555                  -- calling api above adds the error message to stack hence not adding the error message here.
15556                  IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
15557                  THEN
15558                    IF l_debug_mode = 'Y' THEN
15559                         pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned unexp error';
15560                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15561                    END IF;
15562                    RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
15563                  ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15564                  THEN
15565                    IF l_debug_mode = 'Y' THEN
15566                         pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned  error';
15567                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15568                    END IF;
15569                    RAISE  FND_API.G_EXC_ERROR;
15570                  END IF;
15571 
15572             END IF; --(nvl(l_fck_req_flag,'N') = 'Y')
15573 
15574        END IF;  -- p_budget_type_code IS NOT NULL
15575 
15576 
15577    END IF;  -- p_update_db_flag = 'Y'
15578 
15579     -- End Bug 4588279, 27-SEP-05, jwhite -------------------------------------------------
15580 
15581 
15582 
15583 
15584     -- Read all budget lines  - Begin Budget lines loop
15585 
15586     l_line_ctr   := 0;
15587 
15588     IF l_context = l_context_finplan THEN
15589        l_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
15590     END IF;
15591 
15592      OPEN  budget_version_info_cur(l_budget_version_id);
15593      FETCH budget_version_info_cur INTO budget_version_info_rec;
15594      close budget_version_info_cur;
15595 
15596     --Set this variable to 'N' initially. This would be set to Yes if for some budget lines client extensions are not called.
15597     l_bdgt_lines_skip_flag := 'N';
15598 
15599     OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
15600     LOOP
15601 
15602          FETCH l_resource_assignment_csr BULK COLLECT INTO
15603              l_rowid_tbl
15604             ,l_budget_line_id_tbl
15605             ,l_txn_currency_code_tbl
15606             ,l_res_assignment_id_tbl
15607             ,l_task_id_tbl
15608             ,l_rate_based_flag_tbl
15609             ,l_resource_list_id_tbl
15610             ,l_resource_list_member_id_tbl
15611             ,l_resource_id_tbl
15612             ,l_resource_name_tbl
15613             ,l_start_date_tbl
15614             ,l_end_date_tbl
15615             ,l_period_name_tbl
15616             ,l_quantity_tbl
15617             ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
15618             ,l_txn_raw_cost_tbl
15619             ,l_txn_burdened_cost_tbl
15620             ,l_txn_revenue_tbl
15621             ,l_project_raw_cost_tbl
15622             ,l_project_burdened_cost_tbl
15623             ,l_project_revenue_tbl
15624             ,l_projfunc_raw_cost_tbl
15625             ,l_projfunc_burdened_cost_tbl
15626             ,l_projfunc_revenue_tbl
15627          LIMIT l_plsql_max_array_size;
15628 
15629          IF(l_debug_mode='Y') THEN
15630                pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
15631                pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15632          END IF;
15633 
15634          -- For each of the budget line fetched call client extension apis
15635 
15636          IF NVL(l_rowid_tbl.last,0) >= 1 THEN  /* Only if something is fetched */
15637            FOR i IN l_rowid_tbl.first .. l_rowid_tbl.last
15638            LOOP
15639                 l_line_ctr := l_line_ctr + 1;
15640                 l_task_name := NULL;
15641                 -- Get the pm_task_reference for the task_id
15642                 IF l_entry_level <> 'P' THEN /* 2207733 do this check only if budget is not at project level other valid
15643                                                 values are 'L', 'M', and 'P' */
15644                      --OPEN l_task_csr (l_resource_assignment_rec.task_id);
15645                      OPEN  l_task_csr (l_task_id_tbl(i));
15646                      FETCH l_task_csr INTO l_pm_task_reference
15647                                           ,l_task_name; -- Bug 2863564
15648                           IF l_task_csr%NOTFOUND THEN
15649                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15650                                   pa_interface_utils_pub.map_new_amg_msg
15651                                   ( p_old_message_code => 'PA_TASK_ID_INVALID'
15652                                    ,p_msg_attribute    => 'CHANGE'
15653                                    ,p_resize_flag      => 'N'
15654                                    ,p_msg_context      => 'PROJ'
15655                                    ,p_attribute1       => l_amg_project_rec.segment1
15656                                    ,p_attribute2       => ''
15657                                    ,p_attribute3       => ''
15658                                    ,p_attribute4       => ''
15659                                    ,p_attribute5       => '');
15660                               END IF;
15661                               CLOSE l_task_csr;
15662                               p_multiple_task_msg   := 'F';
15663                               --  RAISE FND_API.G_EXC_ERROR;
15664                           END IF;
15665                      CLOSE l_task_csr;
15666                 END IF; /* 2207733 */
15667 
15668 
15669                 p_calc_budget_lines_out(l_line_ctr).pa_task_id              := l_task_id_tbl(i);
15670                 p_calc_budget_lines_out(l_line_ctr).pm_task_reference       := l_pm_task_reference;
15671                 p_calc_budget_lines_out(l_line_ctr).resource_alias          := l_resource_name_tbl(i);
15672                 p_calc_budget_lines_out(l_line_ctr).resource_list_member_id := l_resource_list_member_id_tbl(i);
15673                 p_calc_budget_lines_out(l_line_ctr).budget_start_date       := l_start_date_tbl(i);
15674                 p_calc_budget_lines_out(l_line_ctr).budget_end_date         := l_end_date_tbl(i);
15675                 p_calc_budget_lines_out(l_line_ctr).period_name             := l_period_name_tbl(i);
15676                 p_calc_budget_lines_out(l_line_ctr).quantity                := l_quantity_tbl(i);
15677                 p_calc_budget_lines_out(l_line_ctr).display_quantity        := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
15678                 p_calc_budget_lines_out(l_line_ctr).txn_currency_code       := l_txn_currency_code_tbl(i);
15679 
15680                 -- Fix: 03-FEB-97, jwhite
15681                 -- Added line to populate line return status. ---------------------------
15682                 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_SUCCESS;
15683                 -- ------------------------------------------------------------------------------
15684 
15685                 l_calculated_raw_cost        := l_txn_raw_cost_tbl(i);
15686                 l_calculated_burdened_cost   := l_txn_burdened_cost_tbl(i);
15687                 l_calculated_revenue         := l_txn_revenue_tbl(i);
15688 
15689                 --Initialize the three override values to null. These would be appropriately set to new derived values depending on
15690                 -- the context.
15691                 l_rw_cost_rate_override_tbl(i) := null;
15692                 l_burden_cst_rate_override_tbl(i) := null;
15693                 l_bill_rate_override_tbl(i) := null;
15694 
15695 
15696                 -- Bug 4588279, 27-SEP-05, jwhite ---------------------
15697                 -- For Update-Mode, Budget-Type-Code and Budgetary Control, issue error for any period record that
15698                 -- falls after the latest encumbrance year.
15699                 --
15700                 -- Implicit Assumptions in following code:
15701                 -- 1) If ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99), then
15702                 --     this is Update-Mode, Budget-Type-Code and Budgetary Control data.
15703                 -- 2) Budgetary control is ONLY for GL periods.
15704                 --
15705 
15706                 -- Initialize Period Year Variable
15707                 l_period_year := NULL;
15708 
15709 
15710                 IF ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99)
15711                    THEN
15712                    -- Budgetary Control Enabled Budget-Type-Code and Update_Mode
15713 
15714                    -- Fetch Period Year for budget LINE Period Name
15715                    OPEN l_budget_periods_csr( l_period_name_tbl(i),'G');
15716 
15717                    FETCH l_budget_periods_csr INTO l_period_year;
15718 
15719                    CLOSE l_budget_periods_csr;
15720 
15721                    -- Test Business Rule
15722                    IF ( l_period_year > PA_BUDGET_PUB.G_Latest_Encumbrance_Year )
15723                      THEN
15724                           pa_utils.add_message
15725                                     ( p_app_short_name  => 'PA'
15726                                       , p_msg_name        => 'PA_BC_ENC_YR_NO_CHG_FUTURE');
15727                           p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
15728                           p_multiple_task_msg   := 'F';
15729                      END IF;
15730 
15731                 END IF;
15732 
15733                 -- End Bug 4588279, 27-SEP-05, jwhite ------------------
15734 
15735 
15736                 --if plan type is FORECAST and for such a forecast version if the ETC start date is greater than start date for
15737                 --any of the budget lines then dont call the extension for these lines. For these lines report the amounts
15738                 -- as such without calling client extesion on these. For other lines for this version we can
15739                 --call the client extensions.
15740                 --Also for a forecast version with ETC start date greater than budget line start date, if time phasing for the
15741                 --forecast version is none then call client extension for such lines.
15742 
15743                 if ( not(budget_version_info_rec.plan_class_code = 'FORECAST' and
15744                          budget_version_info_rec.etc_start_date is not null and   --Added this null check for Bug 3636409
15745                          budget_version_info_rec.etc_start_date > l_start_date_tbl(i) and
15746                          l_time_phased_code is not null and
15747                          l_time_phased_code <> 'N')
15748                      or
15749                      l_context = l_context_budget )
15750                 then
15751                 IF (p_calc_raw_cost_yn = 'Y'   AND
15752                     l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
15753                 THEN   -- calculate raw cost
15754 
15755                    Pa_client_Extn_Budget.Calc_Raw_Cost
15756                        (x_budget_version_id         => l_budget_version_id,
15757                         x_project_id                => l_project_id,
15758                         x_task_id                   => l_task_id_tbl(i),
15759                         x_resource_list_member_id   => l_resource_list_member_id_tbl(i),
15760                         x_resource_list_id          => l_resource_list_id_tbl(i),
15761                         x_resource_id               => l_resource_id_tbl(i),
15762                         x_start_date                => l_start_date_tbl(i),
15763                         x_end_date                  => l_end_date_tbl(i),
15764                         x_period_name               => l_period_name_tbl(i),
15765                         x_quantity                  => l_quantity_tbl(i),
15766                         x_raw_cost                  => l_calculated_raw_cost,
15767                         x_pm_product_code           => p_pm_product_code,
15768                         x_error_code                => l_err_code,
15769                         x_error_message             => l_err_message,
15770                         --Added the parameter as part of changes to AMG due to finplan model
15771                         x_txn_currency_code         => l_txn_currency_code_tbl(i));
15772 
15773                    IF l_err_code > 0
15774                    THEN
15775 
15776                        IF l_context = l_context_budget
15777                        THEN
15778                             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15779                             THEN
15780 
15781                                 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
15782                                 THEN
15783                                     pa_interface_utils_pub.map_new_amg_msg
15784                                     ( p_old_message_code => 'PA_CALC_RAW_COST_FAILED'
15785                                      ,p_msg_attribute    => 'CHANGE'
15786                                      ,p_resize_flag      => 'N'
15787                                      ,p_msg_context      => 'BUDG'
15788                                      ,p_attribute1       => l_amg_project_rec.segment1
15789                                      ,p_attribute2       => ''
15790                                      ,p_attribute3       => p_budget_type_code
15791                                      ,p_attribute4       => ''
15792                                      ,p_attribute5       => '');
15793                                 ELSE
15794                                     pa_interface_utils_pub.map_new_amg_msg
15795                                     ( p_old_message_code => l_err_stage
15796                                      ,p_msg_attribute    => 'CHANGE'
15797                                      ,p_resize_flag      => 'N'
15798                                      ,p_msg_context      => 'BUDG'
15799                                      ,p_attribute1       => l_amg_project_rec.segment1
15800                                      ,p_attribute2       => ''
15801                                      ,p_attribute3       => p_budget_type_code
15802                                      ,p_attribute4       => ''
15803                                      ,p_attribute5       => '');
15804                                 END IF;
15805 
15806                             END IF;
15807                        ELSE
15808                             PA_UTILS.ADD_MESSAGE(
15809                                    p_app_short_name  => 'PA'
15810                                   ,p_msg_name        => 'PA_FP_CALC_RAW_COST_FAILED'
15811                                   ,p_token1          => 'PROJECT'
15812                                   ,p_value1          => l_amg_project_rec.segment1
15813                                   ,p_token2          => 'TASK'
15814                                   ,p_value2          => l_task_name
15815                                   ,p_token3          => 'PLAN_TYPE'
15816                                   ,p_value3          => l_fin_plan_type_name
15817                                   ,p_token4          => 'SOURCE_NAME'
15818                                   ,p_value4          => l_resource_name_tbl(i)
15819                                   ,p_token5          => 'START_DATE'
15820                                   ,p_value5          => l_start_date_tbl(i)
15821                                   );
15822                        END IF;
15823 
15824                        p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
15825                        p_multiple_task_msg   := 'F';
15826                        --  RAISE FND_API.G_EXC_ERROR;
15827 
15828                    ELSIF l_err_code < 0
15829                    THEN
15830 
15831                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
15832                         THEN
15833 
15834                             FND_MSG_PUB.add_exc_msg
15835                                 (  p_pkg_name       => 'PA_CLIENT_EXTN_BUDGET'
15836                                 ,  p_procedure_name => 'CALC_RAW_COST'
15837                                 ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
15838 
15839                         END IF;
15840 
15841                         p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
15842                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15843 
15844                    END IF;
15845 
15846                             /* if the Client extn amounts override the rate api derived amounts
15847                              * then re-derive the override rates. This should be done only for finplan model
15848                              */
15849                     if l_fin_plan_type_id is not null then
15850                             IF l_version_type in ('ALL','COST') Then
15851                                 If l_rate_based_flag_tbl(i) = 'N' Then
15852                                         If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
15853                                            l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
15854                                                 l_quantity_tbl(i) := l_calculated_raw_cost;
15855                                                 l_display_quantity_tbl(i) := null;  --IPM Arch Enhancements Bug 4865563
15856                                                 l_rw_cost_rate_override_tbl(i) := 1;
15857                                                 /* change in raw cost changes the burden cost rate */
15858                                                 If (nvl(l_quantity_tbl(i),0) <> 0 AND nvl(l_quantity_tbl(i),0) <>
15859                                                       nvl(p_calc_budget_lines_out(l_line_ctr).quantity,0)) Then
15860                                                    l_burden_cst_rate_override_tbl(i) := l_txn_burdened_cost_tbl(i)/l_quantity_tbl(i);
15861                                                 End if;
15862                                                 /* change in the quantity changes the bill rate */
15863                                                 If l_version_type = 'ALL' Then
15864                                                       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
15865                                                             l_bill_rate_override_tbl(i) := l_txn_revenue_tbl(i)/l_quantity_tbl(i);
15866                                                       End If;
15867                                           End If;
15868                                         End If;
15869                                 Else
15870                                         If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
15871                                  l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
15872                                            If nvl(l_quantity_tbl(i),0) <> 0 Then
15873                                            --Bug 5006031 Issue 8
15874                                                  If l_calculated_raw_cost = 0 OR l_calculated_raw_cost IS NULL then
15875                                                    l_rw_cost_rate_override_tbl(i) := 0;
15876                                                  Else
15877                                                 l_rw_cost_rate_override_tbl(i) := l_calculated_raw_cost/l_quantity_tbl(i);
15878                                                  End If;
15879                                            End If;
15880                                         End If;
15881                                 End If;
15882                             End If;
15883                     end if; --l_fin_plan_type_id is not null
15884                 END IF;
15885 
15886                 IF (p_calc_burdened_cost_yn = 'Y'   AND
15887                     l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
15888                 THEN
15889 
15890                      -- calculate burdened cost. Note that calculated_raw_cost is being
15891                      -- used as the parameter,in case both p_calc_raw_cost_yn and
15892                      -- p_calc_burdened_cost_yn are both set to 'Y'.Calculated_raw_cost
15893                      -- would either hold the newly calculated value or the value from
15894                      -- the database,depending on the value of p_calc_raw_cost_yn flag.
15895 
15896                      Pa_client_Extn_Budget.Calc_burdened_Cost
15897                           ( x_budget_version_id         => l_budget_version_id
15898                            ,x_project_id                => l_project_id
15899                            ,x_task_id                   => l_task_id_tbl(i)
15900                            ,x_resource_list_member_id   => l_resource_list_member_id_tbl(i)
15901                            ,x_resource_list_id          => l_resource_list_id_tbl(i)
15902                            ,x_resource_id               => l_resource_id_tbl(i)
15903                            ,x_start_date                => l_start_date_tbl(i)
15904                            ,x_end_date                  => l_end_date_tbl(i)
15905                            ,x_period_name               => l_period_name_tbl(i)
15906                            ,x_quantity                  => l_quantity_tbl(i)
15907                            ,x_raw_cost                  => l_calculated_raw_cost
15908                            ,x_burdened_cost             => l_calculated_burdened_cost
15909                            ,x_pm_product_code           => p_pm_product_code
15910                            ,x_error_code                => l_err_code
15911                            ,x_error_message             => l_err_message
15912                            --Added the parameter as part of changes to AMG due to finplan model
15913                            ,x_txn_currency_code         => l_txn_currency_code_tbl(i));
15914 
15915                      IF l_err_code > 0
15916                      THEN
15917 
15918                           IF l_context = l_context_budget
15919                           THEN
15920                                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15921                                THEN
15922 
15923                                     IF NOT pa_project_pvt.check_valid_message(l_err_stage)
15924                                     THEN
15925                                         pa_interface_utils_pub.map_new_amg_msg
15926                                         ( p_old_message_code => 'PA_CALC_BURDENED_COST_FAILED'
15927                                          ,p_msg_attribute    => 'CHANGE'
15928                                          ,p_resize_flag      => 'Y'
15929                                          ,p_msg_context      => 'BUDG'
15930                                          ,p_attribute1       => l_amg_project_rec.segment1
15931                                          ,p_attribute2       => ''
15932                                          ,p_attribute3       => p_budget_type_code
15933                                          ,p_attribute4       => ''
15934                                          ,p_attribute5       => '');
15935                                     ELSE
15936                                         pa_interface_utils_pub.map_new_amg_msg
15937                                         ( p_old_message_code => l_err_stage
15938                                          ,p_msg_attribute    => 'CHANGE'
15939                                          ,p_resize_flag      => 'Y'
15940                                          ,p_msg_context      => 'BUDG'
15941                                          ,p_attribute1       => l_amg_project_rec.segment1
15942                                          ,p_attribute2       => ''
15943                                          ,p_attribute3       => p_budget_type_code
15944                                          ,p_attribute4       => ''
15945                                          ,p_attribute5       => '');
15946                                     END IF;
15947 
15948                                END IF;
15949                           ELSE
15950                                PA_UTILS.ADD_MESSAGE(
15951                                       p_app_short_name  => 'PA'
15952                                      ,p_msg_name        => 'PA_FP_CALC_BURD_COST_FAILED'
15953                                      ,p_token1          => 'PROJECT'
15954                                      ,p_value1          => l_amg_project_rec.segment1
15955                                      ,p_token2          => 'TASK'
15956                                      ,p_value2          => l_task_name
15957                                      ,p_token3          => 'PLAN_TYPE'
15958                                      ,p_value3          => l_fin_plan_type_name
15959                                      ,p_token4          => 'SOURCE_NAME'
15960                                      ,p_value4          => l_resource_name_tbl(i)
15961                                      ,p_token5          => 'START_DATE'
15962                                      ,p_value5          => l_start_date_tbl(i)
15963                                      );
15964                           END IF;
15965 
15966                           p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
15967                           p_multiple_task_msg   := 'F';
15968                           --   RAISE FND_API.G_EXC_ERROR;
15969 
15970                      ELSIF l_err_code < 0
15971                      THEN
15972 
15973                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
15974                            THEN
15975 
15976                                FND_MSG_PUB.add_exc_msg
15977                                    (  p_pkg_name       => 'PA_CLIENT_EXTN_BUDGET'
15978                                    ,  p_procedure_name => 'CALC_BURDENED_COST'
15979                                    ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
15980 
15981                            END IF;
15982 
15983                            p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
15984                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15985 
15986                      END IF;
15987 
15988                            /* re derive the burden cost rate override after calling the client extn  Do it only for finplan model*/
15989                     if l_fin_plan_type_id is not null then
15990                            IF l_version_type in ('ALL','COST') Then
15991                                If NVl(l_calculated_burdened_cost,0) <> NVl(l_txn_burdened_cost_tbl(i),0) Then
15992                                          l_calculated_burdened_cost := pa_currency.round_trans_currency_amt1(l_calculated_burdened_cost,l_txn_currency_code_tbl(i));
15993                                        If nvl(l_quantity_tbl(i),0) <> 0 Then
15994                                        --Bug 5006031 Issue 8
15995                                             If l_rate_based_flag_tbl(i) = 'Y' Then
15996                                                  If l_calculated_burdened_cost = 0 OR l_calculated_burdened_cost IS NULL then
15997                                                    l_burden_cst_rate_override_tbl(i) := 0;
15998                                                  Else
15999                                               l_burden_cst_rate_override_tbl(i) := l_calculated_burdened_cost/l_quantity_tbl(i);
16000                                               End If;
16001                                             End If;
16002                                          --l_display_quantity_tbl(i) := l_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16003                                        End if;
16004                                End if;
16005                            END IF;
16006                    end if; --if l_fin_plan_type_id is not null
16007                 END IF;
16008 
16009                 IF  (p_calc_revenue_yn = 'Y'   AND
16010                      l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
16011                 THEN
16012 
16013                      Pa_client_Extn_Budget.Calc_revenue
16014                          ( x_budget_version_id         => l_budget_version_id
16015                           ,x_project_id                => l_project_id
16016                           ,x_task_id                   => l_task_id_tbl(i)
16017                           ,x_resource_list_member_id   => l_resource_list_member_id_tbl(i)
16018                           ,x_resource_list_id          => l_resource_list_id_tbl(i)
16019                           ,x_resource_id               => l_resource_id_tbl(i)
16020                           ,x_start_date                => l_start_date_tbl(i)
16021                           ,x_end_date                  => l_end_date_tbl(i)
16022                           ,x_period_name               => l_period_name_tbl(i)
16023                           ,x_quantity                  => l_quantity_tbl(i)
16024                           ,x_revenue                   => l_calculated_revenue
16025                           ,x_pm_product_code           => p_pm_product_code
16026                           ,x_error_code                => l_err_code
16027                           ,x_error_message             => l_err_message
16028                           --Added the parameter as part of changes to AMG due to finplan model
16029                           ,x_txn_currency_code         => l_txn_currency_code_tbl(i));
16030 
16031 
16032                       IF l_err_code > 0
16033                       THEN
16034 
16035                           IF l_context = l_context_budget
16036                           THEN
16037                                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16038                                THEN
16039 
16040                                    IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16041                                    THEN
16042                                        pa_interface_utils_pub.map_new_amg_msg
16043                                        ( p_old_message_code => 'PA_CALC_REVENUE_FAILED'
16044                                         ,p_msg_attribute    => 'CHANGE'
16045                                         ,p_resize_flag      => 'N'
16046                                         ,p_msg_context      => 'BUDG'
16047                                         ,p_attribute1       => l_amg_project_rec.segment1
16048                                         ,p_attribute2       => ''
16049                                         ,p_attribute3       => p_budget_type_code
16050                                         ,p_attribute4       => ''
16051                                         ,p_attribute5       => '');
16052                                    ELSE
16053                                        pa_interface_utils_pub.map_new_amg_msg
16054                                        ( p_old_message_code => l_err_stage
16055                                         ,p_msg_attribute    => 'CHANGE'
16056                                         ,p_resize_flag      => 'N'
16057                                         ,p_msg_context      => 'BUDG'
16058                                         ,p_attribute1       => l_amg_project_rec.segment1
16059                                         ,p_attribute2       => ''
16060                                         ,p_attribute3       => p_budget_type_code
16061                                         ,p_attribute4       => ''
16062                                         ,p_attribute5       => '');
16063                                    END IF;
16064 
16065                                END IF;
16066                           ELSE
16067                                PA_UTILS.ADD_MESSAGE(
16068                                       p_app_short_name  => 'PA'
16069                                      ,p_msg_name        => 'PA_FP_CALC_REVENUE_FAILED'
16070                                      ,p_token1          => 'PROJECT'
16071                                      ,p_value1          => l_amg_project_rec.segment1
16072                                      ,p_token2          => 'TASK'
16073                                      ,p_value2          => l_task_name
16074                                      ,p_token3          => 'PLAN_TYPE'
16075                                      ,p_value3          => l_fin_plan_type_name
16076                                      ,p_token4          => 'SOURCE_NAME'
16077                                      ,p_value4          => l_resource_name_tbl(i)
16078                                      ,p_token5          => 'START_DATE'
16079                                      ,p_value5          => l_start_date_tbl(i)
16080                                      );
16081                           END IF;
16082 
16083                           p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
16084                           p_multiple_task_msg   := 'F';
16085                           --  RAISE FND_API.G_EXC_ERROR;
16086 
16087                       ELSIF l_err_code < 0
16088                       THEN
16089 
16090                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16091                            THEN
16092 
16093                                FND_MSG_PUB.add_exc_msg
16094                                    (  p_pkg_name       => 'PA_CLIENT_EXTN_BUDGET'
16095                                    ,  p_procedure_name => 'CALC_REVENUE'
16096                                    ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16097 
16098                            END IF;
16099 
16100                            p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
16101                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16102 
16103                       END IF;
16104 
16105                      /* rederive the override rates */
16106                     if l_fin_plan_type_id is not null then
16107                            If l_version_type in ('ALL','REVENUE') Then
16108                                 If l_rate_based_flag_tbl(i) = 'N' Then
16109                                         If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16110                                  l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue, l_txn_currency_code_tbl(i));
16111                                            If l_version_type = 'REVENUE' Then
16112                                                 l_quantity_tbl(i) := l_calculated_revenue;
16113                                                 l_display_quantity_tbl(i) := null;  --IPM Arch Enhancements Bug 4865563
16114                                     l_bill_rate_override_tbl(i) := 1;
16115                                            Else
16116                                                 If nvl(l_quantity_tbl(i),0) <> 0 Then
16117                                                    l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16118                                                 End If;
16119                                            End If;
16120                                         End If;
16121                                 Else
16122                                         If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16123                                  l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue,l_txn_currency_code_tbl(i));
16124                                            If nvl(l_quantity_tbl(i),0) <> 0 Then
16125                                             --Bug 5006031 Issue 8
16126                                                  If l_calculated_revenue = 0 OR l_calculated_revenue IS NULL then
16127                                                    l_bill_rate_override_tbl(i) := 0;
16128                                                  Else
16129                                                 l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16130                                                  End If;
16131                                            End If;
16132                                         End If;
16133                                 End If;
16134                            End If;
16135                     end if;  --  if l_fin_plan_type_id is not null
16136                  END IF;
16137                 /* Bug 5006031 Issue 8 Start - In IPM, RC drives BC and Rev for amount based transactions
16138                    So, RC cannot be null. BC is copied into RC if RC is null and BC not null.*/
16139             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 )
16140             AND (l_calculated_burdened_cost IS NOT NULL OR l_calculated_burdened_cost <> 0)) --IPM Arch Enhancments Bug 4865563
16141             THEN
16142                 IF  (l_txn_raw_cost_tbl(i) is null) then
16143                     l_calculated_raw_cost := l_calculated_burdened_cost;
16144                             IF(l_debug_mode='Y') THEN
16145                                 pa_debug.g_err_stage := 'Assigning BC to RC. When BC is entered by the user, BC is copied to RC ';
16146                                 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16147                             END IF;
16148                  Elsif l_txn_raw_cost_tbl(i) is not null THEN
16149                      l_calculated_burdened_cost := null;
16150                      l_calculated_revenue       := null;
16151                            IF(l_debug_mode='Y') THEN
16152                                pa_debug.g_err_stage := 'When existing RC is nulled out, BC and Rev are also nulled out';
16153                                pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16154                             END IF;
16155                   End IF;
16156                 END IF;
16157                 /* Bug 5006031 Issue 8 End */
16158                 else ----if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16159                           l_bdgt_lines_skip_flag := 'Y';
16160                 end if; --if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16161 
16162 
16163                  -- Populate the budget lines out table with the calculated amounts.
16164 
16165                  p_calc_budget_lines_out(l_line_ctr).quantity                 := l_quantity_tbl(i);
16166                  p_calc_budget_lines_out(l_line_ctr).display_quantity         := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16167                  p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost      := l_calculated_raw_cost;
16168                  p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_calculated_burdened_cost;
16169                  p_calc_budget_lines_out(l_line_ctr).calculated_revenue       := l_calculated_revenue;
16170 
16171                  -- PC and PFC amounts would be populated only if update_flag = 'Y'
16172                  p_calc_budget_lines_out(l_line_ctr).project_raw_cost         := NULL;
16173                  p_calc_budget_lines_out(l_line_ctr).project_burdened_cost    := NULL;
16174                  p_calc_budget_lines_out(l_line_ctr).project_revenue          := NULL;
16175                  p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost        := NULL;
16176                  p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost   := NULL;
16177                  p_calc_budget_lines_out(l_line_ctr).projfunc_revenue         := NULL;
16178 
16179                  -- Raw_cost, Burdened_cost, Revnue Pl/sql tables should be updated with the calculated amounts
16180                  -- to enable mass update out of the pl/sql loop
16181 
16182                  l_txn_raw_cost_tbl(i)          :=   l_calculated_raw_cost;
16183                  l_txn_burdened_cost_tbl(i)     :=   l_calculated_burdened_cost;
16184                  l_txn_revenue_tbl(i)           :=   l_calculated_revenue;
16185 
16186            END LOOP; -- PL/SQL Table loop
16187 
16188            -- Bulk update the budget lines if update flag is set.
16189 
16190            IF p_update_db_flag = 'Y' THEN
16191              IF p_multiple_task_msg <> 'F' THEN
16192                IF l_context = l_context_budget
16193                THEN
16194                     FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16195                     UPDATE    pa_budget_lines
16196                     SET       raw_cost             =    l_txn_raw_cost_tbl(i),
16197                               burdened_cost        =    l_txn_burdened_cost_tbl(i),
16198                               revenue              =    l_txn_revenue_tbl(i),
16199                               last_update_date     =    SYSDATE,
16200                               last_updated_by      =    G_USER_ID,
16201                               last_update_login    =    G_LOGIN_ID
16202                     WHERE     rowid                =    l_rowid_tbl(i);
16203                ELSE
16204                     FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16205                     UPDATE    pa_budget_lines
16206                     SET       quantity                  =    l_quantity_tbl(i),
16207                               display_quantity          =    l_display_quantity_tbl(i), --IPM Arch Enhancements Bug 4865563
16208                               txn_raw_cost              =    l_txn_raw_cost_tbl(i),
16209                               txn_burdened_cost         =    l_txn_burdened_cost_tbl(i),
16210                               txn_revenue               =    l_txn_revenue_tbl(i),
16211                               txn_cost_rate_override    =    decode(l_rw_cost_rate_override_tbl(i), null, txn_cost_rate_override,
16212                                                                     l_rw_cost_rate_override_tbl(i)),
16213                               burden_cost_rate_override =    decode(l_burden_cst_rate_override_tbl(i), null, burden_cost_rate_override,
16214                                                                     l_burden_cst_rate_override_tbl(i)),
16215                               txn_bill_rate_override    =    decode (l_bill_rate_override_tbl(i), null, txn_bill_rate_override,
16216                                                                      l_bill_rate_override_tbl(i)),
16217                               last_update_date          =    SYSDATE,
16218                               last_updated_by           =    G_USER_ID,
16219                               last_update_login         =    G_LOGIN_ID
16220                     WHERE     rowid                     =    l_rowid_tbl(i);
16221                END IF;
16222              END IF;
16223            END IF;
16224          END IF; -- if any records are fetched
16225 
16226          EXIT WHEN nvl(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16227     END LOOP;
16228     CLOSE l_resource_assignment_csr;
16229 
16230     IF p_multiple_task_msg = 'F'
16231     THEN
16232        RAISE  FND_API.G_EXC_ERROR;
16233     END IF;
16234 
16235     IF p_update_db_flag = 'Y' THEN
16236 
16237          IF l_context = l_context_budget THEN --Bug 2863564
16238 
16239               -- Bug 2863564
16240               -- Call to MRC apis should be done only in case of old 'BUDGETS' model
16241               -- for NEW Financial Planning Model, this would be taken care by
16242               -- the api pa_fp_edit_line_pkg. PROCESS_BDGTLINES_FOR_VERSION
16243 
16244               -- Bug Fix: 4569365. Removed MRC code.
16245               /*
16246               IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL
16247               THEN
16248                      PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16249                                (x_return_status => p_return_status,
16250                                 x_msg_count     => p_msg_count,
16251                                 x_msg_data      => p_msg_data);
16252               END IF;
16253 
16254               IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16255                  PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A'
16256               THEN
16257                    PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16258                          ( p_fin_plan_version_id    =>     l_budget_version_id
16259                           ,p_entire_version         =>     'Y'
16260                           ,x_return_status          =>     p_return_status
16261                           ,x_msg_count              =>     p_msg_count
16262                           ,x_msg_data               =>     p_msg_data);
16263               END IF;
16264 
16265               IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16266                 IF(l_debug_mode='Y') THEN
16267                       pa_debug.g_err_stage := 'MRC failed';
16268                       pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16269                 END IF;
16270                 RAISE FND_API.G_EXC_ERROR;
16271               END IF;
16272               */
16273               --Summarizing the totals in the table pa_budget_versions
16274 
16275               PA_BUDGET_UTILS.summerize_project_totals
16276                        (x_budget_version_id  =>  l_budget_version_id,
16277                         x_err_code           =>  l_err_code,
16278                         x_err_stage          =>  l_err_stage,
16279                         x_err_stack          =>  l_err_stack);
16280 
16281               IF l_err_code > 0
16282               THEN
16283 
16284                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16285                    THEN
16286 
16287                        IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16288                        THEN
16289                            pa_interface_utils_pub.map_new_amg_msg
16290                            ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
16291                             ,p_msg_attribute    => 'CHANGE'
16292                             ,p_resize_flag      => 'N'
16293                             ,p_msg_context      => 'BUDG'
16294                             ,p_attribute1       => l_amg_project_rec.segment1
16295                             ,p_attribute2       => ''
16296                             ,p_attribute3       => p_budget_type_code
16297                             ,p_attribute4       => ''
16298                             ,p_attribute5       => '');
16299                        ELSE
16300                            pa_interface_utils_pub.map_new_amg_msg
16301                            ( p_old_message_code => l_err_stage
16302                             ,p_msg_attribute    => 'CHANGE'
16303                             ,p_resize_flag      => 'N'
16304                             ,p_msg_context      => 'BUDG'
16305                             ,p_attribute1       => l_amg_project_rec.segment1
16306                             ,p_attribute2       => ''
16307                             ,p_attribute3       => p_budget_type_code
16308                             ,p_attribute4       => ''
16309                             ,p_attribute5       => '');
16310                        END IF;
16311 
16312                    END IF;
16313 
16314                    IF(l_debug_mode='Y') THEN
16315                          pa_debug.g_err_stage := 'summerize_project_totals api failed';
16316                          pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16317                    END IF;
16318 
16319                    RAISE FND_API.G_EXC_ERROR;
16320 
16321               ELSIF l_err_code < 0
16322               THEN
16323 
16324                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16325                   THEN
16326 
16327                       FND_MSG_PUB.add_exc_msg
16328                           (  p_pkg_name       => 'PA_BUDGET_UTILS'
16329                           ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
16330                           ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16331 
16332                   END IF;
16333 
16334                   IF(l_debug_mode='Y') THEN
16335                         pa_debug.g_err_stage := 'summerize_project_totals api failed with unexpected error ';
16336                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16337                   END IF;
16338                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16339 
16340               END IF;
16341 
16342          ELSIF l_context = l_context_finplan THEN
16343 
16344              -- Bug 2863564
16345              -- Call 'PROCESS_BDGTLINES_FOR_VERSION' api
16346              -- This api does the final processing of budget lines data for a budget version.
16347              -- It includes computing the MC amounts, creating MRC lines if required and
16348              -- rolling up budget lines data, resource_assignments data and period denorm data.
16349 
16350 /*             PA_FP_EDIT_LINE_PKG.PROCESS_BDGTLINES_FOR_VERSION
16351                 (  p_budget_version_id     =>  l_budget_version_id
16352                   ,p_calling_context       =>  PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
16353                   ,x_return_status         =>  p_return_status
16354                   ,x_msg_count             =>  p_msg_count
16355                   ,x_msg_data              =>  p_msg_data );
16356 
16357              IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
16358                   -- Error message is not added here as the api lock_unlock_version
16359                   -- adds the message to stack
16360                   IF(l_debug_mode='Y') THEN
16361                         pa_debug.g_err_stage := 'Failed in locking the version';
16362                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16363                   END IF;
16364                   RAISE FND_API.G_EXC_ERROR;
16365              END IF;*/
16366 
16367      /* Call PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY for the MC conversions. */
16368 
16369 
16370         PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY
16371                     ( p_budget_version_id  => l_budget_version_id
16372                      ,p_entire_version     => 'Y'
16373                      ,x_return_status      => p_return_status
16374                      ,x_msg_count          => p_msg_count
16375                      ,x_msg_data           => p_msg_data);
16376 
16377         IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16378            IF l_debug_mode = 'Y' THEN
16379                pa_debug.g_err_stage := 'Call to PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY errored... ';
16380                pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16381            END IF;
16382            RAISE FND_API.G_EXC_ERROR;
16383         END IF;
16384 
16385         --IPM Architecture Enhancement - Start
16386 
16387         PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS
16388                                    (P_BUDGET_VERSION_ID              => l_budget_version_id,
16389                                     X_FP_COLS_REC                    => l_fp_cols_rec,
16390                                     X_RETURN_STATUS                  => p_return_status,
16391                                     X_MSG_COUNT                      => p_msg_count,
16392                                     X_MSG_DATA                       => p_msg_data);
16393 
16394         IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
16395                      IF l_debug_mode = 'Y' THEN
16396                                pa_debug.g_err_stage:= 'Error in PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DETAILS';
16397                                 pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16398                      END IF;
16399                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16400         END IF;
16401 
16402         pa_res_asg_currency_pub.maintain_data
16403            (p_fp_cols_rec           => l_fp_cols_rec,
16404             p_calling_module        => 'AMG_API',
16405             p_rollup_flag           => 'Y',
16406             p_version_level_flag    => 'Y',
16407             x_return_status         => p_return_status,
16408             x_msg_data              => p_msg_data,
16409             x_msg_count             => p_msg_count );
16410 
16411         IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
16412                     IF l_debug_mode = 'Y' THEN
16413                          pa_debug.g_err_stage:= 'Error in PA_RES_ASG_CURRENCY_PUB.MAINTAIN_DATA';
16414                          pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16415                      END IF;
16416                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16417          END IF;
16418 
16419          --IPM Architecture Enhancement - End
16420 
16421       /* Call the rollup API to rollup the amounts. */
16422       PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION(
16423                  p_budget_version_id => l_budget_version_id
16424                 ,p_entire_version    => 'Y'
16425                 ,x_return_status     => p_return_status
16426                 ,x_msg_count         => p_msg_count
16427                 ,x_msg_data          => p_msg_data    ) ;
16428 
16429 
16430      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16431          IF l_debug_mode = 'Y' THEN
16432              pa_debug.g_err_stage := 'Call to PA_FP_ROLLUP_PKG errored... ';
16433              pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16434          END IF;
16435          RAISE FND_API.G_EXC_ERROR;
16436      END IF;
16437      -- Bug Fix: 4569365. Removed MRC code.
16438      /* Check if MRC is enabled and Call MRC API */
16439      /*
16440      IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL THEN
16441         PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16442                    (x_return_status      => p_return_status,
16443                     x_msg_count          => p_msg_count,
16444                     x_msg_data           => p_msg_data);
16445      END IF;
16446 
16447       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16448           IF l_debug_mode = 'Y' THEN
16449              pa_debug.g_err_stage := 'Unexpected exception in checking MRC Install '||sqlerrm;
16450              pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16451           END IF;
16452           RAISE FND_API.G_EXC_ERROR;
16453       END IF;
16454 
16455       IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16456          PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
16457 
16458          PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16459                 (p_fin_plan_version_id => l_budget_version_id,
16460                  p_entire_version      => 'Y',
16461                  x_return_status       => p_return_status,
16462                  x_msg_count           => p_msg_count,
16463                  x_msg_data            => p_msg_data);
16464       END IF;
16465 
16466       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16467           IF l_debug_mode = 'Y' THEN
16468              pa_debug.g_err_stage := 'Unexpected exception in MRC API '||sqlerrm;
16469              pa_debug.write('Calculate_Amounts: ' || l_module_name,pa_debug.g_err_stage,l_debug_level5);
16470           END IF;
16471           RAISE FND_API.G_EXC_ERROR;
16472       END IF;
16473       */
16474 
16475          -- populating the l_budget_version_id_tbl with p_budget_version_id
16476          l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(l_budget_version_id);
16477 
16478          -- Call PJI delete api first to delete existing summarization data
16479          PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
16480                  p_fp_version_ids   => l_budget_version_id_tbl,
16481                  x_return_status    => p_return_status,
16482                  x_msg_code         => p_msg_data);
16483 
16484          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16485                PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
16486                                     p_msg_name            => p_msg_data);
16487                RAISE FND_API.G_EXC_ERROR;
16488          END IF;
16489 
16490          -- Call PLAN_CREATE to create summarization data as per the new RBS
16491          PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
16492                p_fp_version_ids   => l_budget_version_id_tbl,
16493                x_return_status    => p_return_status,
16494                x_msg_code         => p_msg_data);
16495 
16496          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16497                PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
16498                                     p_msg_name            => p_msg_data);
16499                RAISE FND_API.G_EXC_ERROR;
16500          END IF;
16501 
16502 
16503              -- Bug 2863564 We need to unlock the version
16504 
16505              -- Fetch the record version number of the plan version
16506              l_record_version_number :=
16507                       PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
16508 
16509              PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
16510                   ( p_budget_version_id       => l_budget_version_id
16511                    ,p_record_version_number   => l_record_version_number
16512                    ,p_action                  => 'U'
16513                    ,p_user_id                 => FND_GLOBAL.User_id
16514                    ,p_person_id               => NULL
16515                    ,x_return_status           => p_return_status
16516                    ,x_msg_count               => p_msg_count
16517                    ,x_msg_data                => p_msg_data);
16518 
16519              IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
16520                   -- Error message is not added here as the api lock_unlock_version
16521                   -- adds the message to stack
16522                   IF(l_debug_mode='Y') THEN
16523                         pa_debug.g_err_stage := 'Failed in Unlocking the version';
16524                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16525                   END IF;
16526                   RAISE FND_API.G_EXC_ERROR;
16527              END IF;
16528 
16529              -- We need to populate the PC, PFC amounts also in the OUT table
16530              -- in the context of new budgets model. So, open the
16531              -- resource_assignments_cur and repopulate the complete data.
16532              -- NOTE: If there had been any error in the calculation of amounts
16533              -- by the client extension apis, error would have been raised by now
16534              -- Since the program execution has come till here, we can populate
16535              -- return status success for each budget line fetched.
16536 
16537              -- Delete the existing data
16538              p_calc_budget_lines_out.delete;
16539 
16540              -- Intialise l_line_ctr to zero once again
16541              l_line_ctr := 0;
16542 
16543              OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
16544              LOOP
16545 
16546                   FETCH l_resource_assignment_csr BULK COLLECT INTO
16547                       l_rowid_tbl
16548                      ,l_budget_line_id_tbl
16549                      ,l_txn_currency_code_tbl
16550                      ,l_res_assignment_id_tbl
16551                      ,l_task_id_tbl
16552                      ,l_rate_based_flag_tbl
16553                      ,l_resource_list_id_tbl
16554                      ,l_resource_list_member_id_tbl
16555                      ,l_resource_id_tbl
16556                      ,l_resource_name_tbl
16557                      ,l_start_date_tbl
16558                      ,l_end_date_tbl
16559                      ,l_period_name_tbl
16560                      ,l_quantity_tbl
16561                      ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
16562                      ,l_txn_raw_cost_tbl
16563                      ,l_txn_burdened_cost_tbl
16564                      ,l_txn_revenue_tbl
16565                      ,l_project_raw_cost_tbl
16566                      ,l_project_burdened_cost_tbl
16567                      ,l_project_revenue_tbl
16568                      ,l_projfunc_raw_cost_tbl
16569                      ,l_projfunc_burdened_cost_tbl
16570                      ,l_projfunc_revenue_tbl
16571                   LIMIT l_plsql_max_array_size;
16572 
16573                   IF(l_debug_mode='Y') THEN
16574                         pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
16575                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16576                   END IF;
16577 
16578                   IF  NVL(l_rowid_tbl.last,0) >= 1 THEN
16579                      FOR  i IN l_rowid_tbl.first .. l_rowid_tbl.last
16580                      LOOP
16581 
16582                           l_line_ctr := l_line_ctr + 1;
16583 
16584                           p_calc_budget_lines_out(l_line_ctr).pa_task_id               := l_task_id_tbl(i);
16585                           p_calc_budget_lines_out(l_line_ctr).pm_task_reference        := l_pm_task_reference;
16586                           p_calc_budget_lines_out(l_line_ctr).resource_alias           := l_resource_name_tbl(i);
16587                           p_calc_budget_lines_out(l_line_ctr).resource_list_member_id  := l_resource_list_member_id_tbl(i);
16588                           p_calc_budget_lines_out(l_line_ctr).budget_start_date        := l_start_date_tbl(i);
16589                           p_calc_budget_lines_out(l_line_ctr).budget_end_date          := l_end_date_tbl(i);
16590                           p_calc_budget_lines_out(l_line_ctr).period_name              := l_period_name_tbl(i);
16591                           p_calc_budget_lines_out(l_line_ctr).quantity                 := l_quantity_tbl(i);
16592                           p_calc_budget_lines_out(l_line_ctr).display_quantity         := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16593                           p_calc_budget_lines_out(l_line_ctr).txn_currency_code        := l_txn_currency_code_tbl(i);
16594                           p_calc_budget_lines_out(l_line_ctr).return_status            := FND_API.G_RET_STS_SUCCESS;
16595                           p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost      := l_txn_raw_cost_tbl(i);
16596                           p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_txn_burdened_cost_tbl(i);
16597                           p_calc_budget_lines_out(l_line_ctr).calculated_revenue       := l_txn_revenue_tbl(i);
16598                           p_calc_budget_lines_out(l_line_ctr).project_raw_cost         := l_project_raw_cost_tbl(i);
16599                           p_calc_budget_lines_out(l_line_ctr).project_burdened_cost    := l_project_burdened_cost_tbl(i);
16600                           p_calc_budget_lines_out(l_line_ctr).project_revenue          := l_project_revenue_tbl(i);
16601                           p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost        := l_projfunc_raw_cost_tbl(i);
16602                           p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost   := l_projfunc_burdened_cost_tbl(i);
16603                           p_calc_budget_lines_out(l_line_ctr).projfunc_revenue         := l_projfunc_revenue_tbl(i);
16604 
16605                      END LOOP;
16606                   END IF;
16607 
16608                   EXIT WHEN  NVL(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16609              END LOOP;
16610              CLOSE l_resource_assignment_csr;
16611          END IF;
16612 
16613     END IF;
16614 
16615     if( l_bdgt_lines_skip_flag = 'Y')
16616     then
16617            PA_UTILS.ADD_MESSAGE
16618                ( p_app_short_name => 'PA'
16619                 ,p_msg_name       => 'PA_FP_ETC_BL_DATE'
16620                );
16621     end if;
16622 
16623 
16624     IF FND_API.TO_BOOLEAN( p_commit )
16625     THEN
16626            COMMIT;
16627     END IF;
16628 
16629 EXCEPTION
16630 
16631     WHEN FND_API.G_EXC_ERROR
16632     THEN
16633              ROLLBACK TO calculate_amounts_pub;
16634 
16635              p_return_status := FND_API.G_RET_STS_ERROR;
16636 
16637              FND_MSG_PUB.Count_And_Get
16638                (p_count     =>  p_msg_count ,
16639                 p_data      =>  p_msg_data  );
16640 
16641     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
16642     THEN
16643 
16644              ROLLBACK TO calculate_amounts_pub;
16645 
16646              p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16647 
16648              FND_MSG_PUB.Count_And_Get
16649                  (p_count    =>  p_msg_count ,
16650                   p_data     =>  p_msg_data  );
16651     WHEN OTHERS
16652     THEN
16653          ROLLBACK TO calculate_amounts_pub;
16654 
16655          p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16656 
16657          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16658          THEN
16659             FND_MSG_PUB.add_exc_msg
16660               ( p_pkg_name     => G_PKG_NAME
16661                ,p_procedure_name => l_api_name );
16662          END IF;
16663 
16664          FND_MSG_PUB.Count_And_Get
16665              (p_count    =>  p_msg_count ,
16666               p_data     =>  p_msg_data  );
16667 
16668 END Calculate_Amounts;
16669 
16670 
16671 ----------------------------------------------------------------------------------------
16672 --Name:               Init_Calculate_Amounts
16673 --Type:               Procedure
16674 --Description:        This procedure can be used to as part of load/exec/fetch concept
16675 --
16676 --
16677 --Called subprograms:
16678 --
16679 --
16680 --
16681 --
16682 --History:
16683 --    AUTUMN-1996        R. Krishnamurthy       Created
16684 --
16685 --
16686 PROCEDURE Init_Calculate_Amounts IS
16687 BEGIN
16688     FND_MSG_PUB.Initialize;
16689     --  Initialize global table and record types
16690     G_calc_budget_lines_tbl_count   := 0;
16691     G_calc_budget_lines_out_tbl.delete;
16692 END Init_Calculate_Amounts;
16693 
16694 
16695 ----------------------------------------------------------------------------------------
16696 --Name:               Execute_Calculate_Amounts
16697 --Type:               Procedure
16698 --Description:        This procedure can be used to as part of load/exec/fetch concept
16699 --
16700 --
16701 --Called subprograms:
16702 --
16703 --
16704 --
16705 --
16706 --History:
16707 --    AUTUMN-1996        R. Krishnamurthy       Created
16708 --    25-MAR-2003        Rajagopal              Modified for New Fin Plan Model
16709 --
16710 PROCEDURE Execute_Calculate_Amounts
16711 ( p_api_version_number          IN   NUMBER
16712  ,p_commit                      IN   VARCHAR2    := FND_API.G_FALSE
16713  ,p_init_msg_list               IN   VARCHAR2    := FND_API.G_FALSE
16714  ,p_msg_count                   OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
16715  ,p_msg_data                    OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16716  ,p_return_status               OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16717  ,p_tot_budget_lines_calculated OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
16718  ,p_pm_product_code             IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16719  ,p_pa_project_id               IN   NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16720  ,p_pm_project_reference        IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16721  ,p_budget_type_code            IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16722  ,p_calc_raw_cost_yn            IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16723  ,p_calc_burdened_cost_yn       IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16724  ,p_calc_revenue_yn             IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16725  ,p_update_db_flag              IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16726   -- Bug 2863564 Parameters required for new Fin Plan Model
16727  ,p_budget_version_id           IN   pa_budget_versions.budget_version_id%TYPE
16728  ,p_fin_plan_type_id            IN   pa_fin_plan_types_b.fin_plan_type_id%TYPE
16729  ,p_fin_plan_type_name          IN   pa_fin_plan_types_tl.name%TYPE
16730  ,p_version_type                IN   pa_budget_versions.version_type%TYPE
16731  ,p_budget_version_number       IN   pa_budget_versions.version_number%TYPE
16732 ) IS
16733 
16734    l_api_name           CONSTANT   VARCHAR2(30) := 'Execute_Calculate_Amounts';
16735    --Bug 2863564 l_return_status      VARCHAR2(1);
16736 
16737 BEGIN
16738 --  Standard begin of API savepoint
16739     SAVEPOINT execute_calculate_amounts;
16740 
16741 --  Standard call to check for call compatibility.
16742 
16743     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
16744                                          p_api_version_number   ,
16745                                          l_api_name             ,
16746                                          G_PKG_NAME             )
16747     THEN
16748     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16749     END IF;
16750 --  Initialize the message table if requested.
16751 
16752     IF FND_API.TO_BOOLEAN( p_init_msg_list )
16753     THEN
16754     FND_MSG_PUB.initialize;
16755     END IF;
16756 --  Set API return status to success
16757     p_return_status := FND_API.G_RET_STS_SUCCESS;
16758     p_tot_budget_lines_calculated := 0;
16759 
16760     Calculate_Amounts
16761      ( p_api_version_number      => p_api_version_number
16762       ,p_commit                  => p_commit
16763       ,p_init_msg_list           => p_init_msg_list
16764       ,p_msg_count               => p_msg_count
16765       ,p_msg_data                => p_msg_data
16766       ,p_return_status           => p_return_status
16767       ,p_pm_product_code         => p_pm_product_code
16768       ,p_pa_project_id           => p_pa_project_id
16769       ,p_pm_project_reference    => p_pm_project_reference
16770       ,p_budget_type_code        => p_budget_type_code
16771       ,p_calc_raw_cost_yn        => p_calc_raw_cost_yn
16772       ,p_calc_burdened_cost_yn   => p_calc_burdened_cost_yn
16773       ,p_calc_revenue_yn         => p_calc_revenue_yn
16774       ,p_update_db_flag          => p_update_db_flag
16775       ,p_calc_budget_lines_out   => G_calc_budget_lines_out_tbl
16776       -- Bug 2863564 new parameters added
16777       ,p_fin_plan_type_name      => p_fin_plan_type_name
16778       ,p_fin_plan_type_id        => p_fin_plan_type_id
16779       ,p_budget_version_number   => p_budget_version_number
16780       ,p_version_type            => p_version_type
16781       ,p_budget_version_id       => p_budget_version_id
16782      );
16783 
16784 
16785     IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16786     THEN
16787 
16788          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16789 
16790     ELSIF p_return_status = FND_API.G_RET_STS_ERROR
16791     THEN
16792         RAISE FND_API.G_EXC_ERROR;
16793     END IF;
16794 
16795     IF G_calc_budget_lines_out_tbl.EXISTS(1) THEN
16796        p_tot_budget_lines_calculated := G_calc_budget_lines_out_tbl.COUNT;
16797     END IF;
16798 
16799     IF fnd_api.to_boolean(p_commit) THEN
16800        COMMIT;
16801     END IF;
16802 EXCEPTION
16803     WHEN FND_API.G_EXC_ERROR THEN
16804          ROLLBACK TO execute_calculate_amounts;
16805          p_return_status := FND_API.G_RET_STS_ERROR;
16806          FND_MSG_PUB.Count_And_Get
16807               (   p_count     =>  p_msg_count ,
16808                   p_data      =>  p_msg_data  );
16809     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
16810          ROLLBACK TO execute_calculate_amounts;
16811          p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16812          FND_MSG_PUB.Count_And_Get
16813               (   p_count     =>  p_msg_count ,
16814                   p_data      =>  p_msg_data  );
16815     WHEN OTHERS THEN
16816          ROLLBACK TO execute_calculate_amounts;
16817          p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16818          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16819          THEN
16820              FND_MSG_PUB.add_exc_msg
16821                  (  p_pkg_name       => G_PKG_NAME
16822                  ,  p_procedure_name => l_api_name );
16823          END IF;
16824 
16825          FND_MSG_PUB.Count_And_Get
16826          (   p_count     =>  p_msg_count ,
16827              p_data      =>  p_msg_data  );
16828 END Execute_Calculate_Amounts;
16829 
16830 
16831 ----------------------------------------------------------------------------------------
16832 --Name:               fetch_calculate_amounts
16833 --Type:               Procedure
16834 --Description:        This procedure can be used to as part of load/exec/fetch concept
16835 --
16836 --
16837 --Called subprograms:
16838 --
16839 --
16840 --
16841 --
16842 --History:
16843 --    AUTUMN-1996        R. Krishnamurthy       Created
16844 --
16845 --
16846 PROCEDURE fetch_calculate_amounts
16847 ( p_api_version_number        IN      NUMBER
16848  ,p_init_msg_list             IN      VARCHAR2    := FND_API.G_FALSE
16849  ,p_line_index                IN      NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16850  ,p_return_status             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16851  ,p_pa_task_id                OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
16852  ,p_pm_task_reference         OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16853  ,p_budget_start_date         OUT     NOCOPY DATE --File.Sql.39 bug 4440895
16854  ,p_budget_end_date           OUT     NOCOPY DATE --File.Sql.39 bug 4440895
16855  ,p_period_name               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16856  ,p_resource_list_member_id   OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
16857  ,p_quantity                  OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
16858  ,p_resource_alias            OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16859  ,p_calculated_raw_cost       OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
16860  ,p_calculated_burdened_cost  OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
16861  ,p_calculated_revenue        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
16862  ,p_line_return_status        OUT     NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
16863 
16864 l_api_name       CONSTANT   VARCHAR2(30)   := 'fetch_calculate_amounts';
16865 
16866 l_index             NUMBER;
16867 i                   NUMBER;
16868 
16869 BEGIN
16870 
16871 --  Standard call to check for call compatibility.
16872 
16873     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
16874                                          p_api_version_number   ,
16875                                          l_api_name             ,
16876                                          G_PKG_NAME             )
16877     THEN
16878 
16879     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16880 
16881     END IF;
16882 
16883 --  Initialize the message table if requested.
16884 
16885     IF FND_API.TO_BOOLEAN( p_init_msg_list )
16886     THEN
16887 
16888     FND_MSG_PUB.initialize;
16889 
16890     END IF;
16891 
16892 --  Set API return status to success
16893 
16894     p_return_status := FND_API.G_RET_STS_SUCCESS;
16895 
16896 --  Check index value,
16897 --  when they don't provide an index we will error out
16898 
16899     IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16900     OR p_line_index IS NULL
16901     THEN
16902         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16903         THEN
16904                pa_interface_utils_pub.map_new_amg_msg
16905                ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
16906                 ,p_msg_attribute    => 'CHANGE'
16907                 ,p_resize_flag      => 'Y'
16908                 ,p_msg_context      => 'GENERAL'
16909                 ,p_attribute1       => ''
16910                 ,p_attribute2       => ''
16911                 ,p_attribute3       => ''
16912                 ,p_attribute4       => ''
16913                 ,p_attribute5       => '');
16914         END IF;
16915 
16916         p_return_status := FND_API.G_RET_STS_ERROR;
16917         RAISE FND_API.G_EXC_ERROR;
16918     ELSE
16919         l_index := p_line_index;
16920     END IF;
16921 
16922 -- Fix: 03-FEB-97, jwhite
16923 -- Changed references to correct global table -------------------------------
16924 
16925 --assign global table fields to the outgoing parameter
16926     IF G_calc_budget_lines_out_tbl.EXISTS(l_index) THEN
16927          p_pa_task_id        := G_calc_budget_lines_out_tbl(l_index).pa_task_id;
16928          p_pm_task_reference :=
16929                  G_calc_budget_lines_out_tbl(l_index).pm_task_reference;
16930          p_budget_start_date :=
16931                  G_calc_budget_lines_out_tbl(l_index).budget_start_date;
16932          p_budget_end_date   := G_calc_budget_lines_out_tbl(l_index).budget_end_date;
16933          p_period_name       := G_calc_budget_lines_out_tbl(l_index).period_name;
16934          p_resource_list_member_id         := G_calc_budget_lines_out_tbl(l_index).resource_list_member_id;
16935          p_quantity          := G_calc_budget_lines_out_tbl(l_index).quantity;
16936          p_resource_alias    := G_calc_budget_lines_out_tbl(l_index).resource_alias;
16937          p_calculated_raw_cost :=
16938                  G_calc_budget_lines_out_tbl(l_index).calculated_raw_cost;
16939          p_calculated_burdened_cost :=
16940                  G_calc_budget_lines_out_tbl(l_index).calculated_burdened_cost;
16941          p_calculated_revenue :=
16942                  G_calc_budget_lines_out_tbl(l_index).calculated_revenue;
16943          p_line_return_status := G_calc_budget_lines_out_tbl(l_index).return_status;
16944 
16945     END IF;
16946 -- ----------------------------------------------------------------------------------------
16947 
16948 EXCEPTION
16949 
16950     WHEN FND_API.G_EXC_ERROR
16951     THEN
16952       p_return_status := FND_API.G_RET_STS_ERROR;
16953 
16954     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
16955     THEN
16956 
16957       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16958 
16959     WHEN OTHERS THEN
16960 
16961       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16962 
16963       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16964       THEN
16965           FND_MSG_PUB.add_exc_msg
16966               (  p_pkg_name       => G_PKG_NAME
16967               ,  p_procedure_name => l_api_name );
16968 
16969       END IF;
16970 
16971 END fetch_calculate_amounts;
16972 
16973 
16974 ----------------------------------------------------------------------------------------
16975 --Name:               Clear_Calculate_Amounts
16976 --Type:               Procedure
16977 --Description:        This procedure can be used to as part of load/exec/fetch concept
16978 --
16979 --
16980 --Called subprograms:
16981 --
16982 --
16983 --
16984 --
16985 --History:
16986 --    AUTUMN-1996        R. Krishnamurthy       Created
16987 --
16988 --
16989 PROCEDURE Clear_Calculate_Amounts IS
16990 BEGIN
16991    Init_Calculate_Amounts;
16992 END Clear_Calculate_Amounts;
16993 
16994 ----------------------------------------------------------------------------------------
16995 --Name:               fetch_calculate_amounts
16996 --Type:               Procedure
16997 --Description:        This procedure can be used to as part of load/exec/fetch concept
16998 --
16999 --
17000 --Called subprograms:
17001 --                    fetch_calculate_amounts
17002 --
17003 --History:
17004 --    24-MAR-2003     Rajagopal      Created
17005 --
17006 PROCEDURE fetch_calculate_amounts
17007      ( p_api_version_number         IN   NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17008       ,p_init_msg_list              IN   VARCHAR2    := FND_API.G_FALSE
17009       ,p_line_index                 IN   NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17010       ,p_return_status             OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17011       ,p_pa_task_id                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17012       ,p_pm_task_reference         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17013       ,p_budget_start_date         OUT   NOCOPY DATE --File.Sql.39 bug 4440895
17014       ,p_budget_end_date           OUT   NOCOPY DATE --File.Sql.39 bug 4440895
17015       ,p_period_name               OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17016       ,p_resource_list_member_id   OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17017       ,p_quantity                  OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17018       ,p_resource_alias            OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17019       ,p_calculated_raw_cost       OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17020       ,p_calculated_burdened_cost  OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17021       ,p_calculated_revenue        OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17022       ,p_line_return_status        OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17023       ,p_txn_currency_code         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17024       ,p_project_raw_cost          OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17025       ,p_project_burdened_cost     OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17026       ,p_project_revenue           OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17027       ,p_projfunc_raw_cost         OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17028       ,p_projfunc_burdened_cost    OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17029       ,p_projfunc_revenue          OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17030       ,p_display_quantity          OUT   NOCOPY NUMBER  --IPM Arch Enhancement Bug 4865563
17031       ) IS
17032 
17033 l_api_name       CONSTANT   VARCHAR2(30)   := 'fetch_calculate_amounts';
17034 
17035 BEGIN
17036      p_return_status := FND_API.G_RET_STS_SUCCESS;
17037 
17038      -- Call the existing  fetch_calculate_amounts api
17039 
17040      PA_BUDGET_PUB.fetch_calculate_amounts
17041           ( p_api_version_number           =>   p_api_version_number
17042            ,p_init_msg_list                =>   p_init_msg_list
17043            ,p_line_index                   =>   p_line_index
17044            ,p_return_status                =>   p_return_status
17045            ,p_pa_task_id                   =>   p_pa_task_id
17046            ,p_pm_task_reference            =>   p_pm_task_reference
17047            ,p_budget_start_date            =>   p_budget_start_date
17048            ,p_budget_end_date              =>   p_budget_end_date
17049            ,p_period_name                  =>   p_period_name
17050            ,p_resource_list_member_id      =>   p_resource_list_member_id
17051            ,p_quantity                     =>   p_quantity
17052            ,p_resource_alias               =>   p_resource_alias
17053            ,p_calculated_raw_cost          =>   p_calculated_raw_cost
17054            ,p_calculated_burdened_cost     =>   p_calculated_burdened_cost
17055            ,p_calculated_revenue           =>   p_calculated_revenue
17056            ,p_line_return_status           =>   p_line_return_status  );
17057 
17058      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17059 
17060          RAISE FND_API.G_EXC_ERROR;
17061 
17062      END IF;
17063 
17064      -- Fetch the txn currency code of the budget line
17065 
17066      IF G_calc_budget_lines_out_tbl.EXISTS(p_line_index) THEN
17067 
17068           p_txn_currency_code      := G_calc_budget_lines_out_tbl(p_line_index).txn_currency_code;
17069           p_project_raw_cost       := G_calc_budget_lines_out_tbl(p_line_index).project_raw_cost;
17070           p_project_burdened_cost  := G_calc_budget_lines_out_tbl(p_line_index).project_burdened_cost ;
17071           p_project_revenue        := G_calc_budget_lines_out_tbl(p_line_index).project_revenue;
17072           p_projfunc_raw_cost      := G_calc_budget_lines_out_tbl(p_line_index).projfunc_raw_cost;
17073           p_projfunc_burdened_cost := G_calc_budget_lines_out_tbl(p_line_index).projfunc_burdened_cost;
17074           p_projfunc_revenue       := G_calc_budget_lines_out_tbl(p_line_index).projfunc_revenue;
17075           p_display_quantity       := G_calc_budget_lines_out_tbl(p_line_index).display_quantity;  --IPM Arch Enhancement Bug 4865563
17076 
17077      END IF;
17078 
17079 EXCEPTION
17080 
17081    WHEN FND_API.G_EXC_ERROR
17082    THEN
17083         p_return_status := FND_API.G_RET_STS_ERROR;
17084 
17085    WHEN FND_API.G_EXC_UNEXPECTED_ERROR
17086    THEN
17087 
17088         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17089 
17090    WHEN OTHERS THEN
17091 
17092         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17093 
17094         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17095         THEN
17096             FND_MSG_PUB.add_exc_msg
17097                 (  p_pkg_name       => G_PKG_NAME
17098                   ,p_procedure_name => l_api_name );
17099 
17100         END IF;
17101 END fetch_calculate_amounts;
17102 
17103 PROCEDURE CREATE_DRAFT_FINPLAN
17104  ( p_api_version_number              IN NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17105   ,p_commit                              IN VARCHAR2          := FND_API.G_FALSE
17106   ,p_init_msg_list                       IN VARCHAR2          := FND_API.G_FALSE
17107   ,p_pm_product_code                 IN pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17108   ,p_pm_finplan_reference            IN pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17109   ,p_pm_project_reference            IN pa_projects_all. PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17110   ,p_pa_project_id                   IN pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17111   ,p_fin_plan_type_id                IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17112   ,p_fin_plan_type_name              IN pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17113   ,p_version_type                    IN pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17114   ,p_time_phased_code                IN pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17115   ,p_resource_list_name              IN pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17116   ,p_resource_list_id                IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17117   ,p_fin_plan_level_code             IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17118   ,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
17119   ,p_budget_version_name             IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17120   ,p_description                     IN pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17121   ,p_change_reason_code              IN pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17122   ,p_raw_cost_flag                   IN pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17123   ,p_burdened_cost_flag              IN pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17124   ,p_revenue_flag                    IN pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17125   ,p_cost_qty_flag                   IN pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17126   ,p_revenue_qty_flag                IN pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17127   ,p_all_qty_flag                    IN pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17128   ,p_create_new_curr_working_flag    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17129   ,p_replace_current_working_flag    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17130   ,p_using_resource_lists_flag       IN   VARCHAR2 DEFAULT 'N'
17131   ,p_finplan_trans_tab               IN pa_budget_pub.FinPlan_Trans_Tab
17132   ,p_attribute_category              IN pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17133   ,p_attribute1                      IN pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17134   ,p_attribute2                      IN pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17135   ,p_attribute3                      IN pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17136   ,p_attribute4                      IN pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17137   ,p_attribute5                      IN pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17138   ,p_attribute6                      IN pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17139   ,p_attribute7                      IN pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17140   ,p_attribute8                      IN pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17141   ,p_attribute9                      IN pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17142   ,p_attribute10                     IN pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17143   ,p_attribute11                     IN pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17144   ,p_attribute12                     IN pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17145   ,p_attribute13                     IN pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17146   ,p_attribute14                     IN pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17147   ,p_attribute15                     IN pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17148   ,x_finplan_version_id              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17149   ,x_return_status                   OUT NOCOPY VARCHAR2
17150   ,x_msg_count                       OUT NOCOPY NUMBER
17151   ,x_msg_data                        OUT NOCOPY VARCHAR2
17152  )
17153  IS
17154 
17155 
17156 /* SCALAR VARIABLES */
17157 l_task_number                          pa_tasks.task_number%TYPE;
17158 l_fp_options_id                        pa_proj_fp_options.proj_fp_options_id%TYPE;
17159 l_baselined_version_id                 pa_budget_versions.budget_version_id%TYPE;
17160 l_curr_work_version_id                 pa_budget_versions.budget_version_id%TYPE;
17161 l_amount_set_id                        pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17162 l_struct_elem_version_id               pa_proj_elem_ver_structure.element_version_id%TYPE;
17163 l_cost_amount_set_id                   pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17164 l_rev_amount_set_id                    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17165 l_all_amount_set_id                    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17166 l_created_version_id                   pa_budget_versions.budget_version_id%TYPE;
17167 l_plan_pref_code                       pa_proj_fp_options.fin_plan_preference_code%TYPE;
17168 l_uncat_rlmid                          pa_resource_assignments.resource_list_member_id%TYPE;
17169 l_track_as_labor_flag                  pa_resource_list_members.track_as_labor_flag%TYPE;
17170 l_unit_of_measure                      pa_resource_assignments.unit_of_measure%TYPE;
17171 -- Bug Fix: 4569365. Removed MRC code.
17172 -- l_calling_context                      pa_mrc_finplan.g_calling_module%TYPE := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17173 l_calling_context                      VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17174 
17175 l_plan_tran_context                    VARCHAR2(30);
17176 l_record_version_number                pa_budget_versions.record_version_number%TYPE;
17177 l_mixed_resource_planned_flag          VARCHAR2(1);
17178 l_proj_fp_options_id                   pa_proj_fp_options.proj_fp_options_id%TYPE;
17179 l_CW_version_id                        pa_budget_versions.budget_version_id%TYPE;
17180 l_CW_record_version_number             pa_budget_versions.record_version_number%TYPE;
17181 l_created_ver_rec_ver_num              pa_budget_versions.record_version_number%TYPE;
17182 
17183 l_project_id                           PA_PROJECTS_ALL.PROJECT_ID%TYPE;
17184 l_resource_list_name                   PA_RESOURCE_LISTS.NAME%TYPE;
17185 l_resource_list_id                     PA_RESOURCE_LISTS.resource_list_id%TYPE;
17186 
17187 l_description                          PA_BUDGET_VERSIONS.description%Type;
17188 l_attribute_category                   PA_BUDGET_VERSIONS.attribute_category%Type;
17189 l_attribute1                           PA_BUDGET_VERSIONS.attribute1%Type;
17190 l_attribute2                           PA_BUDGET_VERSIONS.attribute2%Type;
17191 l_attribute3                           PA_BUDGET_VERSIONS.attribute2%Type;
17192 l_attribute4                           PA_BUDGET_VERSIONS.attribute2%Type;
17193 l_attribute5                           PA_BUDGET_VERSIONS.attribute2%Type;
17194 l_attribute6                           PA_BUDGET_VERSIONS.attribute2%Type;
17195 l_attribute7                           PA_BUDGET_VERSIONS.attribute2%Type;
17196 l_attribute8                           PA_BUDGET_VERSIONS.attribute2%Type;
17197 l_attribute9                           PA_BUDGET_VERSIONS.attribute2%Type;
17198 l_attribute10                          PA_BUDGET_VERSIONS.attribute2%Type;
17199 l_attribute11                          PA_BUDGET_VERSIONS.attribute2%Type;
17200 l_attribute12                          PA_BUDGET_VERSIONS.attribute2%Type;
17201 l_attribute13                          PA_BUDGET_VERSIONS.attribute2%Type;
17202 l_attribute14                          PA_BUDGET_VERSIONS.attribute2%Type;
17203 l_attribute15                          PA_BUDGET_VERSIONS.attribute2%Type;
17204 l_pm_finplan_reference                 pa_budget_versions.pm_budget_reference%type;
17205 l_change_reason_code                   pa_budget_versions.change_reason_code%type;
17206 l_budget_version_name                  pa_budget_versions.version_name%type;
17207 l_fin_plan_type_id                     pa_fin_plan_types_b.fin_plan_type_id%TYPE ;
17208 l_fin_plan_type_name                   pa_fin_plan_types_vl.name%TYPE ;
17209 l_version_type                         pa_budget_versions.version_type%TYPE ;
17210 l_fin_plan_level_code                  pa_proj_fp_options.cost_fin_plan_level_code%TYPE ;
17211 l_time_phased_code                     pa_proj_fp_options.cost_time_phased_code%TYPE ;
17212 
17213 L_RAW_COST_FLAG                        VARCHAR2(1);
17214 L_BURDENED_COST_FLAG                   VARCHAR2(1);
17215 L_REVENUE_FLAG                         VARCHAR2(1);
17216 L_COST_QTY_FLAG                        VARCHAR2(1);
17217 L_REVENUE_QTY_FLAG                     VARCHAR2(1);
17218 
17219 L_ALL_QTY_FLAG                         VARCHAR2(1);
17220 L_CREATE_NEW_WORKING_FLAG              VARCHAR2(1);
17221 L_REPLACE_CURRENT_WORKING_FLAG         VARCHAR2(1);
17222 L_USING_RESOURCE_LISTS_FLAG            VARCHAR2(1);
17223 
17224 l_plan_in_multi_curr_flag              pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
17225 l_projfunc_cost_rate_type              pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
17226 l_projfunc_cost_rate_date_typ          pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
17227 l_projfunc_cost_rate_date              pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
17228 l_projfunc_rev_rate_type               pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
17229 l_projfunc_rev_rate_date_typ           pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
17230 l_projfunc_rev_rate_date               pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
17231 l_project_cost_rate_type               pa_proj_fp_options.project_cost_rate_type%TYPE ;
17232 l_project_cost_rate_date_typ           pa_proj_fp_options.project_cost_rate_date_type%TYPE  ;
17233 l_project_cost_rate_date               pa_proj_fp_options.project_cost_rate_date%TYPE ;
17234 l_project_rev_rate_type                pa_proj_fp_options.project_rev_rate_type%TYPE  ;
17235 l_project_rev_rate_date_typ            pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
17236 l_project_rev_rate_date                pa_proj_fp_options.project_rev_rate_date%TYPE ;
17237 
17238 /**PLSQL TABLES**/
17239 l_pm_task_reference_tbl       SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
17240 l_task_elem_version_id_tbl    SYSTEM.pa_num_tbl_type          := SYSTEM.pa_num_tbl_type();
17241 l_task_number_tbl             SYSTEM.PA_VARCHAR2_100_TBL_TYPE := SYSTEM.PA_VARCHAR2_100_TBL_TYPE();
17242 l_project_assignment_id_tbl   SYSTEM.pa_num_tbl_type          := SYSTEM.pa_num_tbl_type();
17243 l_resource_alias_tbl          SYSTEM.PA_VARCHAR2_80_TBL_TYPE  := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
17244 l_pm_res_asgmt_ref_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17245 l_resource_list_member_id_tbl SYSTEM.pa_num_tbl_type          := SYSTEM.pa_num_tbl_type();
17246 l_pm_product_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17247 l_currency_code_tbl           SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
17248 l_start_date_tbl              SYSTEM.pa_date_tbl_type         := SYSTEM.pa_date_tbl_type();
17249 l_end_date_tbl                SYSTEM.pa_date_tbl_type         := SYSTEM.pa_date_tbl_type();
17250 
17251 l_quantity_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17252 l_raw_cost_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17253 l_burdened_cost_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17254 l_revenue_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17255 l_fp_version_ids_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17256 
17257 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17258 l_attribute1_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17259 l_attribute2_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17260 l_attribute3_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17261 l_attribute4_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17262 l_attribute5_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17263 l_attribute6_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17264 l_attribute7_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17265 l_attribute8_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17266 l_attribute9_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17267 l_attribute10_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17268 l_attribute11_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17269 l_attribute12_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17270 l_attribute13_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17271 l_attribute14_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17272 l_attribute15_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17273 l_attribute16_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17274 l_attribute17_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17275 l_attribute18_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17276 l_attribute19_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17277 l_attribute20_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17278 l_attribute21_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17279 l_attribute22_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17280 l_attribute23_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17281 l_attribute24_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17282 l_attribute25_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17283 l_attribute26_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17284 l_attribute27_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17285 l_attribute28_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17286 l_attribute29_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17287 l_attribute30_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17288 
17289 /*=======================================================+
17290  | Used to call pa_budget_pvt.get_fin_plan_lines_status. |
17291  +=======================================================*/
17292 l_budget_lines_in        pa_budget_pub.budget_line_in_tbl_type;
17293 l_budget_lines_out       pa_budget_pub.budget_line_out_tbl_type;
17294 
17295 /*===================================================+
17296  | Used to call pa_budget_pvt.validate_budget_lines. |
17297  +===================================================*/
17298 l_res_asg_in_tbl         pa_budget_pub.budget_line_in_tbl_type;
17299 l_res_asg_out_tbl        pa_budget_pub.budget_line_out_tbl_type;
17300 
17301 l_allow_qty_flag         VARCHAR2(1); -- Bug 3825873 Used to call validate_budget_lines
17302 
17303 --fix later
17304 l_pkg_name          VARCHAR2(30)  := 'PA_BUDGET_PUB';
17305 g_module_name       VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17306 l_api_name          VARCHAR2(30)  := 'CREATE_DRAFT_FINPLAN';
17307 l_module_name       VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17308 l_procedure_name    VARCHAR2(30)  := 'CREATE_DRAFT_FINPLAN';
17309 
17310 l_debug_mode        VARCHAR2(1);
17311 l_msg_count         NUMBER := 0;
17312 l_msg_data          VARCHAR2(150);
17313 l_msg_code          VARCHAR2(2000);
17314 l_msg_index_out     NUMBER;
17315 l_return_status     VARCHAR2(1);
17316 
17317 l_user_id           NUMBER :=0;
17318 t_person_id         NUMBER;
17319 t_resource_id       NUMBER;
17320 t_resource_name     VARCHAR2(39);
17321 cnt number:=0;
17322 
17323  -- added for bug Bug 3986129: FP.M Web ADI Dev changes
17324  l_mfc_cost_type_id_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17325  l_etc_method_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
17326  l_spread_curve_id_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17327 
17328  --Added for bug 4224464
17329  l_budget_amount_code             pa_budget_types.budget_amount_code%type;
17330 
17331  l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
17332 
17333  --Bug 5475184. In the below set, pt stands for "plan type".
17334  l_pt_amount_set_id                    pa_proj_fp_options.cost_amount_set_id%TYPE;
17335  l_pt_raw_cost_flag                    VARCHAR2(1);
17336  l_pt_burdened_flag                    VARCHAR2(1);
17337  l_pt_revenue_flag                     VARCHAR2(1);
17338  l_pt_cost_quantity_flag               VARCHAR2(1);
17339  l_pt_rev_quantity_flag                VARCHAR2(1);
17340  l_pt_all_quantity_flag                VARCHAR2(1);
17341  l_pt_bill_rate_flag                   VARCHAR2(1);
17342  l_pt_cost_rate_flag                   VARCHAR2(1);
17343  l_pt_burden_rate_flag                 VARCHAR2(1);
17344 
17345 
17346 BEGIN
17347 
17348     --Standard begin of API savepoint
17349     SAVEPOINT create_draft_finplan_pub;
17350 
17351     x_msg_count := 0;
17352     x_return_status := FND_API.G_RET_STS_SUCCESS;
17353     pa_debug.set_err_stack('PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN');
17354     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
17355     l_debug_mode := NVL(l_debug_mode, 'Y');
17356 
17357     IF ( l_debug_mode = 'Y' )
17358     THEN
17359         pa_debug.set_process(l_procedure_name || 'PLSQL','LOG',l_debug_mode);
17360         pa_debug.g_err_stage:='Entering CREATE_DRAFT_FINPLAN';
17361         pa_debug.write('CREATE_DRAFT_FINPLAN: ' || g_module_name,pa_debug.g_err_stage,2);
17362     END IF;
17363 
17364     l_msg_count := 0;
17365     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17366     l_module_name :=  'create_draft_finplan' || g_module_name;
17367 
17368     IF ( l_debug_mode = 'Y' )
17369     THEN
17370           pa_debug.set_curr_function( p_function   => 'create_draft_finplan'
17371                                      ,p_debug_mode => l_debug_mode );
17372     END IF;
17373 
17374     l_resource_list_name :=  p_resource_list_name ;
17375 
17376     IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17377             l_resource_list_id        :=   NULL;
17378     ELSE
17379             l_resource_list_id        :=   p_resource_list_id;
17380     END IF;
17381 
17382 
17383     IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17384             l_fin_plan_type_id := NULL;
17385     ELSE
17386             l_fin_plan_type_id              :=   p_fin_plan_type_id ;
17387     END IF;
17388 
17389     IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17390        l_fin_plan_type_name := NULL;
17391     ELSE
17392       l_fin_plan_type_name            :=   p_fin_plan_type_name           ;
17393     END IF;
17394 
17395     IF p_version_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17396        l_version_type := NULL;
17397     ELSE
17398       l_version_type                  :=   p_version_type                 ;
17399     END IF;
17400 
17401     IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17402        l_fin_plan_level_code := NULL;
17403     ELSE
17404       l_fin_plan_level_code           :=   p_fin_plan_level_code          ;
17405     END IF;
17406 
17407     IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17408        l_time_phased_code := NULL;
17409     ELSE
17410       l_time_phased_code              :=   p_time_phased_code             ;
17411 
17412     END IF;
17413 
17414     IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17415        l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
17416     ELSE
17417       l_plan_in_multi_curr_flag       :=   p_plan_in_multi_curr_flag      ;
17418     END IF;
17419 
17420     IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17421       l_raw_cost_flag  := 'N';
17422     ELSE
17423       l_raw_cost_flag                 :=   p_raw_cost_flag                ;
17424     END IF;
17425 
17426     IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17427       l_burdened_cost_flag  := 'N';
17428     ELSE
17429       l_burdened_cost_flag            :=   p_burdened_cost_flag           ;
17430     END IF;
17431 
17432     IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17433       l_revenue_flag  := 'N';
17434     ELSE
17435       l_revenue_flag                  :=   p_revenue_flag                 ;
17436     END IF;
17437 
17438     IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17439       l_cost_qty_flag  := 'N';
17440     ELSE
17441       l_cost_qty_flag                 :=   p_cost_qty_flag                ;
17442     END IF;
17443 
17444     IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17445       l_revenue_qty_flag  := 'N';
17446     ELSE
17447       l_revenue_qty_flag              :=   p_revenue_qty_flag             ;
17448     END IF;
17449 
17450     IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17451       l_all_qty_flag  := 'N';
17452     ELSE
17453       l_all_qty_flag                  :=   p_all_qty_flag                 ;
17454     END IF;
17455 
17456     IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17457       l_create_new_working_flag  := 'N';
17458     ELSE
17459       l_create_new_working_flag       :=   p_create_new_curr_working_flag ;
17460     END IF;
17461 
17462     IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17463       l_replace_current_working_flag  := 'N';
17464     ELSE
17465       l_replace_current_working_flag  :=   p_replace_current_working_flag ;
17466     END IF;
17467 
17468     IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17469       l_using_resource_lists_flag  := 'Y';
17470     ELSE
17471       l_using_resource_lists_flag  :=   p_using_resource_lists_flag ;
17472     END IF;
17473 
17474     IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17475     THEN
17476             l_attribute_category := NULL;
17477     ELSE
17478            l_attribute_category := p_attribute_category;
17479     END IF;
17480 
17481     IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17482     THEN
17483             l_attribute1 := NULL;
17484     ELSE
17485             l_attribute1 := p_attribute1;
17486     END IF;
17487     IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17488     THEN
17489             l_attribute2 := NULL;
17490     ELSE
17491             l_attribute2 := p_attribute2;
17492     END IF;
17493     IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17494     THEN
17495             l_attribute3 := NULL;
17496     ELSE
17497             l_attribute3 := p_attribute3;
17498     END IF;
17499     IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17500     THEN
17501             l_attribute4 := NULL;
17502     ELSE
17503             l_attribute4 := p_attribute4;
17504     END IF;
17505 
17506     IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17507     THEN
17508             l_attribute5 := NULL;
17509     ELSE
17510             l_attribute5 := p_attribute5;
17511     END IF;
17512 
17513     IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17514     THEN
17515             l_attribute6 := NULL;
17516     ELSE
17517             l_attribute6 := p_attribute6;
17518     END IF;
17519 
17520     IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17521     THEN
17522             l_attribute7 := NULL;
17523     ELSE
17524             l_attribute7 := p_attribute7;
17525     END IF;
17526 
17527     IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17528     THEN
17529             l_attribute8 := NULL;
17530     ELSE
17531       l_attribute8 := p_attribute8;
17532     END IF;
17533 
17534     IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17535     THEN
17536             l_attribute9 := NULL;
17537     ELSE
17538             l_attribute9 := p_attribute9;
17539     END IF;
17540 
17541     IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17542     THEN
17543             l_attribute10 := NULL;
17544     ELSE
17545             l_attribute10 := p_attribute10;
17546     END IF;
17547 
17548     IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17549     THEN
17550             l_attribute11 := NULL;
17551     ELSE
17552             l_attribute11 := p_attribute11;
17553     END IF;
17554 
17555     IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17556     THEN
17557             l_attribute12 := NULL;
17558     ELSE
17559       l_attribute12 := p_attribute12;
17560     END IF;
17561 
17562     IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17563     THEN
17564             l_attribute13 := NULL;
17565     ELSE
17566       l_attribute13 := p_attribute13;
17567     END IF;
17568 
17569     IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17570     THEN
17571             l_attribute14:= NULL;
17572     ELSE
17573             l_attribute14:= p_attribute14;
17574     END IF;
17575 
17576     IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17577     THEN
17578             l_attribute15 := NULL;
17579     ELSE
17580             l_attribute15 := p_attribute15;
17581     END IF;
17582 
17583     IF p_pm_finplan_reference =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17584     THEN
17585             l_pm_finplan_reference := NULL;
17586     ELSE
17587             l_pm_finplan_reference := p_pm_finplan_reference;
17588     END IF;
17589 
17590     IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17591             l_project_id                :=   NULL;
17592     ELSE
17593             l_project_id                :=   p_pa_project_id;
17594     END IF;
17595 
17596     IF p_change_reason_code =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17597     THEN
17598             l_change_reason_code := NULL;
17599     ELSE
17600             l_change_reason_code := p_change_reason_code;
17601     END IF;
17602   -- bug 5031071
17603     IF p_description =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17604     THEN
17605             l_description := NULL;
17606     ELSE
17607             l_description := p_description;
17608     END IF;
17609 
17610 
17611 
17612     l_user_id := FND_GLOBAL.User_id;
17613 
17614     pa_budget_pvt.Validate_Header_Info
17615           ( p_api_version_number            => p_api_version_number
17616            ,p_budget_version_name           => p_budget_version_name
17617            ,p_init_msg_list                 => p_init_msg_list
17618            ,px_pa_project_id                => l_project_id
17619            ,p_pm_project_reference          => p_pm_project_reference
17620            ,p_pm_product_code               => p_pm_product_code
17621            ,p_budget_type_code              => NULL
17622            ,p_entry_method_code             => NULL
17623            ,px_resource_list_name           => l_resource_list_name
17624            ,px_resource_list_id             => l_resource_list_id
17625            ,px_fin_plan_type_id             => l_fin_plan_type_id
17626            ,px_fin_plan_type_name           => l_fin_plan_type_name
17627            ,px_version_type                 => l_version_type
17628            ,px_fin_plan_level_code          => l_fin_plan_level_code
17629            ,px_time_phased_code             => l_time_phased_code
17630            ,px_plan_in_multi_curr_flag      => l_plan_in_multi_curr_flag
17631            ,px_projfunc_cost_rate_type      => l_projfunc_cost_rate_type
17632            ,px_projfunc_cost_rate_date_typ  => l_projfunc_cost_rate_date_typ
17633            ,px_projfunc_cost_rate_date      => l_projfunc_cost_rate_date
17634            ,px_projfunc_rev_rate_type       => l_projfunc_rev_rate_type
17635            ,px_projfunc_rev_rate_date_typ   => l_projfunc_rev_rate_date_typ
17636            ,px_projfunc_rev_rate_date       => l_projfunc_rev_rate_date
17637            ,px_project_cost_rate_type       => l_project_cost_rate_type
17638            ,px_project_cost_rate_date_typ   => l_project_cost_rate_date_typ
17639            ,px_project_cost_rate_date       => l_project_cost_rate_date
17640            ,px_project_rev_rate_type        => l_project_rev_rate_type
17641            ,px_project_rev_rate_date_typ    => l_project_rev_rate_date_typ
17642            ,px_project_rev_rate_date        => l_project_rev_rate_date
17643            ,px_raw_cost_flag                => l_raw_cost_flag
17644            ,px_burdened_cost_flag           => l_burdened_cost_flag
17645            ,px_revenue_flag                 => l_revenue_flag
17646            ,px_cost_qty_flag                => l_cost_qty_flag
17647            ,px_revenue_qty_flag             => l_revenue_qty_flag
17648            ,px_all_qty_flag                 => l_all_qty_flag
17649            ,p_create_new_curr_working_flag  => l_create_new_working_flag
17650            ,p_replace_current_working_flag  => l_replace_current_working_flag
17651            ,p_change_reason_code            => p_change_reason_code
17652            ,p_calling_module                => 'PA_PM_CREATE_DRAFT_BUDGET'
17653            ,p_using_resource_lists_flag     => p_using_resource_lists_flag
17654            ,x_budget_amount_code            => l_budget_amount_code   -- Added for bug 4224464
17655            ,x_msg_count                     => x_msg_count
17656            ,x_msg_data                      => x_msg_data
17657            ,x_return_status                 => x_return_status
17658           );
17659 
17660           IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS )
17661           THEN
17662                RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17663           END IF;
17664 
17665           pa_fin_plan_utils.Get_Curr_Working_Version_Info(
17666                  p_project_id            => l_project_id
17667                 ,p_fin_plan_type_id      => l_fin_plan_type_id
17668                 ,p_version_type          => l_version_type
17669                 ,x_fp_options_id         => l_fp_options_id
17670                 ,x_fin_plan_version_id   => l_curr_work_version_id
17671                 ,x_return_status         => x_return_status
17672                 ,x_msg_count             => x_msg_count
17673                 ,x_msg_data              => x_msg_data );
17674 
17675           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17676               Raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17677           END IF;
17678 
17679     IF l_debug_mode = 'Y' THEN
17680          pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
17681     END IF;
17682 
17683     IF (l_curr_work_version_id IS NOT NULL) THEN
17684 
17685         IF nvl(p_replace_current_working_flag,'N')= 'Y' THEN
17686 
17687               l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
17688                                             (p_budget_version_id => l_curr_work_version_id);
17689               l_user_id := FND_GLOBAL.User_id;
17690               pa_fin_plan_pvt.lock_unlock_version
17691                        (p_budget_version_id       => l_curr_work_version_id,
17692                           p_record_version_number   => l_record_version_number,
17693                         p_action                  => 'L',
17694                         p_user_id                 => l_user_id,
17695                         p_person_id               => NULL,
17696                         x_return_status           => x_return_status,
17697                         x_msg_count               => x_msg_count,
17698                         x_msg_data                => x_msg_data
17699                        );
17700 
17701               IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
17702                   IF l_debug_mode = 'Y' THEN
17703                          pa_debug.g_err_stage := 'Error in lock unlock version - cannot delete working version';
17704                          pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
17705                   END IF;
17706                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17707               END IF;
17708 
17709               pa_fin_plan_pub.delete_version
17710                     ( p_project_id            => l_project_id
17711                            ,p_budget_version_id     => l_curr_work_version_id
17712                            ,p_record_version_number => l_record_version_number
17713                            ,x_return_status         => x_return_status
17714                            ,x_msg_count             => x_msg_count
17715                            ,x_msg_data              => x_msg_data
17716                           );
17717               IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS)
17718               THEN
17719                   pa_debug.g_err_stage:= 'Could not delete the current working version';
17720                   IF l_debug_mode = 'Y' THEN
17721                        pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17722                                                 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17723                   END IF;
17724                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17725               ELSE
17726                   pa_debug.g_err_stage:= 'Deleted the current working version';
17727                   IF l_debug_mode = 'Y' THEN
17728                          pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17729                                   PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17730                   END IF;
17731               END IF;
17732         END IF; --p_replace_current_working_flag = 'Y'
17733     END IF; -- l_curr_work_version_id IS NOT NULL
17734 
17735     IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
17736            l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
17737     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
17738           l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
17739     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
17740           l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
17741     END IF;
17742 
17743     IF l_debug_mode = 'Y' THEN
17744          pa_debug.g_err_stage:= 'Preference code is [' || l_plan_pref_code || ']';
17745           pa_debug.write(l_procedure_name ||
17746                       g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17747     END IF;
17748 
17749  --Bug 5475184. The below block will be used to get the cost/bill rate flags from the plan type option.
17750          --These flags will be set for the new plan version that will be created instead of always setting
17751          --the value 'Y' for these flags in the plan version. Please note that except for these rate flags, other
17752          --amount flags can be passed as input parameters to this API
17753 
17754          --Get the amount set id from the plan type option.
17755          SELECT DECODE(l_version_type,
17756                        PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST, cost_amount_set_id,
17757                        PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE, revenue_amount_set_id,
17758                        PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL, all_amount_set_id)
17759          INTO   l_pt_amount_set_id
17760          FROM   pa_proj_fp_options
17761          WHERE  project_id=l_project_id
17762          AND    fin_plan_type_id=l_fin_plan_type_id
17763          AND    fin_plan_version_id IS NULL;
17764 
17765          IF l_debug_mode = 'Y' THEN
17766               pa_debug.g_err_stage:= 'Plan Type amount set id is [' || l_pt_amount_set_id || ']';
17767               pa_debug.write(l_procedure_name ||
17768                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17769          END IF;
17770 
17771          --Get the plan type flag values
17772          pa_fin_plan_utils.get_plan_amount_flags (
17773          p_amount_set_id       => l_pt_amount_set_id,
17774          x_raw_cost_flag       => l_pt_raw_cost_flag,
17775          x_burdened_flag       => l_pt_burdened_flag,
17776          x_revenue_flag        => l_pt_revenue_flag,
17777          x_cost_quantity_flag  => l_pt_cost_quantity_flag,
17778          x_rev_quantity_flag   => l_pt_rev_quantity_flag,
17779          x_all_quantity_flag   => l_pt_all_quantity_flag,
17780          x_bill_rate_flag      => l_pt_bill_rate_flag,
17781          x_cost_rate_flag      => l_pt_cost_rate_flag,
17782          x_burden_rate_flag    => l_pt_burden_rate_flag,
17783          x_message_count       => x_msg_count,
17784          x_return_status       => x_return_status,
17785          x_message_data        => x_msg_data);
17786 
17787          IF l_debug_mode = 'Y' THEN
17788               pa_debug.g_err_stage:= 'Return status from pa_fin_plan_utils.get_plan_amount_flags is [' || x_return_status || ']';
17789               pa_debug.write(l_procedure_name ||
17790                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17791 
17792               pa_debug.g_err_stage:= 'l_pt_bill_rate_flag is [' || l_pt_bill_rate_flag || ']';
17793               pa_debug.write(l_procedure_name ||
17794                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17795 
17796               pa_debug.g_err_stage:= 'l_pt_cost_rate_flag is [' || l_pt_cost_rate_flag || ']';
17797               pa_debug.write(l_procedure_name ||
17798                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17799 
17800               pa_debug.g_err_stage:= 'l_pt_burden_rate_flag is [' || l_pt_burden_rate_flag || ']';
17801               pa_debug.write(l_procedure_name ||
17802                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17803 
17804          END IF;
17805 
17806          IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS)    THEN
17807 
17808            pa_debug.g_err_stage:= 'pa_fin_plan_utils.get_plan_amount_flags returned error';
17809            IF l_debug_mode = 'Y' THEN
17810                 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17811                                          PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17812            END IF;
17813            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17814 
17815          END IF;
17816 
17817          --Bug 5475184. End of derivation logic for bill/cost rate flags from plan type option.
17818 
17819 /* Bug 5478041: Modified the following 6 variables from parameterized variables to
17820    local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag,l_cost_qty_flag
17821    l_revenue_qty_flag and l_all_qty_flag*/
17822 
17823     pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
17824     (
17825              p_raw_cost_flag            => l_raw_cost_flag
17826             ,p_burdened_cost_flag       => l_burdened_cost_flag
17827             ,p_revenue_flag             => l_revenue_flag
17828             ,p_cost_qty_flag            => l_cost_qty_flag
17829             ,p_revenue_qty_flag         => l_revenue_qty_flag
17830             ,p_all_qty_flag             => l_all_qty_flag
17831             ,p_plan_pref_code           => l_plan_pref_code
17832             ,p_bill_rate_flag           => /*'Y'*/ l_pt_bill_rate_flag   --Bug 5475184
17833             ,p_cost_rate_flag           => /*'Y'*/ l_pt_cost_rate_flag   --Bug 5475184
17834             ,p_burden_rate_flag         => /*'Y'*/ l_pt_burden_rate_flag --Bug 5475184
17835             ,x_cost_amount_set_id       => l_cost_amount_set_id
17836             ,x_revenue_amount_set_id    => l_rev_amount_set_id
17837             ,x_all_amount_set_id        => l_all_amount_set_id
17838             ,x_message_count            => x_msg_count
17839             ,x_return_status            => x_return_status
17840             ,x_message_data             => x_msg_data
17841     );
17842     IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
17843               IF l_debug_mode = 'Y' THEN
17844                      pa_debug.g_err_stage := 'Error in pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID';
17845                      pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
17846               END IF;
17847               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17848     END IF;
17849 
17850     -- bug 3825873 populating l_allow_qty_flag to call validate_budget_lines
17851 
17852     IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST)
17853     THEN
17854             l_amount_set_id := l_cost_amount_set_id;
17855             l_allow_qty_flag := l_cost_qty_flag; -- p_cost_qty_flag; Bug 5478041
17856     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE)
17857     THEN
17858             l_amount_set_id := l_rev_amount_set_id;
17859             l_allow_qty_flag := l_revenue_qty_flag; -- p_revenue_qty_flag;Bug 5478041
17860     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL)
17861     THEN
17862             l_amount_set_id := l_all_amount_set_id;
17863             l_allow_qty_flag := l_all_qty_flag; -- p_all_qty_flag; Bug 5478041
17864     END IF;
17865 
17866     IF l_debug_mode = 'Y' THEN
17867         pa_debug.g_err_stage:= 'Amount set id is [' || l_amount_set_id || ']';
17868         pa_debug.write(l_procedure_name ||
17869                           g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17870     END IF;
17871 
17872     l_struct_elem_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
17873 
17874     IF l_debug_mode = 'Y' THEN
17875            pa_debug.g_err_stage:= 'l_struct_elem_version_id is [' || l_struct_elem_version_id || ']';
17876            pa_debug.write(l_procedure_name ||
17877                           g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17878     END IF;
17879 
17880     l_created_version_id := NULL;
17881 
17882 
17883     IF l_debug_mode = 'Y' THEN
17884            pa_debug.g_err_stage:= 'Calling Create_Version';
17885            pa_debug.write(l_procedure_name ||
17886                           g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17887     END IF;
17888 
17889 --dbms_output.put_line('calling pa_fin_plan_pub.Create_Version');
17890     pa_fin_plan_pub.Create_Version (
17891              p_project_id               => l_project_id
17892             ,p_fin_plan_type_id         => l_fin_plan_type_id
17893             ,p_element_type             => l_version_type
17894             ,p_version_name             => p_budget_version_name
17895             ,p_description              => l_description  -- bug 5031071
17896             ,p_ci_id                    => NULL
17897             ,p_est_proj_raw_cost        => NULL
17898             ,p_est_proj_bd_cost         => NULL
17899             ,p_est_proj_revenue         => NULL
17900             ,p_est_qty                  => NULL
17901             ,p_est_equip_qty            => NULL
17902             ,p_impacted_task_id         => NULL
17903             ,p_agreement_id             => NULL
17904             ,p_calling_context          => l_calling_context
17905             ,p_resource_list_id         => l_resource_list_id
17906             ,p_time_phased_code         => l_time_phased_code
17907             ,p_fin_plan_level_code      => l_fin_plan_level_code /* Bug 6085160 p_fin_plan_level_code */
17908             ,p_plan_in_multi_curr_flag  => l_plan_in_multi_curr_flag /*Bug 4290310. p_plan_in_multi_curr_flag. Passing the
17909             l_plan_in_multi_curr_flag as create_version doesnt handle the conversion of G_MISS_XXX values for this variable. Also
17910             l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
17911             ,p_amount_set_id            => l_amount_set_id
17912             ,p_attribute_category       => l_attribute_category
17913             ,p_attribute1               => l_attribute1
17914             ,p_attribute2               => l_attribute2
17915             ,p_attribute3               => l_attribute3
17916             ,p_attribute4               => l_attribute4
17917             ,p_attribute5               => l_attribute5
17918             ,p_attribute6               => l_attribute6
17919             ,p_attribute7               => l_attribute7
17920             ,p_attribute8               => l_attribute8
17921             ,p_attribute9               => l_attribute9
17922             ,p_attribute10              => l_attribute10
17923             ,p_attribute11              => l_attribute11
17924             ,p_attribute12              => l_attribute12
17925             ,p_attribute13              => l_attribute13
17926             ,p_attribute14              => l_attribute14
17927             ,p_attribute15              => l_attribute15
17928             ,px_budget_version_id       => l_created_version_id
17929             ,p_struct_elem_version_id   => NULL --l_struct_elem_version_id commented for bug 5451269
17930             ,p_pm_product_code          => p_pm_product_code
17931             ,p_finplan_reference        => l_pm_finplan_reference
17932             ,p_change_reason_code       => l_change_reason_code
17933             ,x_proj_fp_option_id        => l_fp_options_id
17934             ,x_return_status            => x_return_status
17935             ,x_msg_count                => x_msg_count
17936             ,x_msg_data                 => x_msg_data );
17937 
17938         IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
17939                 pa_debug.g_err_stage:= 'Error Create_Version';
17940                 IF l_debug_mode = 'Y' THEN
17941                    pa_debug.write( l_procedure_name ||
17942                          g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17943                 END IF;
17944                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17945         END IF;
17946 --dbms_output.put_line('after calling pa_fin_plan_pub.Create_Version l_created_version_id is [' || to_char(l_created_version_id) ||']');
17947         /*========================================================+
17948          | Prepare to call pa_budget_pvt.validate_budget_lines()  |
17949          *========================================================*/
17950         IF ( p_finplan_trans_tab.COUNT > 0 )
17951         THEN
17952                FOR i IN p_finplan_trans_tab.FIRST .. p_finplan_trans_tab.LAST
17953                LOOP
17954                     l_res_asg_in_tbl(i).pm_product_code := p_finplan_trans_tab(i).pm_product_code;
17955                     l_res_asg_in_tbl(i).pa_task_id := p_finplan_trans_tab(i).task_id;
17956                     l_res_asg_in_tbl(i).pm_task_reference := p_finplan_trans_tab(i).pm_task_reference;
17957                     l_res_asg_in_tbl(i).resource_alias := p_finplan_trans_tab(i).resource_alias;
17958                     l_res_asg_in_tbl(i).resource_list_member_id := p_finplan_trans_tab(i).resource_list_member_id;
17959                     l_res_asg_in_tbl(i).budget_start_date := p_finplan_trans_tab(i).start_date;
17960                     l_res_asg_in_tbl(i).budget_end_date := p_finplan_trans_tab(i).end_date;
17961                     l_res_asg_in_tbl(i).raw_cost := p_finplan_trans_tab(i).raw_cost;
17962                     l_res_asg_in_tbl(i).burdened_cost := p_finplan_trans_tab(i).burdened_Cost;
17963                     l_res_asg_in_tbl(i).revenue := p_finplan_trans_tab(i).revenue;
17964                     l_res_asg_in_tbl(i).quantity := p_finplan_trans_tab(i).quantity;
17965                     l_res_asg_in_tbl(i).attribute_category := p_finplan_trans_tab(i).attribute_category;
17966                     l_res_asg_in_tbl(i).txn_currency_code := p_finplan_trans_tab(i).currency_code;
17967                     l_res_asg_in_tbl(i).period_name := NULL;
17968                     l_res_asg_in_tbl(i).description := NULL;
17969                     l_res_asg_in_tbl(i).pm_budget_line_reference := NULL;
17970                     l_res_asg_in_tbl(i).attribute1 := NULL;
17971                     l_res_asg_in_tbl(i).attribute2 := NULL;
17972                     l_res_asg_in_tbl(i).attribute3 := NULL;
17973                     l_res_asg_in_tbl(i).attribute4 := NULL;
17974                     l_res_asg_in_tbl(i).attribute5 := NULL;
17975                     l_res_asg_in_tbl(i).attribute6 := NULL;
17976                     l_res_asg_in_tbl(i).attribute7 := NULL;
17977                     l_res_asg_in_tbl(i).attribute8 := NULL;
17978                     l_res_asg_in_tbl(i).attribute9 := NULL;
17979                     l_res_asg_in_tbl(i).attribute10 := NULL;
17980                     l_res_asg_in_tbl(i).attribute11 := NULL;
17981                     l_res_asg_in_tbl(i).attribute12 := NULL;
17982                     l_res_asg_in_tbl(i).attribute13 := NULL;
17983                     l_res_asg_in_tbl(i).attribute14 := NULL;
17984                     l_res_asg_in_tbl(i).attribute15 := NULL;
17985                     l_res_asg_in_tbl(i).projfunc_cost_rate_type := NULL;
17986                     l_res_asg_in_tbl(i).projfunc_cost_rate_date_type := NULL;
17987                     l_res_asg_in_tbl(i).projfunc_cost_rate_date := NULL;
17988                     l_res_asg_in_tbl(i).projfunc_cost_exchange_rate := NULL;
17989                     l_res_asg_in_tbl(i).projfunc_rev_rate_type := NULL;
17990                     l_res_asg_in_tbl(i).projfunc_rev_rate_date_type := NULL;
17991                     l_res_asg_in_tbl(i).projfunc_rev_rate_date := NULL;
17992                     l_res_asg_in_tbl(i).projfunc_rev_exchange_rate := NULL;
17993                     l_res_asg_in_tbl(i).project_cost_rate_type := NULL;
17994                     l_res_asg_in_tbl(i).project_cost_rate_date_type := NULL;
17995                     l_res_asg_in_tbl(i).project_cost_rate_date := NULL;
17996                     l_res_asg_in_tbl(i).project_cost_exchange_rate := NULL;
17997                     l_res_asg_in_tbl(i).project_rev_rate_type := NULL;
17998                     l_res_asg_in_tbl(i).project_rev_rate_date_type := NULL;
17999                     l_res_asg_in_tbl(i).project_rev_rate_date := NULL;
18000                     l_res_asg_in_tbl(i).project_rev_exchange_rate := NULL;
18001                     l_res_asg_in_tbl(i).change_reason_code := NULL;
18002                END LOOP;
18003 
18004                  l_version_info_rec.x_budget_version_id := l_created_version_id; -- Added for bug 4290310
18005 /* Bug 5478041: Modified the following 3 variables from parameterized variables to
18006    local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag */
18007 --dbms_output.put_line('calling pa_budget_pvt.Validate_Budget_Lines');
18008 
18009                   pa_budget_pvt.Validate_Budget_Lines
18010                         (p_calling_context             => 'RES_ASSGNMT_LEVEL_VALIDATION'
18011                         ,p_pa_project_id               => l_project_id
18012                         ,p_budget_type_code            => NULL
18013                         ,p_fin_plan_type_id            => l_fin_plan_type_id
18014                         ,p_version_type                => l_version_type
18015                         ,p_resource_list_id            => l_resource_list_id
18016                         ,p_time_phased_code            => l_time_phased_code
18017                         ,p_budget_entry_method_code    => NULL
18018                         ,p_entry_level_code            => l_fin_plan_level_code --Bug#5510196
18019                         ,p_allow_qty_flag              => l_allow_qty_flag-- bug 3825873 p_cost_qty_flag
18020                         ,p_allow_raw_cost_flag         => l_raw_cost_flag
18021                         ,p_allow_burdened_cost_flag    => l_burdened_cost_flag
18022                         ,p_allow_revenue_flag          => l_revenue_flag
18023                         ,p_multi_currency_flag         => l_plan_in_multi_curr_flag /*Bug 4290310.p_plan_in_multi_curr_flag. Passing
18024            the l_plan_in_multi_curr_flag as validate_budget_lines doesnt handle the conversion of G_MISS_XXX values for this variable.
18025            Also l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
18026                         ,p_project_cost_rate_type      => NULL
18027                         ,p_project_cost_rate_date_typ  => NULL
18028                         ,p_project_cost_rate_date      => NULL
18029                         ,p_project_cost_exchange_rate  => NULL
18030                         ,p_projfunc_cost_rate_type     => NULL
18031                         ,p_projfunc_cost_rate_date_typ => NULL
18032                         ,p_projfunc_cost_rate_date     => NULL
18033                         ,p_projfunc_cost_exchange_rate => NULL
18034                         ,p_project_rev_rate_type       => NULL
18035                         ,p_project_rev_rate_date_typ   => NULL
18036                         ,p_project_rev_rate_date       => NULL
18037                         ,p_project_rev_exchange_rate   => NULL
18038                         ,p_projfunc_rev_rate_type      => NULL
18039                         ,p_projfunc_rev_rate_date_typ  => NULL
18040                         ,p_projfunc_rev_rate_date      => NULL
18041                         ,p_projfunc_rev_exchange_rate  => NULL
18042                         ,p_version_info_rec            => l_version_info_rec --Added for bug 4290310.
18043                         ,px_budget_lines_in            => l_res_asg_in_tbl
18044                         ,x_budget_lines_out            => l_res_asg_out_tbl
18045                         ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
18046                         ,x_etc_method_code_tbl         => l_etc_method_code_tbl
18047                         ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
18048                         ,x_msg_count                   => l_msg_count
18049                         ,x_msg_data                    => l_msg_data
18050                         ,x_return_status               => l_return_status);
18051 
18052                   IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18053                          --dbms_output.put_line('error occurred while calling pa_budget_pvt.Validate_Budget_Lines');
18054                          RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18055                   END IF;
18056 
18057         END IF; -- p_finplan_trans_tab.COUNT > 0
18058 --dbms_output.put_line('after calling pa_budget_pvt.Validate_Budget_Lines');
18059 
18060 /* Calling Add Planning Transaction */
18061 
18062 cnt := P_finplan_trans_tab.COUNT;
18063 
18064 l_task_number_tbl.EXTEND(cnt);
18065 l_task_elem_version_id_tbl.EXTEND(cnt);
18066 l_pm_task_reference_tbl.EXTEND(cnt);
18067 l_resource_list_member_id_tbl.EXTEND(cnt);
18068 l_pm_res_asgmt_ref_tbl.EXTEND(cnt);
18069 l_currency_code_tbl.EXTEND(cnt);
18070 l_pm_product_code_tbl.EXTEND(cnt);
18071 
18072 l_start_date_tbl.EXTEND(cnt);
18073 l_end_date_tbl.EXTEND(cnt);
18074 
18075 l_quantity_tbl.EXTEND(cnt);
18076 l_raw_cost_tbl.EXTEND(cnt);
18077 l_burdened_cost_tbl.EXTEND(cnt);
18078 l_revenue_tbl.EXTEND(cnt);
18079 
18080 l_attribute_category_tbl.EXTEND(cnt);
18081 l_attribute1_tbl.EXTEND(cnt);
18082 l_attribute2_tbl.EXTEND(cnt);
18083 l_attribute3_tbl.EXTEND(cnt);
18084 l_attribute4_tbl.EXTEND(cnt);
18085 l_attribute5_tbl.EXTEND(cnt);
18086 l_attribute6_tbl.EXTEND(cnt);
18087 l_attribute7_tbl.EXTEND(cnt);
18088 l_attribute8_tbl.EXTEND(cnt);
18089 l_attribute9_tbl.EXTEND(cnt);
18090 l_attribute10_tbl.EXTEND(cnt);
18091 l_attribute11_tbl.EXTEND(cnt);
18092 l_attribute12_tbl.EXTEND(cnt);
18093 l_attribute13_tbl.EXTEND(cnt);
18094 l_attribute14_tbl.EXTEND(cnt);
18095 l_attribute15_tbl.EXTEND(cnt);
18096 l_attribute16_tbl.EXTEND(cnt);
18097 l_attribute17_tbl.EXTEND(cnt);
18098 l_attribute18_tbl.EXTEND(cnt);
18099 l_attribute19_tbl.EXTEND(cnt);
18100 l_attribute20_tbl.EXTEND(cnt);
18101 l_attribute21_tbl.EXTEND(cnt);
18102 l_attribute22_tbl.EXTEND(cnt);
18103 l_attribute23_tbl.EXTEND(cnt);
18104 l_attribute24_tbl.EXTEND(cnt);
18105 l_attribute25_tbl.EXTEND(cnt);
18106 l_attribute26_tbl.EXTEND(cnt);
18107 l_attribute27_tbl.EXTEND(cnt);
18108 l_attribute28_tbl.EXTEND(cnt);
18109 l_attribute29_tbl.EXTEND(cnt);
18110 l_attribute30_tbl.EXTEND(cnt);
18111 
18112  IF P_finplan_trans_tab.COUNT > 0 THEN -- Added for Bug 3793370
18113     FOR  i in 1 .. P_finplan_trans_tab.LAST
18114     LOOP
18115           IF P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18116                   l_task_number_tbl(i) := NULL;
18117           ELSE
18118                   BEGIN
18119                          SELECT t.task_number
18120                            INTO l_task_number
18121                            FROM pa_tasks t
18122                           WHERE t.task_id = P_finplan_trans_tab(i).task_id;
18123                          l_task_number_tbl(i) := l_task_number;
18124 
18125                   EXCEPTION
18126                           WHEN OTHERS THEN
18127                             RAISE;
18128                   END; -- anonymous
18129           END IF;
18130 
18131           IF P_finplan_trans_tab(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18132                   l_pm_task_reference_tbl(i) := NULL;
18133           ELSE
18134                   l_pm_task_reference_tbl(i) := P_finplan_trans_tab(i).pm_task_reference;
18135           END IF;
18136           IF P_finplan_trans_tab(i).CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18137                   l_currency_code_tbl(i) := NULL;
18138           ELSE
18139                   l_currency_code_tbl(i) := P_finplan_trans_tab(i).CURRENCY_CODE;
18140           END IF;
18141 
18142           IF P_finplan_trans_tab(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18143                   l_pm_product_code_tbl(i) := NULL;
18144           ELSE
18145                   l_pm_product_code_tbl(i) := P_finplan_trans_tab(i).pm_product_code;
18146           END IF;
18147 
18148           IF ( P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_struct_elem_version_id IS NULL ) THEN
18149                   l_task_elem_version_id_tbl(i) := NULL;
18150           ELSE
18151                   BEGIN
18152                          SELECT element_version_id
18153                            INTO l_task_elem_version_id_tbl(i)
18154                            FROM pa_struct_task_wbs_v
18155                           WHERE parent_structure_version_id = l_struct_elem_version_id
18156                            AND  project_id = l_project_id
18157                            AND  task_id = P_finplan_trans_tab(i).task_id;
18158                   EXCEPTION
18159                       WHEN OTHERS THEN RAISE;
18160                   END; -- anonymous
18161          END IF;
18162 
18163          /* Commented out the code for Bug 5079329.
18164           IF P_finplan_trans_tab(i).resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18165                   l_resource_list_member_id_tbl(i) := NULL;
18166           ELSE
18167                   l_resource_list_member_id_tbl(i) :=  P_finplan_trans_tab(i).resource_list_member_id;
18168           END IF;
18169         */
18170 
18171         /* Added for Bug 5079329*/
18172           l_resource_list_member_id_tbl(i) := l_res_asg_in_tbl(i).resource_list_member_id;
18173 
18174           IF P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18175                   l_pm_res_asgmt_ref_tbl(i) := NULL;
18176           ELSE
18177                   l_pm_res_asgmt_ref_tbl(i)        :=   P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE;
18178           END IF;
18179 
18180 
18181           IF P_finplan_trans_tab(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18182                   l_start_date_tbl(i) := NULL;
18183           ELSE
18184                   l_start_date_tbl(i)        :=   P_finplan_trans_tab(i).start_date;
18185           END IF;
18186 
18187           IF P_finplan_trans_tab(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18188                   l_end_date_tbl(i) := NULL;
18189           ELSE
18190                   l_end_date_tbl(i)        :=   P_finplan_trans_tab(i).end_date;
18191           END IF;
18192 
18193           IF P_finplan_trans_tab(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18194                   l_quantity_tbl(i) := NULL;
18195           ELSE
18196                   l_quantity_tbl(i)        :=   P_finplan_trans_tab(i).quantity;
18197           END IF;
18198 
18199           IF P_finplan_trans_tab(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18200                   l_raw_cost_tbl(i) := NULL;
18201           ELSE
18202                   l_raw_cost_tbl(i)        :=   P_finplan_trans_tab(i).raw_cost;
18203           END IF;
18204 
18205           IF P_finplan_trans_tab(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18206                   l_burdened_cost_tbl(i) := NULL;
18207           ELSE
18208                   l_burdened_cost_tbl(i)        :=   P_finplan_trans_tab(i).burdened_cost;
18209           END IF;
18210 
18211           IF P_finplan_trans_tab(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18212                   L_revenue_tbl(i) := NULL;
18213           ELSE
18214                   l_revenue_tbl(i)        :=   P_finplan_trans_tab(i).revenue;
18215           END IF;
18216 
18217 --When descriptive flex fields are not passed set them to NULL
18218 
18219          IF  P_finplan_trans_tab(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18220             l_attribute_category_tbl(i) := NULL;
18221          ELSE
18222             l_attribute_category_tbl(i) := P_finplan_trans_tab(i).attribute_category;
18223          END IF;
18224 
18225          IF  P_finplan_trans_tab(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18226             l_attribute1_tbl(i) := NULL;
18227          ELSE
18228            l_attribute1_tbl(i) := P_finplan_trans_tab(i).attribute1;
18229          END IF;
18230 
18231          IF  P_finplan_trans_tab(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18232             l_attribute2_tbl(i) := NULL;
18233          ELSE
18234            l_attribute2_tbl(i) := P_finplan_trans_tab(i).attribute2;
18235          END IF;
18236 
18237          IF  P_finplan_trans_tab(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18238             l_attribute3_tbl(i) := NULL;
18239          ELSE
18240            l_attribute3_tbl(i) := P_finplan_trans_tab(i).attribute3;
18241          END IF;
18242 
18243          IF  P_finplan_trans_tab(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18244             l_attribute4_tbl(i) := NULL;
18245          ELSE
18246            l_attribute4_tbl(i) := P_finplan_trans_tab(i).attribute4;
18247          END IF;
18248 
18249          IF  P_finplan_trans_tab(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18250             l_attribute5_tbl(i) := NULL;
18251          ELSE
18252            l_attribute5_tbl(i) := P_finplan_trans_tab(i).attribute5;
18253          END IF;
18254 
18255          IF  P_finplan_trans_tab(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18256             l_attribute6_tbl(i) := NULL;
18257          ELSE
18258            l_attribute6_tbl(i) := P_finplan_trans_tab(i).attribute6;
18259          END IF;
18260 
18261          IF  P_finplan_trans_tab(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18262             l_attribute7_tbl(i) := NULL;
18263          ELSE
18264            l_attribute7_tbl(i) := P_finplan_trans_tab(i).attribute7;
18265          END IF;
18266 
18267          IF  P_finplan_trans_tab(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18268             l_attribute8_tbl(i) := NULL;
18269          ELSE
18270            l_attribute8_tbl(i) := P_finplan_trans_tab(i).attribute8;
18271          END IF;
18272 
18273          IF  P_finplan_trans_tab(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18274             l_attribute9_tbl(i) := NULL;
18275          ELSE
18276            l_attribute9_tbl(i) := P_finplan_trans_tab(i).attribute9;
18277          END IF;
18278 
18279          IF  P_finplan_trans_tab(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18280             l_attribute10_tbl(i) := NULL;
18281          ELSE
18282            l_attribute10_tbl(i) := P_finplan_trans_tab(i).attribute10;
18283          END IF;
18284 
18285          IF  P_finplan_trans_tab(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18286             l_attribute11_tbl(i) := NULL;
18287          ELSE
18288            l_attribute11_tbl(i) := P_finplan_trans_tab(i).attribute11;
18289          END IF;
18290 
18291          IF  P_finplan_trans_tab(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18292             l_attribute12_tbl(i) := NULL;
18293          ELSE
18294            l_attribute12_tbl(i) := P_finplan_trans_tab(i).attribute12;
18295          END IF;
18296 
18297          IF  P_finplan_trans_tab(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18298             l_attribute13_tbl(i) := NULL;
18299          ELSE
18300            l_attribute13_tbl(i) := P_finplan_trans_tab(i).attribute13;
18301          END IF;
18302 
18303          IF  P_finplan_trans_tab(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18304             l_attribute14_tbl(i) := NULL;
18305          ELSE
18306            l_attribute14_tbl(i) := P_finplan_trans_tab(i).attribute14;
18307          END IF;
18308 
18309          IF  P_finplan_trans_tab(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18310             l_attribute15_tbl(i) := NULL;
18311          ELSE
18312            l_attribute15_tbl(i) := P_finplan_trans_tab(i).attribute15;
18313          END IF;
18314 
18315          IF  P_finplan_trans_tab(i).attribute16 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18316             l_attribute16_tbl(i) := NULL;
18317          ELSE
18318            l_attribute16_tbl(i) := P_finplan_trans_tab(i).attribute16;
18319          END IF;
18320 
18321          IF  P_finplan_trans_tab(i).attribute17 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18322             l_attribute17_tbl(i) := NULL;
18323          ELSE
18324            l_attribute17_tbl(i) := P_finplan_trans_tab(i).attribute17;
18325          END IF;
18326 
18327          IF  P_finplan_trans_tab(i).attribute18 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18328             l_attribute18_tbl(i) := NULL;
18329          ELSE
18330            l_attribute18_tbl(i) := P_finplan_trans_tab(i).attribute18;
18331          END IF;
18332 
18333          IF  P_finplan_trans_tab(i).attribute19 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18334             l_attribute19_tbl(i) := NULL;
18335          ELSE
18336            l_attribute19_tbl(i) := P_finplan_trans_tab(i).attribute19;
18337          END IF;
18338 
18339          IF  P_finplan_trans_tab(i).attribute20 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18340             l_attribute20_tbl(i) := NULL;
18341          ELSE
18342            l_attribute20_tbl(i) := P_finplan_trans_tab(i).attribute20;
18343          END IF;
18344 
18345          IF  P_finplan_trans_tab(i).attribute21 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18346             l_attribute21_tbl(i) := NULL;
18347          ELSE
18348            l_attribute21_tbl(i) := P_finplan_trans_tab(i).attribute21;
18349          END IF;
18350 
18351          IF  P_finplan_trans_tab(i).attribute22 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18352             l_attribute22_tbl(i) := NULL;
18353          ELSE
18354            l_attribute22_tbl(i) := P_finplan_trans_tab(i).attribute22;
18355          END IF;
18356 
18357          IF  P_finplan_trans_tab(i).attribute23 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18358             l_attribute23_tbl(i) := NULL;
18359          ELSE
18360            l_attribute23_tbl(i) := P_finplan_trans_tab(i).attribute23;
18361          END IF;
18362 
18363          IF  P_finplan_trans_tab(i).attribute24 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18364             l_attribute24_tbl(i) := NULL;
18365          ELSE
18366            l_attribute24_tbl(i) := P_finplan_trans_tab(i).attribute24;
18367          END IF;
18368 
18369          IF  P_finplan_trans_tab(i).attribute25 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18370             l_attribute25_tbl(i) := NULL;
18371          ELSE
18372            l_attribute25_tbl(i) := P_finplan_trans_tab(i).attribute25;
18373          END IF;
18374 
18375          IF  P_finplan_trans_tab(i).attribute26 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18376             l_attribute26_tbl(i) := NULL;
18377          ELSE
18378            l_attribute26_tbl(i) := P_finplan_trans_tab(i).attribute26;
18379          END IF;
18380 
18381          IF  P_finplan_trans_tab(i).attribute27 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18382             l_attribute27_tbl(i) := NULL;
18383          ELSE
18384            l_attribute27_tbl(i) := P_finplan_trans_tab(i).attribute27;
18385          END IF;
18386 
18387          IF  P_finplan_trans_tab(i).attribute28 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18388             l_attribute28_tbl(i) := NULL;
18389          ELSE
18390            l_attribute28_tbl(i) := P_finplan_trans_tab(i).attribute28;
18391          END IF;
18392 
18393          IF  P_finplan_trans_tab(i).attribute29 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18394             l_attribute29_tbl(i) := NULL;
18395          ELSE
18396            l_attribute29_tbl(i) := P_finplan_trans_tab(i).attribute29;
18397          END IF;
18398 
18399          IF  P_finplan_trans_tab(i).attribute30 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18400             l_attribute30_tbl(i) := NULL;
18401          ELSE
18402            l_attribute30_tbl(i) := P_finplan_trans_tab(i).attribute30;
18403          END IF;
18404 
18405 
18406 END LOOP;
18407 
18408       Select decode(plan_class_code,
18409           'BUDGET',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
18410           'FORECAST',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)
18411       Into l_plan_tran_context
18412       From pa_fin_plan_types_b
18413       Where fin_plan_type_id = l_fin_plan_type_id;
18414 
18415 /* Calling Add Planning Transaction API */
18416 
18417 
18418 --dbms_output.put_line('calling pa_fp_planning_transaction_pub.add_planning_transactions bvid [' || to_char(l_created_version_id) || ']');
18419       /*
18420        | Bug 3709462. Passed p_one_to_one_mapping_flag ('Y') to avoid creation of
18421        |              Resource Assignments for combinations of Task and Resource.
18422        */
18423       pa_fp_planning_transaction_pub.add_planning_transactions
18424       (       p_context                      => l_plan_tran_context
18425             , p_one_to_one_mapping_flag      => 'Y'
18426             , p_calling_module               => 'CREATE_DRAFT_FINPLAN'
18427             , p_project_id                   => l_project_id
18428             , p_budget_version_id            => l_created_version_id
18429             , p_task_elem_version_id_tbl     => l_task_elem_version_id_tbl
18430             , p_task_name_tbl                => l_pm_task_reference_tbl
18431             , p_task_number_tbl              => l_task_number_tbl
18432             , p_planning_start_date_tbl      => l_start_date_tbl -- Bug 5026210
18433             , p_planning_end_date_tbl        => l_end_date_tbl -- Bug 5026210
18434             , p_resource_list_member_id_tbl  => l_resource_list_member_id_tbl
18435             , p_quantity_tbl                 => l_quantity_tbl
18436             , p_currency_code_tbl            => l_currency_code_tbl
18437             , p_raw_cost_tbl                 => l_raw_cost_tbl
18438             , p_burdened_cost_tbl            => l_burdened_cost_tbl
18439             , p_revenue_tbl                  => l_revenue_tbl
18440             , p_skip_duplicates_flag         => 'N'
18441             , p_pm_product_code              => l_pm_product_code_tbl
18442             , p_pm_res_asgmt_ref             => l_pm_res_asgmt_ref_tbl
18443             , p_attribute_category_tbl       => l_attribute_category_tbl
18444             , p_attribute1                 => l_attribute1_tbl
18445             , p_attribute2                 => l_attribute2_tbl
18446             , p_attribute3                 => l_attribute3_tbl
18447             , p_attribute4                 => l_attribute4_tbl
18448             , p_attribute5                 => l_attribute5_tbl
18449             , p_attribute6                 => l_attribute6_tbl
18450             , p_attribute7                 => l_attribute7_tbl
18451             , p_attribute8                 => l_attribute8_tbl
18452             , p_attribute9                 => l_attribute9_tbl
18453             , p_attribute10                => l_attribute10_tbl
18454             , p_attribute11                => l_attribute11_tbl
18455             , p_attribute12                => l_attribute12_tbl
18456             , p_attribute13                => l_attribute13_tbl
18457             , p_attribute14                => l_attribute14_tbl
18458             , p_attribute15                => l_attribute15_tbl
18459             , p_attribute16                => l_attribute16_tbl
18460             , p_attribute17                => l_attribute17_tbl
18461             , p_attribute18                => l_attribute18_tbl
18462             , p_attribute19                => l_attribute19_tbl
18463             , p_attribute20                => l_attribute20_tbl
18464             , p_attribute21                => l_attribute21_tbl
18465             , p_attribute22                => l_attribute22_tbl
18466             , p_attribute23                => l_attribute23_tbl
18467             , p_attribute24                => l_attribute24_tbl
18468             , p_attribute25                => l_attribute25_tbl
18469             , p_attribute26                => l_attribute26_tbl
18470             , p_attribute27                => l_attribute27_tbl
18471             , p_attribute28                => l_attribute28_tbl
18472             , p_attribute29                => l_attribute29_tbl
18473             , p_attribute30                => l_attribute30_tbl
18474             , x_return_status                => l_return_status
18475             , x_msg_count                    => l_msg_count
18476             , x_msg_data                     => l_msg_data
18477       );
18478       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18479       THEN
18480                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18481       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18482       THEN
18483                 RAISE  FND_API.G_EXC_ERROR;
18484       END IF;
18485  END IF; -- 3793370 -- P_finplan_trans_tab.COUNT > 0
18486 /************************************
18487         l_fp_version_ids_tbl.extend;
18488         l_fp_version_ids_tbl(1) := l_created_version_id;
18489         PJI_FM_XBS_ACCUM_MAINT.plan_create( p_fp_version_ids   => l_fp_version_ids_tbl
18490                                            ,x_return_status    => l_return_status
18491                                  ,x_msg_code         => l_msg_code
18492                                           );
18493         IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18494         THEN
18495                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18496         ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18497         THEN
18498                 RAISE  FND_API.G_EXC_ERROR;
18499         END IF;
18500 ********************/
18501 
18502         x_finplan_version_id := l_created_version_id;
18503 
18504         IF ( p_create_new_curr_working_flag = 'Y' OR
18505              p_replace_current_working_flag = 'Y')
18506         THEN
18507 --dbms_output.put_line('pa_fin_plan_utils.Get_Curr_Working_Version_Info');
18508             pa_fin_plan_utils.Get_Curr_Working_Version_Info(
18509                    p_project_id            => l_project_id
18510                   ,p_fin_plan_type_id      => l_fin_plan_type_id
18511                   ,p_version_type          => l_version_type
18512                   ,x_fp_options_id         => l_proj_fp_options_id
18513                   ,x_fin_plan_version_id   => l_CW_version_id
18514                   ,x_return_status         => x_return_status
18515                   ,x_msg_count             => x_msg_count
18516                   ,x_msg_data              => x_msg_data );
18517             IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18518             THEN
18519                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18520             ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18521             THEN
18522                 RAISE  FND_API.G_EXC_ERROR;
18523             END IF;
18524             IF  ( l_created_version_id <>  l_CW_version_id )
18525             THEN
18526                 pa_debug.g_err_stage:= 'l_created_version_id [' || TO_CHAR(l_created_version_id) ||
18527                                   '] is not same as l_CW_version_id [' || TO_CHAR(l_CW_version_id) || ']';
18528                 IF l_debug_mode = 'Y' THEN
18529                    pa_debug.write( l_procedure_name ||
18530                          g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18531                 END IF;
18532 
18533                 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18534 
18535                 l_created_ver_rec_ver_num := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_created_version_id);
18536                 l_user_id := FND_GLOBAL.User_id;
18537                 PA_COMP_PROFILE_PUB.GET_USER_INFO
18538                       (p_user_id         => l_user_id,
18539                        x_person_id       => t_person_id,
18540                        x_resource_id     => t_resource_id,
18541                        x_resource_name   => t_resource_name);
18542 --dbms_output.put_line('pa_fin_plan_pvt.lock_unlock_version');
18543                 pa_fin_plan_pvt.lock_unlock_version
18544                        (p_budget_version_id       => l_CW_version_id,
18545                         p_record_version_number   => l_CW_record_version_number,
18546                         p_action                  => 'L',
18547                         p_user_id                 => l_user_id,
18548                         p_person_id               => NULL,
18549                         x_return_status           => x_return_status,
18550                         x_msg_count               => x_msg_count,
18551                         x_msg_data                => x_msg_data) ;
18552 
18553                 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
18554                         IF l_debug_mode = 'Y' THEN
18555                               pa_debug.g_err_stage := 'Error executing lock unlock version';
18556                               pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,3);
18557                         END IF;
18558                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18559                 END IF;
18560                 IF l_debug_mode = 'Y' THEN
18561                         pa_debug.g_err_stage := 'About to call set current working version';
18562                         pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
18563                 END IF;
18564 
18565 
18566                 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18567 --dbms_output.put_line('pa_fin_plan_pub.Set_Current_Working');
18568                 pa_fin_plan_pub.Set_Current_Working
18569                         (p_project_id                  => l_project_id,
18570                          p_budget_version_id           => l_created_version_id,
18571                          p_record_version_number       => l_created_ver_rec_ver_num,
18572                          p_orig_budget_version_id      => l_CW_version_id,
18573                          p_orig_record_version_number  => l_CW_record_version_number,
18574                          x_return_status               => x_return_status,
18575                          x_msg_count                   => x_msg_count,
18576                          x_msg_data                    => x_msg_data);
18577 
18578                 IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
18579                         IF l_debug_mode = 'Y' THEN
18580                               pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
18581                               pa_debug.write('CREATE_DRAFT: ' ||
18582                                    g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18583                         END IF;
18584                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18585                 END IF;
18586             END IF; --l_created_version_id <>  l_CW_version_id
18587 
18588       END IF;  --p_create_new_curr_working_flag = 'Y' OR p_replace_current_working_flag = 'Y'
18589 --dbms_output.put_line('PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS');
18590       PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS
18591           (p_fin_plan_version_id             => l_created_version_id
18592           ,p_budget_lines_in                 => l_budget_lines_in
18593           ,p_calling_context                 => 'CREATE_DRAFT_FINPLAN'
18594           ,x_fp_lines_retn_status_tab        => l_budget_lines_out
18595           ,x_return_status                   => x_return_status
18596           ,x_msg_count                       => x_msg_count
18597           ,x_msg_data                        => x_msg_data
18598          );
18599 
18600       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18601       THEN
18602                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18603       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18604       THEN
18605                 RAISE  FND_API.G_EXC_ERROR;
18606       END IF;
18607       /*====================================================================+
18608        | If any of the budget lines had any rejections, set x_return_status |
18609        | appropriately - So, whoever calls this API would know - there was  |
18610        | issue creating atleast one of the budget lines.                    |
18611        +====================================================================*/
18612       IF ( x_return_status = 'R')
18613       THEN
18614              -- bug 3825873 donot raise error it will rollback the entire changes
18615              -- bug 3825873 RAISE  FND_API.G_EXC_ERROR;
18616              x_return_status := 'S';
18617       END IF;
18618 
18619       --Changes for bug 3823485
18620       IF FND_API.TO_BOOLEAN( p_commit )
18621       THEN
18622 
18623             IF l_debug_mode = 'Y' THEN
18624                   pa_debug.g_err_stage := 'About to do a COMMIT';
18625                   pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18626             END IF;
18627 
18628             COMMIT;
18629       END IF;
18630 
18631       IF l_debug_mode = 'Y' THEN
18632             pa_debug.g_err_stage := 'Leaving create draft finplan';
18633             pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18634 
18635             pa_debug.reset_curr_function;
18636       END IF;
18637 
18638 EXCEPTION
18639      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
18640 
18641            ROLLBACK TO create_draft_finplan_pub;
18642 
18643            IF l_debug_mode = 'Y' THEN
18644                   pa_debug.g_err_stage:='In invalid args exception';
18645                   pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18646            END IF;
18647 
18648            l_msg_count := FND_MSG_PUB.count_msg;
18649            IF l_msg_count = 1 THEN
18650 
18651                  IF l_debug_mode = 'Y' THEN
18652                       pa_debug.g_err_stage:='In invalid args exception 1';
18653                       pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18654                  END IF;
18655 
18656                  PA_INTERFACE_UTILS_PUB.get_messages
18657                      ( p_encoded        => FND_API.G_TRUE
18658                       ,p_msg_index      => 1
18659                       ,p_msg_count      => l_msg_count
18660                       ,p_msg_data       => l_msg_data
18661                       ,p_data           => l_msg_data
18662                       ,p_msg_index_out  => l_msg_index_out);
18663 
18664                  x_msg_data  := l_msg_data;
18665                  x_msg_count := l_msg_count;
18666            ELSE
18667                  IF l_debug_mode = 'Y' THEN
18668                       pa_debug.g_err_stage:='In invalid args exception 2';
18669                       pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18670                  END IF;
18671                  x_msg_count := l_msg_count;
18672            END IF;
18673 
18674 
18675            x_return_status := FND_API.G_RET_STS_ERROR;
18676 
18677            IF l_debug_mode = 'Y' THEN
18678                pa_debug.g_err_stage:='In invalid args exception 3';
18679                pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18680                pa_debug.reset_curr_function;
18681            END IF;
18682 
18683      WHEN OTHERS THEN
18684 
18685              ROLLBACK TO create_draft_finplan_pub;
18686 
18687              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18688              x_msg_count     := 1;
18689              x_msg_data      := SQLERRM;
18690 
18691              FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
18692                                   ,p_procedure_name  => 'Update_Planning_Transactions');
18693 
18694              IF l_debug_mode = 'Y' THEN
18695                pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
18696                pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18697                pa_debug.reset_curr_function;
18698              END IF;
18699 
18700              RAISE;
18701 
18702 END CREATE_DRAFT_FINPLAN;
18703 
18704 PROCEDURE load_resource_info(
18705  P_PM_PRODUCT_CODE PA_BUDGET_VERSIONS.PM_PRODUCT_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18706 ,P_TASK_ID PA_TASKS.TASK_ID%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18707 ,P_PM_TASK_REFERENCE PA_TASKS.PM_TASK_REFERENCE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18708 ,P_PM_RES_ASGMT_REFERENCE VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18709 ,P_RESOURCE_ALIAS         VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18710 ,P_CURRENCY_CODE PA_BUDGET_LINES.TXN_CURRENCY_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18711 ,P_UNIT_OF_MEASURE_CODE PA_RESOURCE_ASSIGNMENTS.UNIT_OF_MEASURE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18712 ,P_START_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_START_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18713 ,P_END_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_END_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18714 ,P_QUANTITY                NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18715 ,P_RAW_COST                NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18716 ,P_BURDENED_COST           NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18717 ,P_REVENUE                 NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18718 ,P_RESOURCE_LIST_MEMBER_ID NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18719 ,P_ATTRIBUTE_CATEGORY PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE_CATEGORY%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18720 ,P_ATTRIBUTE1 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE1%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18721 ,P_ATTRIBUTE2 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE2%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18722 ,P_ATTRIBUTE3 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE3%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18723 ,P_ATTRIBUTE4 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE4%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18724 ,P_ATTRIBUTE5 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE5%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18725 ,P_ATTRIBUTE6 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE6%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18726 ,P_ATTRIBUTE7 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE7%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18727 ,P_ATTRIBUTE8 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE8%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18728 ,P_ATTRIBUTE9 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE9%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18729 ,P_ATTRIBUTE10 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE10%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18730 ,P_ATTRIBUTE11 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE11%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18731 ,P_ATTRIBUTE12 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE12%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18732 ,P_ATTRIBUTE13 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE13%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18733 ,P_ATTRIBUTE14 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE14%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18734 ,P_ATTRIBUTE15 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE15%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18735 ,P_ATTRIBUTE16 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE16%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18736 ,P_ATTRIBUTE17 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE17%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18737 ,P_ATTRIBUTE18 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE18%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18738 ,P_ATTRIBUTE19 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE19%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18739 ,P_ATTRIBUTE20 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE20%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18740 ,P_ATTRIBUTE21 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE21%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18741 ,P_ATTRIBUTE22 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE22%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18742 ,P_ATTRIBUTE23 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE23%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18743 ,P_ATTRIBUTE24 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE24%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18744 ,P_ATTRIBUTE25 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE25%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18745 ,P_ATTRIBUTE26 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE26%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18746 ,P_ATTRIBUTE27 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE27%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18747 ,P_ATTRIBUTE28 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE28%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18748 ,P_ATTRIBUTE29 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE29%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18749 ,P_ATTRIBUTE30 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE30%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18750 ) IS
18751       cnt number:=0;
18752 BEGIN
18753       G_PM_PRODUCT_CODE_TBL.extend(1);
18754       G_TASK_ID_TBL.extend(1);
18755       G_PM_TASK_REFERENCE_TBL.extend(1);
18756       G_PM_RES_ASGMT_REFERENCE_TBL.extend(1);
18757       G_RESOURCE_ALIAS_TBL.extend(1);
18758       G_CURRENCY_CODE_TBL.extend(1);
18759       G_UNIT_OF_MEASURE_CODE_TBL.extend(1);
18760       G_START_DATE_TBL.extend(1);
18761       G_END_DATE_TBL.extend(1);
18762       G_QUANTITY_TBL.extend(1);
18763       G_RAW_COST_TBL.extend(1);
18764       G_BURDENED_COST_TBL.extend(1);
18765       G_REVENUE_TBL.extend(1);
18766       G_RESOURCE_LIST_MEMBER_ID_TBL.extend(1);
18767       G_ATTRIBUTE_CATEGORY_TBL.extend(1);
18768       G_ATTRIBUTE1_TBL.extend(1);
18769       G_ATTRIBUTE2_TBL.extend(1);
18770       G_ATTRIBUTE3_TBL.extend(1);
18771       G_ATTRIBUTE4_TBL.extend(1);
18772       G_ATTRIBUTE5_TBL.extend(1);
18773       G_ATTRIBUTE6_TBL.extend(1);
18774       G_ATTRIBUTE7_TBL.extend(1);
18775       G_ATTRIBUTE8_TBL.extend(1);
18776       G_ATTRIBUTE9_TBL.extend(1);
18777       G_ATTRIBUTE10_TBL.extend(1);
18778       G_ATTRIBUTE11_TBL.extend(1);
18779       G_ATTRIBUTE12_TBL .extend(1);
18780       G_ATTRIBUTE13_TBL.extend(1);
18781       G_ATTRIBUTE14_TBL.extend(1);
18782       G_ATTRIBUTE15_TBL.extend(1);
18783       G_ATTRIBUTE16_TBL.extend(1);
18784       G_ATTRIBUTE17_TBL.extend(1);
18785       G_ATTRIBUTE18_TBL.extend(1);
18786       G_ATTRIBUTE19_TBL.extend(1);
18787       G_ATTRIBUTE20_TBL.extend(1);
18788       G_ATTRIBUTE21_TBL.extend(1);
18789       G_ATTRIBUTE22_TBL.extend(1);
18790       G_ATTRIBUTE23_TBL.extend(1);
18791       G_ATTRIBUTE24_TBL.extend(1);
18792       G_ATTRIBUTE25_TBL.extend(1);
18793       G_ATTRIBUTE26_TBL.extend(1);
18794       G_ATTRIBUTE27_TBL.extend(1);
18795       G_ATTRIBUTE28_TBL.extend(1);
18796       G_ATTRIBUTE29_TBL.extend(1);
18797       G_ATTRIBUTE30_TBL.extend(1);
18798 --dbms_output.put_line('extending over');
18799 
18800       --find the count on the table.
18801       cnt := G_START_DATE_TBL.COUNT;
18802 --dbms_output.put_line('G has [' || to_char(cnt) || '] records');
18803 
18804       G_PM_PRODUCT_CODE_TBL(cnt)               := P_PM_PRODUCT_CODE;
18805       G_TASK_ID_TBL(cnt)                       := P_TASK_ID;
18806       G_PM_TASK_REFERENCE_TBL(cnt)             := P_PM_TASK_REFERENCE;
18807       G_PM_RES_ASGMT_REFERENCE_TBL(cnt)        := P_PM_RES_ASGMT_REFERENCE;
18808       G_RESOURCE_ALIAS_TBL(cnt)                := P_RESOURCE_ALIAS;
18809       G_CURRENCY_CODE_TBL(cnt)                 := P_CURRENCY_CODE;
18810       G_UNIT_OF_MEASURE_CODE_TBL(cnt)          := P_UNIT_OF_MEASURE_CODE;
18811       G_START_DATE_TBL(cnt)                    := P_START_DATE;
18812       G_END_DATE_TBL(cnt)                      := P_END_DATE;
18813       G_QUANTITY_TBL(cnt)                      := P_QUANTITY;
18814       G_RAW_COST_TBL(cnt)                      := P_RAW_COST;
18815       G_BURDENED_COST_TBL(cnt)                 := P_BURDENED_COST;
18816       G_REVENUE_TBL(cnt)                       := P_REVENUE;
18817       G_RESOURCE_LIST_MEMBER_ID_TBL(cnt)       := P_RESOURCE_LIST_MEMBER_ID;
18818       G_ATTRIBUTE_CATEGORY_TBL(cnt)            := P_ATTRIBUTE_CATEGORY;
18819       G_ATTRIBUTE1_TBL(cnt)                    := P_ATTRIBUTE1;
18820       G_ATTRIBUTE2_TBL(cnt)                    := P_ATTRIBUTE2;
18821       G_ATTRIBUTE3_TBL(cnt)                    := P_ATTRIBUTE3;
18822       G_ATTRIBUTE4_TBL(cnt)                    := P_ATTRIBUTE4;
18823       G_ATTRIBUTE5_TBL(cnt)                    := P_ATTRIBUTE5;
18824       G_ATTRIBUTE6_TBL(cnt)                    := P_ATTRIBUTE6;
18825       G_ATTRIBUTE7_TBL(cnt)                    := P_ATTRIBUTE7;
18826       G_ATTRIBUTE8_TBL(cnt)                    := P_ATTRIBUTE8;
18827       G_ATTRIBUTE9_TBL(cnt)                    := P_ATTRIBUTE9;
18828       G_ATTRIBUTE10_TBL(cnt)                   := P_ATTRIBUTE10;
18829       G_ATTRIBUTE11_TBL(cnt)                   := P_ATTRIBUTE11;
18830       G_ATTRIBUTE12_TBL (cnt)                  := P_ATTRIBUTE12;
18831       G_ATTRIBUTE13_TBL(cnt)                   := P_ATTRIBUTE13;
18832       G_ATTRIBUTE14_TBL(cnt)                   := P_ATTRIBUTE14;
18833       G_ATTRIBUTE15_TBL(cnt)                   := P_ATTRIBUTE15;
18834       G_ATTRIBUTE16_TBL(cnt)                   := P_ATTRIBUTE16;
18835       G_ATTRIBUTE17_TBL(cnt)                   := P_ATTRIBUTE17;
18836       G_ATTRIBUTE18_TBL(cnt)                   := P_ATTRIBUTE18;
18837       G_ATTRIBUTE19_TBL(cnt)                   := P_ATTRIBUTE19;
18838       G_ATTRIBUTE20_TBL(cnt)                   := P_ATTRIBUTE20;
18839       G_ATTRIBUTE21_TBL(cnt)                   := P_ATTRIBUTE21;
18840       G_ATTRIBUTE22_TBL(cnt)                   := P_ATTRIBUTE22;
18841       G_ATTRIBUTE23_TBL(cnt)                   := P_ATTRIBUTE23;
18842       G_ATTRIBUTE24_TBL(cnt)                   := P_ATTRIBUTE24;
18843       G_ATTRIBUTE25_TBL(cnt)                   := P_ATTRIBUTE25;
18844       G_ATTRIBUTE26_TBL(cnt)                   := P_ATTRIBUTE26;
18845       G_ATTRIBUTE27_TBL(cnt)                   := P_ATTRIBUTE27;
18846       G_ATTRIBUTE28_TBL(cnt)                   := P_ATTRIBUTE28;
18847       G_ATTRIBUTE29_TBL(cnt)                   := P_ATTRIBUTE29;
18848       G_ATTRIBUTE30_TBL(cnt)                   := P_ATTRIBUTE30;
18849 --dbms_output.put_line('done with assigning to global tables');
18850 END load_resource_info;
18851 
18852 PROCEDURE EXECUTE_CREATE_DRAFT_FINPLAN
18853  ( p_api_version_number              IN      NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18854   ,p_commit                              IN      VARCHAR2          := FND_API.G_FALSE
18855   ,p_init_msg_list                       IN      VARCHAR2          := FND_API.G_FALSE
18856   ,p_pm_product_code                 IN      pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18857   ,p_pm_finplan_reference            IN      pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18858   ,p_pm_project_reference            IN      pa_projects_all.PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18859   ,p_pa_project_id                   IN      pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18860   ,p_fin_plan_type_id                IN      pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18861   ,p_fin_plan_type_name              IN      pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18862   ,p_version_type                    IN      pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18863   ,p_time_phased_code                IN      pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18864   ,p_resource_list_name              IN      pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18865   ,p_resource_list_id                IN      pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18866   ,p_fin_plan_level_code             IN      pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18867   ,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
18868   ,p_budget_version_name             IN      pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18869   ,p_description                     IN      pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18870   ,p_change_reason_code              IN      pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18871   ,p_raw_cost_flag                   IN      pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18872   ,p_burdened_cost_flag              IN      pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18873   ,p_revenue_flag                    IN      pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18874   ,p_cost_qty_flag                   IN      pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18875   ,p_revenue_qty_flag                IN      pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18876   ,p_all_qty_flag                    IN      pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18877   ,p_attribute_category              IN      pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18878   ,p_attribute1                      IN      pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18879   ,p_attribute2                      IN      pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18880   ,p_attribute3                      IN      pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18881   ,p_attribute4                      IN      pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18882   ,p_attribute5                      IN      pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18883   ,p_attribute6                      IN      pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18884   ,p_attribute7                      IN      pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18885   ,p_attribute8                      IN      pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18886   ,p_attribute9                      IN      pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18887   ,p_attribute10                     IN      pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18888   ,p_attribute11                     IN      pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18889   ,p_attribute12                     IN      pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18890   ,p_attribute13                     IN      pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18891   ,p_attribute14                     IN      pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18892   ,p_attribute15                     IN      pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18893   ,p_create_new_curr_working_flag    IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18894   ,p_replace_current_working_flag    IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18895   ,p_using_resource_lists_flag       IN        VARCHAR2 DEFAULT 'N'
18896   ,x_finplan_version_id              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
18897   ,x_return_status                   OUT NOCOPY VARCHAR2
18898   ,x_msg_count                       OUT NOCOPY NUMBER
18899   ,x_msg_data                        OUT NOCOPY VARCHAR2
18900  )
18901 IS
18902   l_finplan_trans_tab               pa_budget_pub.FinPlan_Trans_Tab;
18903 BEGIN
18904             --dbms_output.put_line('populating table of records');
18905             FOR i IN G_START_DATE_TBL.FIRST .. G_START_DATE_TBL.LAST
18906             LOOP
18907                  l_finplan_trans_tab(i).pm_product_code          := G_PM_PRODUCT_CODE_TBL(i);
18908                  l_finplan_trans_tab(i).TASK_ID                  := G_TASK_ID_TBL(i);
18909                  l_finplan_trans_tab(i).PM_TASK_REFERENCE        := G_PM_TASK_REFERENCE_TBL(i);
18910                  l_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE   := G_PM_RES_ASGMT_REFERENCE_TBL(i);
18911                  l_finplan_trans_tab(i).RESOURCE_ALIAS           := G_RESOURCE_ALIAS_TBL(i);
18912                  l_finplan_trans_tab(i).CURRENCY_CODE            := G_CURRENCY_CODE_TBL(i);
18913                  l_finplan_trans_tab(i).UNIT_OF_MEASURE_CODE     := G_UNIT_OF_MEASURE_CODE_TBL(i);
18914                  l_finplan_trans_tab(i).START_DATE               := G_START_DATE_TBL(i);
18915                  l_finplan_trans_tab(i).END_DATE                 := G_END_DATE_TBL(i);
18916                  l_finplan_trans_tab(i).QUANTITY                 := G_QUANTITY_TBL(i);
18917                  l_finplan_trans_tab(i).RAW_COST                 := G_RAW_COST_TBL(i);
18918                  l_finplan_trans_tab(i).BURDENED_COST            := G_BURDENED_COST_TBL(i);
18919                  l_finplan_trans_tab(i).REVENUE                  := G_REVENUE_TBL(I);
18920                  l_finplan_trans_tab(i).RESOURCE_LIST_MEMBER_ID  := G_RESOURCE_LIST_MEMBER_ID_TBL(i);
18921                  l_finplan_trans_tab(i).ATTRIBUTE_CATEGORY       := G_ATTRIBUTE_CATEGORY_TBL(i);
18922                  l_finplan_trans_tab(i).ATTRIBUTE1               := G_ATTRIBUTE1_TBL(i);
18923                  l_finplan_trans_tab(i).ATTRIBUTE2               := G_ATTRIBUTE2_TBL(i);
18924                  l_finplan_trans_tab(i).ATTRIBUTE3               := G_ATTRIBUTE3_TBL(i);
18925                  l_finplan_trans_tab(i).ATTRIBUTE4               := G_ATTRIBUTE4_TBL(i);
18926                  l_finplan_trans_tab(i).ATTRIBUTE5               := G_ATTRIBUTE5_TBL(i);
18927                  l_finplan_trans_tab(i).ATTRIBUTE6               := G_ATTRIBUTE6_TBL(i);
18928                  l_finplan_trans_tab(i).ATTRIBUTE7               := G_ATTRIBUTE7_TBL(i);
18929                  l_finplan_trans_tab(i).ATTRIBUTE8               := G_ATTRIBUTE8_TBL(i);
18930                  l_finplan_trans_tab(i).ATTRIBUTE9               := G_ATTRIBUTE9_TBL(i);
18931                  l_finplan_trans_tab(i).ATTRIBUTE10              := G_ATTRIBUTE10_TBL(i);
18932                  l_finplan_trans_tab(i).ATTRIBUTE11              := G_ATTRIBUTE11_TBL(i);
18933                  l_finplan_trans_tab(i).ATTRIBUTE12              := G_ATTRIBUTE12_TBL(i);
18934                  l_finplan_trans_tab(i).ATTRIBUTE13              := G_ATTRIBUTE13_TBL(i);
18935                  l_finplan_trans_tab(i).ATTRIBUTE14              := G_ATTRIBUTE14_TBL(i);
18936                  l_finplan_trans_tab(i).ATTRIBUTE15              := G_ATTRIBUTE15_TBL(i);
18937                  l_finplan_trans_tab(i).ATTRIBUTE16              := G_ATTRIBUTE16_TBL(i);
18938                  l_finplan_trans_tab(i).ATTRIBUTE17              := G_ATTRIBUTE17_TBL(i);
18939                  l_finplan_trans_tab(i).ATTRIBUTE18              := G_ATTRIBUTE18_TBL(i);
18940                  l_finplan_trans_tab(i).ATTRIBUTE19              := G_ATTRIBUTE19_TBL(i);
18941                  l_finplan_trans_tab(i).ATTRIBUTE20              := G_ATTRIBUTE20_TBL(i);
18942                  l_finplan_trans_tab(i).ATTRIBUTE21              := G_ATTRIBUTE21_TBL(i);
18943                  l_finplan_trans_tab(i).ATTRIBUTE22              := G_ATTRIBUTE22_TBL(i);
18944                  l_finplan_trans_tab(i).ATTRIBUTE23              := G_ATTRIBUTE23_TBL(i);
18945                  l_finplan_trans_tab(i).ATTRIBUTE24              := G_ATTRIBUTE24_TBL(i);
18946                  l_finplan_trans_tab(i).ATTRIBUTE25              := G_ATTRIBUTE25_TBL(i);
18947                  l_finplan_trans_tab(i).ATTRIBUTE26              := G_ATTRIBUTE26_TBL(i);
18948                  l_finplan_trans_tab(i).ATTRIBUTE27              := G_ATTRIBUTE27_TBL(i);
18949                  l_finplan_trans_tab(i).ATTRIBUTE28              := G_ATTRIBUTE28_TBL(i);
18950                  l_finplan_trans_tab(i).ATTRIBUTE29              := G_ATTRIBUTE29_TBL(i);
18951                  l_finplan_trans_tab(i).ATTRIBUTE30              := G_ATTRIBUTE30_TBL(i);
18952             END LOOP;
18953 
18954             --dbms_output.put_line('Before calling PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
18955             PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN
18956                          ( p_api_version_number             => p_api_version_number
18957                           ,p_commit                             => p_commit
18958                           ,p_init_msg_list                      => p_init_msg_list
18959                           ,p_pm_product_code                => p_pm_product_code
18960                           ,p_pm_finplan_reference           => p_pm_finplan_reference
18961                           ,p_pm_project_reference           => p_pm_project_reference
18962                           ,p_pa_project_id                  => p_pa_project_id
18963                           ,p_fin_plan_type_id               => p_fin_plan_type_id
18964                           ,p_fin_plan_type_name             => p_fin_plan_type_name
18965                           ,p_version_type                   => p_version_type
18966                           ,p_time_phased_code               => p_time_phased_code
18967                           ,p_resource_list_name             => p_resource_list_name
18968                           ,p_resource_list_id               => p_resource_list_id
18969                           ,p_fin_plan_level_code            => p_fin_plan_level_code
18970                           ,p_plan_in_multi_curr_flag        => P_plan_in_multi_curr_flag
18971                           ,p_budget_version_name            => p_budget_version_name
18972                           ,p_description                    => p_description
18973                           ,p_change_reason_code             => p_change_reason_code
18974                           ,p_raw_cost_flag                  => p_raw_cost_flag
18975                           ,p_burdened_cost_flag             => p_burdened_cost_flag
18976                           ,p_revenue_flag                   => p_revenue_flag
18977                           ,p_cost_qty_flag                  => p_cost_qty_flag
18978                           ,p_revenue_qty_flag               => p_revenue_qty_flag
18979                           ,p_all_qty_flag                   => p_all_qty_flag
18980                           ,p_attribute_category             => p_attribute_category
18981                           ,p_attribute1                     => p_attribute1
18982                           ,p_attribute2                     => p_attribute2
18983                           ,p_attribute3                     => p_attribute3
18984                           ,p_attribute4                     => p_attribute4
18985                           ,p_attribute5                     => p_attribute5
18986                           ,p_attribute6                     => p_attribute6
18987                           ,p_attribute7                     => p_attribute7
18988                           ,p_attribute8                     => p_attribute8
18989                           ,p_attribute9                     => p_attribute9
18990                           ,p_attribute10                    => p_attribute10
18991                           ,p_attribute11                    => p_attribute11
18992                           ,p_attribute12                    => p_attribute12
18993                           ,p_attribute13                    => p_attribute13
18994                           ,p_attribute14                    => p_attribute14
18995                           ,p_attribute15                    => p_attribute15
18996                           ,p_create_new_curr_working_flag   => p_create_new_curr_working_flag
18997                           ,p_replace_current_working_flag   => p_replace_current_working_flag
18998                           ,p_using_resource_lists_flag      => p_using_resource_lists_flag
18999                           ,p_finplan_trans_tab              => l_finplan_trans_tab
19000                           ,x_finplan_version_id             => x_finplan_version_id
19001                           ,x_return_status                  => x_return_status
19002                           ,x_msg_count                      => x_msg_count
19003                           ,x_msg_data                       => x_msg_data
19004                          );
19005                          --dbms_output.put_line('after call to PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
19006 
19007         /*
19008          * Empty the tables after each call to CREATE_DRAFT_FINPLAN
19009          */
19010         G_PM_PRODUCT_CODE_TBL.DELETE;
19011         G_TASK_ID_TBL.DELETE;
19012         G_PM_TASK_REFERENCE_TBL.DELETE;
19013         G_PM_RES_ASGMT_REFERENCE_TBL.DELETE;
19014         G_RESOURCE_ALIAS_TBL.DELETE;
19015         G_CURRENCY_CODE_TBL.DELETE;
19016         G_UNIT_OF_MEASURE_CODE_TBL.DELETE;
19017         G_START_DATE_TBL.DELETE;
19018         G_END_DATE_TBL.DELETE;
19019         G_QUANTITY_TBL.DELETE;
19020         G_RAW_COST_TBL.DELETE;
19021         G_BURDENED_COST_TBL.DELETE;
19022         G_REVENUE_TBL.DELETE;
19023         G_RESOURCE_LIST_MEMBER_ID_TBL.DELETE;
19024         G_ATTRIBUTE_CATEGORY_TBL.DELETE;
19025         G_ATTRIBUTE1_TBL.DELETE;
19026         G_ATTRIBUTE2_TBL.DELETE;
19027         G_ATTRIBUTE3_TBL.DELETE;
19028         G_ATTRIBUTE4_TBL.DELETE;
19029         G_ATTRIBUTE5_TBL.DELETE;
19030         G_ATTRIBUTE6_TBL.DELETE;
19031         G_ATTRIBUTE7_TBL.DELETE;
19032         G_ATTRIBUTE8_TBL.DELETE;
19033         G_ATTRIBUTE9_TBL.DELETE;
19034         G_ATTRIBUTE10_TBL.DELETE;
19035         G_ATTRIBUTE11_TBL.DELETE;
19036         G_ATTRIBUTE12_TBL.DELETE;
19037         G_ATTRIBUTE13_TBL.DELETE;
19038         G_ATTRIBUTE14_TBL.DELETE;
19039         G_ATTRIBUTE15_TBL.DELETE;
19040         G_ATTRIBUTE16_TBL.DELETE;
19041         G_ATTRIBUTE17_TBL.DELETE;
19042         G_ATTRIBUTE18_TBL.DELETE;
19043         G_ATTRIBUTE19_TBL.DELETE;
19044         G_ATTRIBUTE20_TBL.DELETE;
19045         G_ATTRIBUTE21_TBL.DELETE;
19046         G_ATTRIBUTE22_TBL.DELETE;
19047         G_ATTRIBUTE23_TBL.DELETE;
19048         G_ATTRIBUTE24_TBL.DELETE;
19049         G_ATTRIBUTE25_TBL.DELETE;
19050         G_ATTRIBUTE26_TBL.DELETE;
19051         G_ATTRIBUTE27_TBL.DELETE;
19052         G_ATTRIBUTE28_TBL.DELETE;
19053         G_ATTRIBUTE29_TBL.DELETE;
19054         G_ATTRIBUTE30_TBL.DELETE;
19055                          --dbms_output.put_line('leaving EXECUTE_CREATE_DRAFT_FINPLAN');
19056 
19057 END EXECUTE_CREATE_DRAFT_FINPLAN;
19058 
19059 
19060    ----------------------------------------------------------------------------------------
19061    --Name:               update_plannning_element_attr
19062    --Type:               Procedure
19063    --Description:        This procedure can be used to update attributes of existing
19064    --                    Planning Elements
19065    --
19066    --
19067    --Called subprograms: pa_budget_pvt.validate_header_info,pa_budget_pvt.validate_budget_lines
19068    --                    pa_fp_planning_transaction_pub.update_planning_transactions
19069    --
19070    --
19071    --
19072 
19073    PROCEDURE update_plannning_element_attr
19074     (p_api_version_number            IN   NUMBER
19075     ,p_commit                        IN   VARCHAR2                             := FND_API.G_FALSE
19076     ,p_init_msg_list                 IN   VARCHAR2                             := FND_API.G_FALSE
19077     ,p_pm_product_code               IN   VARCHAR2                             := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19078     ,p_pa_project_id                 IN   NUMBER                               := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19079     ,p_pm_project_reference          IN   VARCHAR2                             := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19080     ,p_fin_plan_type_id              IN   pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19081     ,p_fin_plan_type_name            IN   pa_fin_plan_types_tl.name%TYPE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19082     ,p_budget_version_number         IN   pa_budget_versions.version_number%TYPE   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19083     ,p_version_type                  IN   pa_budget_versions.version_type%TYPE     :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19084     ,p_planning_element_rec_tbl      IN   planning_element_rec_tbl_type
19085     ,x_msg_count                     OUT  NOCOPY NUMBER
19086     ,x_msg_data                      OUT  NOCOPY VARCHAR2
19087     ,x_return_status                 OUT  NOCOPY VARCHAR2)
19088     IS
19089 
19090         CURSOR c_get_plan_class_code(c_fin_plan_type_id pa_budget_versions.fin_plan_type_id%TYPE) is
19091         SELECT plan_class_code
19092         FROM pa_fin_plan_types_b
19093         WHERE fin_plan_type_id=c_fin_plan_type_id;
19094 
19095         l_msg_count                              NUMBER := 0;
19096         l_data                                   VARCHAR2(2000);
19097         l_msg_data                               VARCHAR2(2000);
19098         l_msg_index_out                          NUMBER;
19099         l_return_status                          VARCHAR2(2000);
19100         l_debug_mode                             VARCHAR2(30);
19101         i                                        NUMBER;
19102 
19103         l_module_name                            VARCHAR2(100) :='update_plannning_element_attr';
19104         l_api_name                               CONSTANT    VARCHAR2(100)  := 'update_plannning_element_attr';
19105 
19106         l_project_id                             NUMBER;
19107         l_budget_type_code                       pa_budget_types.budget_type_code%TYPE;
19108         l_fin_plan_type_id                       NUMBER;
19109         l_fin_plan_type_name                     pa_fin_plan_types_tl.name%TYPE;
19110         l_fin_plan_class_code                    varchar2(30);
19111         l_version_type                           pa_budget_versions.version_type%TYPE;
19112         l_budget_version_id                      NUMBER;
19113         l_budget_entry_method_code               pa_budget_entry_methods.budget_entry_method_code%TYPE;
19114         l_resource_list_id                       pa_resource_lists_all_bg.resource_list_id%TYPE;
19115         l_budget_amount_code                     pa_budget_types.budget_amount_code%type;
19116         l_entry_level_code                       pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
19117         l_time_phased_code                       pa_proj_fp_options.cost_time_phased_code%TYPE;
19118         l_multi_curr_flag                        pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
19119         l_categorization_code                    pa_budget_entry_methods.categorization_code%TYPE;
19120         l_project_number                         pa_projects_all.segment1%type;
19121 
19122         l_mfc_cost_type_id_tbl                   SYSTEM.pa_num_tbl_type;
19123         l_etc_method_code_tbl                    SYSTEM.pa_varchar2_30_tbl_type;
19124         l_spread_curve_id_tbl                    SYSTEM.pa_num_tbl_type;
19125 
19126         l_version_info_rec                       pa_fp_gen_amount_utils.fp_cols;
19127 
19128         l_budget_lines_in_tbl                    PA_BUDGET_PUB.G_BUDGET_LINES_IN_TBL%TYPE;
19129         l_budget_lines_out_tbl                   PA_BUDGET_PUB.G_BUDGET_LINES_OUT_TBL%TYPE;
19130         l_planning_start_date_tbl                SYSTEM.pa_date_tbl_type;
19131         l_planning_end_date_tbl                  SYSTEM.pa_date_tbl_type;
19132         l_spread_curve_name_tbl                  SYSTEM.PA_VARCHAR2_240_TBL_TYPE;
19133         l_sp_fixed_date_tbl                      SYSTEM.PA_DATE_TBL_TYPE;
19134         l_etc_method_name_tbl                    SYSTEM.PA_VARCHAR2_80_TBL_TYPE;
19135 
19136         l_uom_tbl                                SYSTEM.pa_varchar2_80_tbl_type;
19137         l_mfc_cost_type_tbl                      SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19138 
19139         l_resource_assignment_id_tbl             SYSTEM.PA_NUM_TBL_TYPE;
19140 
19141         l_currency_code                          varchar2(25);
19142         l_currency_code_tbl                      SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19143 
19144         l_assignment_description_tbl             SYSTEM.PA_VARCHAR2_240_TBL_TYPE   ;
19145         l_attribute_category_tbl                 SYSTEM.PA_VARCHAR2_30_TBL_TYPE    ;
19146         l_attribute1_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19147         l_attribute2_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19148         l_attribute3_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19149         l_attribute4_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19150         l_attribute5_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19151         l_attribute6_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19152         l_attribute7_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19153         l_attribute8_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19154         l_attribute9_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19155         l_attribute10_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19156         l_attribute11_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19157         l_attribute12_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19158         l_attribute13_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19159         l_attribute14_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19160         l_attribute15_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19161         l_attribute16_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19162         l_attribute17_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19163         l_attribute18_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19164         l_attribute19_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19165         l_attribute20_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19166         l_attribute21_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19167         l_attribute22_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19168         l_attribute23_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19169         l_attribute24_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19170         l_attribute25_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19171         l_attribute26_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19172         l_attribute27_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19173         l_attribute28_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19174         l_attribute29_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19175         l_attribute30_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19176         --Added for bug 6408139 to pass G_PA_MISS_CHAR
19177         l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
19178 
19179 
19180     BEGIN
19181            -- Set the error stack.
19182            pa_debug.set_err_stack('PA_BUDGET_PUB.update_plannning_element_attr');
19183 
19184            -- Get the Debug mode into local variable and set it to 'Y'if its NULL
19185            fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
19186            l_debug_mode := NVL(l_debug_mode, 'Y');
19187 
19188            -- Initialize the return status to success
19189            x_return_status := FND_API.G_RET_STS_SUCCESS;
19190 
19191            IF FND_API.TO_BOOLEAN( p_init_msg_list )
19192            THEN
19193            FND_MSG_PUB.initialize;
19194            END IF;
19195 
19196            --initialize
19197 
19198            l_project_id                                := p_pa_project_id;
19199            l_fin_plan_type_id                        := p_fin_plan_type_id;
19200            l_fin_plan_type_name                        := p_fin_plan_type_name;
19201            l_version_type                                := p_version_type;
19202 
19203 
19204            l_mfc_cost_type_id_tbl                        := SYSTEM.pa_num_tbl_type();
19205            l_etc_method_code_tbl                        := SYSTEM.pa_varchar2_30_tbl_type();
19206            l_spread_curve_id_tbl                        := SYSTEM.pa_num_tbl_type();
19207 
19208 
19209            l_planning_start_date_tbl                        := SYSTEM.pa_date_tbl_type();
19210            l_planning_end_date_tbl                        := SYSTEM.pa_date_tbl_type();
19211            l_spread_curve_name_tbl                        := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
19212            l_sp_fixed_date_tbl                        := SYSTEM.PA_DATE_TBL_TYPE();
19213            l_etc_method_name_tbl                        := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
19214 
19215            l_uom_tbl                                        := SYSTEM.pa_varchar2_80_tbl_type();
19216            l_mfc_cost_type_tbl                        := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
19217 
19218            l_resource_assignment_id_tbl                := SYSTEM.pa_num_tbl_type();
19219 
19220 
19221            l_currency_code_tbl                      := SYSTEM.pa_varchar2_15_tbl_type();
19222 
19223            l_assignment_description_tbl             := SYSTEM.pa_varchar2_240_tbl_type();
19224            l_attribute_category_tbl                 := SYSTEM.pa_varchar2_30_tbl_type();
19225            l_attribute1_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19226            l_attribute2_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19227            l_attribute3_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19228            l_attribute4_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19229            l_attribute5_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19230            l_attribute6_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19231            l_attribute7_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19232            l_attribute8_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19233            l_attribute9_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19234            l_attribute10_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19235            l_attribute11_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19236            l_attribute12_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19237            l_attribute13_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19238            l_attribute14_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19239            l_attribute15_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19240            l_attribute16_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19241            l_attribute17_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19242            l_attribute18_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19243            l_attribute19_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19244            l_attribute20_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19245            l_attribute21_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19246            l_attribute22_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19247            l_attribute23_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19248            l_attribute24_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19249            l_attribute25_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19250            l_attribute26_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19251            l_attribute27_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19252            l_attribute28_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19253            l_attribute29_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19254            l_attribute30_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19255 
19256            pa_budget_pvt.G_res_assign_tbl.delete;
19257            --end initialize
19258 
19259            if p_planning_element_rec_tbl.count = 0 then
19260                    IF l_debug_mode = 'Y' THEN
19261                        pa_debug.write_file('No Planning Elements Passed',5);
19262                    END IF;
19263                    pa_debug.reset_err_stack;
19264                    return;
19265            end if;
19266 
19267 
19268 --           DBMS_OUTPUT.PUT_LINE('p_api_version_number '||p_api_version_number);
19269 --           DBMS_OUTPUT.PUT_LINE(' l_api_name '|| l_api_name);
19270 --           DBMS_OUTPUT.PUT_LINE('p_init_msg_list'||p_init_msg_list);
19271 --           DBMS_OUTPUT.PUT_LINE('l_project_id'||l_project_id);
19272 --           DBMS_OUTPUT.PUT_LINE('p_pm_project_reference'||p_pm_project_reference);
19273 --           DBMS_OUTPUT.PUT_LINE('p_pm_product_code'||p_pm_product_code);
19274 --           DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_id'||l_fin_plan_type_id);
19275 --           DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_name'||l_fin_plan_type_name);
19276 --           DBMS_OUTPUT.PUT_LINE('p_budget_version_number'||p_budget_version_number);
19277 --           DBMS_OUTPUT.PUT_LINE('l_version_type'||l_version_type);
19278 
19279 
19280            PA_BUDGET_PVT.validate_header_info(
19281                p_api_version_number          => p_api_version_number
19282               ,p_api_name                    => l_api_name
19283               ,p_init_msg_list               => p_init_msg_list
19284               ,px_pa_project_id              => l_project_id
19285               ,p_pm_project_reference        => p_pm_project_reference
19286               ,p_pm_product_code             => p_pm_product_code
19287               ,px_budget_type_code                  => l_budget_type_code
19288               ,px_fin_plan_type_id           => l_fin_plan_type_id
19289               ,px_fin_plan_type_name         => l_fin_plan_type_name
19290               ,px_version_type               => l_version_type
19291               ,p_budget_version_number       => p_budget_version_number
19292               ,p_change_reason_code          => NULL
19293               ,p_function_name               => 'PA_PM_UPDATE_BUDGET'
19294               ,x_budget_entry_method_code    => l_budget_entry_method_code
19295               ,x_resource_list_id            => l_resource_list_id
19296               ,x_budget_version_id           => l_budget_version_id
19297               ,x_fin_plan_level_code         => l_entry_level_code
19298               ,x_time_phased_code            => l_time_phased_code
19299               ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
19300               ,x_budget_amount_code          => l_budget_amount_code
19301               ,x_categorization_code         => l_categorization_code
19302               ,x_project_number              => l_project_number
19303               /* Plan Amount Entry flags introduced by bug 6408139 */
19304               /*Passing all as G_PA_MISS_CHAR since validations not required*/
19305               ,px_raw_cost_flag         =>   l_pa_miss_char
19306               ,px_burdened_cost_flag    =>   l_pa_miss_char
19307               ,px_revenue_flag          =>   l_pa_miss_char
19308               ,px_cost_qty_flag         =>   l_pa_miss_char
19309               ,px_revenue_qty_flag      =>   l_pa_miss_char
19310               ,px_all_qty_flag          =>   l_pa_miss_char
19311               ,px_bill_rate_flag        =>   l_pa_miss_char
19312               ,px_cost_rate_flag        =>   l_pa_miss_char
19313               ,px_burden_rate_flag      =>   l_pa_miss_char
19314               /* Plan Amount Entry flags introduced by bug 6408139 */
19315               ,x_msg_count                   => l_msg_count
19316               ,x_msg_data                    => l_msg_data
19317               ,x_return_status               => l_return_status );
19318            /*
19319            DBMS_OUTPUT.PUT_LINE('return status is '||l_return_status);
19320            */
19321            IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19322               THEN
19323                  IF l_debug_mode = 'Y' THEN
19324                        pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_header_info',5);
19325                  END IF;
19326                  raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19327            END IF;
19328 
19329            --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_header_info successful project number is '||l_project_number||' bversion id '||l_budget_version_id);
19330 
19331            l_version_info_rec.x_budget_version_id := l_budget_version_id;
19332 
19333            FOR i IN p_planning_element_rec_tbl.first..p_planning_element_rec_tbl.last LOOP
19334                    -- how we will handle project id
19335                     --make these null when pa.g_miss num and fnd g miss num when null
19336                l_budget_lines_in_tbl(i).pa_task_id                    :=   p_planning_element_rec_tbl(i).pa_task_id;
19337                l_budget_lines_in_tbl(i).pm_task_reference             :=   p_planning_element_rec_tbl(i).pm_task_reference;
19338                l_budget_lines_in_tbl(i).resource_alias                :=   p_planning_element_rec_tbl(i).resource_alias;
19339                l_budget_lines_in_tbl(i).resource_list_member_id       :=   p_planning_element_rec_tbl(i).resource_list_member_id;
19340 
19341                l_planning_start_date_tbl.extend(1);
19342                l_planning_start_date_tbl(i) :=  p_planning_element_rec_tbl(i).planning_start_date;
19343                if l_planning_start_date_tbl(i) is null then
19344                    l_planning_start_date_tbl(i) :=FND_API.G_MISS_DATE;
19345                elsif l_planning_start_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19346                    l_planning_start_date_tbl(i) := null;
19347                end if;
19348 
19349                l_planning_end_date_tbl.extend(1);
19350                l_planning_end_date_tbl(i)   :=  p_planning_element_rec_tbl(i).planning_end_date;
19351                if l_planning_end_date_tbl(i) is null then
19352                    l_planning_end_date_tbl(i) :=FND_API.G_MISS_DATE;
19353                elsif l_planning_end_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19354                    l_planning_end_date_tbl(i) := null;
19355                end if;
19356 
19357                l_spread_curve_name_tbl.extend(1);
19358                l_spread_curve_name_tbl(i)   :=  p_planning_element_rec_tbl(i).spread_curve;
19359                if l_spread_curve_name_tbl(i)is null then
19360                    l_spread_curve_name_tbl(i) :=FND_API.G_MISS_CHAR;
19361                elsif l_spread_curve_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19362                    l_spread_curve_name_tbl(i) := null;
19363                end if;
19364 
19365                l_sp_fixed_date_tbl.extend(1);
19366                l_sp_fixed_date_tbl(i)       :=  p_planning_element_rec_tbl(i).fixed_date;
19367                if l_sp_fixed_date_tbl(i) is null then
19368                    l_sp_fixed_date_tbl(i) :=FND_API.G_MISS_DATE;
19369                elsif l_sp_fixed_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19370                    l_sp_fixed_date_tbl(i) := null;
19371                end if;
19372 
19373                l_etc_method_name_tbl.extend(1);
19374                l_etc_method_name_tbl(i)     :=  p_planning_element_rec_tbl(i).etc_method_name;
19375                if l_etc_method_name_tbl(i) is null then
19376                    l_etc_method_name_tbl(i) :=FND_API.G_MISS_CHAR;
19377                elsif l_etc_method_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19378                    l_etc_method_name_tbl(i) := null;
19379                end if;
19380 
19381                l_uom_tbl.extend(1);
19382                l_uom_tbl(i):=null;
19383                l_mfc_cost_type_tbl.extend(1);
19384                l_mfc_cost_type_tbl(i):=null;
19385 
19386            end loop;
19387 
19388            pa_budget_pvt.Validate_Budget_Lines
19389                      (p_calling_context             => 'UPDATE_PLANNING_ELEMENT_ATTR'
19390                      ,p_pa_project_id               => l_project_id
19391                      ,p_budget_type_code            => NULL
19392                      ,p_fin_plan_type_id            => l_fin_plan_type_id
19393                      ,p_version_type                => l_version_type
19394                      ,p_resource_list_id            => l_resource_list_id
19395                      ,p_time_phased_code            => l_time_phased_code
19396                      ,p_budget_entry_method_code    => NULL
19397                      ,p_entry_level_code            => l_entry_level_code
19398                      ,p_allow_qty_flag              => null
19399                      ,p_allow_raw_cost_flag         => null
19400                      ,p_allow_burdened_cost_flag    => null
19401                      ,p_allow_revenue_flag          => null
19402                      ,p_multi_currency_flag         => l_multi_curr_flag
19403                      ,p_project_cost_rate_type      => null
19404                      ,p_project_cost_rate_date_typ  => null
19405                      ,p_project_cost_rate_date      => null
19406                      ,p_project_cost_exchange_rate  => null
19407                      ,p_projfunc_cost_rate_type     => null
19408                      ,p_projfunc_cost_rate_date_typ => null
19409                      ,p_projfunc_cost_rate_date     => null
19410                      ,p_projfunc_cost_exchange_rate => null
19411                      ,p_project_rev_rate_type       => null
19412                      ,p_project_rev_rate_date_typ   => null
19413                      ,p_project_rev_rate_date       => null
19414                      ,p_project_rev_exchange_rate   => null
19415                      ,p_projfunc_rev_rate_type      => null
19416                      ,p_projfunc_rev_rate_date_typ  => null
19417                      ,p_projfunc_rev_rate_date      => null
19418                      ,p_projfunc_rev_exchange_rate  => null
19419                      ,p_planning_start_date_tbl     => l_planning_start_date_tbl
19420                      ,p_planning_end_date_tbl         => l_planning_end_date_tbl
19421                      ,p_spread_curve_name_tbl         => l_spread_curve_name_tbl
19422                      ,p_sp_fixed_date_tbl                 => l_sp_fixed_date_tbl
19423                      ,p_etc_method_name_tbl         => l_etc_method_name_tbl
19424                      ,p_uom_tbl                         => l_uom_tbl
19425                      ,p_mfc_cost_type_tbl                 => l_mfc_cost_type_tbl
19426                      ,p_version_info_rec            => l_version_info_rec
19427                      ,px_budget_lines_in            => l_budget_lines_in_tbl
19428                      ,x_budget_lines_out            => l_budget_lines_out_tbl
19429                      ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
19430                      ,x_etc_method_code_tbl         => l_etc_method_code_tbl
19431                      ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
19432                      ,x_msg_count                   => l_msg_count
19433                      ,x_msg_data                    => l_msg_data
19434                      ,x_return_status               => l_return_status);
19435 
19436            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19437 
19438                  IF l_debug_mode = 'Y' THEN
19439                        pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_budget_lines',5);
19440                  END IF;
19441                  raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19442            END IF;
19443 
19444            --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_budget_lines successful');
19445            /*
19446            for i in l_etc_method_code_tbl.first..l_etc_method_code_tbl.count loop
19447                    DBMS_OUTPUT.PUT_LINE('resource alias '||i||' '||l_budget_lines_in_tbl(i).pm_task_reference);
19448            end loop;
19449            */
19450            l_resource_assignment_id_tbl.extend(l_budget_lines_in_tbl.count);
19451            l_currency_code_tbl.extend(l_budget_lines_in_tbl.count);
19452 
19453            l_assignment_description_tbl.extend(l_budget_lines_in_tbl.count);
19454            l_attribute_category_tbl.extend(l_budget_lines_in_tbl.count);
19455            l_attribute1_tbl.extend(l_budget_lines_in_tbl.count);
19456            l_attribute2_tbl.extend(l_budget_lines_in_tbl.count);
19457            l_attribute3_tbl.extend(l_budget_lines_in_tbl.count);
19458            l_attribute4_tbl.extend(l_budget_lines_in_tbl.count);
19459            l_attribute5_tbl.extend(l_budget_lines_in_tbl.count);
19460            l_attribute6_tbl.extend(l_budget_lines_in_tbl.count);
19461            l_attribute7_tbl.extend(l_budget_lines_in_tbl.count);
19462            l_attribute8_tbl.extend(l_budget_lines_in_tbl.count);
19463            l_attribute9_tbl.extend(l_budget_lines_in_tbl.count);
19464            l_attribute10_tbl.extend(l_budget_lines_in_tbl.count);
19465            l_attribute11_tbl.extend(l_budget_lines_in_tbl.count);
19466            l_attribute12_tbl.extend(l_budget_lines_in_tbl.count);
19467            l_attribute13_tbl.extend(l_budget_lines_in_tbl.count);
19468            l_attribute14_tbl.extend(l_budget_lines_in_tbl.count);
19469            l_attribute15_tbl.extend(l_budget_lines_in_tbl.count);
19470            l_attribute16_tbl.extend(l_budget_lines_in_tbl.count);
19471            l_attribute17_tbl.extend(l_budget_lines_in_tbl.count);
19472            l_attribute18_tbl.extend(l_budget_lines_in_tbl.count);
19473            l_attribute19_tbl.extend(l_budget_lines_in_tbl.count);
19474            l_attribute20_tbl.extend(l_budget_lines_in_tbl.count);
19475            l_attribute21_tbl.extend(l_budget_lines_in_tbl.count);
19476            l_attribute22_tbl.extend(l_budget_lines_in_tbl.count);
19477            l_attribute23_tbl.extend(l_budget_lines_in_tbl.count);
19478            l_attribute24_tbl.extend(l_budget_lines_in_tbl.count);
19479            l_attribute25_tbl.extend(l_budget_lines_in_tbl.count);
19480            l_attribute26_tbl.extend(l_budget_lines_in_tbl.count);
19481            l_attribute27_tbl.extend(l_budget_lines_in_tbl.count);
19482            l_attribute28_tbl.extend(l_budget_lines_in_tbl.count);
19483            l_attribute29_tbl.extend(l_budget_lines_in_tbl.count);
19484            l_attribute30_tbl.extend(l_budget_lines_in_tbl.count);
19485 
19486 
19487            open c_get_plan_class_code(l_fin_plan_type_id);
19488            fetch c_get_plan_class_code into l_fin_plan_class_code;
19489            close c_get_plan_class_code;
19490 
19491            SELECT decode(pf.approved_rev_plan_type_flag,'Y'
19492            ,pa.PROJFUNC_CURRENCY_CODE
19493            ,pa.PROJECT_CURRENCY_CODE)
19494            INTO l_currency_code
19495            FROM pa_projects_all pa,
19496            pa_proj_fp_options pf
19497            WHERE pa.project_id=l_project_id
19498            AND pa.project_id=pf.project_id
19499            AND pf.fin_plan_version_id=l_budget_version_id;
19500 
19501              FOR i IN 1..l_budget_lines_in_tbl.COUNT loop
19502              /*
19503                    begin
19504                     select resource_assignment_id
19505                     into l_resource_assignment_id_tbl(i)
19506                     from pa_resource_assignments
19507                     where  budget_version_id=l_budget_version_id
19508                     and task_id=l_budget_lines_in_tbl(i).pa_task_id
19509                     and resource_list_member_id=l_budget_lines_in_tbl(i).resource_list_member_id
19510                     and project_id=l_project_id
19511                     and PROJECT_ASSIGNMENT_ID =-1;
19512                     exception when no_data_found then
19513                            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
19514                                  p_msg_name       => 'RES_ASSGN_DOESNT_EXIST_AMG',
19515                                  p_token1         => 'PROJECT_OR_TASK_NUMBER',
19516                                  p_value1         => l_budget_lines_in_tbl(i).pm_task_reference,
19517                                  p_token2         => 'RESOURCE',
19518                                  p_value2         => l_budget_lines_in_tbl(i).resource_alias);
19519                    end;*/
19520                    l_resource_assignment_id_tbl(i) := pa_budget_pvt.G_res_assign_tbl(i).resource_assignment_id;
19521                    begin
19522                    select txn_currency_code into l_currency_code_tbl(i)
19523                    from pa_budget_lines
19524                    where resource_assignment_id=l_resource_assignment_id_tbl(i)
19525                    and rownum=1;
19526                    exception when no_data_found then
19527                    l_currency_code_tbl(i):=l_currency_code;
19528                    end;
19529 
19530 
19531                    l_assignment_description_tbl(i) :=  p_planning_element_rec_tbl(i).assignment_description;
19532                    if l_assignment_description_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19533                            l_assignment_description_tbl(i):=null;
19534                    elsif l_assignment_description_tbl(i) = null then
19535                            l_assignment_description_tbl(i):=FND_API.G_MISS_CHAR;
19536                    end if;
19537 
19538                    l_attribute_category_tbl(i) := p_planning_element_rec_tbl(i).attribute_category;
19539                    l_attribute1_tbl(i)         := p_planning_element_rec_tbl(i).attribute1;
19540                    l_attribute2_tbl(i)         := p_planning_element_rec_tbl(i).attribute2;
19541                    l_attribute3_tbl(i)         := p_planning_element_rec_tbl(i).attribute3;
19542                    l_attribute4_tbl(i)         := p_planning_element_rec_tbl(i).attribute4;
19543                    l_attribute5_tbl(i)         := p_planning_element_rec_tbl(i).attribute5;
19544                    l_attribute6_tbl(i)         := p_planning_element_rec_tbl(i).attribute6;
19545                    l_attribute7_tbl(i)         := p_planning_element_rec_tbl(i).attribute7;
19546                    l_attribute8_tbl(i)         := p_planning_element_rec_tbl(i).attribute8;
19547                    l_attribute9_tbl(i)         := p_planning_element_rec_tbl(i).attribute9;
19548                    l_attribute10_tbl(i)        := p_planning_element_rec_tbl(i).attribute10;
19549                    l_attribute11_tbl(i)        := p_planning_element_rec_tbl(i).attribute11;
19550                    l_attribute12_tbl(i)        := p_planning_element_rec_tbl(i).attribute12;
19551                    l_attribute13_tbl(i)        := p_planning_element_rec_tbl(i).attribute13;
19552                    l_attribute14_tbl(i)        := p_planning_element_rec_tbl(i).attribute14;
19553                    l_attribute15_tbl(i)        := p_planning_element_rec_tbl(i).attribute15;
19554                    l_attribute16_tbl(i)        := p_planning_element_rec_tbl(i).attribute16;
19555                    l_attribute17_tbl(i)        := p_planning_element_rec_tbl(i).attribute17;
19556                    l_attribute18_tbl(i)        := p_planning_element_rec_tbl(i).attribute18;
19557                    l_attribute19_tbl(i)        := p_planning_element_rec_tbl(i).attribute19;
19558                    l_attribute20_tbl(i)        := p_planning_element_rec_tbl(i).attribute20;
19559                    l_attribute21_tbl(i)        := p_planning_element_rec_tbl(i).attribute21;
19560                    l_attribute22_tbl(i)        := p_planning_element_rec_tbl(i).attribute22;
19561                    l_attribute23_tbl(i)        := p_planning_element_rec_tbl(i).attribute23;
19562                    l_attribute24_tbl(i)        := p_planning_element_rec_tbl(i).attribute24;
19563                    l_attribute25_tbl(i)        := p_planning_element_rec_tbl(i).attribute25;
19564                    l_attribute26_tbl(i)        := p_planning_element_rec_tbl(i).attribute26;
19565                    l_attribute27_tbl(i)        := p_planning_element_rec_tbl(i).attribute27;
19566                    l_attribute28_tbl(i)        := p_planning_element_rec_tbl(i).attribute28;
19567                    l_attribute29_tbl(i)        := p_planning_element_rec_tbl(i).attribute29;
19568                    l_attribute30_tbl(i)        := p_planning_element_rec_tbl(i).attribute30;
19569 
19570              end loop;
19571 
19572            pa_fp_planning_transaction_pub.update_planning_transactions(
19573             p_context                        => l_fin_plan_class_code
19574            ,p_budget_version_id            => l_budget_version_id
19575            ,p_resource_assignment_id_tbl   => l_resource_assignment_id_tbl
19576            ,p_planning_start_date_tbl      => l_planning_start_date_tbl
19577            ,p_planning_end_date_tbl        => l_planning_end_date_tbl
19578            ,p_mfc_cost_type_id_tbl         => l_mfc_cost_type_id_tbl
19579            ,p_etc_method_code_tbl          => l_etc_method_code_tbl
19580            ,p_spread_curve_id_tbl          => l_spread_curve_id_tbl
19581            ,p_sp_fixed_date_tbl            => l_sp_fixed_date_tbl
19582            ,p_currency_code_tbl            => l_currency_code_tbl
19583            ,p_assignment_description_tbl   => l_assignment_description_tbl
19584            ,p_attribute_category_tbl       => l_attribute_category_tbl
19585            ,p_attribute1_tbl               => l_attribute1_tbl
19586            ,p_attribute2_tbl               => l_attribute2_tbl
19587            ,p_attribute3_tbl               => l_attribute3_tbl
19588            ,p_attribute4_tbl               => l_attribute4_tbl
19589            ,p_attribute5_tbl               => l_attribute5_tbl
19590            ,p_attribute6_tbl               => l_attribute6_tbl
19591            ,p_attribute7_tbl               => l_attribute7_tbl
19592            ,p_attribute8_tbl               => l_attribute8_tbl
19593            ,p_attribute9_tbl               => l_attribute9_tbl
19594            ,p_attribute10_tbl              => l_attribute10_tbl
19595            ,p_attribute11_tbl              => l_attribute11_tbl
19596            ,p_attribute12_tbl              => l_attribute12_tbl
19597            ,p_attribute13_tbl              => l_attribute13_tbl
19598            ,p_attribute14_tbl              => l_attribute14_tbl
19599            ,p_attribute15_tbl              => l_attribute15_tbl
19600            ,p_attribute16_tbl              => l_attribute16_tbl
19601            ,p_attribute17_tbl              => l_attribute17_tbl
19602            ,p_attribute18_tbl              => l_attribute18_tbl
19603            ,p_attribute19_tbl              => l_attribute19_tbl
19604            ,p_attribute20_tbl              => l_attribute20_tbl
19605            ,p_attribute21_tbl              => l_attribute21_tbl
19606            ,p_attribute22_tbl              => l_attribute22_tbl
19607            ,p_attribute23_tbl              => l_attribute23_tbl
19608            ,p_attribute24_tbl              => l_attribute24_tbl
19609            ,p_attribute25_tbl              => l_attribute25_tbl
19610            ,p_attribute26_tbl              => l_attribute26_tbl
19611            ,p_attribute27_tbl              => l_attribute27_tbl
19612            ,p_attribute28_tbl              => l_attribute28_tbl
19613            ,p_attribute29_tbl              => l_attribute29_tbl
19614            ,p_attribute30_tbl              => l_attribute30_tbl
19615            ,p_pji_rollup_required          => 'Y'
19616            ,x_msg_count                    => l_msg_count
19617            ,x_msg_data                     => l_msg_data
19618            ,x_return_status                => l_return_status
19619            );
19620 
19621            IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19622               THEN
19623                  IF l_debug_mode = 'Y' THEN
19624                        pa_debug.write_file('Failed due to error in update_planning_transactions',5);
19625                  END IF;
19626                  raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19627            END IF;
19628 
19629 
19630 
19631                pa_debug.reset_err_stack;
19632 
19633    EXCEPTION
19634        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
19635 
19636            l_msg_count := FND_MSG_PUB.count_msg;
19637 
19638            IF l_msg_count = 1 THEN
19639                 PA_INTERFACE_UTILS_PUB.get_messages
19640                       ( p_encoded        => FND_API.G_TRUE
19641                        ,p_msg_index      => 1
19642                        ,p_msg_count      => l_msg_count
19643                        ,p_msg_data       => l_msg_data
19644                        ,p_data           => l_data
19645                        ,p_msg_index_out  => l_msg_index_out);
19646                 x_msg_data := l_data;
19647                 x_msg_count := l_msg_count;
19648            ELSE
19649                x_msg_count := l_msg_count;
19650                x_msg_data := l_msg_data;
19651            END IF;
19652            IF l_debug_mode = 'Y' THEN
19653                 pa_debug.g_err_stage:='Invalid Arguments Passed';
19654                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
19655                 pa_debug.write_file('update_plannning_element_attr ' || x_msg_data,5);
19656            END IF;
19657 
19658            x_return_status:= FND_API.G_RET_STS_ERROR;
19659 
19660 
19661                pa_debug.reset_err_stack;
19662 
19663 
19664       WHEN Others THEN
19665 
19666 
19667            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19668            x_msg_count     := 1;
19669            x_msg_data      := SQLERRM;
19670            FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_BUDGET_PUB'
19671                             ,p_procedure_name  => 'update_plannning_element_attr');
19672            IF l_debug_mode = 'Y' THEN
19673                 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
19674                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
19675                 pa_debug.write_file('update_plannning_element_attr '  || pa_debug.G_Err_Stack,5);
19676            END IF;
19677 
19678                pa_debug.reset_err_stack;
19679 
19680     END update_plannning_element_attr;
19681 
19682 
19683 end PA_BUDGET_PUB;