DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_ACTIONS_PUB

Source


1 PACKAGE BODY PA_ACTIONS_PUB as
2 /* $Header: PAACTNPB.pls 120.8 2011/06/20 10:03:13 tvala ship $ */
3 
4 Invalid_Arg_Exc_Dlv EXCEPTION ;
5 g_plsql_max_array_size NUMBER := 200 ;
6 g_module_name    VARCHAR2(100) := 'pa.plsql.pa_actions_pub';
7 g_insert         CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'INSERT' ;
8 g_create         CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'CREATE' ;
9 g_delete         CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'DELETE' ;
10 g_update         CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'UPDATE' ;
11 g_modified       CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'MODIFIED' ;
12 g_unmodified     CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'UNMODIFIED' ;
13 g_billing        CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'BILLING';
14 g_shipping       CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'SHIPPING';
15 g_procurement    CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'PROCUREMENT';
16 g_item           CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'ITEM';
17 g_document       CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'DOCUMENT';
18 g_others         CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'OTHERS';
19 g_deliverables   CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'PA_DELIVERABLES';
20 g_dlvr_types     CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE := 'PA_DLVR_TYPES';
21 g_dlv_action_ship CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE:= 'WSH';
22 g_dlv_action_proc CONSTANT PA_LOOKUPS.LOOKUP_CODE%TYPE:= 'REQ';
23 
24 -- SubProgram           : CREATE_DLV_ACTIONS_IN_BULK
25 -- Type                 : PROCEDURE
26 -- Purpose              : Public API to create to Deliverable Actions
27 -- Note                 : Its a BULK API
28 -- Assumptions          : None
29 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
30 -- ---------------------------  ---------    ----------      ---------    ---------------------------
31 -- p_api_version                   IN          NUMBER            N        Standard Parameter
32 -- p_init_msg_list                 IN          VARCHAR2          N        Standard Parameter
33 -- p_commit                        IN          VARCHAR2          N        Standard Parameter
34 -- p_validate_only                 IN          VARCHAR2          N        Standard Parameter
35 -- p_validation_level              IN          NUMBER            N        Standard Parameter
36 -- p_calling_module                IN          VARCHAR2          N        Standard Parameter
37 -- p_debug_mode                    IN          VARCHAR2          N        Standard Parameter
38 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
39 -- p_name_tbl                      IN          PLSQL Table       N        Action Name
40 -- p_manager_person_id_tbl         IN          PLSQL Table       N        Manager Id
41 -- p_function_code_tbl             IN          PLSQL Table       N        Action Function
42 -- p_due_date_tbl                  IN          PLSQL Table       N        Due Date
43 -- p_completed_flag_tbl            IN          PLSQL Table       N        Completed Flag
44 -- p_completion_date_tbl           IN          PLSQL Table       N        Completed Date
45 -- p_description_tbl               IN          PLSQL Table       N        Description
46 -- p_attribute_category_tbl        IN          PLSQL Table       N        DFF Field
47 -- p_attribute1_tbl                IN          PLSQL Table       N        DFF Filed
48 -- p_attribute2_tbl                IN          PLSQL Table       N        DFF Field
49 -- p_attribute3_tbl                IN          PLSQL Table       N        DFF Filed
50 -- p_attribute4_tbl                IN          PLSQL Table       N        DFF Field
51 -- p_attribute5_tbl                IN          PLSQL Table       N        DFF Filed
52 -- p_attribute6_tbl                IN          PLSQL Table       N        DFF Field
53 -- p_attribute7_tbl                IN          PLSQL Table       N        DFF Filed
54 -- p_attribute8_tbl                IN          PLSQL Table       N        DFF Field
55 -- p_attribute9_tbl                IN          PLSQL Table       N        DFF Filed
56 -- p_attribute10_tbl               IN          PLSQL Table       N        DFF Field
57 -- p_attribute11_tbl               IN          PLSQL Table       N        DFF Filed
58 -- p_attribute12_tbl               IN          PLSQL Table       N        DFF Field
59 -- p_attribute13_tbl               IN          PLSQL Table       N        DFF Filed
60 -- p_attribute14_tbl               IN          PLSQL Table       N        DFF Field
61 -- p_attribute15_tbl               IN          PLSQL Table       N        DFF Filed
62 -- p_element_version_id_tbl        IN          PLSQL Table       N        Action VErsion Id
63 -- p_proj_element_id_tbl           IN          PLSQL Table       N        Action Element Id
64 -- p_record_version_number_tbl     IN          PLSQL Table       N        Record Version NUmber
65 -- p_project_id                    IN          NUMBER            N        Project Id
66 -- p_object_id                     IN          NUMBER            Y        Parent Id
67 -- p_object_version_id             IN          NUMBER            N        Parent Version ID
68 -- p_object_type                   IN          VARCHAR2          Y        Parent Type
69 -- p_pm_source_code                IN          NUMBER            N        PM Source Code
70 -- p_pm_source_reference           IN          VARCHAR2          N        PM Source Reference
71 -- p_carrying_out_organization_id  IN          VARCHAR2          N        Carrying Out Org ID
72 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
73 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
74 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
75 
76 
77 
78 PROCEDURE CREATE_DLV_ACTIONS_IN_BULK
79      (p_api_version               IN NUMBER    :=1.0
80      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
81      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
82      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
83      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
84      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
85      ,p_debug_mode                IN VARCHAR2  :='N'
86      ,p_max_msg_count             IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
87      ,p_name_tbl                  IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
88      ,p_manager_person_id_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
89      ,p_function_code_tbl         IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
90      ,p_due_date_tbl              IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
91      ,p_completed_flag_tbl        IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()
92      ,p_completion_date_tbl       IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
93      ,p_description_tbl           IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE()
94      ,p_attribute_category_tbl    IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
95      ,p_attribute1_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
96      ,p_attribute2_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
97      ,p_attribute3_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
98      ,p_attribute4_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
99      ,p_attribute5_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
100      ,p_attribute6_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
101      ,p_attribute7_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
102      ,p_attribute8_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
103      ,p_attribute9_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
104      ,p_attribute10_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
105      ,p_attribute11_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
106      ,p_attribute12_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
107      ,p_attribute13_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
108      ,p_attribute14_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
109      ,p_attribute15_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
110      ,p_element_version_id_tbl    IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
111      ,p_proj_element_id_tbl       IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
112      ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
113      ,p_project_id                IN PA_PROJECTS_ALL.PROJECT_ID%TYPE := null
114      ,p_object_id                 IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE
115      ,p_object_version_id         IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE := null
116      ,p_object_type               IN PA_LOOKUPS.LOOKUP_CODE%TYPE
117      ,p_pm_source_code            IN pa_proj_elements.pm_source_code%TYPE := null
118      ,p_pm_source_reference       IN pa_proj_elements.pm_source_reference%TYPE := null
119      ,p_pm_source_reference_tbl   IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE() -- added 3435905
120      ,p_carrying_out_organization_id IN pa_proj_elements.carrying_out_organization_id%TYPE := null
121      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
122      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
123      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
124      )
125 IS
126      l_proj_element_id_tbl        SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE() ;
127      l_rel_subtype                PA_OBJECT_RELATIONSHIPS.RELATIONSHIP_SUBTYPE%TYPE ;
128      l_debug_mode                 VARCHAR2(10);
129      l_msg_count                  NUMBER ;
130      l_data                       VARCHAR2(2000);
131      l_msg_data                   VARCHAR2(2000);
132      l_msg_index_out              NUMBER;
133 BEGIN
134 
135      x_msg_count := 0;
136      x_return_status := FND_API.G_RET_STS_SUCCESS;
137      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
138 
139      IF l_debug_mode = 'Y' THEN
140           PA_DEBUG.set_curr_function( p_function   => 'CR_DLV_ACTIONS_IN_BULK'
141                                      ,p_debug_mode => l_debug_mode );
142           pa_debug.g_err_stage:= 'Inside CREATE_DLV_ACTIONS_IN_BULK ';
143           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
144      END IF;
145 
146      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
147       FND_MSG_PUB.initialize;
148      END IF;
149 
150      IF (p_commit = FND_API.G_TRUE) THEN
151       savepoint CR_DLV_ACTIONS_SP ;
152      END IF;
153 
154      -- Call the pvt Create API only if something is fetched
155      -- to avoid unnecessary API call.
156      IF nvl(p_name_tbl.LAST,0)> 0 THEN
157 
158           IF l_debug_mode = 'Y' THEN
159         pa_debug.write(g_module_name,'Before Calling PA_ACTIONS_PVT.CREATE_DLV_ACTIONS_IN_BULK' ,3);
160      END IF;
161           PA_ACTIONS_PVT.CREATE_DLV_ACTIONS_IN_BULK
162                (p_api_version                  => p_api_version
163                ,p_init_msg_list                => FND_API.G_FALSE
164                ,p_commit                       => p_commit
165                ,p_validate_only                => p_validate_only
166                ,p_validation_level             => p_validation_level
167                ,p_calling_module               => p_calling_module
168                ,p_debug_mode                   => l_debug_mode
169                ,p_max_msg_count                => p_max_msg_count
170                ,p_name_tbl                     => p_name_tbl
171                ,p_manager_person_id_tbl        => p_manager_person_id_tbl
172                ,p_function_code_tbl            => p_function_code_tbl
173                ,p_due_date_tbl                 => p_due_date_tbl
174                ,p_completed_flag_tbl           => p_completed_flag_tbl
175                ,p_completion_date_tbl          => p_completion_date_tbl
176                ,p_description_tbl              => p_description_tbl
177                ,p_attribute_category_tbl       => p_attribute_category_tbl
178                ,p_attribute1_tbl               => p_attribute1_tbl
179                ,p_attribute2_tbl               => p_attribute2_tbl
180                ,p_attribute3_tbl               => p_attribute3_tbl
181                ,p_attribute4_tbl               => p_attribute4_tbl
182                ,p_attribute5_tbl               => p_attribute5_tbl
183                ,p_attribute6_tbl               => p_attribute6_tbl
184                ,p_attribute7_tbl               => p_attribute7_tbl
185                ,p_attribute8_tbl               => p_attribute8_tbl
186                ,p_attribute9_tbl               => p_attribute9_tbl
187                ,p_attribute10_tbl              => p_attribute10_tbl
188                ,p_attribute11_tbl              => p_attribute11_tbl
189                ,p_attribute12_tbl              => p_attribute12_tbl
190                ,p_attribute13_tbl              => p_attribute13_tbl
191                ,p_attribute14_tbl              => p_attribute14_tbl
192                ,p_attribute15_tbl              => p_attribute15_tbl
193                ,p_element_version_id_tbl       => p_element_version_id_tbl
194                ,p_proj_element_id_tbl          => p_proj_element_id_tbl
195                ,p_record_version_number_tbl    => p_record_version_number_tbl
196                ,p_project_id                   => p_project_id
197                ,p_object_id                    => p_object_id
198                ,p_object_version_id            => p_object_version_id
199                ,p_object_type                  => p_object_type
200                ,p_pm_source_code               => p_pm_source_code
201                ,p_pm_source_reference          => p_pm_source_reference
202                ,p_pm_source_reference_tbl      => p_pm_source_reference_tbl -- added 3435905
203                ,p_carrying_out_organization_id => p_carrying_out_organization_id
204                ,x_return_status                => x_return_status
205                ,x_msg_count                    => x_msg_count
206                ,x_msg_data                     => x_msg_data
207                ) ;
208      END IF ;
209      IF l_debug_mode = 'Y' THEN
210      pa_debug.write(g_module_name,'x_return_status is ' || x_return_status,3);
211     END IF ;
212 
213      IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
214           RAISE Invalid_Arg_Exc_Dlv ;
215      END IF ;
216 
217      IF l_debug_mode = 'Y' THEN
218            pa_debug.g_err_stage:= 'Exiting PA_ACTIONS_PUB.CREATE_DLV_ACTIONS_IN_BULK' ;
219            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
220            pa_debug.reset_curr_function;
221      END IF;
222 
223 EXCEPTION
224 WHEN Invalid_Arg_Exc_Dlv THEN
225      x_return_status := FND_API.G_RET_STS_ERROR;
226      l_msg_count := FND_MSG_PUB.count_msg;
227 
228      IF (p_commit = FND_API.G_TRUE) THEN
229            ROLLBACK TO CR_DLV_ACTIONS_SP;
230      END IF ;
231 
232      IF l_debug_mode = 'Y' THEN
233         pa_debug.g_err_stage := 'inside invalid arg exception of CR_DLV_ACTIONS_IN_BULK';
234         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
235      END IF;
236 
237      IF l_msg_count = 1 THEN
238            PA_INTERFACE_UTILS_PUB.get_messages
239                (p_encoded        => FND_API.G_TRUE,
240                 p_msg_index      => 1,
241                 p_msg_count      => l_msg_count,
242                 p_msg_data       => l_msg_data,
243                 p_data           => l_data,
244                 p_msg_index_out  => l_msg_index_out);
245            x_msg_data  := l_data;
246            x_msg_count := l_msg_count;
247      ELSE
248             x_msg_count := l_msg_count;
249      END IF;
250      IF l_debug_mode = 'Y' THEN
251        pa_debug.reset_curr_function;
252      END IF ;
253      RETURN;
254  WHEN OTHERS THEN
255      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
256      x_msg_count     := 1;
257      x_msg_data      := SQLERRM;
258 
259      IF (p_commit = FND_API.G_TRUE) THEN
260            ROLLBACK TO CR_DLV_ACTIONS_SP;
261      END IF ;
262 
263      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
264                      ,p_procedure_name  => 'CREATE_DLV_ACTIONS_IN_BULK');
265 
266      IF p_debug_mode = 'Y' THEN
267           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
268           pa_debug.write(g_module_name, pa_debug.g_err_stage,5);
269           pa_debug.reset_curr_function;
270      END IF;
271      RAISE;
272 END CREATE_DLV_ACTIONS_IN_BULK ;
273 
274 -- SubProgram           : UPDATE_DLV_ACTIONS_IN_BULK
275 -- Type                 : PROCEDURE
276 -- Purpose              : Public API to Update To Deliverable Actions
277 -- Note                 : Its a BULK API
278 -- Assumptions          : None
279 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
280 -- ---------------------------  ---------    ----------      ---------    ---------------------------
281 -- p_api_version                   IN          NUMBER            N      Standard Parameter
282 -- p_init_msg_list                 IN          VARCHAR2          N      Standard Parameter
283 -- p_commit                        IN          VARCHAR2          N      Standard Parameter
284 -- p_validate_only                 IN          VARCHAR2          N      Standard Parameter
285 -- p_validation_level              IN          NUMBER            N      Standard Parameter
286 -- p_calling_module                IN          VARCHAR2          N      Standard Parameter
287 -- p_debug_mode                    IN          VARCHAR2          N      Standard Parameter
288 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
289 -- p_name_tbl                      IN          PLSQL Table       N        Action Name
290 -- p_manager_person_id_tbl         IN          PLSQL Table       N        Manager Id
291 -- p_function_code_tbl             IN          PLSQL Table       N        Action Function
292 -- p_due_date_tbl                  IN          PLSQL Table       N        Due Date
293 -- p_completed_flag_tbl            IN          PLSQL Table       N        Completed Flag
294 -- p_completion_date_tbl           IN          PLSQL Table       N        Completed Date
295 -- p_description_tbl               IN          PLSQL Table       N        Description
296 -- p_attribute_category_tbl        IN          PLSQL Table       N        DFF Field
297 -- p_attribute1_tbl                IN          PLSQL Table       N        DFF Filed
298 -- p_attribute2_tbl                IN          PLSQL Table       N        DFF Field
299 -- p_attribute3_tbl                IN          PLSQL Table       N        DFF Filed
300 -- p_attribute4_tbl                IN          PLSQL Table       N        DFF Field
301 -- p_attribute5_tbl                IN          PLSQL Table       N        DFF Filed
302 -- p_attribute6_tbl                IN          PLSQL Table       N        DFF Field
303 -- p_attribute7_tbl                IN          PLSQL Table       N        DFF Filed
304 -- p_attribute8_tbl                IN          PLSQL Table       N        DFF Field
305 -- p_attribute9_tbl                IN          PLSQL Table       N        DFF Filed
306 -- p_attribute10_tbl               IN          PLSQL Table       N        DFF Field
307 -- p_attribute11_tbl               IN          PLSQL Table       N        DFF Filed
308 -- p_attribute12_tbl               IN          PLSQL Table       N        DFF Field
309 -- p_attribute13_tbl               IN          PLSQL Table       N        DFF Filed
310 -- p_attribute14_tbl               IN          PLSQL Table       N        DFF Field
311 -- p_attribute15_tbl               IN          PLSQL Table       N        DFF Filed
312 -- p_element_version_id_tbl        IN          PLSQL Table       N        Action VErsion Id
313 -- p_proj_element_id_tbl           IN          PLSQL Table       N        Action Element Id
314 -- p_record_version_number_tbl     IN          PLSQL Table       N        Record Version NUmber
315 -- p_project_id                    IN          NUMBER            N        Project Id
316 -- p_object_id                     IN          NUMBER            Y        Parent Id
317 -- p_object_version_id             IN          NUMBER            N        Parent Version ID
318 -- p_object_type                   IN          VARCHAR2          Y        Parent Type
319 -- p_pm_source_code                IN          NUMBER            N        PM Source Code
320 -- p_pm_source_reference           IN          VARCHAR2          N        PM Source Reference
321 -- p_carrying_out_organization_id  IN          VARCHAR2          N        Carrying Out Org ID
322 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
323 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
324 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
325 
326 PROCEDURE UPDATE_DLV_ACTIONS_IN_BULK
327      (p_api_version               IN NUMBER    :=1.0
328      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
329      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
330      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
331      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
332      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
333      ,p_debug_mode                IN VARCHAR2  :='N'
334      ,p_max_msg_count             IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
335      ,p_name_tbl                  IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
336      ,p_manager_person_id_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
337      ,p_function_code_tbl         IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
338      ,p_due_date_tbl              IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
339      ,p_completed_flag_tbl        IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()
340      ,p_completion_date_tbl       IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
341      ,p_description_tbl           IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE()
342      ,p_attribute_category_tbl    IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
343      ,p_attribute1_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
344      ,p_attribute2_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
345      ,p_attribute3_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
346      ,p_attribute4_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
347      ,p_attribute5_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
348      ,p_attribute6_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
349      ,p_attribute7_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
350      ,p_attribute8_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
351      ,p_attribute9_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
352      ,p_attribute10_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
353      ,p_attribute11_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
354      ,p_attribute12_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
355      ,p_attribute13_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
356      ,p_attribute14_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
357      ,p_attribute15_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
358      ,p_element_version_id_tbl    IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
359      ,p_proj_element_id_tbl       IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
360      ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
361      ,p_project_id                IN PA_PROJECTS_ALL.PROJECT_ID%TYPE := null
362      ,p_object_id                 IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE := null -- 3578694 passing default null
363      ,p_object_version_id         IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE := null
364      ,p_object_type               IN PA_LOOKUPS.LOOKUP_CODE%TYPE
365      ,p_pm_source_code            IN pa_proj_elements.pm_source_code%TYPE := null
366      ,p_pm_source_reference       IN pa_proj_elements.pm_source_reference%TYPE := null
367      ,p_carrying_out_organization_id IN pa_proj_elements.carrying_out_organization_id%TYPE := null
368      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
369      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
370      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
371      )
372 IS
373 
374      l_debug_mode                 VARCHAR2(10);
375      l_msg_count                  NUMBER ;
376      l_data                       VARCHAR2(2000);
377      l_msg_data                   VARCHAR2(2000);
378      l_msg_index_out              NUMBER;
379 
380 BEGIN
381 
382      x_msg_count := 0;
383      x_return_status := FND_API.G_RET_STS_SUCCESS;
384      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
385 
386      IF l_debug_mode = 'Y' THEN
387           PA_DEBUG.set_curr_function( p_function   => 'UPDADTE_DLV_ACTIONS_IN_BULK'
388                                      ,p_debug_mode => l_debug_mode );
389           pa_debug.g_err_stage:= 'Inside UPDATE_DLV_ACTIONS_IN_BULK ';
390           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
391      END IF;
392 
393      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
394       FND_MSG_PUB.initialize;
395      END IF;
396 
397      IF (p_commit = FND_API.G_TRUE) THEN
398       savepoint UP_DLV_ACTIONS_SP ;
399      END IF;
400 
401      -- Call the pvt Create API only if something is fetched
402      -- to avoid unnecessary API call.
403      IF nvl(p_name_tbl.LAST,0)>0 THEN
404 
405           PA_ACTIONS_PVT.UPDATE_DLV_ACTIONS_IN_BULK
406                (p_api_version                     => p_api_version
407                ,p_init_msg_list                   => FND_API.G_FALSE
408                ,p_commit                          => p_commit
409                ,p_validate_only                   => p_validate_only
410                ,p_validation_level                => p_validation_level
411                ,p_calling_module                  => p_calling_module
412                ,p_debug_mode                      => l_debug_mode
413                ,p_max_msg_count                   => p_max_msg_count
414                ,p_name_tbl                        => p_name_tbl
415                ,p_manager_person_id_tbl           => p_manager_person_id_tbl
416                ,p_function_code_tbl               => p_function_code_tbl
417                ,p_due_date_tbl                    => p_due_date_tbl
418                ,p_completed_flag_tbl              => p_completed_flag_tbl
419                ,p_completion_date_tbl             => p_completion_date_tbl
420                ,p_description_tbl                 => p_description_tbl
421                ,p_attribute_category_tbl          => p_attribute_category_tbl
422                ,p_attribute1_tbl                  => p_attribute1_tbl
423                ,p_attribute2_tbl                  => p_attribute2_tbl
424                ,p_attribute3_tbl                  => p_attribute3_tbl
425                ,p_attribute4_tbl                  => p_attribute4_tbl
426                ,p_attribute5_tbl                  => p_attribute5_tbl
427                ,p_attribute6_tbl                  => p_attribute6_tbl
428                ,p_attribute7_tbl                  => p_attribute7_tbl
429                ,p_attribute8_tbl                  => p_attribute8_tbl
430                ,p_attribute9_tbl                  => p_attribute9_tbl
431                ,p_attribute10_tbl                 => p_attribute10_tbl
432                ,p_attribute11_tbl                 => p_attribute11_tbl
433                ,p_attribute12_tbl                 => p_attribute12_tbl
434                ,p_attribute13_tbl                 => p_attribute13_tbl
435                ,p_attribute14_tbl                 => p_attribute14_tbl
436                ,p_attribute15_tbl                 => p_attribute15_tbl
437                ,p_element_version_id_tbl          => p_element_version_id_tbl
438                ,p_proj_element_id_tbl             => p_proj_element_id_tbl
439                ,p_record_version_number_tbl       => p_record_version_number_tbl
440                ,p_project_id                      => p_project_id
441                ,p_object_id                       => p_object_id
442                ,p_object_version_id               => p_object_version_id
443                ,p_object_type                     => p_object_type
444                ,p_pm_source_code                  => p_pm_source_code
445                ,p_pm_source_reference             => p_pm_source_reference
446                ,p_carrying_out_organization_id    => p_carrying_out_organization_id
447                ,x_return_status                   => x_return_status
448                ,x_msg_count                       => x_msg_count
449                ,x_msg_data                        => x_msg_data
450                ) ;
451 
452      END IF ;
453 
454      IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
455           RAISE Invalid_Arg_Exc_Dlv ;
456      END IF ;
457 
458      IF l_debug_mode = 'Y' THEN
459            pa_debug.g_err_stage:= 'Exiting UPDATE_DLV_ACTIONS_IN_BULK' ;
460            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
461            pa_debug.reset_curr_function;
462      END IF;
463 
464 EXCEPTION
465 WHEN Invalid_Arg_Exc_Dlv THEN
466      x_return_status := FND_API.G_RET_STS_ERROR;
467      l_msg_count := FND_MSG_PUB.count_msg;
468 
469      IF (p_commit = FND_API.G_TRUE) THEN
470            ROLLBACK TO UP_DLV_ACTIONS_SP;
471      END IF ;
472 
473      IF l_debug_mode = 'Y' THEN
474         pa_debug.g_err_stage := 'inside invalid arg exception of UPDATE_DLV_ACTIONS_IN_BULK';
475         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
476      END IF;
477 
478      IF l_msg_count = 1 THEN
479            PA_INTERFACE_UTILS_PUB.get_messages
480                (p_encoded        => FND_API.G_TRUE,
481                 p_msg_index      => 1,
482                 p_msg_count      => l_msg_count,
483                 p_msg_data       => l_msg_data,
484                 p_data           => l_data,
485                 p_msg_index_out  => l_msg_index_out);
486            x_msg_data  := l_data;
487            x_msg_count := l_msg_count;
488      ELSE
489             x_msg_count := l_msg_count;
490      END IF;
491      IF l_debug_mode = 'Y' THEN
492        pa_debug.reset_curr_function;
493      END IF ;
494      RETURN;
495 WHEN OTHERS THEN
496      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
497      x_msg_count     := 1;
498      x_msg_data      := SQLERRM;
499 
500      IF (p_commit = FND_API.G_TRUE) THEN
501            ROLLBACK TO UP_DLV_ACTIONS_SP;
502      END IF ;
503 
504      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
505                      ,p_procedure_name  => 'UPDATE_DLV_ACTIONS_IN_BULK');
506 
507      IF p_debug_mode = 'Y' THEN
508           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
509           pa_debug.write('UPDATE_DLV_ACTIONS_IN_BULK: ' || g_module_name,pa_debug.g_err_stage,5);
510           pa_debug.reset_curr_function;
511      END IF;
512      RAISE;
513 END UPDATE_DLV_ACTIONS_IN_BULK ;
514 
515 -- SubProgram           : DELETE_DLV_ACTIONS_IN_BULK
516 -- Type                 : PROCEDURE
517 -- Purpose              : Public API to Delete To Deliverable Actions
518 -- Note                 : Its a BULK API
519 -- Assumptions          : None
520 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
521 -- ---------------------------  ---------    ----------      ---------    ---------------------------
522 -- p_api_version                   IN          NUMBER            N        Standard Parameter
523 -- p_init_msg_list                 IN          VARCHAR2          N        Standard Parameter
524 -- p_commit                        IN          VARCHAR2          N        Standard Parameter
525 -- p_validate_only                 IN          VARCHAR2          N        Standard Parameter
526 -- p_validation_level              IN          NUMBER            N        Standard Parameter
527 -- p_calling_module                IN          VARCHAR2          N        Standard Parameter
528 -- p_debug_mode                    IN          VARCHAR2          N        Standard Parameter
529 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
530 -- p_element_version_id_tbl        IN          PLSQL Table       N        Action VErsion Id
531 -- p_proj_element_id_tbl           IN          PLSQL Table       N        Action Element Id
532 -- p_record_version_number_tbl     IN          PLSQL Table       N        Record Version NUmber
533 -- p_object_id                     IN          NUMBER            Y        Parent Id
534 -- p_object_version_id             IN          NUMBER            N        Parent Version ID
535 -- p_object_type                   IN          VARCHAR2          Y        Parent Type
536 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
537 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
538 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
539 
540 PROCEDURE DELETE_DLV_ACTIONS_IN_BULK
541      (p_api_version               IN NUMBER    :=1.0
542      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
543      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
544      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
545      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
546      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
547      ,p_debug_mode                IN VARCHAR2  :='N'
548      ,p_max_msg_count             IN NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
549      ,p_object_type               IN PA_LOOKUPS.LOOKUP_CODE%TYPE
550      ,p_object_id                 IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE
551      ,p_element_version_id_tbl    IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
552      ,p_proj_element_id_tbl       IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
553      ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
554      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
555      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
556      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
557      )
558 IS
559      l_debug_mode                 VARCHAR2(10);
560      l_msg_count                  NUMBER ;
561      l_data                       VARCHAR2(2000);
562      l_msg_data                   VARCHAR2(2000);
563      l_msg_index_out              NUMBER;
564 BEGIN
565      x_msg_count := 0;
566      x_return_status := FND_API.G_RET_STS_SUCCESS;
567      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
568 
569      IF l_debug_mode = 'Y' THEN
570           PA_DEBUG.set_curr_function( p_function   => 'DELETE_DLV_ACTIONS_IN_BULK',
571                                       p_debug_mode => l_debug_mode );
572           pa_debug.g_err_stage:= 'Inside DELETE_DLV_ACTIONS_IN_BULK ';
573           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
574      END IF;
575 
576 
577      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
578       FND_MSG_PUB.initialize;
579      END IF;
580 
581      IF (p_commit = FND_API.G_TRUE) THEN
582       savepoint DEL_DLV_ACTIONS_SP ;
583      END IF;
584 
585      IF l_debug_mode = 'Y' THEN
586           pa_debug.g_err_stage:= 'Validating Input parameters';
587           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
588      END IF;
589 
590      PA_ACTIONS_PVT.DELETE_DLV_ACTIONS_IN_BULK
591           (p_api_version               => p_api_version
592           ,p_init_msg_list             => FND_API.G_FALSE
593           ,p_commit                    => p_commit
594           ,p_validate_only             => p_validate_only
595           ,p_validation_level          => p_validation_level
596           ,p_calling_module            => p_calling_module
597           ,p_debug_mode                => l_debug_mode
598           ,p_max_msg_count             => p_max_msg_count
599           ,p_object_type               => p_object_type
600           ,p_object_id                 => p_object_id
601           ,p_element_version_id_tbl    => p_element_version_id_tbl
602           ,p_proj_element_id_tbl       => p_proj_element_id_tbl
603           ,p_record_version_number_tbl => p_record_version_number_tbl
604           ,x_return_status             => x_return_status
605           ,x_msg_count                 => x_msg_count
606           ,x_msg_data                  => x_msg_data
607           ) ;
608 
609      IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
610           RAISE Invalid_Arg_Exc_Dlv ;
611      END IF ;
612 
613      IF l_debug_mode = 'Y' THEN       --Added for bug 4945876
614        pa_debug.reset_curr_function;
615      END IF ;
616 
617 EXCEPTION
618 WHEN Invalid_Arg_Exc_Dlv THEN
619      x_return_status := FND_API.G_RET_STS_ERROR;
620      l_msg_count := FND_MSG_PUB.count_msg;
621 
622      IF (p_commit = FND_API.G_TRUE) THEN
623            ROLLBACK TO DEL_DLV_ACTIONS_SP;
624      END IF ;
625 
626      IF l_debug_mode = 'Y' THEN
627         pa_debug.g_err_stage := 'inside invalid arg exception of CR_UP_DLV_ACTIONS_IN_BULK';
628         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
629      END IF;
630 
631      IF l_msg_count = 1 THEN
632            PA_INTERFACE_UTILS_PUB.get_messages
633                (p_encoded        => FND_API.G_TRUE,
634                 p_msg_index      => 1,
635                 p_msg_count      => l_msg_count,
636                 p_msg_data       => l_msg_data,
637                 p_data           => l_data,
638                 p_msg_index_out  => l_msg_index_out);
639            x_msg_data  := l_data;
640            x_msg_count := l_msg_count;
641      ELSE
642             x_msg_count := l_msg_count;
643      END IF;
644      IF l_debug_mode = 'Y' THEN
645        pa_debug.reset_curr_function;
646      END IF ;
647      RETURN;
648 WHEN OTHERS THEN
649      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
650      x_msg_count     := 1;
651      x_msg_data      := SQLERRM;
652 
653      IF (p_commit = FND_API.G_TRUE) THEN
654            ROLLBACK TO UP_DLV_ACTIONS_SP;
655      END IF ;
656 
657      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
658                      ,p_procedure_name  => 'DELETE_DLV_ACTIONS_IN_BULK');
659 
660      IF p_debug_mode = 'Y' THEN
661           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
662           pa_debug.write('DELETE_DLV_ACTIONS_IN_BULK: ' || g_module_name,pa_debug.g_err_stage,5);
663           pa_debug.reset_curr_function;
664      END IF;
665      RAISE;
666 END DELETE_DLV_ACTIONS_IN_BULK ;
667 
668 -- SubProgram           : CR_UP_DLV_ACTIONS_IN_BULK
669 -- Type                 : PROCEDURE
670 -- Purpose              : Public API to Create/Update To Deliverable Actions
671 -- Note                 : Its a BULK API
672 -- Assumptions          : None
673 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
674 -- ---------------------------  ---------    ----------      ---------    ---------------------------
675 -- p_api_version                   IN          NUMBER            N        Standard Parameter
676 -- p_init_msg_list                 IN          VARCHAR2          N        Standard Parameter
677 -- p_commit                        IN          VARCHAR2          N        Standard Parameter
678 -- p_validate_only                 IN          VARCHAR2          N        Standard Parameter
679 -- p_validation_level              IN          NUMBER            N        Standard Parameter
680 -- p_calling_module                IN          VARCHAR2          N        Standard Parameter
681 -- p_debug_mode                    IN          VARCHAR2          N        Standard Parameter
682 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
683 -- p_name_tbl                      IN          PLSQL Table       N        Action Name
684 -- p_manager_person_id_tbl         IN          PLSQL Table       N        Manager Id
685 -- p_function_code_tbl             IN          PLSQL Table       N        Action Function
686 -- p_due_date_tbl                  IN          PLSQL Table       N        Due Date
687 -- p_completed_flag_tbl            IN          PLSQL Table       N        Completed Flag
688 -- p_completion_date_tbl           IN          PLSQL Table       N        Completed Date
689 -- p_description_tbl               IN          PLSQL Table       N        Description
690 -- p_attribute_category_tbl        IN          PLSQL Table       N        DFF Field
691 -- p_attribute1_tbl                IN          PLSQL Table       N        DFF Filed
692 -- p_attribute2_tbl                IN          PLSQL Table       N        DFF Field
693 -- p_attribute3_tbl                IN          PLSQL Table       N        DFF Filed
694 -- p_attribute4_tbl                IN          PLSQL Table       N        DFF Field
695 -- p_attribute5_tbl                IN          PLSQL Table       N        DFF Filed
696 -- p_attribute6_tbl                IN          PLSQL Table       N        DFF Field
697 -- p_attribute7_tbl                IN          PLSQL Table       N        DFF Filed
698 -- p_attribute8_tbl                IN          PLSQL Table       N        DFF Field
699 -- p_attribute9_tbl                IN          PLSQL Table       N        DFF Filed
700 -- p_attribute10_tbl               IN          PLSQL Table       N        DFF Field
701 -- p_attribute11_tbl               IN          PLSQL Table       N        DFF Filed
702 -- p_attribute12_tbl               IN          PLSQL Table       N        DFF Field
703 -- p_attribute13_tbl               IN          PLSQL Table       N        DFF Filed
704 -- p_attribute14_tbl               IN          PLSQL Table       N        DFF Field
705 -- p_attribute15_tbl               IN          PLSQL Table       N        DFF Filed
706 -- p_element_version_id_tbl        IN          PLSQL Table       N        Action VErsion Id
707 -- p_proj_element_id_tbl           IN          PLSQL Table       N        Action Element Id
708 -- p_record_version_number_tbl     IN          PLSQL Table       N        Record Version NUmber
709 -- p_project_id                    IN          NUMBER            N        Project Id
710 -- p_object_id                     IN          NUMBER            Y        Parent Id
711 -- p_object_version_id             IN          NUMBER            N        Parent Version ID
712 -- p_object_type                   IN          VARCHAR2          Y        Parent Type
713 -- p_pm_source_code                IN          NUMBER            N        PM Source Code
714 -- p_pm_source_reference           IN          VARCHAR2          N        PM Source Reference
715 -- p_carrying_out_organization_id  IN          VARCHAR2          N        Carrying Out Org ID
716 -- p_insert_or_update              IN          VARCHAR2          N        Identifies the API Mode
717 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
718 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
719 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
720 
721 PROCEDURE CR_UP_DLV_ACTIONS_IN_BULK
722      (p_api_version               IN NUMBER    :=1.0
723      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
724      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
725      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
726      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
727      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
728      ,p_debug_mode                IN VARCHAR2  :='N'
729      ,p_max_msg_count             IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
730      ,p_name_tbl                  IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
731      ,p_manager_person_id_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
732      ,p_function_code_tbl         IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
733      ,p_due_date_tbl              IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
734      ,p_completed_flag_tbl        IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()
735      ,p_completion_date_tbl       IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
736      ,p_description_tbl           IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE()
737      ,p_attribute_category_tbl    IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
738      ,p_attribute1_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
739      ,p_attribute2_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
740      ,p_attribute3_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
741      ,p_attribute4_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
742      ,p_attribute5_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
743      ,p_attribute6_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
744      ,p_attribute7_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
745      ,p_attribute8_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
746      ,p_attribute9_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
747      ,p_attribute10_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
748      ,p_attribute11_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
749      ,p_attribute12_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
750      ,p_attribute13_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
751      ,p_attribute14_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
752      ,p_attribute15_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
753      ,p_element_version_id_tbl    IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
754      ,p_proj_element_id_tbl       IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
755      ,p_user_action_tbl           IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
756      ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
757      ,p_project_id                IN PA_PROJECTS_ALL.PROJECT_ID%TYPE  := null
758      ,p_object_id                 IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE
759      ,p_object_version_id         IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE := null
760      ,p_object_type               IN PA_LOOKUPS.LOOKUP_CODE%TYPE
761      ,p_pm_source_code            IN pa_proj_elements.pm_source_code%TYPE := null
762      ,p_pm_source_reference       IN pa_proj_elements.pm_source_reference%TYPE := null
763      ,p_pm_source_reference_tbl   IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE() -- added 3435905
764      ,p_carrying_out_organization_id IN pa_proj_elements.carrying_out_organization_id%TYPE := null
765      ,p_insert_or_update          IN VARCHAR2 := 'INSERT'
766      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
767      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
768      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
769      )
770 IS
771 
772      l_debug_mode                 VARCHAR2(10);
773      l_msg_count                  NUMBER ;
774      l_data                       VARCHAR2(2000);
775      l_msg_data                   VARCHAR2(2000);
776      l_msg_index_out              NUMBER;
777 
778      l_ins_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
779      l_ins_mgr_person_id_tbl      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
780      l_ins_function_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
781      l_ins_due_date_tbl           SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
782      l_ins_comp_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()      ;
783      l_ins_comp_date_tbl          SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
784      l_ins_element_id_tbl         SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
785      l_ins_element_ver_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
786      l_ins_rec_ver_num_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
787      l_ins_description_tbl        SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE();
788      l_ins_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()    ;
789      l_ins_attribute1_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
790      l_ins_attribute2_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
791      l_ins_attribute3_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
792      l_ins_attribute4_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
793      l_ins_attribute5_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
794      l_ins_attribute6_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
795      l_ins_attribute7_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
796      l_ins_attribute8_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
797      l_ins_attribute9_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
798      l_ins_attribute10_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
799      l_ins_attribute11_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
800      l_ins_attribute12_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
801      l_ins_attribute13_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
802      l_ins_attribute14_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
803      l_ins_attribute15_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
804 
805      l_upd_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
806      l_upd_mgr_person_id_tbl      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
807      l_upd_function_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
808      l_upd_due_date_tbl           SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
809      l_upd_comp_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()      ;
810      l_upd_comp_date_tbl          SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
811      l_upd_element_id_tbl         SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
812      l_upd_element_ver_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
813      l_upd_rec_ver_num_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
814      l_upd_description_tbl        SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE();
815      l_upd_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()    ;
816      l_upd_attribute1_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
817      l_upd_attribute2_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
818      l_upd_attribute3_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
819      l_upd_attribute4_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
820      l_upd_attribute5_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
821      l_upd_attribute6_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
822      l_upd_attribute7_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
823      l_upd_attribute8_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
824      l_upd_attribute9_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
825      l_upd_attribute10_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
826      l_upd_attribute11_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
827      l_upd_attribute12_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
828      l_upd_attribute13_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
829      l_upd_attribute14_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
830      l_upd_attribute15_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
831 
832      l_del_element_id_tbl         SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
833      l_del_element_ver_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
834      l_del_rec_ver_num_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
835 
836      j_ins NUMBER ;
837      j_upd NUMBER ;
838      j_del NUMBER ;
839 
840      -- 3769024 curstor to retrieve element_version_id of action from proj_element_id
841 
842      Cursor c_actn_info(l_action_ver_id IN NUMBER) IS
843      SELECT
844             PEV.PROJ_ELEMENT_ID
845      FROM
846             PA_PROJ_ELEMENT_VERSIONS PEV
847      WHERE
848             PEV.ELEMENT_VERSION_ID = l_action_ver_id
849         AND PEV.OBJECT_TYPE        = 'PA_ACTIONS';
850 
851     -- 3769024 end
852 
853 BEGIN
854 
855      x_msg_count := 0;
856      x_return_status := FND_API.G_RET_STS_SUCCESS;
857      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
858 
859      IF l_debug_mode = 'Y' THEN
860           PA_DEBUG.set_curr_function( p_function   => 'CR_UP_DLV_ACTIONS_IN_BULK',
861                                       p_debug_mode => l_debug_mode );
862           pa_debug.g_err_stage:= 'Inside CR_UP_DLV_ACTIONS_IN_BULK ';
863           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
864      END IF;
865 
866      IF l_debug_mode = 'Y' THEN
867           pa_debug.g_err_stage:= 'Printing Input parameters';
868           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
869           pa_debug.write(g_module_name,'p_object_id'||':'||p_object_id,3) ;
870           pa_debug.write(g_module_name,'p_object_type'||':'||p_object_type,3) ;
871           pa_debug.write(g_module_name,'p_insert_or_update'||':'||p_insert_or_update,3) ;
872      END IF;
873 
874      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
875       FND_MSG_PUB.initialize;
876      END IF;
877 
878      IF (p_commit = FND_API.G_TRUE) THEN
879       savepoint CR_UP_DLV_ACTIONS_SP ;
880      END IF;
881 
882      IF l_debug_mode = 'Y' THEN
883           pa_debug.g_err_stage:= 'Validating Input parameters';
884           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
885      END IF;
886 
887      IF p_insert_or_update IS NULL
888      THEN
889           IF l_debug_mode = 'Y' THEN
890                pa_debug.g_err_stage:= 'INVALID INPUT PARAMETER';
891                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
892           END IF;
893 
894           x_return_status := FND_API.G_RET_STS_ERROR;
895           PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
896                              ,p_msg_name         => 'PA_INV_PARAM_PASSED');
897           RAISE Invalid_Arg_Exc_Dlv;
898      END IF;
899 
900 
901      -- Call the validation API. It will
902      -- perform all the validation.
903      IF l_debug_mode = 'Y' THEN
904           pa_debug.g_err_stage:= 'Calling PA_ACTIONS_PUB.VALIDATE_ACTIONS';
905           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
906      END IF ;
907 
908        -- Bug 3651563 ,If p_calling_module is nt passed ,
909        -- Whatever validation is done in this API specific to AMG Flow will not get fired
910        -- So,Passing p_calling_module also
911        PA_ACTIONS_PUB.VALIDATE_ACTIONS
912             ( p_init_msg_list         => FND_API.G_FALSE
913              ,p_debug_mode            => l_debug_mode
914              ,p_calling_module        => p_calling_module   -- Included by avaithia Bug 3651563
915              ,p_name_tbl              => p_name_tbl
916              ,p_completed_flag_tbl    => p_completed_flag_tbl
917              ,p_completion_date_tbl   => p_completion_date_tbl
918              ,p_description_tbl       => p_description_tbl
919              ,p_function_code_tbl     => p_function_code_tbl
920              ,p_due_date_tbl          => p_due_date_tbl
921              ,p_element_version_id_tbl=> p_element_version_id_tbl
922              ,p_proj_element_id_tbl   => p_proj_element_id_tbl
923              ,p_user_action_tbl       => p_user_action_tbl
924              ,p_object_id             => p_object_id
925              ,p_object_version_id     => p_object_version_id
926              ,p_object_type           => p_object_type
927              ,p_project_id            => p_project_id
928              ,p_action_owner_id_tbl   => p_manager_person_id_tbl
929              ,p_carrying_out_org_id   => p_carrying_out_organization_id
930              ,p_action_reference_tbl  => p_pm_source_reference_tbl
931              ,p_deliverable_id        => p_object_id
932              ,p_insert_or_update      => p_insert_or_update
933              ,x_return_status         => x_return_status
934              ,x_msg_count             => x_msg_count
935              ,x_msg_data              => x_msg_data
936            ) ;
937 
938      IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
939               RAISE Invalid_Arg_Exc_Dlv ;
940      END IF ;
941 
942 
943      -- In update mode user can perform following actions
944      -- 1. Create a new action.
945      -- 2. Update an existing/new action.
946      -- 3. Delete an existing/new action.
947      -- So, in update mode following execution order will
948      -- be maintained.
949      --     1. Delete
950      --     2. Update
951      --     3. Insert
952 
953      -- Loop through p_user_actions_tbl to find out the
954      -- actions which are deleted by user.
955 
956 
957      -- Initialize the local variable
958      j_ins := 0 ;
959      j_upd := 0 ;
960      j_del := 0 ;
961 
962      IF nvl(p_user_action_tbl.last,0) >= 1 THEN -- Only if something is fetched
963 
964           FOR i in p_user_action_tbl.FIRST .. p_user_action_tbl.LAST LOOP
965 
966                IF nvl(p_user_action_tbl(i),g_insert) = g_insert THEN
967 
968                     IF l_debug_mode = 'Y' THEN
969                          pa_debug.g_err_stage:= 'Insert Operation';
970                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
971                     END IF;
972 
973                     j_ins:=j_ins+1 ;
974 
975                     -- Get all the actions which are created, into
976                     -- local plsql tables, which will be used to
977                     -- call PLSQL bulk API for create.
978 
979                     -- extend the size of PLSQL table
980                     l_ins_element_id_tbl.extend        ;
981                     l_ins_element_ver_id_tbl.extend    ;
982                     l_ins_rec_ver_num_id_tbl.extend    ;
983                     l_ins_name_tbl.extend              ;
984                     l_ins_function_code_tbl.extend     ;
985                     l_ins_mgr_person_id_tbl.extend     ;
986                     l_ins_due_date_tbl.extend          ;
987                     l_ins_comp_flag_tbl.extend         ;
988                     l_ins_comp_date_tbl.extend         ;
989                     l_ins_attribute_category_tbl.extend;
990                     l_ins_attribute1_tbl.extend        ;
991                     l_ins_attribute2_tbl.extend        ;
992                     l_ins_attribute3_tbl.extend        ;
993                     l_ins_attribute4_tbl.extend        ;
994                     l_ins_attribute5_tbl.extend        ;
995                     l_ins_attribute6_tbl.extend        ;
996                     l_ins_attribute7_tbl.extend        ;
997                     l_ins_attribute8_tbl.extend        ;
998                     l_ins_attribute9_tbl.extend        ;
999                     l_ins_attribute10_tbl.extend       ;
1000                     l_ins_attribute11_tbl.extend       ;
1001                     l_ins_attribute12_tbl.extend       ;
1002                     l_ins_attribute13_tbl.extend       ;
1003                     l_ins_attribute14_tbl.extend       ;
1004                     l_ins_attribute15_tbl.extend       ;
1005                     l_ins_description_tbl.extend       ;
1006 
1007 
1008                     l_ins_element_id_tbl(j_ins)      := p_proj_element_id_tbl(i)           ;
1009                     l_ins_element_ver_id_tbl(j_ins)  := p_element_version_id_tbl(i)        ;
1010 
1011                     IF p_debug_mode = 'Y' THEN
1012                         pa_debug.write(g_module_name,'Tracking vers id ['||p_element_version_id_tbl(i)||'] elem id['||p_proj_element_id_tbl(i) ,3) ;
1013                     END IF;
1014 
1015                     l_ins_rec_ver_num_id_tbl(j_ins)  := p_record_version_number_tbl(i)     ;
1016                     l_ins_name_tbl(j_ins)            := p_name_tbl(i)                      ;
1017                     l_ins_function_code_tbl(j_ins)   := p_function_code_tbl(i)             ;
1018 
1019                     IF p_object_type <> g_dlvr_types THEN
1020                          l_ins_mgr_person_id_tbl(j_ins)     := p_manager_person_id_tbl(i)  ;
1021                          l_ins_due_date_tbl(j_ins)          := p_due_date_tbl(i)           ;
1022                          l_ins_comp_flag_tbl(j_ins)         := p_completed_flag_tbl(i)     ;
1023                          l_ins_comp_date_tbl(j_ins)         := p_completion_date_tbl(i)    ;
1024                          l_ins_attribute_category_tbl(j_ins):= p_attribute_category_tbl(i) ;
1025                          l_ins_attribute1_tbl(j_ins)        := p_attribute1_tbl(i)         ;
1026                          l_ins_attribute2_tbl(j_ins)        := p_attribute2_tbl(i)         ;
1027                          l_ins_attribute3_tbl(j_ins)        := p_attribute3_tbl(i)         ;
1028                          l_ins_attribute4_tbl(j_ins)        := p_attribute4_tbl(i)         ;
1029                          l_ins_attribute5_tbl(j_ins)        := p_attribute5_tbl(i)         ;
1030                          l_ins_attribute6_tbl(j_ins)        := p_attribute6_tbl(i)         ;
1031                          l_ins_attribute7_tbl(j_ins)        := p_attribute7_tbl(i)         ;
1032                          l_ins_attribute8_tbl(j_ins)        := p_attribute8_tbl(i)         ;
1033                          l_ins_attribute9_tbl(j_ins)        := p_attribute9_tbl(i)         ;
1034                          l_ins_attribute10_tbl(j_ins)       := p_attribute10_tbl(i)        ;
1035                          l_ins_attribute11_tbl(j_ins)       := p_attribute11_tbl(i)        ;
1036                          l_ins_attribute12_tbl(j_ins)       := p_attribute12_tbl(i)        ;
1037                          l_ins_attribute13_tbl(j_ins)       := p_attribute13_tbl(i)        ;
1038                          l_ins_attribute14_tbl(j_ins)       := p_attribute14_tbl(i)        ;
1039                          l_ins_attribute15_tbl(j_ins)       := p_attribute15_tbl(i)        ;
1040                          l_ins_description_tbl(j_ins)       := p_description_tbl(i)        ;
1041                     END IF;
1042 
1043                ELSIF nvl(p_user_action_tbl(i),g_insert) = g_modified THEN
1044 
1045                     IF l_debug_mode = 'Y' THEN
1046                          pa_debug.g_err_stage:= 'Update Operation';
1047                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
1048                     END IF;
1049 
1050                     j_upd:=j_upd+1 ;
1051 
1052                     -- Get all the actions which are updated, into
1053                     -- local plsql tables, which will be used to
1054                     -- call PLSQL bulk API for update.
1055 
1056                     -- extend the size of PLSQL table
1057                     l_upd_element_id_tbl.extend        ;
1058                     l_upd_element_ver_id_tbl.extend    ;
1059                     l_upd_rec_ver_num_id_tbl.extend    ;
1060                     l_upd_name_tbl.extend              ;
1061                     l_upd_function_code_tbl.extend     ;
1062                     l_upd_mgr_person_id_tbl.extend     ;
1063                     l_upd_due_date_tbl.extend          ;
1064                     l_upd_comp_flag_tbl.extend         ;
1065                     l_upd_comp_date_tbl.extend         ;
1066                     l_upd_attribute_category_tbl.extend;
1067                     l_upd_attribute1_tbl.extend        ;
1068                     l_upd_attribute2_tbl.extend        ;
1069                     l_upd_attribute3_tbl.extend        ;
1070                     l_upd_attribute4_tbl.extend        ;
1071                     l_upd_attribute5_tbl.extend        ;
1072                     l_upd_attribute6_tbl.extend        ;
1073                     l_upd_attribute7_tbl.extend        ;
1074                     l_upd_attribute8_tbl.extend        ;
1075                     l_upd_attribute9_tbl.extend        ;
1076                     l_upd_attribute10_tbl.extend       ;
1077                     l_upd_attribute11_tbl.extend       ;
1078                     l_upd_attribute12_tbl.extend       ;
1079                     l_upd_attribute13_tbl.extend       ;
1080                     l_upd_attribute14_tbl.extend       ;
1081                     l_upd_attribute15_tbl.extend       ;
1082                     l_upd_description_tbl.extend       ;
1083 
1084                     -- 3769024 added IF below code to handle following scenarion :
1085                     -- on Create Deliverable Actions page, user created some actions and clicked on Save button
1086                     -- After that updated that action's description and clicked on Apply button
1087                     -- description was not getting updated.
1088 
1089                     -- Because, Update_Dlv_Actions_In_Bulk api, uses proj_element_id to update action info
1090                     -- In above scenario, proj_element_id will be passed as NULL and update is failing
1091                     -- Added code to retrieve proj_element_id in update actions,
1092                     -- if proj_element id is null and element_version_id is not null
1093                     -- else it's normal scenario
1094 
1095                     IF p_proj_element_id_tbl(i) IS NULL AND p_element_version_id_tbl(i) IS NOT NULL THEN
1096                         Open c_actn_info(p_element_version_id_tbl(i));
1097                         Fetch c_actn_info INTO l_upd_element_id_tbl(j_upd);
1098                         Close c_actn_info;
1099                     ELSE
1100                         l_upd_element_id_tbl(j_upd)      := p_proj_element_id_tbl(i)           ;
1101                     END IF;
1102 
1103                     -- 3769024 end
1104 
1105                     l_upd_element_ver_id_tbl(j_upd)  := p_element_version_id_tbl(i)        ;
1106                     l_upd_rec_ver_num_id_tbl(j_upd)  := p_record_version_number_tbl(i)     ;
1107                     l_upd_name_tbl(j_upd)            := p_name_tbl(i)                      ;
1108                     l_upd_function_code_tbl(j_upd)   := p_function_code_tbl(i)             ;
1109 
1110                     IF p_object_type <> g_dlvr_types THEN
1111                          l_upd_mgr_person_id_tbl(j_upd)     := p_manager_person_id_tbl(i)  ;
1112                          l_upd_due_date_tbl(j_upd)          := p_due_date_tbl(i)           ;
1113                          l_upd_comp_flag_tbl(j_upd)         := p_completed_flag_tbl(i)     ;
1114                          l_upd_comp_date_tbl(j_upd)         := p_completion_date_tbl(i)    ;
1115                          l_upd_attribute_category_tbl(j_upd):= p_attribute_category_tbl(i) ;
1116                          l_upd_attribute1_tbl(j_upd)        := p_attribute1_tbl(i)         ;
1117                          l_upd_attribute2_tbl(j_upd)        := p_attribute2_tbl(i)         ;
1118                          l_upd_attribute3_tbl(j_upd)        := p_attribute3_tbl(i)         ;
1119                          l_upd_attribute4_tbl(j_upd)        := p_attribute4_tbl(i)         ;
1120                          l_upd_attribute5_tbl(j_upd)        := p_attribute5_tbl(i)         ;
1121                          l_upd_attribute6_tbl(j_upd)        := p_attribute6_tbl(i)         ;
1122                          l_upd_attribute7_tbl(j_upd)        := p_attribute7_tbl(i)         ;
1123                          l_upd_attribute8_tbl(j_upd)        := p_attribute8_tbl(i)         ;
1124                          l_upd_attribute9_tbl(j_upd)        := p_attribute9_tbl(i)         ;
1125                          l_upd_attribute10_tbl(j_upd)       := p_attribute10_tbl(i)        ;
1126                          l_upd_attribute11_tbl(j_upd)       := p_attribute11_tbl(i)        ;
1127                          l_upd_attribute12_tbl(j_upd)       := p_attribute12_tbl(i)        ;
1128                          l_upd_attribute13_tbl(j_upd)       := p_attribute13_tbl(i)        ;
1129                          l_upd_attribute14_tbl(j_upd)       := p_attribute14_tbl(i)        ;
1130                          l_upd_attribute15_tbl(j_upd)       := p_attribute15_tbl(i)        ;
1131                          l_upd_description_tbl(j_upd)       := p_description_tbl(i)        ;
1132                     END IF ;
1133 
1134                ELSIF nvl(p_user_action_tbl(i),g_insert) = g_delete THEN
1135 
1136                     IF l_debug_mode = 'Y' THEN
1137                          pa_debug.g_err_stage:= 'Delete Operation';
1138                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
1139                     END IF;
1140 
1141                     j_del:=j_del+1 ;
1142 
1143                     -- Get all the actions which are deleted, into
1144                     -- local plsql table, which will be used to
1145                     -- call PLSQL bulk API for delete. This is not
1146                     -- applicable for actions which are deleted
1147                     -- from Actions page.  From action page the
1148                     -- Deletion is handled in a seperate way .
1149 
1150                     -- extend the size of PLSQL table
1151                     l_del_element_id_tbl.extend        ;
1152                     l_del_element_ver_id_tbl.extend    ;
1153                     l_del_rec_ver_num_id_tbl.extend    ;
1154 
1155                     l_del_element_id_tbl(j_del)     := p_proj_element_id_tbl(i)           ;
1156                     l_del_element_ver_id_tbl(j_del) := p_element_version_id_tbl(i)        ;
1157                     l_del_rec_ver_num_id_tbl(j_del) := p_record_version_number_tbl(i)     ;
1158 
1159                END IF ;
1160 
1161           END LOOP ;
1162 
1163 
1164           -- Call the respective APIs to delete,insert,update
1165           -- if and only if some actions are either deleted
1166           -- or created or updated. The order of the API call
1167           -- is important.First the delete API will be called
1168           -- then update and then insert.
1169 
1170           -- Call Delete API to perform the delete operation
1171           IF j_del > 0 THEN
1172 
1173                IF l_debug_mode = 'Y' THEN
1174                          pa_debug.g_err_stage:= 'Call DELETE_DLV_ACTIONS_IN_BULK ';
1175                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
1176                END IF;
1177 
1178                PA_ACTIONS_PUB.DELETE_DLV_ACTIONS_IN_BULK
1179                     (p_api_version               => p_api_version
1180                     ,p_init_msg_list             => FND_API.G_FALSE
1181                     ,p_commit                    => p_commit
1182                     ,p_validate_only             => p_validate_only
1183                     ,p_validation_level          => p_validation_level
1184                     ,p_calling_module            => p_calling_module
1185                     ,p_debug_mode                => l_debug_mode
1186                     ,p_max_msg_count             => p_max_msg_count
1187                     ,p_object_type               => p_object_type
1188                     ,p_object_id                 => p_object_id
1189                     ,p_element_version_id_tbl    => l_del_element_ver_id_tbl
1190                     ,p_proj_element_id_tbl       => l_del_element_id_tbl
1191                     ,p_record_version_number_tbl => l_del_rec_ver_num_id_tbl
1192                     ,x_return_status             => x_return_status
1193                     ,x_msg_count                 => x_msg_count
1194                     ,x_msg_data                  => x_msg_data
1195                     ) ;
1196 
1197                IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1198                    RAISE Invalid_Arg_Exc_Dlv ;
1199                END IF ;
1200 
1201          END IF ;
1202 
1203          -- Call Update API to perform the delete operation
1204          IF j_upd > 0 THEN
1205 
1206                IF l_debug_mode = 'Y' THEN
1207                          pa_debug.g_err_stage:= 'Call UPDATE_DLV_ACTIONS_IN_BULK ';
1208                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
1209                END IF;
1210 
1211                PA_ACTIONS_PUB.UPDATE_DLV_ACTIONS_IN_BULK
1212                     (p_api_version               => p_api_version
1213                     ,p_init_msg_list             => FND_API.G_FALSE
1214                     ,p_commit                    => p_commit
1215                     ,p_validate_only             => p_validate_only
1216                     ,p_validation_level          => p_validation_level
1217                     ,p_calling_module            => p_calling_module
1218                     ,p_debug_mode                => l_debug_mode
1219                     ,p_max_msg_count             => p_max_msg_count
1220                     ,p_name_tbl                  => l_upd_name_tbl
1221                     ,p_manager_person_id_tbl     => l_upd_mgr_person_id_tbl
1222                     ,p_function_code_tbl         => l_upd_function_code_tbl
1223                     ,p_due_date_tbl              => l_upd_due_date_tbl
1224                     ,p_completed_flag_tbl        => l_upd_comp_flag_tbl
1225                     ,p_completion_date_tbl       => l_upd_comp_date_tbl
1226                     ,p_description_tbl           => l_upd_description_tbl
1227                     ,p_attribute_category_tbl    => l_upd_attribute_category_tbl
1228                     ,p_attribute1_tbl            => l_upd_attribute1_tbl
1229                     ,p_attribute2_tbl            => l_upd_attribute2_tbl
1230                     ,p_attribute3_tbl            => l_upd_attribute3_tbl
1231                     ,p_attribute4_tbl            => l_upd_attribute4_tbl
1232                     ,p_attribute5_tbl            => l_upd_attribute5_tbl
1233                     ,p_attribute6_tbl            => l_upd_attribute6_tbl
1234                     ,p_attribute7_tbl            => l_upd_attribute7_tbl
1235                     ,p_attribute8_tbl            => l_upd_attribute8_tbl
1236                     ,p_attribute9_tbl            => l_upd_attribute9_tbl
1237                     ,p_attribute10_tbl           => l_upd_attribute10_tbl
1238                     ,p_attribute11_tbl           => l_upd_attribute11_tbl
1239                     ,p_attribute12_tbl           => l_upd_attribute12_tbl
1240                     ,p_attribute13_tbl           => l_upd_attribute13_tbl
1241                     ,p_attribute14_tbl           => l_upd_attribute14_tbl
1242                     ,p_attribute15_tbl           => l_upd_attribute15_tbl
1243                     ,p_element_version_id_tbl    => l_upd_element_ver_id_tbl
1244                     ,p_proj_element_id_tbl       => l_upd_element_id_tbl
1245                     ,p_record_version_number_tbl => l_upd_rec_ver_num_id_tbl
1246                     ,p_project_id                => p_project_id
1247                     ,p_object_id                 => p_object_id
1248                     ,p_object_version_id         => p_object_version_id
1249                     ,p_object_type               => p_object_type
1250                     ,p_pm_source_code            => p_pm_source_code
1251                     ,p_pm_source_reference       => p_pm_source_reference
1252                     ,p_carrying_out_organization_id => p_carrying_out_organization_id
1253                     ,x_return_status             => x_return_status
1254                     ,x_msg_count                 => x_msg_count
1255                     ,x_msg_data                  => x_msg_data
1256                     ) ;
1257 
1258 
1259                IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1260                    RAISE Invalid_Arg_Exc_Dlv ;
1261                END IF ;
1262 
1263          END IF ;
1264 
1265          -- Call Insert API to perform the Insert operation
1266          IF j_ins > 0 THEN
1267 
1268                IF l_debug_mode = 'Y' THEN
1269                          pa_debug.g_err_stage:= 'Call CREATE_DLV_ACTIONS_IN_BULK ';
1270                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
1271                END IF;
1272 
1273                PA_ACTIONS_PUB.CREATE_DLV_ACTIONS_IN_BULK
1274                     (p_api_version               => p_api_version
1275                     ,p_init_msg_list             => FND_API.G_FALSE
1276                     ,p_commit                    => p_commit
1277                     ,p_validate_only             => p_validate_only
1278                     ,p_validation_level          => p_validation_level
1279                     ,p_calling_module            => p_calling_module
1280                     ,p_debug_mode                => l_debug_mode
1281                     ,p_max_msg_count             => p_max_msg_count
1282                     ,p_name_tbl                  => l_ins_name_tbl
1283                     ,p_manager_person_id_tbl     => l_ins_mgr_person_id_tbl
1284                     ,p_function_code_tbl         => l_ins_function_code_tbl
1285                     ,p_due_date_tbl              => l_ins_due_date_tbl
1286                     ,p_completed_flag_tbl        => l_ins_comp_flag_tbl
1287                     ,p_completion_date_tbl       => l_ins_comp_date_tbl
1288                     ,p_description_tbl           => l_ins_description_tbl
1289                     ,p_attribute_category_tbl    => l_ins_attribute_category_tbl
1290                     ,p_attribute1_tbl            => l_ins_attribute1_tbl
1291                     ,p_attribute2_tbl            => l_ins_attribute2_tbl
1292                     ,p_attribute3_tbl            => l_ins_attribute3_tbl
1293                     ,p_attribute4_tbl            => l_ins_attribute4_tbl
1294                     ,p_attribute5_tbl            => l_ins_attribute5_tbl
1295                     ,p_attribute6_tbl            => l_ins_attribute6_tbl
1296                     ,p_attribute7_tbl            => l_ins_attribute7_tbl
1297                     ,p_attribute8_tbl            => l_ins_attribute8_tbl
1298                     ,p_attribute9_tbl            => l_ins_attribute9_tbl
1299                     ,p_attribute10_tbl           => l_ins_attribute10_tbl
1300                     ,p_attribute11_tbl           => l_ins_attribute11_tbl
1301                     ,p_attribute12_tbl           => l_ins_attribute12_tbl
1302                     ,p_attribute13_tbl           => l_ins_attribute13_tbl
1303                     ,p_attribute14_tbl           => l_ins_attribute14_tbl
1304                     ,p_attribute15_tbl           => l_ins_attribute15_tbl
1305                     ,p_element_version_id_tbl    => l_ins_element_ver_id_tbl
1306                     ,p_proj_element_id_tbl       => l_ins_element_id_tbl
1307                     ,p_record_version_number_tbl => l_ins_rec_ver_num_id_tbl
1308                     ,p_project_id                => p_project_id
1309                     ,p_object_id                 => p_object_id
1310                     ,p_object_version_id         => p_object_version_id
1311                     ,p_object_type               => p_object_type
1312                     ,p_pm_source_code            => p_pm_source_code
1313                     ,p_pm_source_reference       => p_pm_source_reference
1314                     ,p_pm_source_reference_tbl   => p_pm_source_reference_tbl
1315                     ,p_carrying_out_organization_id => p_carrying_out_organization_id
1316                     ,x_return_status             => x_return_status
1317                     ,x_msg_count                 => x_msg_count
1318                     ,x_msg_data                  => x_msg_data
1319                     ) ;
1320 
1321            IF l_debug_mode = 'Y' THEN
1322                    pa_debug.write(g_module_name,' return from PA_ACTIONS_PUB.CREATE_DLV_ACTIONS_IN_BULK ['||x_return_status||']',3);
1323                END IF;
1324 
1325                IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1326                    RAISE Invalid_Arg_Exc_Dlv ;
1327                END IF ;
1328 
1329          END IF ;
1330 
1331      END IF ;  -- Only if something is fetched
1332 
1333      IF l_debug_mode = 'Y' THEN
1334            pa_debug.g_err_stage:= 'Exiting CR_UP_DLV_ACTIONS_IN_BULK' ;
1335            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
1336            pa_debug.reset_curr_function;
1337      END IF;
1338 
1339 EXCEPTION
1340 WHEN Invalid_Arg_Exc_Dlv THEN
1341      x_return_status := FND_API.G_RET_STS_ERROR;
1342      l_msg_count := FND_MSG_PUB.count_msg;
1343 
1344      IF (p_commit = FND_API.G_TRUE) THEN
1345            ROLLBACK TO CR_UP_DLV_ACTIONS_SP;
1346      END IF ;
1347 
1348      IF l_debug_mode = 'Y' THEN
1349         pa_debug.g_err_stage := 'inside invalid arg exception of CR_UP_DLV_ACTIONS_IN_BULK';
1350         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
1351      END IF;
1352 
1353      IF l_msg_count = 1 THEN
1354            PA_INTERFACE_UTILS_PUB.get_messages
1355                (p_encoded        => FND_API.G_TRUE,
1356                 p_msg_index      => 1,
1357                 p_msg_count      => l_msg_count,
1358                 p_msg_data       => l_msg_data,
1359                 p_data           => l_data,
1360                 p_msg_index_out  => l_msg_index_out);
1361            x_msg_data  := l_data;
1362            x_msg_count := l_msg_count;
1363      ELSE
1364             x_msg_count := l_msg_count;
1365      END IF;
1366      IF l_debug_mode = 'Y' THEN
1367        pa_debug.reset_curr_function;
1368      END IF ;
1369      IF l_debug_mode = 'Y' THEN
1370         pa_debug.g_err_stage := 'Leaving CR_UP_DLV_ACTIONS_IN_BULK with return status ' || x_return_status ;
1371         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
1372      END IF;
1373      RETURN;
1374 WHEN OTHERS THEN
1375      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1376      x_msg_count     := 1;
1377      x_msg_data      := SQLERRM;
1378 
1379      IF (p_commit = FND_API.G_TRUE) THEN
1380            ROLLBACK TO CR_UP_DLV_ACTIONS_SP;
1381      END IF ;
1382 
1383      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
1384                      ,p_procedure_name  => 'CR_UP_DLV_ACTIONS_IN_BULK');
1385 
1386      IF p_debug_mode = 'Y' THEN
1387           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
1388           pa_debug.write(g_module_name,'CR_UP_DLV_ACTIONS_IN_BULK: '|| pa_debug.g_err_stage,5);
1389           pa_debug.reset_curr_function;
1390      END IF;
1391      RAISE;
1392 END CR_UP_DLV_ACTIONS_IN_BULK ;
1393 
1394 -- SubProgram           : VALIDATE_ACTIONS
1395 -- Type                 : PROCEDURE
1396 -- Purpose              : Public API to Create/Update To Deliverable Actions
1397 -- Note                 : Its a BULK API
1398 -- Assumptions          : None
1399 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
1400 -- ---------------------------  ---------    ----------      ---------    ---------------------------
1401 -- p_api_version                   IN          NUMBER            N        Standard Parameter
1402 -- p_init_msg_list                 IN          VARCHAR2          N        Standard Parameter
1403 -- p_commit                        IN          VARCHAR2          N        Standard Parameter
1404 -- p_validate_only                 IN          VARCHAR2          N        Standard Parameter
1405 -- p_validation_level              IN          NUMBER            N        Standard Parameter
1406 -- p_calling_module                IN          VARCHAR2          N        Standard Parameter
1407 -- p_debug_mode                    IN          VARCHAR2          N        Standard Parameter
1408 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
1409 -- p_name_tbl                      IN          PLSQL Table       N        Action Name
1410 -- p_due_date_tbl                  IN          PLSQL Table       N        Due Date
1411 -- p_completed_flag_tbl            IN          PLSQL Table       N        Completed Flag
1412 -- p_completion_date_tbl           IN          PLSQL Table       N        Completed Date
1413 -- p_description_tbl               IN          PLSQL Table       N        Description
1414 -- p_element_version_id_tbl        IN          PLSQL Table       N        Action VErsion Id
1415 -- p_proj_element_id_tbl           IN          PLSQL Table       N        Action Element Id
1416 -- p_record_version_number_tbl     IN          PLSQL Table       N        Record Version NUmber
1417 -- p_project_id                    IN          NUMBER            N        Project Id
1418 -- p_object_id                     IN          NUMBER            Y        Parent Id
1419 -- p_object_version_id             IN          NUMBER            N        Parent Version ID
1420 -- p_object_type                   IN          VARCHAR2          Y        Parent Type
1421 -- p_pm_source_code                IN          NUMBER            N        PM Source Code
1422 -- p_pm_source_reference           IN          VARCHAR2          N        PM Source Reference
1423 -- p_carrying_out_organization_id  IN          VARCHAR2          N        Carrying Out Org ID
1424 -- p_insert_or_update              IN          VARCHAR2          N        Identifies the API Mode
1425 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
1426 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
1427 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
1428 
1429 PROCEDURE  VALIDATE_ACTIONS
1430      ( p_api_version           IN NUMBER    :=1.0
1431       ,p_init_msg_list         IN VARCHAR2  :=FND_API.G_TRUE
1432       ,p_commit                IN VARCHAR2  :=FND_API.G_FALSE
1433       ,p_validate_only         IN VARCHAR2  :=FND_API.G_TRUE
1434       ,p_validation_level      IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
1435       ,p_calling_module        IN VARCHAR2  :='SELF_SERVICE'
1436       ,p_debug_mode            IN VARCHAR2  :='N'
1437       ,p_max_msg_count         IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1438       ,p_name_tbl              IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
1439       ,p_completed_flag_tbl    IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()
1440       ,p_completion_date_tbl   IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
1441       ,p_description_tbl       IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE()
1442       ,p_function_code_tbl     IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1443       ,p_due_date_tbl          IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
1444       ,p_element_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
1445       ,p_proj_element_id_tbl   IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
1446       ,p_user_action_tbl       IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1447       ,p_object_id             IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE
1448       ,p_object_version_id     IN PA_OBJECT_RELATIONSHIPS.OBJECT_ID_TO1%TYPE := null
1449       ,p_object_type           IN PA_LOOKUPS.LOOKUP_CODE%TYPE
1450       ,p_action_owner_id_tbl   IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
1451       ,p_carrying_out_org_id   IN NUMBER := null
1452       ,p_action_reference_tbl  IN  SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1453       ,p_deliverable_id        IN  PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE := null
1454       ,p_insert_or_update      IN VARCHAR2 := 'INSERT'
1455       ,p_project_id            IN PA_PROJECTS_ALL.PROJECT_ID%TYPE
1456       ,x_return_status         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1457       ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1458       ,x_msg_data              OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
1459 IS
1460      l_err_message fnd_new_messages.message_text%TYPE ;
1461 
1462      l_debug_mode                 VARCHAR2(10);
1463      l_debug_level3               NUMBER := 3;
1464      l_msg_count                  NUMBER ;
1465      l_data                       VARCHAR2(2000);
1466      l_msg_data                   VARCHAR2(2000);
1467      l_msg_index_out              NUMBER;
1468 
1469      l_dlv_type_class_code        pa_task_types.task_type_class_code%type ;
1470      l_item_billable              VARCHAR2(1) := 'N' ;
1471      l_item_shippable             VARCHAR2(1) := 'N' ;
1472      l_item_purchasable           VARCHAR2(1) := 'N' ;
1473      l_bill_event_processed       VARCHAR2(1) := 'N' ;
1474      l_item_defined               VARCHAR2(1) := 'N' ;
1475      l_shipping_initiated         VARCHAR2(1) := 'N' ;
1476      l_proc_initiated             VARCHAR2(1) := 'N' ;
1477      l_ready_to_ship              VARCHAR2(1) := 'N' ;
1478      l_ready_to_proc              VARCHAR2(1) := 'N' ;
1479      l_due_date                   DATE ;
1480      l_completed_date             DATE ;
1481      l_completed_flag             VARCHAR2(1) ;
1482 
1483      l_is_dlv_itembased          VARCHAR2(1);
1484      l_function_code             PA_LOOKUPS.LOOKUP_CODE%TYPE := NULL;
1485      l_function_code_valid       VARCHAR2(1) := 'N';
1486      l_carrying_out_org_id       NUMBER;
1487      l_action_owner_id           NUMBER;
1488 
1489      l_project_number            PA_PROJECTS_ALL.SEGMENT1%TYPE := NULL;
1490      l_deliverable_number        PA_PROJ_ELEMENTS.ELEMENT_NUMBER%TYPE := NULL;
1491 
1492      -- added for bug :4537865
1493      l_new_carrying_out_org_id       NUMBER ;
1494      l_new_action_owner_id 	NUMBER;
1495      -- added for bug :4537865
1496      i_act                       NUMBER := 1;
1497 
1498      -- Included for Bug 3651563
1499      j_act               NUMBER := 1;
1500      k_act                       NUMBER := 1;
1501      l_existing_count            NUMBER := 0;
1502      l_name_tbl          SYSTEM.PA_VARCHAR2_240_TBL_TYPE :=  SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1503      l_function_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE() ;
1504      l_proj_element_id_tbl       SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE() ;
1505 
1506      CURSOR c_completed_flag (c_action_id IN pa_proj_elements.proj_element_id%TYPE)IS
1507      SELECT decode(pps.project_system_status_code,'DLVR_COMPLETED','Y','N')
1508        FROM pa_project_statuses pps,
1509             pa_proj_elements ppe
1510       WHERE ppe.proj_element_id = c_action_id
1511         AND pps.project_status_code = ppe.status_code ;
1512 
1513      CURSOR c_completed_date (c_action_ver_id IN pa_proj_element_versions.element_version_id%TYPE) IS
1514      SELECT actual_finish_date
1515            ,scheduled_finish_date
1516        FROM pa_proj_elem_ver_schedule
1517       WHERE element_version_id = c_action_ver_id ;
1518 
1519      -- Bug 3651563 Needed in AMG Flow
1520      -- The Following cursor will retrieve the list of actions for a given deliverable
1521 
1522      CURSOR c_existing_action
1523      IS
1524        SELECT PPE.NAME ,
1525               PPE.FUNCTION_CODE,
1526           PPE.PROJ_ELEMENT_ID
1527        FROM PA_PROJ_ELEMENTS PPE ,
1528             PA_OBJECT_RELATIONSHIPS OBJ
1529        WHERE PPE.PROJECT_ID = p_project_id
1530          AND OBJ.OBJECT_ID_FROM2= p_object_id
1531      AND PPE.PROJ_ELEMENT_ID = OBJ.OBJECT_ID_TO2
1532      AND OBJ.OBJECT_TYPE_FROM = 'PA_DELIVERABLES'
1533      AND OBJ.OBJECT_TYPE_TO = 'PA_ACTIONS'
1534      AND OBJ.RELATIONSHIP_SUBTYPE  = 'DELIVERABLE_TO_ACTION'
1535      AND OBJ.RELATIONSHIP_TYPE  = 'A' ;
1536 
1537      -- 3947021 Added below cursor to derive proj_element_id from element version id for action
1538 
1539      Cursor c_actn_info(l_action_ver_id IN NUMBER) IS
1540      SELECT
1541             PEV.PROJ_ELEMENT_ID
1542      FROM
1543             PA_PROJ_ELEMENT_VERSIONS PEV
1544      WHERE
1545             PEV.ELEMENT_VERSION_ID = l_action_ver_id
1546         AND PEV.OBJECT_TYPE        = 'PA_ACTIONS';
1547 
1548      l_action_id NUMBER;
1549 
1550      -- 3947021 end
1551 
1552 BEGIN
1553      x_msg_count := 0;
1554      x_return_status := FND_API.G_RET_STS_SUCCESS;
1555      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
1556 
1557      IF l_debug_mode = 'Y' THEN
1558           PA_DEBUG.set_curr_function( p_function   => 'CR_UP_DLV_ACTIONS_IN_BULK',
1559                                       p_debug_mode => l_debug_mode );
1560           pa_debug.g_err_stage:= 'Inside VALIDATE_ACTIONS ';
1561           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
1562      END IF;
1563 
1564      IF l_debug_mode = 'Y' THEN
1565           pa_debug.g_err_stage:= 'Printing Input parameters';
1566           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
1567           pa_debug.write(g_module_name,'p_object_type'||':'||p_object_type,3) ;
1568      END IF;
1569 
1570      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
1571       FND_MSG_PUB.initialize;
1572      END IF;
1573 
1574      IF p_object_type = g_deliverables THEN
1575 
1576           -- The Type Class Code line has been commented by avaithia for Bug 3496957
1577           -- The line is wrong .The GET_DLV_TYPE_CLASS_CODE expects The Deliverable
1578           -- Type Id as parameter whereas here the DeliverablVersionId is being passed .
1579           -- Our requirement is handle the case if the deliverable is Item Based .
1580           -- For that l_is_dlv_itembased is included.
1581 
1582           -- l_dlv_type_class_code := nvl(PA_DELIVERABLE_UTILS.GET_DLV_TYPE_CLASS_CODE(p_object_version_id),'N') ;
1583 
1584           IF nvl(p_element_version_id_tbl.LAST,0) > 0 THEN
1585                l_is_dlv_itembased := nvl(PA_DELIVERABLE_UTILS.IS_DLV_ITEM_BASED(p_element_version_id_tbl(1)),'N');
1586           END IF;
1587 
1588           l_dlv_type_class_code := nvl(PA_DELIVERABLE_UTILS.GET_DLV_TYPE_CLASS_CODE(p_object_version_id),'N') ;
1589           l_item_billable       := nvl(OKE_DELIVERABLE_UTILS_PUB.Item_Billable_Yn(p_object_version_id),'N') ;
1590           l_item_shippable      := nvl(OKE_DELIVERABLE_UTILS_PUB.Item_Shippable_Yn(p_object_version_id),'N') ;
1591           l_item_purchasable    := nvl(OKE_DELIVERABLE_UTILS_PUB.Item_Purchasable_Yn(p_object_version_id),'N') ;
1592           l_item_defined        := nvl(OKE_DELIVERABLE_UTILS_PUB.Item_Defined_Yn(p_object_version_id),'N') ;
1593      END IF ;
1594 
1595      -- Do the locking part here in update and delete mode
1596 
1597      -- Validate action name.
1598      IF l_debug_mode = 'Y' THEN
1599           pa_debug.g_err_stage:= 'No of records fetched'||p_name_tbl.LAST;
1600           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
1601      END IF ;
1602 
1603      IF nvl(p_name_tbl.LAST,0)>0 THEN
1604             FOR i IN p_name_tbl.FIRST..p_name_tbl.LAST LOOP
1605                  FOR j in p_name_tbl.FIRST..p_name_tbl.LAST LOOP
1606                       IF ((nvl(p_name_tbl(i),'X') = nvl(p_name_tbl(j),'Y')) AND
1607                            i <> j) THEN
1608                            l_err_message := FND_MESSAGE.GET_STRING('PA','PA_ALL_DUPLICATE_NAME') ;
1609                            PA_UTILS.ADD_MESSAGE
1610                                (p_app_short_name => 'PA',
1611                                 p_msg_name       => 'PA_ACTION_NAME_ERR',
1612                                 p_token1         => 'ACTION_NAME',
1613                                 p_value1         =>  p_name_tbl(i),
1614                                 p_token2         => 'MESSAGE',
1615                                 p_value2         =>  l_err_message
1616                                 );
1617                END IF;
1618         END LOOP ;
1619             END LOOP ;
1620 
1621             IF l_debug_mode = 'Y' THEN
1622          pa_debug.g_err_stage:='The error message content is :' || l_err_message;
1623          pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
1624             END IF ;
1625      END IF ;
1626 
1627 
1628      IF l_debug_mode = 'Y' THEN
1629           pa_debug.g_err_stage:= 'After Name Validation ';
1630           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
1631      END IF ;
1632 
1633 
1634      -- 1. Validate completed check box. If Completed Check Box is
1635      -- 'Y' the completion date should not be null and vice versa
1636      -- 2. Validation Related to Billing Function
1637      --   2.1 Description cannot be null for billing function.
1638      --   2.2 Due Date cannot be null for billing function.
1639      --   2.3 IF deliverable is item based and billing is not enabled
1640      --       OR item info. is not available then action cannot be marked
1641      --       as completed .
1642      --   2.4 Completeion date cannot be updated if event has been processed
1643      --   2.5 Completion flag cannot be unchecked for billing function
1644      -- 3. Validation Related to Shipping Function
1645      --   3.1 Action cannot be completed if shipping is not initiated
1646      --   3.2 Completed flag cannot be unchecked , if shipping has been initiated
1647      --   3.3 Due Date cannot be updated if ready to ship is checked .
1648      -- 4. Validation Related to Procurement Function
1649      --   4.1 Action cannot be completed if procurement is not initiated
1650      --   4.2 Completed flag cannot be unchecked , if procurement has been initiated
1651      --   4.3 Due Date cannot be updated if ready to procure is checked .
1652 
1653      -- Following validation is required only in context of deliverables.
1654      IF nvl(p_object_type,g_deliverables) = g_deliverables THEN
1655 
1656             IF l_debug_mode = 'Y' THEN
1657                 pa_debug.g_err_stage:= '@@@Calling Context is Deliverables #######()' ;
1658                 pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
1659             END IF ;
1660 
1661            -- For all the records do the validation in loop .
1662            FOR i IN p_element_version_id_tbl.FIRST..p_element_version_id_tbl.LAST LOOP
1663 
1664                -- Perform the validation for new and updated records only .
1665                IF p_user_action_tbl(i) <> g_unmodified THEN
1666 
1667                      -- 3947021 Moved below code here,  earlier it was inside "IF l_action_id IS NOT NULL THEN" condition
1668 
1669                      -- After processing existing completed billing action if second action is new billing action,
1670                      -- the flags were not getting reset to original default value because for new actions
1671                      -- proj_element_id will be null ( validate_actions is getting called before new action creation )
1672                      -- Because of that validation 2.5 was failing , which should not fail for new billing action
1673 
1674                      -- Initialize all the local variables
1675                      -- for every action
1676 
1677                      l_due_date       := to_date(null) ;
1678                      l_completed_date := to_date(null) ;
1679                      l_completed_flag := 'N' ;
1680                      l_action_id      := NULL;
1681 
1682                     -- 3947021 end
1683 
1684                     -- 3947021 After the SAVE button introduction , it is possible to have proj_element_id value for existing action
1685                     -- as null in passed IN parameter ( Reason : after clicking on SAVE button proj_element_id is not reflected
1686                     -- in VO attribute for new actions and because of that p_proj_element_id_tbl(i) wont reflect the actual value )
1687                     -- Because of this, validation 2.5 wont fire for the existing billing action , ideally it should fire for the
1688                     -- existing action
1689 
1690                     -- Added below code to derive proj_element_id for the existing action
1691 
1692                     IF p_proj_element_id_tbl(i) IS NULL AND p_element_version_id_tbl(i) IS NOT NULL THEN
1693                         Open c_actn_info(p_element_version_id_tbl(i));
1694                         Fetch c_actn_info INTO l_action_id;
1695                         Close c_actn_info;
1696                     ELSE
1697                         l_action_id := p_proj_element_id_tbl(i);
1698                     END IF;
1699 
1700                     -- 3947021 end
1701 
1702                      -- Get the completed flag and due date for existing records
1703 
1704                      -- 3947021 changed from p_proj_element_id_tbl(i) to l_action_id
1705 
1706                      IF l_action_id IS NOT NULL THEN
1707 
1708                          -- 3947021 changed from p_proj_element_id_tbl(i) to l_action_id
1709                          OPEN c_completed_flag(l_action_id) ;
1710                          FETCH c_completed_flag into l_completed_flag ;
1711                          CLOSE c_completed_flag ;
1712 
1713                          OPEN c_completed_date(p_element_version_id_tbl(i))  ;
1714                          FETCH c_completed_date into l_completed_date ,l_due_date;
1715                          CLOSE c_completed_date ;
1716 
1717                      END IF ;
1718 
1719                      -- Please see point 1. in comments to know what validation ?
1720                      IF (nvl(p_completed_flag_tbl(i),'N') = 'Y' AND
1721                           p_completion_date_tbl(i) IS NULL  )
1722                      THEN
1723                          l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DLVR_COMPLT_DATE_MISSING') ;
1724                          PA_UTILS.ADD_MESSAGE
1725                                (p_app_short_name => 'PA',
1726                                 p_msg_name       => 'PA_ACTION_NAME_ERR',
1727                                 p_token1         => 'ACTION_NAME',
1728                                 p_value1         =>  p_name_tbl(i),
1729                                 p_token2         => 'MESSAGE',
1730                                 p_value2         =>  l_err_message
1731                                 );
1732 
1733                      END IF ;
1734 
1735                      -- Validation 1
1736                      IF (p_completion_date_tbl(i) IS NOT NULL AND
1737                          (nvl(p_completed_flag_tbl(i),'N') = 'N'))
1738                      THEN
1739                          l_err_message := FND_MESSAGE.GET_STRING('PA','PA_COMPLETION_FLAG_MUST_ERR') ;
1740                          PA_UTILS.ADD_MESSAGE
1741                                (p_app_short_name => 'PA',
1742                                 p_msg_name       => 'PA_ACTION_NAME_ERR',
1743                                 p_token1         => 'ACTION_NAME',
1744                                 p_value1         =>  p_name_tbl(i),
1745                                 p_token2         => 'MESSAGE',
1746                                 p_value2         =>  l_err_message
1747                                 );
1748                      END IF ;
1749 
1750                      -- If action has a BILLING function
1751                      -- Perform validation related to BILLING function
1752                      IF p_function_code_tbl(i) = g_billing THEN
1753 
1754                           -- Initialize l_bill_event_processed
1755                           -- to 'N' for every action
1756                           l_bill_event_processed := 'N' ;
1757 
1758                           --For new records ,the CHECK_DELV_EVENT_PROCESSED API IS
1759                           --THROWING NO DATA FOUND ERROR .Thats why Included if clause
1760                           l_bill_event_processed := nvl(PA_BILLING_WRKBNCH_EVENTS.CHECK_DELV_EVENT_PROCESSED(p_project_id,p_object_version_id,p_element_version_id_tbl(i) ),'N') ; -- Passing Actions' version Id also (Included By avaithia for Bug 3512346 )
1761 
1762                           -- Validation 2.1
1763                           IF p_description_tbl(i) IS NULL THEN
1764                               l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DESCRIPTION_NULL_ERR') ;
1765                               PA_UTILS.ADD_MESSAGE
1766                                     (p_app_short_name => 'PA',
1767                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1768                                      p_token1         => 'ACTION_NAME',
1769                                      p_value1         =>  p_name_tbl(i),
1770                                      p_token2         => 'MESSAGE',
1771                                      p_value2         =>  l_err_message
1772                                      );
1773                           END IF ;
1774 
1775                           -- Validation 2.2  Commented by avaithia (1-Apr-04) Bug 3512346
1776                           --  IF p_due_date_tbl(i) IS NULL THEN
1777                           --     l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DUE_DATE_NULL_ERR') ;
1778                           --    PA_UTILS.ADD_MESSAGE
1779                           --          (p_app_short_name => 'PA',
1780                           --           p_msg_name       => 'PA_ACTION_NAME_ERR',
1781                           --           p_token1         => 'ACTION_NAME',
1782                           --           p_value1         =>  p_name_tbl(i),
1783                           --           p_token2         => 'MESSAGE',
1784                           --           p_value2         =>  l_err_message
1785                           --           );
1786                           -- END IF ;
1787                           --
1788                           -- Validation 2.3
1789 
1790      -- Commented for Bug 3496957 by avaithia                     IF l_dlv_type_class_code = g_item THEN
1791                           IF l_is_dlv_itembased ='Y' THEN
1792                              IF (l_item_billable = 'N'
1793                               AND nvl(p_completed_flag_tbl(i),'N') = 'Y'
1794                               AND l_item_defined = 'Y')                 -- This check has been included by avaithia Bug 3496957
1795                              THEN
1796                                l_err_message := FND_MESSAGE.GET_STRING('PA','PA_BILL_ITEM_NOT_BILLABLE_ERR') ;/*Corrected by avaithia*/
1797                               PA_UTILS.ADD_MESSAGE
1798                                     (p_app_short_name => 'PA',
1799                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1800                                      p_token1         => 'ACTION_NAME',
1801                                      p_value1         =>  p_name_tbl(i),
1802                                      p_token2         => 'MESSAGE',
1803                                      p_value2         =>  l_err_message
1804                                      );
1805                              END IF ;
1806                           END IF ;
1807 
1808                            IF l_is_dlv_itembased ='Y' THEN
1809                              IF (l_item_defined = 'N'
1810                               AND nvl(p_completed_flag_tbl(i),'N') = 'Y' )
1811                              THEN
1812                                l_err_message := FND_MESSAGE.GET_STRING('PA','PA_BILL_NO_ITEM_ERR') ;
1813                               PA_UTILS.ADD_MESSAGE
1814                                     (p_app_short_name => 'PA',
1815                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1816                                      p_token1         => 'ACTION_NAME',
1817                                      p_value1         =>  p_name_tbl(i),
1818                                      p_token2         => 'MESSAGE',
1819                                      p_value2         =>  l_err_message
1820                                      );
1821                              END IF ;
1822                           END IF ;
1823                           -- Validation 2.4
1824 
1825                         IF (((nvl(trunc(p_completion_date_tbl(i)),to_date(null))<> trunc(l_completed_date))
1826                            AND l_bill_event_processed = 'Y' ))
1827                         THEN
1828                               l_err_message := FND_MESSAGE.GET_STRING('PA','PA_BILL_COMP_DATE_ERR') ;
1829                               PA_UTILS.ADD_MESSAGE
1830                                     (p_app_short_name => 'PA',
1831                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1832                                      p_token1         => 'ACTION_NAME',
1833                                      p_value1         =>  p_name_tbl(i),
1834                                      p_token2         => 'MESSAGE',
1835                                      p_value2         =>  l_err_message
1836                                      );
1837 
1838                         END IF ;
1839 
1840                         -- 3951763 Added l_bill_event_processed = 'Y' condition , if billing event is processed
1841                         -- then and then unchecking of completion flag is not allowed
1842 
1843                         -- Validation 2.5
1844                         IF(l_bill_event_processed = 'Y' AND (nvl(p_completed_flag_tbl(i),'N') = 'N'
1845                               AND nvl(l_completed_flag,'N') = 'Y'))
1846                         THEN
1847                               l_err_message := FND_MESSAGE.GET_STRING('PA','PA_BILL_COMP_FLAG_ERR') ;
1848                               PA_UTILS.ADD_MESSAGE
1849                                     (p_app_short_name => 'PA',
1850                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1851                                      p_token1         => 'ACTION_NAME',
1852                                      p_value1         =>  p_name_tbl(i),
1853                                      p_token2         => 'MESSAGE',
1854                                      p_value2         =>  l_err_message
1855                                      );
1856                         END IF ;
1857 
1858                      -- Else If action has a SHIPPING function
1859                      -- Perform validation related to SHIPPING function
1860                      ELSIF (p_function_code_tbl(i) = g_shipping) THEN
1861 
1862                         -- 4227845 Added dlvr action due date not null check and populating error message
1863                         IF p_due_date_tbl(i) IS NULL THEN
1864                           l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DUE_DATE_ERR') ;
1865                           PA_UTILS.ADD_MESSAGE
1866                                 (p_app_short_name => 'PA',
1867                                  p_msg_name       => 'PA_ACTION_NAME_ERR',
1868                                  p_token1         => 'ACTION_NAME',
1869                                  p_value1         =>  p_name_tbl(i),
1870                                  p_token2         => 'MESSAGE',
1871                                  p_value2         =>  l_err_message
1872                                  );
1873                         END IF;
1874                         -- 4227845 end
1875 
1876                         --Initialize local var for each action
1877                         l_shipping_initiated := 'N' ;
1878                         l_ready_to_ship      := 'N' ;
1879 
1880                         l_shipping_initiated := nvl(OKE_DELIVERABLE_UTILS_PUB.WSH_Initiated_Yn(p_element_version_id_tbl(i)),'N') ;
1881                         l_ready_to_ship      := nvl(OKE_DELIVERABLE_UTILS_PUB.Ready_To_Ship_Yn(p_element_version_id_tbl(i)),'N');
1882 
1883                           -- Validation 3.1
1884                         IF ( l_shipping_initiated = 'N'
1885                             AND nvl(p_completed_flag_tbl(i),'N') = 'Y' )
1886                         THEN
1887                               l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SHIP_PROC_COMP_ERR_Y') ;
1888                               PA_UTILS.ADD_MESSAGE
1889                                     (p_app_short_name => 'PA',
1890                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1891                                      p_token1         => 'ACTION_NAME',
1892                                      p_value1         =>  p_name_tbl(i),
1893                                      p_token2         => 'MESSAGE',
1894                                      p_value2         =>  l_err_message
1895                                      );
1896 
1897                         END IF ;
1898 
1899                         -- Validation 3.2
1900                         -- Bug#3555460
1901                         -- Commenting the validation as per the latest changes
1902                         -- in functional design.
1903                         -- IF ((nvl(p_completed_flag_tbl(i),'N') = 'N'
1904                         --    AND l_completed_flag = 'Y')
1905                         --    AND l_shipping_initiated = 'Y')
1906                         -- THEN
1907                         --      l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SHIP_PROC_COMP_ERR_N') ;
1908                         --      PA_UTILS.ADD_MESSAGE
1909                         --            (p_app_short_name => 'PA',
1910                         --             p_msg_name       => 'PA_ACTION_NAME_ERR',
1911                         --             p_token1         => 'ACTION_NAME',
1912                         --             p_value1         =>  p_name_tbl(i),
1913                         --             p_token2         => 'MESSAGE',
1914                         --             p_value2         =>  l_err_message
1915                         --             );
1916                         -- END IF ;
1917 
1918                         -- Validation 3.3
1919                         IF ((trunc(p_due_date_tbl(i)) <> trunc(l_due_date )) AND
1920                             l_ready_to_ship = 'Y' )
1921                         THEN
1922                               l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SHIP_DUE_DATE_UPDATE_ERR') ;
1923                               PA_UTILS.ADD_MESSAGE
1924                                     (p_app_short_name => 'PA',
1925                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1926                                      p_token1         => 'ACTION_NAME',
1927                                      p_value1         =>  p_name_tbl(i),
1928                                      p_token2         => 'MESSAGE',
1929                                      p_value2         =>  l_err_message
1930                                      );
1931                         END IF ;
1932 
1933                      -- Else If action has a PROCUREMENT function
1934                      -- Perform validation related to PROCUREMENT function
1935                      ELSIF (p_function_code_tbl(i) = g_procurement ) THEN
1936 
1937                         -- 4227845 Added dlvr action due date not null check and populating error message
1938                         IF p_due_date_tbl(i) IS NULL THEN
1939                           l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DUE_DATE_ERR') ;
1940                           PA_UTILS.ADD_MESSAGE
1941                                 (p_app_short_name => 'PA',
1942                                  p_msg_name       => 'PA_ACTION_NAME_ERR',
1943                                  p_token1         => 'ACTION_NAME',
1944                                  p_value1         =>  p_name_tbl(i),
1945                                  p_token2         => 'MESSAGE',
1946                                  p_value2         =>  l_err_message
1947                                  );
1948                         END IF;
1949                         -- 4227845 end
1950 
1951                         l_proc_initiated := 'N' ;
1952                         l_ready_to_proc  := 'N' ;
1953 
1954                         -- 3555460 WSH_Initiated_Yn function call was used instead of REQ_Initiated_Yn
1955                         l_proc_initiated := nvl(OKE_DELIVERABLE_UTILS_PUB.REQ_Initiated_Yn(p_element_version_id_tbl(i)),'N') ;
1956                         l_ready_to_proc  := nvl(OKE_DELIVERABLE_UTILS_PUB.Ready_To_Procure_Yn(p_element_version_id_tbl(i)),'N') ;
1957 
1958                         -- Validation 4.1
1959                         IF (l_proc_initiated = 'N' AND
1960                             nvl(p_completed_flag_tbl(i),'N') = 'Y' )
1961                         THEN
1962                               l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SHIP_PROC_COMP_ERR_Y') ;
1963                               PA_UTILS.ADD_MESSAGE
1964                                     (p_app_short_name => 'PA',
1965                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
1966                                      p_token1         => 'ACTION_NAME',
1967                                      p_value1         =>  p_name_tbl(i),
1968                                      p_token2         => 'MESSAGE',
1969                                      p_value2         =>  l_err_message
1970                                      );
1971                         END IF ;
1972 
1973                         -- Validation 4.2
1974                         -- Bug#3555460
1975                         -- Commenting the validation as per the latest changes
1976                         -- in functional design.
1977                         -- IF (( nvl(p_completed_flag_tbl(i),'N') = 'N'
1978                         --       AND l_completed_flag = 'Y')
1979                         --       AND l_proc_initiated = 'Y' )
1980                         -- THEN
1981                         --      l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SHIP_PROC_COMP_ERR_N') ;
1982                         --      PA_UTILS.ADD_MESSAGE
1983                         --            (p_app_short_name => 'PA',
1984                         --             p_msg_name       => 'PA_ACTION_NAME_ERR',
1985                         --             p_token1         => 'ACTION_NAME',
1986                         --             p_value1         =>  p_name_tbl(i),
1987                         --             p_token2         => 'MESSAGE',
1988                         --             p_value2         =>  l_err_message
1989                         --             );
1990                         --
1991                         -- END IF ;
1992                         --
1993 
1994                         -- Validation 4.3
1995                         IF ((trunc(p_due_date_tbl(i)) <> trunc(l_due_date)) AND
1996                             l_ready_to_proc = 'Y' )
1997                         THEN
1998                               l_err_message := FND_MESSAGE.GET_STRING('PA','PA_PROC_DUE_DATE_UPDATE_ERR') ;
1999                               PA_UTILS.ADD_MESSAGE
2000                                     (p_app_short_name => 'PA',
2001                                      p_msg_name       => 'PA_ACTION_NAME_ERR',
2002                                      p_token1         => 'ACTION_NAME',
2003                                      p_value1         =>  p_name_tbl(i),
2004                                      p_token2         => 'MESSAGE',
2005                                      p_value2         =>  l_err_message
2006                                      );
2007                         END IF ;
2008                      END IF ; -- If p_function_code_tbl(i) = g_billing
2009                 END IF ;  -- If p_user_action_tbl(i) <> g_unmodified
2010            END LOOP ;
2011       END IF ;
2012 
2013       x_msg_count := FND_MSG_PUB.count_msg ;
2014       IF x_msg_count > 0 THEN
2015           x_return_status := FND_API.G_RET_STS_ERROR;
2016       END IF ;
2017 /* ==============3435905 : FP M : Deliverables Changes For AMG - Start * =========================*/
2018 
2019 IF (p_calling_module = 'AMG') THEN
2020 
2021      -- Start Bug 3651563
2022      --If p_calling_module is 'AMG' then do action name related validation in a special manner
2023      -- (i.e) In addition to checking for duplicate names among the passed actions
2024      --need to check for duplicate action  names with the existing actions also
2025 
2026      -- In case of AMG,we can pass new actions as well as action id's which are to be updated .
2027      -- Not all actions will be passed
2028 
2029      -- Consider this case,An existing actions' name is 'XYZ' (it need not be passed to this API)
2030      -- But for the new action passed in UPDATE Mode ,the name is 'XYZ' .So,existing code will fail
2031 
2032      -- Same explanation holds good for Shipping Action / Procurement action restricting code also
2033      -- An existing shipping action might be there and a new shipping action may be passed through AMG
2034      -- But Check will not happen against existing shipping action
2035 
2036      -- Note : In case of Self Service ,all actions will be passed - all new actions as well as existing actions
2037      -- So, the existing code will absolutely work fine with out any issues
2038 
2039 
2040      IF p_calling_module = 'AMG' THEN
2041      OPEN c_existing_action ;
2042          FETCH c_existing_action BULK COLLECT INTO l_name_tbl,l_function_code_tbl,l_proj_element_id_tbl ;
2043          CLOSE c_existing_action ;
2044 
2045          l_existing_count := nvl(l_name_tbl.LAST,0) ;
2046 
2047          IF l_debug_mode = 'Y' THEN
2048              pa_debug.g_err_stage:= 'No of records already existing are ' || l_existing_count;
2049          pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
2050      END IF;
2051 
2052      END IF;
2053 
2054      --End Bug 3651563
2055 
2056      -- Start Bug 3651563
2057      -- p_proj_element_id_tbl(i) <> l_proj_element_id_tbl(k) This check is needed because
2058      -- Consider this case
2059      -- An existing action 'ABC' is passed by AMG (say for some updation of any of its values like duedate)
2060      -- Now,this cursor will retrieve all existing actions ,so 'ABC' will also get selected
2061      -- To avoid validation of the action with itself in this scenario
2062      -- This check is needed
2063 
2064      IF l_existing_count > 0 THEN -- IF some records already exist
2065           FOR i IN p_name_tbl.FIRST..p_name_tbl.LAST LOOP
2066                FOR k IN l_name_tbl.FIRST..l_name_tbl.LAST LOOP
2067                 IF ( (nvl(p_name_tbl(i),'X') = nvl(l_name_tbl(k),'Y')) AND
2068                           p_proj_element_id_tbl(i) <> l_proj_element_id_tbl(k) ) THEN
2069 
2070                           x_return_status := FND_API.G_RET_STS_ERROR ;
2071                           l_err_message := FND_MESSAGE.GET_STRING('PA','PA_ALL_DUPLICATE_NAME') ;
2072                            PA_UTILS.ADD_MESSAGE
2073                                (p_app_short_name => 'PA',
2074                                 p_msg_name       => 'PA_ACTION_NAME_ERR',
2075                                 p_token1         => 'ACTION_NAME',
2076                                 p_value1         =>  p_name_tbl(i),
2077                                 p_token2         => 'MESSAGE',
2078                                 p_value2         =>  l_err_message
2079                                 );
2080                     END IF;
2081                END LOOP ;
2082           END LOOP;
2083       END IF;
2084 
2085       --End Bug 3651563
2086 
2087 
2088  -- Fetch Deliverable Name and Project Name for tokens
2089       IF l_debug_mode = 'Y' THEN
2090          Pa_Debug.WRITE(g_module_name, 'proj id ['||p_project_id||'] dlvr id ['||p_deliverable_id||']',l_debug_level3);
2091       END IF;
2092 
2093       SELECT element_Number INTO l_deliverable_number
2094       FROM   pa_Proj_elements
2095       WHERE  proj_element_id = p_deliverable_id
2096       AND    project_id  = p_project_id;
2097 
2098       SELECT segment1 INTO   l_project_number
2099       FROM Pa_Projects_All
2100       WHERE  project_id = p_project_id;
2101 
2102       IF l_debug_mode = 'Y' THEN
2103          Pa_Debug.WRITE(g_module_name, 'token values proj ['||l_Project_Number||'] deliverable ['||l_deliverable_Number||']',l_debug_level3);
2104       END IF;
2105 
2106  -- Validate Carrying Out Org Id - valid value
2107        IF p_carrying_out_org_id  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM     THEN
2108           l_carrying_out_org_id := NULL;
2109        ELSE
2110           l_carrying_out_org_id := p_carrying_out_org_id;
2111        END IF;
2112 
2113        IF  (l_carrying_out_org_id   IS  NOT NULL ) THEN
2114           Pa_Hr_Org_Utils.CHECK_ORGNAME_OR_ID
2115             ( p_organization_id    => l_carrying_out_org_id
2116              ,p_organization_name  =>  NULL
2117              ,p_check_id_flag      => 'Y'
2118          --  ,x_organization_id    => l_carrying_out_org_id
2119 	     ,x_organization_id => l_new_carrying_out_org_id  -- this is added for the bug: 4537865
2120              ,x_return_status      => x_return_status
2121              ,x_error_msg_code     => l_msg_data);
2122 
2123            IF l_debug_mode = 'Y' THEN
2124                Pa_Debug.WRITE(g_module_name,' validating carrying out org ['||l_carrying_out_org_id||']status['||x_return_status||']',  l_debug_level3);
2125            END IF;
2126 	  -- added for bug: 4537865
2127           IF x_return_status = FND_API.G_RET_STS_SUCCESS       THEN
2128           l_carrying_out_org_id := l_new_carrying_out_org_id ;
2129 	  END IF;
2130           -- added for bug: 4537865
2131 
2132           IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
2133              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2134           ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
2135               l_err_message := FND_MESSAGE.GET_STRING('PA','ACTION_CARRYING_ORG_INVALID') ;
2136               PA_UTILS.ADD_MESSAGE
2137                                (p_app_short_name => 'PA',
2138                                 p_msg_name       => 'PA_ACTN_VALID_ERR',
2139                                 p_token1         => 'PROJECT',
2140                                 p_value1         =>  l_project_number,
2141                                 p_token2         =>  'DLVR_REFERENCE',
2142                                 p_value2         =>  l_deliverable_number,
2143                                 p_token3         => 'MESSAGE',
2144                                 p_value3         =>  l_err_message
2145                                 );
2146            x_return_status             := FND_API.G_RET_STS_ERROR;
2147           END IF;
2148        END IF;
2149 
2150  -- validate action_owner_id - valid value
2151     i_act := p_action_owner_id_tbl.first();
2152     j_act := p_action_owner_id_tbl.first();
2153 
2154     WHILE i_act is not null LOOP
2155 
2156        IF p_action_owner_id_tbl(i_act)  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM     THEN
2157           l_action_owner_id := NULL;
2158        ELSE
2159           l_action_owner_id := p_action_owner_id_tbl(i_act);
2160        END IF;
2161 
2162        IF  (l_action_owner_id   IS  NOT NULL ) THEN
2163           Pa_Tasks_Maint_Utils.CHECK_TASK_MGR_NAME_OR_ID (
2164           p_task_mgr_name  => null
2165              ,p_task_mgr_id    => l_action_owner_id
2166              ,p_project_id     => p_project_id
2167              ,p_check_id_flag  => 'Y'
2168              ,p_calling_module => 'AMG'
2169            -- x_task_mgr_id    => l_action_owner_id  * added for bug 4537865
2170 	     ,x_task_mgr_id    => l_new_action_owner_id
2171 	   -- 					     * added for bug 4537865
2172              ,x_return_status  => x_return_status
2173              ,x_error_msg_code => l_msg_data );
2174           IF l_debug_mode = 'Y' THEN
2175              Pa_Debug.WRITE(g_module_name,' validated owner id ['||l_action_owner_id||']status['||x_return_status||']' , l_debug_level3);
2176           END IF;
2177 
2178            -- added for bug 4537865
2179           IF x_return_status = FND_API.G_RET_STS_SUCCESS       THEN
2180           l_action_owner_id := l_new_action_owner_id;
2181           END IF;
2182            -- added for bug 4537865
2183 
2184           IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
2185              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2186           ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
2187               l_err_message := FND_MESSAGE.GET_STRING('PA','ACTION_OWNER_INVALID') ;
2188               PA_UTILS.ADD_MESSAGE
2189                                (p_app_short_name => 'PA',
2190                                 p_msg_name       => 'PA_ACTION_VALID_ERR',
2191                                 p_token1         => 'PROJECT',
2192                                 p_value1         =>  l_project_number,
2193                                 p_token2         => 'DLVR_REFERENCE',
2194                                 p_value2         =>  l_deliverable_number,
2195                                 p_token3         => 'ACTION_REFERENCE',
2196                                 p_value3         =>  p_action_reference_tbl(i_act),
2197                                 p_token4         => 'MESSAGE',
2198                                 p_value4         =>  l_err_message
2199                                 );
2200            x_return_status             := FND_API.G_RET_STS_ERROR;
2201           END IF;
2202        END IF;
2203 
2204  -- validate function code
2205       IF (p_function_code_tbl(i_act) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2206           OR p_function_code_tbl(i_act) = NULL )THEN
2207           l_function_code := NULL;
2208        ELSE
2209           l_function_code := p_function_code_tbl(i_act);
2210        END IF;
2211 
2212        l_function_code_valid := Pa_Deliverable_Utils.Is_Function_Code_Valid(l_function_code);
2213 
2214        IF l_debug_mode = 'Y' THEN
2215          Pa_Debug.WRITE(g_module_name,'function code '||l_Function_code||'] validity ['||l_function_code_valid||']' , l_debug_level3);
2216        END IF;
2217 
2218        IF l_function_code_valid IS NULL OR l_function_code_valid = 'N' THEN
2219           l_err_message := FND_MESSAGE.GET_STRING('PA','ACTION_FUNC_CODE_INVALID') ;
2220               PA_UTILS.ADD_MESSAGE
2221                                (p_app_short_name => 'PA',
2222                                 p_msg_name       => 'PA_ACTION_VALID_ERR',
2223                                 p_token1         => 'PROJECT',
2224                                 p_value1         =>  l_project_number,
2225                                 p_token2         => 'DLVR_REFERENCE',
2226                                 p_value2         =>  l_deliverable_number,
2227                                 p_token3         => 'ACTION_REFERENCE',
2228                                 p_value3         =>  p_action_reference_tbl(i_act),
2229                                 p_token4         => 'MESSAGE',
2230                                 p_value4         =>  l_err_message
2231                                 );
2232            x_return_status             := FND_API.G_RET_STS_ERROR;
2233        END IF;
2234 
2235             --Bug 3651563
2236             --If p_calling_module is 'AMG' then do function code related validation
2237         --(i.e) More than one shipping action or more than one procurement action is not allowed
2238         --Note : In case of Self Service ,it is taken care in the Java Code itself
2239 
2240        WHILE j_act IS NOT NULL LOOP
2241             IF ( ((p_function_code_tbl(i_act) = 'SHIPPING' AND p_function_code_tbl(j_act) = 'SHIPPING')
2242                  OR (p_function_code_tbl(i_act) = 'PROCUREMENT' AND p_function_code_tbl(j_act) = 'PROCUREMENT'))
2243                      AND i_act <> j_act ) THEN
2244                                     x_return_status := FND_API.G_RET_STS_ERROR;
2245                                     l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DLV_TOO_MANY_ACTIONS');
2246                                     PA_UTILS.ADD_MESSAGE
2247                                             (p_app_short_name => 'PA',
2248                                              p_msg_name       => 'PA_ACTION_VALID_ERR',
2249                                          p_token1         => 'PROJECT',
2250                                          p_value1         =>  l_project_number,
2251                                          p_token2         => 'DLVR_REFERENCE',
2252                                              p_value2         =>  l_deliverable_number,
2253                                          p_token3         => 'ACTION_REFERENCE',
2254                                          p_value3         =>  p_action_reference_tbl(i_act),
2255                                          p_token4         => 'MESSAGE',
2256                                          p_value4         =>  l_err_message
2257                                         );
2258             END IF ;
2259             j_act := p_action_owner_id_tbl.next(j_act);
2260        END LOOP ;
2261 
2262             -- Start of Bug 3651563 - Check with existing actions also
2263             IF l_existing_count > 0 THEN -- IF some records already exist
2264                 FOR k_act IN l_function_code_tbl.FIRST..l_function_code_tbl.LAST LOOP
2265 
2266                      IF ( ((p_function_code_tbl(i_act) = 'SHIPPING' AND l_function_code_tbl(k_act) = 'SHIPPING')
2267                           OR (p_function_code_tbl(i_act) = 'PROCUREMENT' AND  l_function_code_tbl(k_act) = 'PROCUREMENT'))
2268                              AND p_proj_element_id_tbl(i_act) <> l_proj_element_id_tbl(k_act) ) THEN
2269 
2270                           x_return_status := FND_API.G_RET_STS_ERROR;
2271                           l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DLV_TOO_MANY_ACTIONS') ;
2272                           PA_UTILS.ADD_MESSAGE
2273                                (p_app_short_name => 'PA',
2274                                 p_msg_name       => 'PA_ACTION_VALID_ERR',
2275                                 p_token1         => 'PROJECT',
2276                                 p_value1         =>  l_project_number,
2277                                 p_token2         => 'DLVR_REFERENCE',
2278                                 p_value2         =>  l_deliverable_number,
2279                 p_token3         => 'ACTION_REFERENCE',
2280                 p_value3         =>  p_action_reference_tbl(i_act),
2281                 p_token4         => 'MESSAGE',
2282                 p_value4         =>  l_err_message
2283                 );
2284                      END IF;
2285                 END LOOP ;
2286             END IF;
2287 
2288             --End of Bug 3651563
2289 
2290  -- validate financial task id
2291 
2292        i_act := p_action_owner_id_tbl.next(i_act);
2293 
2294     END LOOP; -- WHILE LOOP
2295 END IF ;-- p_calling_module ='AMG'
2296 
2297 /* ==============3435905 : FP M : Deliverables Changes For AMG - End * =========================*/
2298 
2299      /* Bug 3651563 Very Important Fix .Please do not add any code after the following statements
2300      because if some message is there in the error stack
2301      before exiting this API,x_return_status should be set as 'ERROR'*/
2302 
2303      x_msg_count := FND_MSG_PUB.count_msg ;
2304      IF x_msg_count > 0 THEN
2305           x_return_status := FND_API.G_RET_STS_ERROR;
2306      END IF ;
2307 
2308      IF l_debug_mode = 'Y' THEN
2309           pa_debug.g_err_stage:='Exiting Validate Actions ';
2310           pa_debug.write('VALIDATE_ACTIONS: ' || g_module_name,pa_debug.g_err_stage,5);
2311           pa_debug.reset_curr_function;
2312      END IF;
2313 
2314 EXCEPTION
2315 WHEN Invalid_Arg_Exc_Dlv THEN
2316      x_return_status := FND_API.G_RET_STS_ERROR;
2317      l_msg_count := FND_MSG_PUB.count_msg;
2318 
2319          IF l_debug_mode = 'Y' THEN
2320         pa_debug.g_err_stage := 'inside invalid arg exception of VALIDATE_ACTIONS';
2321         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
2322      END IF;
2323 
2324      IF l_msg_count = 1 THEN
2325            PA_INTERFACE_UTILS_PUB.get_messages
2326                (p_encoded        => FND_API.G_TRUE,
2327                 p_msg_index      => 1,
2328                 p_msg_count      => l_msg_count,
2329                 p_msg_data       => l_msg_data,
2330                 p_data           => l_data,
2331                 p_msg_index_out  => l_msg_index_out);
2332            x_msg_data  := l_data;
2333            x_msg_count := l_msg_count;
2334      ELSE
2335             x_msg_count := l_msg_count;
2336      END IF;
2337      IF l_debug_mode = 'Y' THEN
2338        pa_debug.reset_curr_function;
2339      END IF ;
2340      RETURN;
2341 WHEN OTHERS THEN
2342      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2343      x_msg_count     := 1;
2344      x_msg_data      := SQLERRM;
2345 
2346      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
2347                      ,p_procedure_name  => 'VALIDATE_ACTIONS');
2348 
2349      IF p_debug_mode = 'Y' THEN
2350           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
2351           pa_debug.write('VALIDATE_ACTIONS: ' || g_module_name,pa_debug.g_err_stage,5);
2352           pa_debug.reset_curr_function;
2353      END IF;
2354      RAISE;
2355 
2356 END VALIDATE_ACTIONS;
2357 
2358 
2359 -- SubProgram           : DELETE_DLV_ACTION
2360 -- Type                 : PROCEDURE
2361 -- Purpose              : Public API to Delete Deliverable Actions
2362 -- Note                 :
2363 -- Assumptions          : None
2364 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
2365 -- ---------------------------  ---------    ----------      ---------    ---------------------------
2366 -- p_api_version                   IN          NUMBER             N     Standard Parameter
2367 -- p_init_msg_list                 IN          VARCHAR2      N      Standard Parameter
2368 -- p_commit                     IN         VARCHAR2      N      Standard Parameter
2369 -- p_validate_only                 IN          VARCHAR2      N      Standard Parameter
2370 -- p_validation_level             IN           NUMBER             N     Standard Parameter
2371 -- p_calling_module                IN          VARCHAR2      N      Standard Parameter
2372 -- p_debug_mode                    IN          VARCHAR2      N      Standard Parameter
2373 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
2374 -- p_action_id                     IN          NUMBER            Y        Action Element Id
2375 -- p_action_ver_id                 IN          NUMBER            Y        Action Version Id
2376 
2377 PROCEDURE DELETE_DLV_ACTION
2378      (p_api_version      IN NUMBER   :=1.0
2379      ,p_init_msg_list    IN VARCHAR2 :=FND_API.G_TRUE
2380      ,p_commit           IN VARCHAR2 :=FND_API.G_FALSE
2381      ,p_validate_only    IN VARCHAR2 :=FND_API.G_TRUE
2382      ,p_validation_level IN NUMBER   :=FND_API.G_VALID_LEVEL_FULL
2383      ,p_calling_module   IN VARCHAR2 :='SELF_SERVICE'
2384      ,p_debug_mode       IN VARCHAR2 :='N'
2385      ,p_max_msg_count    IN NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2386      ,p_action_id        IN pa_proj_elements.proj_element_id%TYPE
2387      ,p_action_ver_id    IN pa_proj_element_versions.element_version_id%TYPE
2388      ,p_dlv_element_id   IN pa_proj_elements.proj_element_id%TYPE
2389      ,p_dlv_version_id   IN pa_proj_element_versions.element_version_id%TYPE
2390      ,p_function_code    IN pa_proj_elements.function_code%TYPE
2391      ,p_project_id       IN pa_projects_all.project_id%TYPE
2392      ,x_return_status    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2393      ,x_msg_count        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2394      ,x_msg_data         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2395      )
2396 IS
2397      l_debug_mode                 VARCHAR2(10);
2398      l_msg_count                  NUMBER ;
2399      l_data                       VARCHAR2(2000);
2400      l_msg_data                   VARCHAR2(2000);
2401      l_msg_index_out              NUMBER;
2402 
2403      -- 3769024 curstor to retrieve element_version_id of action from proj_element_id
2404      l_action_id                  NUMBER;
2405 
2406      Cursor c_actn_info IS
2407      SELECT
2408             PEV.PROJ_ELEMENT_ID
2409      FROM
2410             PA_PROJ_ELEMENT_VERSIONS PEV
2411      WHERE
2412             PEV.ELEMENT_VERSION_ID = p_action_ver_id
2413         AND PEV.OBJECT_TYPE        = 'PA_ACTIONS'
2414         AND PEV.PROJECT_ID         = p_project_id;
2415 
2416      -- end
2417 
2418 BEGIN
2419 
2420      x_msg_count := 0;
2421      x_return_status := FND_API.G_RET_STS_SUCCESS;
2422      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
2423 
2424      IF l_debug_mode = 'Y' THEN
2425           PA_DEBUG.set_curr_function( p_function   => 'DELETE_DLV_ACTION',
2426                                       p_debug_mode => l_debug_mode );
2427           pa_debug.g_err_stage:= 'Inside DELETE_DLV_ACTIONS ';
2428           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
2429      END IF;
2430 
2431      IF l_debug_mode = 'Y' THEN
2432           pa_debug.g_err_stage:= 'Printing Input parameters';
2433           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
2434           pa_debug.write(g_module_name,'p_action_id'||':'||p_action_id,3) ;
2435           pa_debug.write(g_module_name,'p_action_ver_id'||':'||p_action_ver_id,3) ;
2436           pa_debug.write(g_module_name,'p_dlv_element_id'||':'||p_dlv_element_id,3) ;
2437           pa_debug.write(g_module_name,'p_dlv_version_id'||':'||p_dlv_version_id,3) ;
2438           pa_debug.write(g_module_name,'p_function_code'||':'||p_function_code,3) ;
2439           pa_debug.write(g_module_name,'p_project_id'||':'||p_project_id,3) ;
2440      END IF;
2441 
2442      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
2443           FND_MSG_PUB.initialize;
2444      END IF;
2445 
2446      IF (p_commit = FND_API.G_TRUE) THEN
2447       savepoint DELETE_DLV_ACTIONS_SP ;
2448      END IF;
2449 
2450      IF l_debug_mode = 'Y' THEN
2451           pa_debug.g_err_stage:= 'Validating Input parameters';
2452           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2453      END IF;
2454 
2455      -- 3769024 , if p_action_id ( i.e proj_element_id ) is null and action element_version id is not null
2456      -- derive proj_element_id from proj_element_id
2457 
2458      -- proj_element_id will be null in below scenarion : if user has created action and on create action page
2459      -- user deletes it , proj_element_id passed from java code to plsql api will be null
2460 
2461      IF p_action_id IS NULL AND p_action_ver_id IS NOT NULL THEN
2462         Open c_actn_info;
2463         Fetch c_actn_info INTO l_action_id;
2464         Close c_actn_info;
2465      ELSE
2466         l_action_id := p_action_id;
2467      END IF;
2468 
2469      -- 3769024 end
2470 
2471      -- 3769024 using l_action_id instead of p_action_id , changed from p_action_id to p_action_ver_id
2472      -- duplicate validation
2473 
2474      IF ((l_action_id IS NULL OR  p_action_ver_id IS NULL ) OR
2475         (p_dlv_element_id IS NULL OR p_dlv_version_id IS NULL) OR
2476         (p_function_code IS NULL OR  p_project_id IS NULL ))
2477      THEN
2478           IF l_debug_mode = 'Y' THEN
2479                pa_debug.g_err_stage:= 'INVALID INPUT PARAMETER';
2480                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2481           END IF;
2482 
2483           x_return_status := FND_API.G_RET_STS_ERROR;
2484           PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
2485                              ,p_msg_name         => 'PA_INV_PARAM_PASSED');
2486           RAISE Invalid_Arg_Exc_Dlv;
2487      END IF;
2488 
2489      PA_ACTIONS_PVT.DELETE_DLV_ACTION
2490           (p_api_version      => p_api_version
2491           ,p_init_msg_list    => p_init_msg_list
2492           ,p_commit           => p_commit
2493           ,p_validate_only    => p_validate_only
2494           ,p_validation_level => p_validation_level
2495           ,p_calling_module   => p_calling_module
2496           ,p_debug_mode       => l_debug_mode
2497           ,p_max_msg_count    => p_max_msg_count
2498           ,p_action_id        => l_action_id            -- 3769024 using derived value
2499           ,p_action_ver_id    => p_action_ver_id
2500           ,p_dlv_element_id   => p_dlv_element_id
2501           ,p_dlv_version_id   => p_dlv_version_id
2502           ,p_function_code    => p_function_code
2503           ,p_project_id       => p_project_id
2504           ,x_return_status    => x_return_status
2505           ,x_msg_count        => x_msg_count
2506           ,x_msg_data         => x_msg_data
2507           ) ;
2508 
2509      IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2510           RAISE Invalid_Arg_Exc_Dlv ;
2511      END IF ;
2512 
2513      IF l_debug_mode = 'Y' THEN
2514            pa_debug.g_err_stage:= 'Exiting DELETE_DLV_ACTION' ;
2515            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2516            pa_debug.reset_curr_function;
2517      END IF;
2518 
2519 EXCEPTION
2520 WHEN Invalid_Arg_Exc_Dlv THEN
2521      x_return_status := FND_API.G_RET_STS_ERROR;
2522      l_msg_count := FND_MSG_PUB.count_msg;
2523 
2524      IF (p_commit = FND_API.G_TRUE) THEN
2525            ROLLBACK TO DELETE_DLV_ACTIONS_SP;
2526      END IF ;
2527 
2528      IF l_debug_mode = 'Y' THEN
2529         pa_debug.g_err_stage := 'inside invalid arg exception of DELETE_DLV_ACTIONS';
2530         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
2531      END IF;
2532 
2533      IF l_msg_count = 1 THEN
2534            PA_INTERFACE_UTILS_PUB.get_messages
2535                (p_encoded        => FND_API.G_TRUE,
2536                 p_msg_index      => 1,
2537                 p_msg_count      => l_msg_count,
2538                 p_msg_data       => l_msg_data,
2539                 p_data           => l_data,
2540                 p_msg_index_out  => l_msg_index_out);
2541            x_msg_data  := l_data;
2542            x_msg_count := l_msg_count;
2543      ELSE
2544             x_msg_count := l_msg_count;
2545      END IF;
2546      IF l_debug_mode = 'Y' THEN
2547        pa_debug.reset_curr_function;
2548      END IF ;
2549      RETURN;
2550 WHEN OTHERS THEN
2551      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2552      x_msg_count     := 1;
2553      x_msg_data      := SQLERRM;
2554 
2555      IF (p_commit = FND_API.G_TRUE) THEN
2556            ROLLBACK TO DELETE_DLV_ACTIONS_SP;
2557      END IF ;
2558 
2559      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
2560                      ,p_procedure_name  => 'DELETE_DLV_ACTION');
2561 
2562      IF p_debug_mode = 'Y' THEN
2563           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
2564           pa_debug.write('DELETE_DLV_ACTION: ' || g_module_name,pa_debug.g_err_stage,5);
2565           pa_debug.reset_curr_function;
2566      END IF;
2567      RAISE;
2568 END DELETE_DLV_ACTION ;
2569 
2570 -- SubProgram           : COPY_ACTIONS
2571 -- Type                 : PROCEDURE
2572 -- Purpose              : Public API to Copy Actions From Source To Destination
2573 -- Note                 : Its a BULK API
2574 -- Assumptions          : None
2575 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
2576 -- ---------------------------  ---------    ----------      ---------    ---------------------------
2577 -- p_api_version                   IN          NUMBER            N        Standard Parameter
2578 -- p_init_msg_list                 IN          VARCHAR2          N        Standard Parameter
2579 -- p_commit                        IN          VARCHAR2          N        Standard Parameter
2580 -- p_validate_only                 IN          VARCHAR2          N        Standard Parameter
2581 -- p_validation_level              IN          NUMBER            N        Standard Parameter
2582 -- p_calling_module                IN          VARCHAR2          N        Standard Parameter
2583 -- p_debug_mode                    IN          VARCHAR2          N        Standard Parameter
2584 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
2585 -- p_source_object_id              IN          NUMBER            Y        Source Object Id
2586 -- p_source_object_type            IN          VARCHAR2          Y        Source Object Type
2587 -- p_target_object_id              IN          NUMBER            Y        Target Object Id
2588 -- p_target_object_type            IN          VARCHAR2          Y        Target Object Type
2589 -- p_project_id                    IN          NUMBER            Y        Project Id
2590 -- p_task_id                       IN          NUMBER            N        Task Id
2591 -- p_pm_source_reference           IN          VARCHAR2          N        PM Source Reference
2592 -- p_carrying_out_organization_id  IN          VARCHAR2          N        Carrying Out Org ID
2593 -- p_insert_or_update              IN          VARCHAR2          N        Identifies the API Mode
2594 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
2595 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
2596 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
2597 
2598 PROCEDURE COPY_ACTIONS
2599      (p_api_version         IN NUMBER   :=1.0
2600      ,p_init_msg_list       IN VARCHAR2 :=FND_API.G_TRUE
2601      ,p_commit              IN VARCHAR2 :=FND_API.G_FALSE
2602      ,p_validate_only       IN VARCHAR2 :=FND_API.G_TRUE
2603      ,p_validation_level    IN NUMBER   :=FND_API.G_VALID_LEVEL_FULL
2604      ,p_calling_module      IN VARCHAR2 :='SELF_SERVICE'
2605      ,p_debug_mode          IN VARCHAR2 :='N'
2606      ,p_max_msg_count       IN NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2607      ,p_source_object_id    IN pa_object_relationships.object_id_from2%TYPE
2608      ,p_source_object_type  IN pa_object_relationships.object_type_from%TYPE
2609      ,p_target_object_id    IN pa_object_relationships.object_id_from2%TYPE
2610      ,p_target_object_type  IN pa_object_relationships.object_type_from%TYPE
2611      ,p_source_project_id   IN pa_projects_all.project_id%TYPE
2612      ,p_target_project_id   IN pa_projects_all.project_id%TYPE
2613      ,p_task_id             IN pa_proj_elements.proj_element_id%TYPE := null
2614      ,p_task_ver_id         IN pa_proj_element_versions.element_version_id%TYPE := null
2615      ,p_carrying_out_organization_id IN pa_proj_elements.carrying_out_organization_id%TYPE  := null
2616      ,p_pm_source_reference IN pa_proj_elements.pm_source_reference%TYPE := null
2617      ,p_pm_source_code      IN pa_proj_elements.pm_source_code%TYPE := null
2618      ,p_calling_mode        IN VARCHAR2 := NULL -- Added for bug# 3911050
2619      ,x_return_status       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2620      ,x_msg_count           OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2621      ,x_msg_data            OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2622      )
2623 IS
2624      l_debug_mode                 VARCHAR2(10);
2625      l_msg_count                  NUMBER ;
2626      l_data                       VARCHAR2(2000);
2627      l_msg_data                   VARCHAR2(2000);
2628      l_msg_index_out              NUMBER;
2629 BEGIN
2630 
2631      x_msg_count := 0;
2632      x_return_status := FND_API.G_RET_STS_SUCCESS;
2633      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
2634 
2635      IF l_debug_mode = 'Y' THEN
2636           PA_DEBUG.set_curr_function( p_function   => 'COPY_ACTIONS',
2637                                       p_debug_mode => l_debug_mode );
2638           pa_debug.g_err_stage:= 'Inside COPY_ACTIONS ';
2639           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
2640      END IF;
2641 
2642      IF l_debug_mode = 'Y' THEN
2643           pa_debug.g_err_stage:= 'Printing Input parameters';
2644           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
2645           pa_debug.write(g_module_name,'p_source_object_id  '||':'||p_source_object_id  ,3) ;
2646           pa_debug.write(g_module_name,'p_source_object_type'||':'||p_source_object_type,3) ;
2647           pa_debug.write(g_module_name,'p_target_object_id  '||':'||p_target_object_id  ,3) ;
2648           pa_debug.write(g_module_name,'p_target_object_type'||':'||p_target_object_type,3) ;
2649      END IF;
2650 
2651      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
2652           FND_MSG_PUB.initialize;
2653      END IF;
2654 
2655      IF (p_commit = FND_API.G_TRUE) THEN
2656       savepoint COPY_ACTIONS_SP ;
2657      END IF;
2658 
2659      IF l_debug_mode = 'Y' THEN
2660           pa_debug.g_err_stage:= 'Validating Input parameters';
2661           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2662      END IF;
2663 
2664      IF (p_source_object_id IS NULL OR  p_source_object_type IS NULL
2665          OR  p_target_object_id IS NULL OR p_target_object_type IS NULL )
2666      THEN
2667           IF l_debug_mode = 'Y' THEN
2668                pa_debug.g_err_stage:= 'INVALID INPUT PARAMETER';
2669                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2670           END IF;
2671 
2672           x_return_status := FND_API.G_RET_STS_ERROR;
2673           PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
2674                              ,p_msg_name         => 'PA_INV_PARAM_PASSED');
2675           RAISE Invalid_Arg_Exc_Dlv;
2676      END IF;
2677 
2678      PA_ACTIONS_PVT.COPY_ACTIONS
2679           (p_api_version         => p_api_version
2680           ,p_init_msg_list       => p_init_msg_list
2681           ,p_commit              => p_commit
2682           ,p_validate_only       => p_validate_only
2683           ,p_validation_level    => p_validation_level
2684           ,p_calling_module      => p_calling_module
2685           ,p_debug_mode          => l_debug_mode
2686           ,p_max_msg_count       => p_max_msg_count
2687           ,p_source_object_id    => p_source_object_id
2688           ,p_source_object_type  => p_source_object_type
2689           ,p_target_object_id    => p_target_object_id
2690           ,p_target_object_type  => p_target_object_type
2691           ,p_source_project_id   => p_source_project_id
2692           ,p_target_project_id   => p_target_project_id
2693           ,p_task_id             => p_task_id
2694           ,p_task_ver_id         => p_task_ver_id
2695           ,p_carrying_out_organization_id => p_carrying_out_organization_id
2696           ,p_pm_source_reference => p_pm_source_reference
2697           ,p_pm_source_code      => p_pm_source_code
2698           ,p_calling_mode        => p_calling_mode  -- added for bug# 3911050
2699           ,x_return_status       => x_return_status
2700           ,x_msg_count           => x_msg_count
2701           ,x_msg_data            => x_msg_data
2702            ) ;
2703 
2704 
2705      IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2706           RAISE Invalid_Arg_Exc_Dlv ;
2707      END IF ;
2708 
2709      IF l_debug_mode = 'Y' THEN
2710            pa_debug.g_err_stage:= 'Exiting COPY_ACTIONS' ;
2711            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2712            pa_debug.reset_curr_function;
2713      END IF;
2714 
2715 EXCEPTION
2716 WHEN Invalid_Arg_Exc_Dlv THEN
2717      x_return_status := FND_API.G_RET_STS_ERROR;
2718      l_msg_count := FND_MSG_PUB.count_msg;
2719 
2720      IF (p_commit = FND_API.G_TRUE) THEN
2721            ROLLBACK TO COPY_ACTIONS_SP;
2722      END IF ;
2723 
2724      IF l_debug_mode = 'Y' THEN
2725         pa_debug.g_err_stage := 'inside invalid arg exception of COPY_ACTIONS';
2726         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
2727      END IF;
2728 
2729      IF l_msg_count = 1 THEN
2730            PA_INTERFACE_UTILS_PUB.get_messages
2731                (p_encoded        => FND_API.G_TRUE,
2732                 p_msg_index      => 1,
2733                 p_msg_count      => l_msg_count,
2734                 p_msg_data       => l_msg_data,
2735                 p_data           => l_data,
2736                 p_msg_index_out  => l_msg_index_out);
2737            x_msg_data  := l_data;
2738            x_msg_count := l_msg_count;
2739      ELSE
2740             x_msg_count := l_msg_count;
2741      END IF;
2742      IF l_debug_mode = 'Y' THEN
2743        pa_debug.reset_curr_function;
2744      END IF ;
2745      RETURN;
2746 WHEN OTHERS THEN
2747      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2748      x_msg_count     := 1;
2749      x_msg_data      := SQLERRM;
2750 
2751      IF (p_commit = FND_API.G_TRUE) THEN
2752            ROLLBACK TO COPY_ACTIONS_SP;
2753      END IF ;
2754 
2755      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
2756                      ,p_procedure_name  => 'COPY_ACTIONS');
2757 
2758      IF p_debug_mode = 'Y' THEN
2759           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
2760           pa_debug.write('COPY_ACTIONS: ' || g_module_name,pa_debug.g_err_stage,5);
2761           pa_debug.reset_curr_function;
2762      END IF;
2763      RAISE;
2764 END COPY_ACTIONS ;
2765 
2766 --------------------------------------------------------------------------------
2767 --Name:               is_action_rec_empty_yn
2768 --Type:               Function
2769 --Description:        This function checks if the action record passed is empty
2770 --                    for shipping and procurement actions and ignore other actions
2771 --
2772 --Called subprograms: None
2773 --
2774 --History:
2775 --    05-SEP-2008   SKKOPPUL            Created
2776 --
2777 FUNCTION is_action_rec_empty_yn
2778     (
2779           p_action_in_rec          IN  PA_PROJECT_PUB.action_in_rec_type,
2780           p_function_code          IN  VARCHAR2
2781     )   RETURN VARCHAR2
2782 IS
2783 BEGIN
2784 
2785      -- common parameters for both shipping and procurement actions
2786      IF ( p_action_in_rec.action_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2787           AND p_action_in_rec.action_name IS NOT NULL) THEN
2788         RETURN 'N';
2789      END IF;
2790      IF ( p_action_in_rec.financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2791           AND p_action_in_rec.financial_task_id IS NOT NULL) THEN
2792         RETURN 'N';
2793      END IF;
2794      IF ( p_action_in_rec.financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2795           AND p_action_in_rec.financial_task_reference IS NOT NULL) THEN
2796         RETURN 'N';
2797      END IF;
2798      -- OKE procurement parameters
2799      IF ( p_function_code = g_procurement) THEN
2800 
2801         IF ( p_action_in_rec.destination_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2802              AND p_action_in_rec.destination_type_code IS NOT NULL) THEN
2803            RETURN 'N';
2804         END IF;
2805         IF ( p_action_in_rec.po_need_by_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2806              AND p_action_in_rec.po_need_by_date IS NOT NULL) THEN
2807            RETURN 'N';
2808         END IF;
2809         IF ( p_action_in_rec.receiving_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2810              AND p_action_in_rec.receiving_org_id IS NOT NULL) THEN
2811            RETURN 'N';
2812         END IF;
2813         IF ( p_action_in_rec.receiving_location_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2814              AND p_action_in_rec.receiving_location_id IS NOT NULL) THEN
2815            RETURN 'N';
2816         END IF;
2817         IF ( p_action_in_rec.vendor_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2818              AND p_action_in_rec.vendor_id IS NOT NULL) THEN
2819            RETURN 'N';
2820         END IF;
2821         IF ( p_action_in_rec.vendor_site_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2822              AND p_action_in_rec.vendor_site_code IS NOT NULL) THEN
2823            RETURN 'N';
2824         END IF;
2825         IF ( p_action_in_rec.quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2826              AND p_action_in_rec.quantity IS NOT NULL) THEN
2827            RETURN 'N';
2828         END IF;
2829         IF ( p_action_in_rec.uom_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2830              AND p_action_in_rec.uom_code IS NOT NULL) THEN
2831            RETURN 'N';
2832         END IF;
2833         IF ( p_action_in_rec.unit_price <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2834              AND p_action_in_rec.unit_price IS NOT NULL) THEN
2835            RETURN 'N';
2836         END IF;
2837         IF ( p_action_in_rec.exchange_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2838              AND p_action_in_rec.exchange_rate_type IS NOT NULL) THEN
2839            RETURN 'N';
2840         END IF;
2841         IF ( p_action_in_rec.exchange_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2842              AND p_action_in_rec.exchange_rate_date IS NOT NULL) THEN
2843            RETURN 'N';
2844         END IF;
2845         IF ( p_action_in_rec.exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2846              AND p_action_in_rec.exchange_rate IS NOT NULL) THEN
2847            RETURN 'N';
2848         END IF;
2849         IF ( p_action_in_rec.expenditure_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2850              AND p_action_in_rec.expenditure_type IS NOT NULL) THEN
2851            RETURN 'N';
2852         END IF;
2853         IF ( p_action_in_rec.expenditure_item_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2854              AND p_action_in_rec.expenditure_item_date IS NOT NULL) THEN
2855            RETURN 'N';
2856         END IF;
2857         IF ( p_action_in_rec.expenditure_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2858              AND p_action_in_rec.expenditure_org_id IS NOT NULL) THEN
2859            RETURN 'N';
2860         END IF;
2861         IF ( p_action_in_rec.requisition_line_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2862              AND p_action_in_rec.requisition_line_type_id IS NOT NULL) THEN
2863            RETURN 'N';
2864         END IF;
2865         IF ( p_action_in_rec.category_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2866              AND p_action_in_rec.category_id IS NOT NULL) THEN
2867            RETURN 'N';
2868         END IF;
2869         IF ( p_action_in_rec.ready_to_procure_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2870              AND p_action_in_rec.ready_to_procure_flag IS NOT NULL) THEN
2871            RETURN 'N';
2872         END IF;
2873         IF ( p_action_in_rec.initiate_procure_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2874              AND p_action_in_rec.initiate_procure_flag IS NOT NULL) THEN
2875            RETURN 'N';
2876         END IF;
2877         -- OKE procurement parameters
2878 
2879      ELSIF ( p_function_code = g_shipping) THEN
2880 
2881         -- OKE shipping parameters
2882         IF ( p_action_in_rec.ship_from_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2883              AND p_action_in_rec.ship_from_organization_id IS NOT NULL) THEN
2884            RETURN 'N';
2885         END IF;
2886         IF ( p_action_in_rec.ship_from_location_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2887              AND p_action_in_rec.ship_from_location_id IS NOT NULL) THEN
2888            RETURN 'N';
2889         END IF;
2890         IF ( p_action_in_rec.ship_to_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2891              AND p_action_in_rec.ship_to_organization_id IS NOT NULL) THEN
2892            RETURN 'N';
2893         END IF;
2894         IF ( p_action_in_rec.ship_to_location_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2895              AND p_action_in_rec.ship_to_location_id IS NOT NULL) THEN
2896            RETURN 'N';
2897         END IF;
2898         IF ( p_action_in_rec.demand_schedule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2899              AND p_action_in_rec.demand_schedule IS NOT NULL) THEN
2900            RETURN 'N';
2901         END IF;
2902         IF ( p_action_in_rec.expected_shipment_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2903              AND p_action_in_rec.expected_shipment_date IS NOT NULL) THEN
2904            RETURN 'N';
2905         END IF;
2906         IF ( p_action_in_rec.promised_shipment_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2907              AND p_action_in_rec.promised_shipment_date IS NOT NULL) THEN
2908            RETURN 'N';
2909         END IF;
2910         IF ( p_action_in_rec.volume <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2911              AND p_action_in_rec.volume IS NOT NULL) THEN
2912            RETURN 'N';
2913         END IF;
2914         IF ( p_action_in_rec.volume_uom <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2915              AND p_action_in_rec.volume_uom IS NOT NULL) THEN
2916            RETURN 'N';
2917         END IF;
2918         IF ( p_action_in_rec.weight <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2919              AND p_action_in_rec.weight IS NOT NULL) THEN
2920            RETURN 'N';
2921         END IF;
2922         IF ( p_action_in_rec.weight_uom <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2923              AND p_action_in_rec.weight_uom IS NOT NULL) THEN
2924            RETURN 'N';
2925         END IF;
2926         IF ( p_action_in_rec.ready_to_ship_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2927              AND p_action_in_rec.ready_to_ship_flag IS NOT NULL) THEN
2928            RETURN 'N';
2929         END IF;
2930         IF ( p_action_in_rec.initiate_planning_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2931              AND p_action_in_rec.initiate_planning_flag IS NOT NULL) THEN
2932            RETURN 'N';
2933         END IF;
2934         IF ( p_action_in_rec.initiate_shipping_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2935              AND p_action_in_rec.initiate_shipping_flag IS NOT NULL) THEN
2936            RETURN 'N';
2937         END IF;
2938         IF ( p_action_in_rec.quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2939              AND p_action_in_rec.quantity IS NOT NULL) THEN
2940            RETURN 'N';
2941         END IF;
2942         IF ( p_action_in_rec.uom_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2943              AND p_action_in_rec.uom_code IS NOT NULL) THEN
2944            RETURN 'N';
2945         END IF;
2946         -- OKE shipping parameters
2947     ELSE
2948         -- ignore all other cases
2949         RETURN 'N';
2950     END IF;
2951 
2952     RETURN 'Y';
2953 
2954 EXCEPTION
2955     WHEN OTHERS THEN
2956          RETURN 'N';
2957 END is_action_rec_empty_yn;
2958 
2959 -------3435905 : FP M : Deliverables Changes For AMG -Start--------------------
2960 --------------------------------------------------------------------------------
2961 --Name:               Create_Dlvr_Actions_Wrapper
2962 --Type:               Procedure
2963 --Description:        This procedure will be called from AMP api. It validates the
2964 --                    input values and then call the pa_action_pub apis
2965 --
2966 --Called subprograms:   PA_ACTION_PUB.VALIDATE_ACTION
2967 --                      PA_ACTION_PUB.CREATE_DLV_ACTIONS_IN_BULK
2968 --
2969 --
2970 --
2971 --History:
2972 --    08-Mar-2004   Puneet            Created
2973 --
2974 
2975 PROCEDURE  Create_Dlvr_Actions_Wrapper
2976     ( p_api_version            IN NUMBER    :=1.0
2977     , p_init_msg_list          IN VARCHAR2  :=FND_API.G_TRUE
2978     , p_commit                 IN VARCHAR2  :=FND_API.G_FALSE
2979     , p_validate_only          IN VARCHAR2  :=FND_API.G_TRUE
2980     , p_validation_level       IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
2981     , p_calling_module         IN VARCHAR2  :='AMG'
2982     , p_debug_mode             IN VARCHAR2  :='N'
2983     , p_insert_or_update       IN VARCHAR2 := 'INSERT'
2984     , p_action_in_tbl          IN  PA_PROJECT_PUB.action_in_tbl_type
2985     , x_action_out_tbl         OUT NOCOPY PA_PROJECT_PUB.action_out_tbl_type --File.Sql.39 bug 4440895
2986     , x_return_status          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2987     , x_msg_count              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2988     , x_msg_data               OUT NOCOPY VARCHAR2  ) --File.Sql.39 bug 4440895
2989 IS
2990      l_action_name_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
2991      l_action_owner_id_tbl    SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
2992      l_function_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
2993      l_due_date_tbl           SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
2994      l_completed_flag_tbl     SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()      ;
2995      l_completion_date_tbl    SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
2996      l_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
2997      l_proj_element_id_tbl    SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
2998      l_rec_ver_num_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
2999      l_description_tbl        SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE();
3000      l_user_action_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
3001      l_pm_source_reference_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
3002 
3003      l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()    ;
3004      l_attribute1_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3005      l_attribute2_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3006      l_attribute3_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3007      l_attribute4_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3008      l_attribute5_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3009      l_attribute6_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3010      l_attribute7_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3011      l_attribute8_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3012      l_attribute9_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3013      l_attribute10_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3014      l_attribute11_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3015      l_attribute12_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3016      l_attribute13_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3017      l_attribute14_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3018      l_attribute15_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3019 
3020      l_project_id             PA_PROJ_ELEMENTS.PROJECT_ID%TYPE  := NULL                              ;
3021      l_object_id              PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE := NULL                          ;
3022      l_object_version_id      PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE := NULL               ;
3023      l_object_type            PA_PROJ_ELEMENTS.OBJECT_TYPE%TYPE := NULL                              ;
3024      l_pm_source_code         VARCHAR2(30) := NULL                                                   ;
3025      l_pm_source_reference    VARCHAR2(30) := NULL                                                   ;
3026 -- to be modified     l_pm_source_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
3027 -- to be modified     l_pm_source_reference_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()    ;    -- should be 25 instead of 30
3028      l_carrying_out_organization_id  PA_PROJ_ELEMENTS.CARRYING_OUT_ORGANIZATION_ID%TYPE := NULL      ;
3029 
3030      -- 3749462 changes for financial top task and lowest chargeable task validation
3031      l_fin_task_id_tbl    SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
3032      l_fin_task_num_tbl   SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
3033      -- 3749462 end
3034 
3035      i_proc    NUMBER := 0;
3036      i_ship    NUMBER := 0;
3037      i_bill    NUMBER := 0;
3038      i_actn    NUMBER := 0;
3039      i_none    NUMBER := 0;
3040 
3041      i_ship1   NUMBER := 0;
3042      i_proc1   NUMBER := 0;
3043 
3044      l_api_name      CONSTANT  VARCHAR2(30)     := 'Create_Dlvr_Actions_Wrapper';
3045 
3046      l_action_out_tbl  PA_PROJECT_PUB.action_out_tbl_type;
3047      l_dlv_ship_action_tbl   dlv_ship_action_tbl_type;
3048      l_dlv_req_action_tbl    dlv_req_action_tbl_type;
3049 
3050      l_project_number        pa_projects_all.segment1%TYPE;
3051      l_deliverable_number    pa_proj_elements.element_number%TYPE;
3052      l_action_id             pa_proj_elements.proj_element_id%TYPE;
3053      l_org_id                PA_PROJECTS_ALL.ORG_ID%TYPE;
3054      l_organization_name     pa_organizations_event_v.name%TYPE;
3055      l_projfunc_currency_code PA_PROJECTS_ALL.PROJFUNC_CURRENCY_CODE%TYPE;
3056      l_action_owner_id       NUMBER;                                                     /* Bug # 3590235 */
3057      l_item_dlv              VARCHAR2(1);
3058      l_action                VARCHAR2(30);
3059      l_actn_version_id       NUMBER; -- 3651489 added local variable to store action's element_version_id
3060      l_next_row                NUMBER := 1;
3061 
3062      l_msg_index_out              NUMBER;
3063      l_msg_count                  NUMBER ;
3064      l_data                       VARCHAR2(2000);
3065      l_msg_data                   VARCHAR2(2000);
3066      l_err_message fnd_new_messages.message_text%TYPE ;
3067 
3068      Cursor C_vers (p_proj_element_id IN NUMBER) IS
3069      SELECT   vers.element_version_id
3070            ,  elem.carrying_out_organization_id
3071        ,  proj.segment1
3072        ,  elem.element_Number
3073        ,  proj.project_id
3074        ,  Pa_Deliverable_Utils.IS_Dlvr_Item_Based(vers.element_version_id)
3075      FROM     pa_proj_element_versions vers
3076            ,  pa_proj_elements elem
3077        ,  pa_projects_all proj
3078      WHERE    vers.proj_element_id = elem.proj_element_id
3079      AND      elem.project_id  = vers.project_id
3080      AND      elem.proj_element_id  = p_Proj_element_id
3081      AND      elem.project_id  = proj.project_id
3082      AND      elem.object_type = 'PA_DELIVERABLES';
3083 
3084      CURSOR C_org_name (p_org_id IN NUMBER) IS
3085      SELECT name
3086      FROM pa_organizations_event_v
3087      WHERE organization_id = P_org_id
3088      AND TRUNC(SYSDATE) BETWEEN date_from AND nvl(date_to, TRUNC(SYSDATE));
3089 
3090      -- 3651489 added cursor to retrieve actions' element version id
3091      -- proj element id is passed as argument
3092 
3093      Cursor C_act_ver (p_proj_element_id IN NUMBER) IS
3094      SELECT   pev.element_version_id
3095      FROM     pa_proj_element_versions pev
3096      WHERE    pev.proj_element_id   = p_proj_element_id
3097      AND      pev.object_type       = 'PA_ACTIONS';
3098 
3099     -- 3749462 changes for financial top task and lowest chargeable task validation
3100 
3101     l_fin_task_id   pa_proj_elements.proj_element_id%TYPE;
3102     --added for bug: 4537865
3103     l_new_fin_task_id pa_proj_elements.proj_element_id%TYPE;
3104     --added for bug: 4537865
3105     l_fin_task_ref  VARCHAR2(25);
3106 
3107 
3108     Cursor is_top_task (project_id NUMBER, fin_task_id NUMBER) IS
3109        SELECT
3110               TASK_NUMBER
3111        FROM
3112               PA_TASKS
3113        WHERE
3114                  PROJECT_ID = project_id
3115              AND TASK_ID    = TOP_TASK_ID
3116              AND TASK_ID    = fin_task_id;
3117 
3118     Cursor is_lowest_task (project_id NUMBER, fin_task_id NUMBER) IS
3119        SELECT
3120               TASK_NUMBER
3121        FROM
3122               PA_TASKS
3123        WHERE
3124                  PROJECT_ID      = project_id
3125              AND TASK_ID         = fin_task_id
3126              AND CHARGEABLE_FLAG = 'Y';
3127 
3128     -- For Bug 3749447 , Added below local variables and cursor
3129 
3130     l_unique_flag VARCHAR2(1);
3131 
3132     Cursor C_dlvr_type(l_project_id NUMBER, l_deliverable_id NUMBER) IS
3133        SELECT type_id
3134        FROM   PA_PROJ_ELEMENTS
3135        WHERE  proj_element_id = l_deliverable_id
3136        AND    project_id      = l_project_id
3137        AND    OBJECT_TYPE     = 'PA_DELIVERABLES';
3138 
3139     l_dlvr_type_id            Pa_Proj_Elements.type_id%TYPE;
3140 
3141     l_dlvr_prg_enabled  VARCHAR2(1) := NULL;
3142     l_dlvr_action_enabled  VARCHAR2(1) := NULL;
3143     l_status_code   PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
3144 
3145     -- end 3749447
3146 
3147     -- 3651542 added local variable for defaulting
3148 
3149     l_default_owner_id      NUMBER;
3150     l_default_owner_name    PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
3151     l_default_date          DATE;
3152     l_earliest_start_date   DATE;
3153     l_earliest_finish_date  DATE;
3154 
3155     -- bug 7385017 skkoppul
3156     l_update_oke_yn         VARCHAR2(1) := 'Y';
3157 
3158 BEGIN
3159 
3160     IF p_commit = FND_API.G_TRUE THEN
3161        SAVEPOINT create_dlvr_actions_wrapper;
3162     END IF;
3163 --  Standard call to check for call compatibility.
3164     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
3165                                p_api_version  ,
3166                                l_api_name         ,
3167                                G_PKG_NAME       )
3168     THEN
3169        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3170     END IF;
3171 
3172 --  Initialize the message table if requested.
3173     IF FND_API.TO_BOOLEAN( p_init_msg_list )   THEN
3174        FND_MSG_PUB.initialize;
3175     END IF;
3176 
3177     IF p_debug_mode = 'Y' THEN
3178           PA_DEBUG.set_curr_function( p_function   => l_api_name,
3179                                       p_debug_mode => p_debug_mode );
3180           pa_debug.g_err_stage:= 'Inside '||l_api_name;
3181           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
3182     END IF;
3183 
3184 --  Set API return status to success
3185     x_return_status := FND_API.G_RET_STS_SUCCESS;
3186 
3187 --  OKE apis expect CREATE instead of INSERT. Initializing local variable
3188 --  l_action based on value of p_insert_or_update
3189 
3190     IF (p_insert_or_update = g_insert) THEN
3191        l_action := g_create;
3192     ELSE
3193        l_action := p_insert_or_update;
3194     END IF;
3195 
3196     i_actn := p_action_in_tbl.first();
3197 
3198     WHILE i_actn IS NOT NULL LOOP
3199 
3200    /* Bug # 3590235 : Added a condition to check null value for action_owner_id */
3201 
3202         IF ( p_action_in_tbl(i_actn).action_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
3203             p_action_in_tbl(i_actn).action_owner_id IS NULL) THEN
3204               l_action_owner_id := null;
3205         ELSE
3206               l_action_owner_id := p_action_in_tbl(i_actn).action_owner_id ;
3207         END IF;
3208 
3209         IF ( i_actn = p_action_in_tbl.first()) THEN
3210            l_object_id                    :=  p_action_in_tbl(i_actn).deliverable_id     ;
3211            l_object_type                  :=  g_deliverables                             ;
3212            l_pm_source_code               :=  nvl(p_action_in_tbl(i_actn).pm_source_code,'MSPROJECT')     ;
3213 
3214            -- Getting the project /deliverable related information
3215            Open C_vers (l_object_id);
3216            Fetch C_vers INTO l_object_version_id, l_carrying_out_organization_id,
3217                              l_project_number, l_deliverable_number, l_project_id, l_item_dlv;
3218            Close C_vers;
3219 
3220            Pa_Deliverable_Utils.Get_Project_Details    (
3221                       p_project_id                   =>  l_project_id
3222                      ,x_projfunc_currency_code       =>  l_projfunc_currency_code
3223                      ,x_org_id                       =>  l_org_id
3224                      );
3225 
3226 
3227            IF p_debug_mode = 'Y' THEN
3228               pa_debug.write(g_module_name,'Entering the loop fetched values obj id ['||l_object_id||']vers id['||l_object_version_id||']',3) ;
3229               pa_debug.write(g_module_name,'carry out org id ['||l_carrying_out_organization_id||']proj num['|| l_project_number||']dlvr num['||l_deliverable_number||']',3) ;
3230               pa_debug.write(g_module_name,'org id ['||l_org_id||']PFC['|| l_projfunc_currency_code||']item dlv['||l_item_dlv||']',3) ;
3231            END IF;
3232 
3233            -- 3651542 Added below code to retrieve default owner and date in create mode
3234            -- Assumption : defaulting will done for 'PROJECT' only , for AMG task flow is not
3235            -- considered , Also, this will be in case of project , not the template
3236 
3237            -- because of above assumption, passing task ver id null
3238            -- l_earliest_start_date and l_earliest_finish_date will be null
3239 
3240            -- retrieve only once, i.e. this call will be made for only first action
3241 
3242             IF (l_action = g_create) THEN
3243                 PA_DELIVERABLE_UTILS.GET_DEFAULT_ACTN_DATE
3244                     (
3245                           p_dlvr_ver_id             =>  l_object_version_id
3246                          ,p_task_ver_id             =>  NULL
3247                          ,p_project_mode            =>  'PROJECT'
3248                          ,x_due_date                =>  l_default_date
3249                          ,x_earliest_start_date     =>  l_earliest_start_date
3250                          ,x_earliest_finish_date    =>  l_earliest_finish_date
3251                      );
3252 
3253                 PA_DELIVERABLE_UTILS.GET_DEFAULT_ACTION_OWNER
3254                     (
3255                          p_dlvr_ver_id              =>  l_object_version_id
3256                         ,x_owner_id                 =>  l_default_owner_id
3257                         ,x_owner_name               =>  l_default_owner_name
3258                     );
3259             END IF;
3260 
3261             -- 3651542 end
3262         END IF;
3263 
3264         -- 3749447 Start
3265         -- If this api is called for creating actions, do below validation
3266         --      1. for deliverable, action is enabled
3267         --      2. for deliverable, action reference is unique
3268         --      3. action name is valid , i.e not null and not '^'
3269 
3270         IF l_action = g_create THEN
3271 
3272            OPEN C_dlvr_type(l_project_id,l_object_id);
3273            FETCH C_dlvr_Type INTO l_dlvr_type_id;
3274            CLOSE  C_dlvr_type;
3275 
3276            -- Will create actions only when deliverable type of deliverable
3277            -- has action creation enabled.
3278 
3279            Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
3280            (
3281                p_dlvr_type_id                 =>  l_dlvr_type_id
3282               ,x_dlvr_prg_enabled             =>  l_dlvr_prg_enabled
3283               ,x_dlvr_action_enabled          =>  l_dlvr_action_enabled
3284               ,x_dlvr_default_status_code     =>  l_status_code
3285             );
3286 
3287            IF (l_dlvr_action_enabled <> 'Y') THEN
3288 
3289                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3290                   l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
3291                   PA_UTILS.ADD_MESSAGE
3292                                (p_app_short_name => 'PA',
3293                                 p_msg_name       => 'PA_ACTION_VALID_ERR',
3294                                 p_token1         => 'PROJECT',
3295                                 p_value1         =>  l_project_number,
3296                                 p_token2         => 'DLVR_REFERENCE',
3297                                 p_value2         =>  l_deliverable_number,
3298                                 p_token3         => 'ACTION_REFERENCE',
3299                                 p_value3         =>  p_action_in_tbl(i_actn).pm_action_reference,
3300                                 p_token4         => 'MESSAGE',
3301                                 p_value4         =>  l_err_message
3302                                );
3303                END IF;
3304 
3305                x_return_status             := FND_API.G_RET_STS_ERROR;
3306                RAISE FND_API.G_EXC_ERROR;
3307 
3308            END IF;
3309 
3310             -- Validate Action reference - not null, unique
3311             pa_deliverable_utils.is_action_reference_unique (
3312                  p_action_reference      => p_action_in_tbl(i_actn).pm_action_reference
3313                , p_deliverable_id        => l_object_id
3314                , p_project_id            => l_project_id
3315                , x_unique_flag           => l_unique_flag
3316                , x_return_status         => x_return_status
3317                );
3318 
3319             IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
3320                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3321             ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
3322                 RAISE FND_API.G_EXC_ERROR;
3323             END IF;
3324 
3325             IF p_action_in_tbl(i_actn).action_name IS NULL OR p_action_in_tbl(i_actn).action_name =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3326 
3327                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3328                   l_err_message := FND_MESSAGE.GET_STRING('PA','PA_ACTION_NAME_NULL_ERROR') ;
3329                   PA_UTILS.ADD_MESSAGE
3330                                (p_app_short_name => 'PA',
3331                                 p_msg_name       => 'PA_ACTION_VALID_ERR',
3332                                 p_token1         => 'PROJECT',
3333                                 p_value1         =>  l_project_number,
3334                                 p_token2         => 'DLVR_REFERENCE',
3335                                 p_value2         =>  l_deliverable_number,
3336                                 p_token3         => 'ACTION_REFERENCE',
3337                                 p_value3         =>  p_action_in_tbl(i_actn).pm_action_reference,
3338                                 p_token4         => 'MESSAGE',
3339                                 p_value4         =>  l_err_message
3340                                );
3341 
3342                END IF;
3343                x_return_status             := FND_API.G_RET_STS_ERROR;
3344                RAISE FND_API.G_EXC_ERROR;
3345 
3346             END IF;
3347 
3348         END IF;
3349 
3350         -- end 3749447
3351 
3352   --  Populating the action PLSQL table
3353 
3354         l_action_name_tbl.extend;
3355         l_action_owner_id_tbl.extend;
3356         l_function_code_tbl.extend;
3357         l_due_date_tbl.extend;
3358         l_completed_flag_tbl.extend;
3359         l_completion_date_tbl.extend;
3360         l_element_version_id_tbl.extend;
3361         l_proj_element_id_tbl.extend;
3362         l_rec_ver_num_id_tbl.extend;
3363         l_description_tbl.extend;
3364         l_user_action_tbl.extend;
3365         l_pm_source_reference_tbl.extend;
3366 
3367         l_attribute_category_tbl.extend;
3368         l_attribute1_tbl.extend        ;
3369         l_attribute2_tbl.extend        ;
3370         l_attribute3_tbl.extend        ;
3371         l_attribute4_tbl.extend        ;
3372         l_attribute5_tbl.extend        ;
3373         l_attribute6_tbl.extend        ;
3374         l_attribute7_tbl.extend        ;
3375         l_attribute8_tbl.extend        ;
3376         l_attribute9_tbl.extend        ;
3377         l_attribute10_tbl.extend       ;
3378         l_attribute11_tbl.extend       ;
3379         l_attribute12_tbl.extend       ;
3380         l_attribute13_tbl.extend       ;
3381         l_attribute14_tbl.extend       ;
3382         l_attribute15_tbl.extend       ;
3383 
3384         -- 3749462 changes for financial top task and lowest chargeable task validation
3385         l_fin_task_id_tbl.extend       ;
3386         l_fin_task_num_tbl.extend     ;
3387 
3388 -- to be modified        l_pm_source_code_tbl(i_actn)        :=  p_action_in_tbl(i_actn).pm_source_code      ;
3389 -- to be modified       l_pm_source_reference_tbl(i_actn)   :=  p_action_in_tbl(i_actn).pm_source_reference ;
3390 
3391 -- Changed the direct initialization of local variables to select statement as values would differ in case of update or create bug 3651139
3392         IF (l_action = g_create) THEN
3393            SELECT
3394                decode(p_action_in_tbl(i_actn).action_name        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).action_name         )
3395              , l_action_owner_id
3396              , decode(p_action_in_tbl(i_actn).function_code      ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).function_code       )
3397              , decode(p_action_in_tbl(i_actn).due_date           ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , null, p_action_in_tbl(i_actn).due_date            )
3398              , NULL                               --l_completed_flag
3399              , NULL                               --l_completion_date
3400              , NULL                               --l_element_version_id
3401              , NULL                               --l_proj_element_id
3402              , 1                                  --l_rec_ver_num_id
3403              , decode(p_action_in_tbl(i_actn).description        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).description         )
3404              , p_insert_or_update
3405              , decode(p_action_in_tbl(i_actn).pm_action_reference,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).pm_action_reference )
3406              , NULL               --l_attribute_category
3407              , NULL               --l_attribute1
3408              , NULL               --l_attribute2
3409              , NULL               --l_attribute3
3410              , NULL               --l_attribute4
3411              , NULL               --l_attribute5
3412              , NULL               --l_attribute6
3413              , NULL               --l_attribute7
3414              , NULL               --l_attribute8
3415              , NULL               --l_attribute9
3416              , NULL               --l_attribute10
3417              , NULL               --l_attribute11
3418              , NULL               --l_attribute12
3419              , NULL               --l_attribute13
3420              , NULL               --l_attribute14
3421              , NULL               --l_attribute15
3422            INTO
3423                l_action_name_tbl(i_actn)
3424              , l_action_owner_id_tbl(i_actn)
3425              , l_function_code_tbl(i_actn)
3426              , l_due_date_tbl(i_actn)
3427              , l_completed_flag_tbl(i_actn)
3428              , l_completion_date_tbl(i_actn)
3429              , l_element_version_id_tbl(i_actn)
3430              , l_proj_element_id_tbl(i_actn)
3431              , l_rec_ver_num_id_tbl(i_actn)
3432              , l_description_tbl(i_actn)
3433              , l_user_action_tbl(i_actn)
3434              , l_pm_source_reference_tbl(i_actn)
3435              , l_attribute_category_tbl(i_actn)
3436              , l_attribute1_tbl(i_actn)
3437              , l_attribute2_tbl(i_actn)
3438              , l_attribute3_tbl(i_actn)
3439              , l_attribute4_tbl(i_actn)
3440              , l_attribute5_tbl(i_actn)
3441              , l_attribute6_tbl(i_actn)
3442              , l_attribute7_tbl(i_actn)
3443              , l_attribute8_tbl(i_actn)
3444              , l_attribute9_tbl(i_actn)
3445              , l_attribute10_tbl(i_actn)
3446              , l_attribute11_tbl(i_actn)
3447              , l_attribute12_tbl(i_actn)
3448              , l_attribute13_tbl(i_actn)
3449              , l_attribute14_tbl(i_actn)
3450              , l_attribute15_tbl(i_actn)
3451           FROM DUAL;
3452         ELSE    -- UPDATE
3453            SELECT
3454                decode(p_action_in_tbl(i_actn).action_name        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , element_name     , p_action_in_tbl(i_actn).action_name         )
3455              , decode(p_action_in_tbl(i_actn).action_owner_id    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , manager_person_id, p_action_in_tbl(i_actn).action_owner_id     )
3456              , decode(p_action_in_tbl(i_actn).function_code      ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , function_code    , p_action_in_tbl(i_actn).function_code       )
3457              , decode(p_action_in_tbl(i_actn).due_date           ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , due_date         , p_action_in_tbl(i_actn).due_date            )
3458              , decode(action_status_code , 'DLVR_COMPLETED', 'Y', 'N')                             --l_completed_flag
3459              , decode(p_action_in_tbl(i_actn).completion_date    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , actual_finish_date, p_action_in_tbl(i_actn).completion_date     ) -- for bug# 3749462-- earlier passed as NULL      --l_completion_date
3460              , element_version_id
3461              , proj_element_id
3462              , NULL                               --l_rec_ver_num_id
3463              , decode(p_action_in_tbl(i_actn).description        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , description, p_action_in_tbl(i_actn).description         )
3464              -- 3729250 removed p_insert_or_update passing , for update expected value is 'MODIFIED'
3465              -- because CR_UP_DLV_ACTIONS_IN_BULK procedure is expecting this value to be 'MODIFIED' , not 'UPDATE'
3466              , g_modified
3467              , decode(p_action_in_tbl(i_actn).pm_action_reference,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).pm_action_reference )
3468              , attribute_category
3469              , attribute1
3470              , attribute2
3471              , attribute3
3472              , attribute4
3473              , attribute5
3474              , attribute6
3475              , attribute7
3476              , attribute8
3477              , attribute9
3478              , attribute10
3479              , attribute11
3480              , attribute12
3481              , attribute13
3482              , attribute14
3483              , attribute15
3484            INTO
3485                l_action_name_tbl(i_actn)
3486              , l_action_owner_id_tbl(i_actn)
3487              , l_function_code_tbl(i_actn)
3488              , l_due_date_tbl(i_actn)
3489              , l_completed_flag_tbl(i_actn)
3490              , l_completion_date_tbl(i_actn)
3491              , l_element_version_id_tbl(i_actn)
3492              , l_proj_element_id_tbl(i_actn)
3493              , l_rec_ver_num_id_tbl(i_actn)
3494              , l_description_tbl(i_actn)
3495              , l_user_action_tbl(i_actn)
3496              , l_pm_source_reference_tbl(i_actn)
3497              , l_attribute_category_tbl(i_actn)
3498              , l_attribute1_tbl(i_actn)
3499              , l_attribute2_tbl(i_actn)
3500              , l_attribute3_tbl(i_actn)
3501              , l_attribute4_tbl(i_actn)
3502              , l_attribute5_tbl(i_actn)
3503              , l_attribute6_tbl(i_actn)
3504              , l_attribute7_tbl(i_actn)
3505              , l_attribute8_tbl(i_actn)
3506              , l_attribute9_tbl(i_actn)
3507              , l_attribute10_tbl(i_actn)
3508              , l_attribute11_tbl(i_actn)
3509              , l_attribute12_tbl(i_actn)
3510              , l_attribute13_tbl(i_actn)
3511              , l_attribute14_tbl(i_actn)
3512              , l_attribute15_tbl(i_actn)
3513           FROM pa_dlvr_actions_V
3514           where proj_element_id = p_action_in_tbl(i_actn).action_id;
3515         END IF; -- l_action= g_create
3516 
3517         -- 3651542  if create mode , check action_owner_id and due_date is not passed
3518         -- set default owner id and due date to local variable
3519 
3520         IF (l_action = g_create) THEN
3521             IF p_action_in_tbl(i_actn).action_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3522                 l_action_owner_id_tbl(i_actn) := l_default_owner_id;
3523             END IF;
3524 
3525             IF p_action_in_tbl(i_actn).due_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
3526                 l_due_date_tbl(i_actn) := l_default_date;
3527             END IF;
3528         END IF;
3529 
3530         -- 3749462 changes for financial top task and lowest chargeable task validation
3531 
3532         l_fin_task_id   := NULL;
3533         l_fin_task_ref  := NULL;
3534 
3535         -- if passed financial task id or reference is not passed , set it to null
3536 
3537         IF ( p_action_in_tbl(i_actn).financial_task_id IS NOT NULL AND p_action_in_tbl(i_actn).financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
3538             l_fin_task_id   := p_action_in_tbl(i_actn).financial_task_id;
3539         END IF;
3540 
3541         IF ( p_action_in_tbl(i_actn).financial_task_reference IS NOT NULL AND p_action_in_tbl(i_actn).financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
3542             l_fin_task_ref  := p_action_in_tbl(i_actn).financial_task_reference;
3543         END IF;
3544 
3545         -- if task reference / id is passed , validate passed reference with id
3546         -- if only reference is passed, retrieve id
3547 
3548         IF ( l_fin_task_id IS NOT NULL OR l_fin_task_ref IS NOT NULL ) THEN
3549 
3550             PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
3551                        p_pa_project_id      => l_project_id
3552                      , p_structure_type     => 'FINANCIAL'
3553                      , p_pa_task_id         => l_fin_task_id
3554                      , p_pm_task_reference  => l_fin_task_ref
3555                   -- , p_out_task_id        => l_fin_task_id     * added for bug: 4537865
3556 		     , p_out_task_id	    => l_new_fin_task_id
3557 		  --                                             * added for bug: 4537865
3558                      , p_return_status      => x_return_status );
3559 
3560 	    --added for bug: 4537865
3561             IF x_return_status = FND_API.G_RET_STS_SUCCESS	 THEN
3562 	    l_fin_task_id := l_new_fin_task_id;
3563             END IF;
3564             --added for bug: 4537865
3565 
3566             IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
3567                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3568             ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
3569                   RAISE FND_API.G_EXC_ERROR;
3570             END IF;
3571 
3572             IF l_function_code_tbl(i_actn) IN ( 'SHIPPING' , 'PROCUREMENT') THEN
3573 
3574                 -- For Procurement / Shipping action , validate passed financial task should be lowest chargeable task
3575 
3576                 Open is_lowest_task (l_project_id,l_fin_task_id);
3577                 Fetch is_lowest_task INTO l_fin_task_num_tbl(i_actn);
3578 
3579                 IF is_lowest_task%NOTFOUND THEN
3580                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3581                        l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DLVR_INVALID_LOW_FIN_TASK') ;
3582                        PA_UTILS.ADD_MESSAGE
3583                                    (p_app_short_name => 'PA',
3584                                     p_msg_name       => 'PA_ACTION_VALID_ERR',
3585                                     p_token1         => 'PROJECT',
3586                                     p_value1         =>  l_project_number,
3587                                     p_token2         => 'DLVR_REFERENCE',
3588                                     p_value2         =>  l_deliverable_number,
3589                                     p_token3         => 'ACTION_REFERENCE',
3590                                     p_value3         =>  l_pm_source_reference_tbl(i_actn),
3591                                     p_token4         => 'MESSAGE',
3592                                     p_value4         =>  l_err_message
3593                                    );
3594 
3595                     END IF;
3596                     x_return_status             := FND_API.G_RET_STS_ERROR;
3597 
3598                     RAISE FND_API.G_EXC_ERROR;
3599                 ELSE
3600                     l_fin_task_id_tbl(i_actn)   := l_fin_task_id;
3601                 END IF;
3602 
3603                 Close is_lowest_task;
3604 
3605             ELSIF l_function_code_tbl(i_actn) IN ( 'BILLING') THEN
3606 
3607                 -- For Billing action , validate passed financial task should be top financial task
3608 
3609                 Open is_top_task (l_project_id,l_fin_task_id);
3610                 Fetch is_top_task INTO l_fin_task_num_tbl(i_actn);
3611 
3612                 IF is_top_task%NOTFOUND THEN
3613                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3614                        l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DLVR_INVALID_TOP_FIN_TASK') ;
3615                        PA_UTILS.ADD_MESSAGE
3616                                    (p_app_short_name => 'PA',
3617                                     p_msg_name       => 'PA_ACTION_VALID_ERR',
3618                                     p_token1         => 'PROJECT',
3619                                     p_value1         =>  l_project_number,
3620                                     p_token2         => 'DLVR_REFERENCE',
3621                                     p_value2         =>  l_deliverable_number,
3622                                     p_token3         => 'ACTION_REFERENCE',
3623                                     p_value3         =>  l_pm_source_reference_tbl(i_actn),
3624                                     p_token4         => 'MESSAGE',
3625                                     p_value4         =>  l_err_message
3626                                    );
3627 
3628                     END IF;
3629                     x_return_status             := FND_API.G_RET_STS_ERROR;
3630 
3631                     RAISE FND_API.G_EXC_ERROR;
3632                 ELSE
3633                     l_fin_task_id_tbl(i_actn)   := l_fin_task_id;
3634                 END IF;
3635 
3636                 Close is_top_task;
3637 
3638             END IF;
3639         ELSE
3640             l_fin_task_num_tbl(i_actn) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
3641         END IF;
3642 
3643         -- for bug# 3749462
3644         -- create mode, completion date is null and comleted flag will become 'N'
3645         -- update mode, if comp date is passed, make completed flag 'Y'
3646         -- update mode, if action is complte and comp date is not passed, completed flag will retain value from the db
3647 
3648         IF l_completion_date_tbl(i_actn) IS NOT NULL THEN
3649             l_completed_flag_tbl(i_actn) := 'Y';
3650         END IF;
3651 
3652         i_actn := p_action_in_tbl.next(i_actn);
3653 
3654     END LOOP;
3655 
3656     IF p_debug_mode = 'Y' THEN
3657         pa_debug.write(g_module_name,'Populated action PLSQL table, calling api for bulk insert',3) ;
3658     END IF;
3659 
3660   --  Invoke the API to create dlvr actions in bulk.
3661 
3662     Pa_Actions_Pub.CR_UP_DLV_ACTIONS_IN_BULK (
3663         p_init_msg_list                 =>  p_init_msg_list
3664        ,p_commit                        =>  p_commit
3665        ,p_validate_only                 =>  FND_API.G_FALSE
3666        ,p_validation_level              =>  FND_API.G_VALID_LEVEL_FULL
3667        ,p_calling_module                =>  'AMG'
3668        ,p_debug_mode                    =>  p_debug_mode
3669        ,p_max_msg_count                 =>  NULL
3670        ,p_name_tbl                      =>  l_action_name_tbl
3671        ,p_manager_person_id_tbl         =>  l_action_owner_id_tbl
3672        ,p_function_code_tbl             =>  l_function_code_tbl
3673        ,p_due_date_tbl                  =>  l_due_date_tbl
3674        ,p_completed_flag_tbl            =>  l_completed_flag_tbl
3675        ,p_completion_date_tbl           =>  l_completion_date_tbl
3676        ,p_description_tbl               =>  l_description_tbl
3677        ,p_element_version_id_tbl        =>  l_element_version_id_tbl
3678        ,p_proj_element_id_tbl           =>  l_proj_element_id_tbl
3679        ,p_user_action_tbl               =>  l_user_action_tbl
3680        ,p_record_version_number_tbl     =>  l_rec_ver_num_id_tbl
3681        ,p_attribute_category_tbl        =>  l_attribute_category_tbl
3682        ,p_attribute1_tbl                =>  l_attribute1_tbl
3683        ,p_attribute2_tbl                =>  l_attribute2_tbl
3684        ,p_attribute3_tbl                =>  l_attribute3_tbl
3685        ,p_attribute4_tbl                =>  l_attribute4_tbl
3686        ,p_attribute5_tbl                =>  l_attribute5_tbl
3687        ,p_attribute6_tbl                =>  l_attribute6_tbl
3688        ,p_attribute7_tbl                =>  l_attribute7_tbl
3689        ,p_attribute8_tbl                =>  l_attribute8_tbl
3690        ,p_attribute9_tbl                =>  l_attribute9_tbl
3691        ,p_attribute10_tbl               =>  l_attribute10_tbl
3692        ,p_attribute11_tbl               =>  l_attribute11_tbl
3693        ,p_attribute12_tbl               =>  l_attribute12_tbl
3694        ,p_attribute13_tbl               =>  l_attribute13_tbl
3695        ,p_attribute14_tbl               =>  l_attribute14_tbl
3696        ,p_attribute15_tbl               =>  l_attribute15_tbl
3697        ,p_project_id                    =>  l_project_id
3698        ,p_object_id                     =>  l_object_id
3699        ,p_object_version_id             =>  l_object_version_id
3700        ,p_object_type                   =>  l_object_type
3701        ,p_pm_source_code                =>  l_pm_source_code
3702        ,p_pm_source_reference           =>  l_pm_source_reference
3703        ,p_pm_source_reference_tbl       =>  l_pm_source_reference_tbl
3704        ,p_carrying_out_organization_id  =>  l_carrying_out_organization_id
3705        ,p_insert_or_update              =>  p_insert_or_update
3706        ,x_return_status                 =>  x_return_status
3707        ,x_msg_count                     =>  x_msg_count
3708        ,x_msg_data                      =>  x_msg_data);
3709 
3710      IF  p_debug_mode = 'Y' THEN
3711            pa_debug.write(g_module_name,'Returned from Pa_Actions_Pub.CR_UP_DLV_ACTIONS_IN_BULK ['||x_return_status||']',5);
3712      END IF;
3713 
3714      IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3715             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3716      ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
3717             RAISE  FND_API.G_EXC_ERROR;
3718      END IF;
3719 
3720   -- After successfull creation of actions, looping the action-in table and populating
3721   -- OKE and Billing PLSQL tables
3722 
3723      i_actn := p_action_in_tbl.first();
3724 
3725      WHILE i_actn IS NOT NULL LOOP
3726 
3727         -- bug 7385017 skkoppul - default it to 'Y' as we are looping through
3728         l_update_oke_yn := 'Y';
3729 
3730 -- Derive the action_id based on action reference in case of INSERT only.
3731 -- It is not required in case of UPDATE as action id will be passed as in parameter.
3732 
3733         IF (p_insert_or_update = 'INSERT') THEN
3734 
3735             Pa_Deliverable_Utils.Convert_pm_actionref_to_id
3736                (
3737                     p_action_reference  =>  p_action_in_tbl(i_actn).pm_action_reference
3738                    ,p_action_id         =>  null
3739                    ,p_deliverable_id    =>  l_object_id
3740                    ,p_project_id        =>  l_Project_id
3741                    ,p_out_action_id     =>  l_action_id
3742                    ,p_return_status     =>  x_return_status
3743                );
3744 
3745             l_next_row := NVL(x_action_out_tbl.LAST, 0)+ 1;
3746             x_action_out_tbl(l_next_row).action_id := l_action_id;
3747             x_action_out_tbl(l_next_row).return_status := x_return_status;
3748 
3749         ELSE -- p_insert_or_update = 'INSERT'
3750 
3751             -- bug 7385017 skkoppul - if action record is empty,
3752             -- OKE_AMG_GRP.manage_dlv_action should not be called so update the flag
3753             IF is_action_rec_empty_yn(p_action_in_tbl(i_actn),l_function_code_tbl(i_actn)) = 'Y' THEN
3754                l_update_oke_yn := 'N';
3755             END IF;
3756 
3757             l_action_id := p_action_in_tbl(i_actn).action_id;
3758 
3759         END IF; --p_insert_or_update = 'INSERT'
3760 
3761         IF  p_debug_mode = 'Y' THEN
3762            pa_debug.write(g_module_name,'Derived action id ['||l_action_id||']for reference['||p_action_in_tbl(i_actn).pm_action_reference||
3763                       ']status['||x_return_status||']',5);
3764         END IF;
3765 
3766         IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3767             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3768         ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
3769             RAISE  FND_API.G_EXC_ERROR;
3770         END IF;
3771 
3772         IF  p_debug_mode = 'Y' THEN
3773            pa_debug.write(g_module_name,'Should we update OKE attributes? '||l_update_oke_yn);
3774         END IF;
3775 
3776         -- bug 7385017 skkoppul - Update only in case of changes to OKE attributes
3777         -- Bug 7759051 - l_update_oke_yn should demarcate the code only for OKE procurement and shipping and *not* billing action
3778         -- IF l_update_oke_yn = 'Y' THEN
3779 
3780            -- 3651489 retrieving action's element version id
3781 
3782            Open C_act_ver (l_action_id);
3783            Fetch C_act_ver INTO l_actn_version_id;
3784            Close C_act_ver;
3785 
3786   --  Populating the OKE Procurement PLSQL table
3787 
3788         -- 3729250, In update mode, if function is not passed, p_action_in_tbl(i_actn).function_code value is G_PA_MISS_CHAR
3789         -- and so below condition was failing and oke data was not getting updated
3790         -- changed from p_action_in_tbl(i_actn).function_code to l_function_code_tbl(i_actn)
3791         IF ( l_function_code_tbl(i_actn) = g_procurement) THEN
3792 
3793         IF l_update_oke_yn = 'Y' THEN -- Bug 7759051 (For OKE Procurement)
3794 
3795            i_proc := i_proc + 1;
3796 
3797            IF (l_action = g_create) THEN   -- added IF condition and else part of the code bug 3651139
3798               SELECT l_object_version_id
3799                  ,  l_actn_version_id     -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3800                  ,  decode(p_action_in_tbl(i_actn).action_name               ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).action_name               )
3801                  ,  decode(l_fin_task_id_tbl(i_actn)                         ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, l_fin_task_id_tbl(i_actn)                         ) -- for bug# 3749462
3802                  ,  decode(p_action_in_tbl(i_actn).destination_type_code     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).destination_type_code     )
3803                  ,  decode(p_action_in_tbl(i_actn).receiving_org_id          ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).receiving_org_id          )
3804                  ,  decode(p_action_in_tbl(i_actn).receiving_location_id     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).receiving_location_id     )
3805                  -- 3729250 , po_need_by_date should be populated with procurement action due date
3806                  -- 3749462 changed from po_need_by_date to p_action_in_tbl(i_actn).due_date
3807                  ,  l_due_date_tbl(i_actn) --  3651542 Using local variable , if defaulting is done p_action_in_tbl(i_actn).due_date will not reflect it
3808                  ,  decode(p_action_in_tbl(i_actn).vendor_id                 ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).vendor_id                 )
3809                  ,  decode(p_action_in_tbl(i_actn).vendor_site_code          ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).vendor_site_code          )
3810                  ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).quantity                  )
3811                  ,  decode(p_action_in_tbl(i_actn).unit_price                ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).unit_price                )
3812                  ,  decode(p_action_in_tbl(i_actn).exchange_rate_type        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).exchange_rate_type        )
3813                  ,  decode(p_action_in_tbl(i_actn).exchange_rate_date        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , null, p_action_in_tbl(i_actn).exchange_rate_date        )
3814                  ,  decode(p_action_in_tbl(i_actn).exchange_rate             ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).exchange_rate             )
3815                  ,  decode(p_action_in_tbl(i_actn).expenditure_type          ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).expenditure_type          )
3816                  ,  decode(p_action_in_tbl(i_actn).expenditure_org_id        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).expenditure_org_id        )
3817                  ,  decode(p_action_in_tbl(i_actn).expenditure_item_date     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , null, p_action_in_tbl(i_actn).expenditure_item_date     )
3818                  ,  decode(p_action_in_tbl(i_actn).requisition_line_type_id  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).requisition_line_type_id  )
3819                  ,  decode(p_action_in_tbl(i_actn).category_id               ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).category_id               )
3820                  ,  decode(p_action_in_tbl(i_actn).ready_to_procure_flag     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).ready_to_procure_flag     )
3821                  ,  decode(p_action_in_tbl(i_actn).initiate_procure_flag     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).initiate_procure_flag     )
3822                  ,  decode(p_action_in_tbl(i_actn).uom_code                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).uom_code                  )
3823                  ,  decode(p_action_in_tbl(i_actn).currency                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).currency                  )
3824              INTO
3825                     l_dlv_req_action_tbl(i_proc).pa_deliverable_id
3826                  ,  l_dlv_req_action_tbl(i_proc).pa_action_id
3827                  ,  l_dlv_req_action_tbl(i_proc).action_name
3828                  ,  l_dlv_req_action_tbl(i_proc).proc_finnancial_task_id
3829                  ,  l_dlv_req_action_tbl(i_proc).destination_type_code
3830                  ,  l_dlv_req_action_tbl(i_proc).receiving_org_id
3831                  ,  l_dlv_req_action_tbl(i_proc).receiving_location_id
3832                  ,  l_dlv_req_action_tbl(i_proc).po_need_by_date
3833                  ,  l_dlv_req_action_tbl(i_proc).vendor_id
3834                  ,  l_dlv_req_action_tbl(i_proc).vendor_site_id
3835                  ,  l_dlv_req_action_tbl(i_proc).quantity
3836                  ,  l_dlv_req_action_tbl(i_proc).unit_price
3837                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_type
3838                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_date
3839                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate
3840                  ,  l_dlv_req_action_tbl(i_proc).expenditure_type
3841                  ,  l_dlv_req_action_tbl(i_proc).expenditure_org_id
3842                  ,  l_dlv_req_action_tbl(i_proc).expenditure_item_date
3843                  ,  l_dlv_req_action_tbl(i_proc).requisition_line_type_id
3844                  ,  l_dlv_req_action_tbl(i_proc).category_id
3845                  ,  l_dlv_req_action_tbl(i_proc).ready_to_procure_flag
3846                  ,  l_dlv_req_action_tbl(i_proc).initiate_procure_flag
3847                  ,  l_dlv_req_action_tbl(i_proc).uom_code
3848                  ,  l_dlv_req_action_tbl(i_proc).currency
3849                  FROM DUAL;
3850 
3851            ELSE    -- UPDATE
3852 
3853               SELECT l_object_version_id
3854                  ,  l_actn_version_id     -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3855                  ,  decode(p_action_in_tbl(i_actn).action_name               ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , action_name           , p_action_in_tbl(i_actn).action_name               )
3856                  ,  decode(l_fin_task_id_tbl(i_actn)                         ,NULL                                  , task_id               , l_fin_task_id_tbl(i_actn)                         ) -- for bug# 3749462
3857                  ,  decode(p_action_in_tbl(i_actn).destination_type_code     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , destination_type_code , p_action_in_tbl(i_actn).destination_type_code     )
3858                  ,  decode(p_action_in_tbl(i_actn).receiving_org_id          ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , ship_to_org_id        , p_action_in_tbl(i_actn).receiving_org_id          )
3859                  ,  decode(p_action_in_tbl(i_actn).receiving_location_id     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , ship_to_location_id   , p_action_in_tbl(i_actn).receiving_location_id     )
3860                  -- 3729250 , po_need_by_date should be populated with procurement action due date
3861                  -- 3749462 changed from po_need_by_date to l_due_date_tbl(i_actn)
3862                  ,  l_due_date_tbl(i_actn)
3863                  ,  decode(p_action_in_tbl(i_actn).vendor_id                 ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , ship_from_org_id      , p_action_in_tbl(i_actn).vendor_id                 )
3864                  ,  decode(p_action_in_tbl(i_actn).vendor_site_code          ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , ship_from_location_id , p_action_in_tbl(i_actn).vendor_site_code          )
3865                  ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , quantity              , p_action_in_tbl(i_actn).quantity                  )
3866                  ,  decode(p_action_in_tbl(i_actn).unit_price                ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , unit_price            , p_action_in_tbl(i_actn).unit_price                )
3867                  ,  decode(p_action_in_tbl(i_actn).exchange_rate_type        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , rate_type             , p_action_in_tbl(i_actn).exchange_rate_type        )
3868                  ,  decode(p_action_in_tbl(i_actn).exchange_rate_date        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , rate_date             , p_action_in_tbl(i_actn).exchange_rate_date        )
3869                  ,  decode(p_action_in_tbl(i_actn).exchange_rate             ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , exchange_rate         , p_action_in_tbl(i_actn).exchange_rate             )
3870                  ,  decode(p_action_in_tbl(i_actn).expenditure_type          ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , expenditure_type      , p_action_in_tbl(i_actn).expenditure_type          )
3871                  ,  decode(p_action_in_tbl(i_actn).expenditure_org_id        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , expenditure_organization_id, p_action_in_tbl(i_actn).expenditure_org_id        )
3872                  ,  decode(p_action_in_tbl(i_actn).expenditure_item_date     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , expenditure_item_date , p_action_in_tbl(i_actn).expenditure_item_date     )
3873                  ,  decode(p_action_in_tbl(i_actn).requisition_line_type_id  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , requisition_line_type_id, p_action_in_tbl(i_actn).requisition_line_type_id  )
3874                  ,  decode(p_action_in_tbl(i_actn).category_id               ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , po_category_id        , p_action_in_tbl(i_actn).category_id               )
3875                  ,  decode(p_action_in_tbl(i_actn).ready_to_procure_flag     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null                  , p_action_in_tbl(i_actn).ready_to_procure_flag     )
3876                  ,  decode(p_action_in_tbl(i_actn).initiate_procure_flag     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null                  , p_action_in_tbl(i_actn).initiate_procure_flag     )
3877                  ,  decode(p_action_in_tbl(i_actn).uom_code                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , uom_code              , p_action_in_tbl(i_actn).uom_code                  )
3878                  ,  decode(p_action_in_tbl(i_actn).currency                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , currency_code         , p_action_in_tbl(i_actn).currency                  )
3879              INTO
3880                     l_dlv_req_action_tbl(i_proc).pa_deliverable_id
3881                  ,  l_dlv_req_action_tbl(i_proc).pa_action_id
3882                  ,  l_dlv_req_action_tbl(i_proc).action_name
3883                  ,  l_dlv_req_action_tbl(i_proc).proc_finnancial_task_id
3884                  ,  l_dlv_req_action_tbl(i_proc).destination_type_code
3885                  ,  l_dlv_req_action_tbl(i_proc).receiving_org_id
3886                  ,  l_dlv_req_action_tbl(i_proc).receiving_location_id
3887                  ,  l_dlv_req_action_tbl(i_proc).po_need_by_date
3888                  ,  l_dlv_req_action_tbl(i_proc).vendor_id
3889                  ,  l_dlv_req_action_tbl(i_proc).vendor_site_id
3890                  ,  l_dlv_req_action_tbl(i_proc).quantity
3891                  ,  l_dlv_req_action_tbl(i_proc).unit_price
3892                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_type
3893                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_date
3894                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate
3895                  ,  l_dlv_req_action_tbl(i_proc).expenditure_type
3896                  ,  l_dlv_req_action_tbl(i_proc).expenditure_org_id
3897                  ,  l_dlv_req_action_tbl(i_proc).expenditure_item_date
3898                  ,  l_dlv_req_action_tbl(i_proc).requisition_line_type_id
3899                  ,  l_dlv_req_action_tbl(i_proc).category_id
3900                  ,  l_dlv_req_action_tbl(i_proc).ready_to_procure_flag
3901                  ,  l_dlv_req_action_tbl(i_proc).initiate_procure_flag
3902                  ,  l_dlv_req_action_tbl(i_proc).uom_code
3903                  ,  l_dlv_req_action_tbl(i_proc).currency
3904                  FROM oke_deliverable_actions_v
3905                  WHERE pa_action_id = l_actn_version_id;
3906 
3907            END IF; -- l_action= g_create
3908 
3909        IF p_debug_mode = 'Y' THEN
3910                pa_debug.write(g_module_name,'Populated OKE Procurement PLSQL table',3) ;
3911            END IF;
3912 
3913         END IF; -- Bug 7759051 (For OKE Procurement)
3914 
3915         -- 3729250, In update mode, if function is not passed, p_action_in_tbl(i_actn).function_code value is G_PA_MISS_CHAR
3916         -- and so below condition was failing and oke data was not getting updated
3917         -- changed from p_action_in_tbl(i_actn).function_code to l_function_code_tbl(i_actn)
3918 
3919           ELSIF ( l_function_code_tbl(i_actn) = g_shipping) THEN
3920 
3921           IF l_update_oke_yn = 'Y' THEN -- Bug 7759051 (For OKE Shipping)
3922 
3923            --  Populating the OKE Shipping    PLSQL table
3924            i_ship := i_ship + 1;
3925 
3926            IF (l_action = g_create) THEN  -- added IF condition and else part of the code bug 3651139
3927               SELECT l_object_version_id
3928               ,  l_actn_version_id             -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3929               ,  decode(p_action_in_tbl(i_actn).action_name               ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).action_name               )
3930               ,  decode(l_fin_task_id_tbl(i_actn)                         ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, l_fin_task_id_tbl(i_actn)                         ) -- for bug# 3749462
3931               ,  decode(p_action_in_tbl(i_actn).demand_schedule           ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).demand_schedule           )
3932               ,  decode(p_action_in_tbl(i_actn).ship_from_organization_id ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).ship_from_organization_id )
3933               ,  decode(p_action_in_tbl(i_actn).ship_from_location_id     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).ship_from_location_id     )
3934               ,  decode(p_action_in_tbl(i_actn).ship_to_organization_id   ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).ship_to_organization_id   )
3935               ,  decode(p_action_in_tbl(i_actn).ship_to_location_id       ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).ship_to_location_id       )
3936               ,  decode(p_action_in_tbl(i_actn).promised_shipment_date    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  , null, p_action_in_tbl(i_actn).promised_shipment_date   )
3937               -- 3729250 , expected_shipment_date should be populated with shipping action due date
3938               -- 3749462 , changed from p_action_in_tbl(i_actn).expected_shipment_date to p_action_in_tbl(i_actn).due_date
3939               ,  l_due_date_tbl(i_actn) --  3651542 Using local variable , if defaulting is done p_action_in_tbl(i_actn).due_date will not reflect it
3940               ,  decode(p_action_in_tbl(i_actn).volume                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).volume                    )
3941               ,  decode(p_action_in_tbl(i_actn).volume_uom                ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  , null, p_action_in_tbl(i_actn).volume_uom                   )
3942               ,  decode(p_action_in_tbl(i_actn).weight                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).weight                    )
3943               ,  decode(p_action_in_tbl(i_actn).weight_uom                ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).weight_uom                )
3944               ,  decode(p_action_in_tbl(i_actn).ready_to_ship_flag        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).ready_to_ship_flag        )
3945               ,  decode(p_action_in_tbl(i_actn).initiate_planning_flag    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).initiate_planning_flag    )
3946               ,  decode(p_action_in_tbl(i_actn).initiate_shipping_flag    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).initiate_shipping_flag    )
3947               ,  decode(p_action_in_tbl(i_actn).uom_code                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  , null, p_action_in_tbl(i_actn).uom_code                     )
3948               ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).quantity                  )
3949               INTO
3950                  l_dlv_ship_action_tbl(i_ship).pa_deliverable_id
3951               ,  l_dlv_ship_action_tbl(i_ship).pa_action_id
3952               ,  l_dlv_ship_action_tbl(i_ship).action_name
3953               ,  l_dlv_ship_action_tbl(i_ship).ship_finnancial_task_id
3954               ,  l_dlv_ship_action_tbl(i_ship).demand_schedule
3955               ,  l_dlv_ship_action_tbl(i_ship).ship_from_organization_id
3956               ,  l_dlv_ship_action_tbl(i_ship).ship_from_location_id
3957               ,  l_dlv_ship_action_tbl(i_ship).ship_to_organization_id
3958               ,  l_dlv_ship_action_tbl(i_ship).ship_to_location_id
3959               ,  l_dlv_ship_action_tbl(i_ship).promised_shipment_date
3960               ,  l_dlv_ship_action_tbl(i_ship).expected_shipment_date
3961               ,  l_dlv_ship_action_tbl(i_ship).volume
3962               ,  l_dlv_ship_action_tbl(i_ship).volume_uom
3963               ,  l_dlv_ship_action_tbl(i_ship).weight
3964               ,  l_dlv_ship_action_tbl(i_ship).weight_uom
3965               ,  l_dlv_ship_action_tbl(i_ship).ready_to_ship_flag
3966               ,  l_dlv_ship_action_tbl(i_ship).initiate_planning_flag
3967               ,  l_dlv_ship_action_tbl(i_ship).initiate_shipping_flag
3968               ,  l_dlv_ship_action_tbl(i_ship).uom_code
3969               ,  l_dlv_ship_action_tbl(i_ship).quantity
3970               FROM DUAL;
3971 
3972            ELSE    -- UPDATE
3973               SELECT l_object_version_id
3974               ,  l_actn_version_id             -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3975               ,  decode(p_action_in_tbl(i_actn).action_name               ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , action_name           , p_action_in_tbl(i_actn).action_name               )
3976               ,  decode(l_fin_task_id_tbl(i_actn)                         ,NULL                                  , task_id               , l_fin_task_id_tbl(i_actn)                         ) -- for bug# 3749462
3977               ,  decode(p_action_in_tbl(i_actn).demand_schedule           ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , schedule_designator   , p_action_in_tbl(i_actn).demand_schedule           )
3978               ,  decode(p_action_in_tbl(i_actn).ship_from_organization_id ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , ship_from_org_id      , p_action_in_tbl(i_actn).ship_from_organization_id )
3979               ,  decode(p_action_in_tbl(i_actn).ship_from_location_id     ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , ship_from_location_id , p_action_in_tbl(i_actn).ship_from_location_id     )
3980               ,  decode(p_action_in_tbl(i_actn).ship_to_organization_id   ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , ship_to_org_id        , p_action_in_tbl(i_actn).ship_to_organization_id   )
3981               ,  decode(p_action_in_tbl(i_actn).ship_to_location_id       ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , ship_to_location_id   , p_action_in_tbl(i_actn).ship_to_location_id       )
3982               ,  decode(p_action_in_tbl(i_actn).promised_shipment_date    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE , promised_date         , p_action_in_tbl(i_actn).promised_shipment_date    )
3983               -- 3729250 , expected_shipment_date should be populated with shipping action due date
3984               -- 3749462 , changed from p_action_in_tbl(i_actn).expected_shipment_date to l_due_date_tbl(i_actn)
3985               ,  l_due_date_tbl(i_actn)
3986               ,  decode(p_action_in_tbl(i_actn).volume                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , volume                , p_action_in_tbl(i_actn).volume                    )
3987               ,  decode(p_action_in_tbl(i_actn).volume_uom                ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , volume_uom_code       , p_action_in_tbl(i_actn).volume_uom                   )
3988               ,  decode(p_action_in_tbl(i_actn).weight                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , weight                , p_action_in_tbl(i_actn).weight                    )
3989               ,  decode(p_action_in_tbl(i_actn).weight_uom                ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , weight_uom_code       , p_action_in_tbl(i_actn).weight_uom                )
3990               ,  decode(p_action_in_tbl(i_actn).ready_to_ship_flag        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , ready_flag            , p_action_in_tbl(i_actn).ready_to_ship_flag        )
3991               ,  decode(p_action_in_tbl(i_actn).initiate_planning_flag    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null                  , p_action_in_tbl(i_actn).initiate_planning_flag    )
3992               ,  decode(p_action_in_tbl(i_actn).initiate_shipping_flag    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null                  , p_action_in_tbl(i_actn).initiate_shipping_flag    )
3993               ,  decode(p_action_in_tbl(i_actn).uom_code                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , uom_code              , p_action_in_tbl(i_actn).uom_code                     )
3994               ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , quantity              , p_action_in_tbl(i_actn).quantity                  )
3995               INTO
3996                  l_dlv_ship_action_tbl(i_ship).pa_deliverable_id
3997               ,  l_dlv_ship_action_tbl(i_ship).pa_action_id
3998               ,  l_dlv_ship_action_tbl(i_ship).action_name
3999               ,  l_dlv_ship_action_tbl(i_ship).ship_finnancial_task_id
4000               ,  l_dlv_ship_action_tbl(i_ship).demand_schedule
4001               ,  l_dlv_ship_action_tbl(i_ship).ship_from_organization_id
4002               ,  l_dlv_ship_action_tbl(i_ship).ship_from_location_id
4003               ,  l_dlv_ship_action_tbl(i_ship).ship_to_organization_id
4004               ,  l_dlv_ship_action_tbl(i_ship).ship_to_location_id
4005               ,  l_dlv_ship_action_tbl(i_ship).promised_shipment_date
4006               ,  l_dlv_ship_action_tbl(i_ship).expected_shipment_date
4007               ,  l_dlv_ship_action_tbl(i_ship).volume
4008               ,  l_dlv_ship_action_tbl(i_ship).volume_uom
4009               ,  l_dlv_ship_action_tbl(i_ship).weight
4010               ,  l_dlv_ship_action_tbl(i_ship).weight_uom
4011               ,  l_dlv_ship_action_tbl(i_ship).ready_to_ship_flag
4012               ,  l_dlv_ship_action_tbl(i_ship).initiate_planning_flag
4013               ,  l_dlv_ship_action_tbl(i_ship).initiate_shipping_flag
4014               ,  l_dlv_ship_action_tbl(i_ship).uom_code
4015               ,  l_dlv_ship_action_tbl(i_ship).quantity
4016               FROM oke_deliverable_actions_v
4017               WHERE pa_action_id = l_actn_version_id;
4018 
4019            END IF; -- l_action= g_create
4020 
4021            /*                       INSPECTION_REQ_FLAG        Varchar2(1),*/
4022 
4023        IF p_debug_mode = 'Y' THEN
4024                pa_debug.write(g_module_name,'Populated OKE Shipping PLSQL table',3) ;
4025            END IF;
4026 
4027           END IF; -- Bug 7759051 (For OKE Shipping)
4028 
4029         -- 3729250, In update mode, if function is not passed, p_action_in_tbl(i_actn).function_code value is G_PA_MISS_CHAR
4030         -- and so below condition was failing and oke data was not getting updated
4031         -- changed from p_action_in_tbl(i_actn).function_code to l_function_code_tbl(i_actn)
4032        ELSIF ( l_function_code_tbl(i_actn) = g_billing) THEN
4033 
4034            -- 4027500 Passing l_organization_name as PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR if update mode and p_organization_id
4035            -- is not passed
4036            -- else call C_org_name to derive organization_name from id
4037            IF p_insert_or_update = g_update AND p_action_in_tbl(i_actn).organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
4038                l_organization_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
4039            ELSE
4040                OPEN C_org_name(p_action_in_tbl(i_actn).organization_id);
4041                FETCH C_org_name INTO l_organization_name;
4042                IF (C_org_name%rowcount = 0 ) THEN
4043                   l_err_message := FND_MESSAGE.GET_STRING('PA','PA_INVALID_EVNT_ORG_AMG') ; -- 3810957, changed error msg code
4044                   PA_UTILS.ADD_MESSAGE
4045                                    (p_app_short_name => 'PA',
4046                                     p_msg_name       => 'PA_ACTN_VALID_ERR',
4047                                     p_token1         => 'PROJECT',
4048                                     p_value1         =>  l_project_number,
4049                                     p_token2         =>  'DLVR_REFERENCE',
4050                                     p_value2         =>  l_deliverable_number,
4051                                     p_token3         => 'MESSAGE',
4052                                     p_value3         =>  l_err_message
4053                                     );
4054                  x_return_status             := FND_API.G_RET_STS_ERROR;
4055                  CLOSE C_org_name;
4056 
4057                  -- Added for bug# 3810957 , throwing invalid cursor error
4058                  -- here, C_org_name cursor was closed and second time closing it was throwing above error
4059                  -- if invalid event org id , set return status to 'E' , close the cursor and raise FND_API.G_EXC_ERROR exception
4060                  RAISE  FND_API.G_EXC_ERROR;
4061                  -- 3810957 end
4062                END IF;
4063                CLOSE C_org_name;
4064            END IF;
4065 
4066            IF p_debug_mode = 'Y' THEN
4067                pa_debug.write(g_module_name,'Organization name derived ['||l_organization_name||']',3) ;
4068            END IF;
4069 
4070            -- Bug 7759051
4071            IF ((l_action <> g_create) AND
4072                ((p_action_in_tbl(i_actn).pm_event_reference IS NOT NULL AND
4073                  p_action_in_tbl(i_actn).pm_event_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4074                 (l_fin_task_num_tbl(i_actn)                 IS NOT NULL AND
4075                  l_fin_task_num_tbl(i_actn)                 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4076                 (p_action_in_tbl(i_actn).event_type         IS NOT NULL AND
4077                  p_action_in_tbl(i_actn).event_type         = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4078                 (p_action_in_tbl(i_actn).description        IS NOT NULL AND
4079                  p_action_in_tbl(i_actn).description        = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4080                 (p_action_in_tbl(i_actn).bill_hold_flag     IS NOT NULL AND
4081                  p_action_in_tbl(i_actn).bill_hold_flag     = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4082                 (l_organization_name                        IS NOT NULL AND
4083                  l_organization_name                        = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4084                 (p_action_in_tbl(i_actn).quantity           IS NOT NULL AND
4085                  p_action_in_tbl(i_actn).quantity           = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4086                 (p_action_in_tbl(i_actn).uom_code           IS NOT NULL AND
4087                  p_action_in_tbl(i_actn).uom_code           = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4088                 (p_action_in_tbl(i_actn).unit_price         IS NOT NULL AND
4089                  p_action_in_tbl(i_actn).unit_price         = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4090                 (p_action_in_tbl(i_actn).currency           IS NOT NULL AND
4091                  p_action_in_tbl(i_actn).currency           = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4092                 (p_action_in_tbl(i_actn).invoice_amount     IS NOT NULL AND
4093                  p_action_in_tbl(i_actn).invoice_amount     = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4094                 (p_action_in_tbl(i_actn).revenue_amount     IS NOT NULL AND
4095                  p_action_in_tbl(i_actn).revenue_amount     = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4096                 (p_action_in_tbl(i_actn).project_rate_type IS NOT NULL AND
4097                  p_action_in_tbl(i_actn).project_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4098                 (p_action_in_tbl(i_actn).project_rate_date IS NOT NULL AND
4099                  p_action_in_tbl(i_actn).project_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
4100                 (p_action_in_tbl(i_actn).project_rate      IS NOT NULL AND
4101                  p_action_in_tbl(i_actn).project_rate      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4102                 (p_action_in_tbl(i_actn).project_functional_rate_type IS NOT NULL AND
4103                  p_action_in_tbl(i_actn).project_functional_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4104                 (p_action_in_tbl(i_actn).project_functional_rate_date IS NOT NULL AND
4105                  p_action_in_tbl(i_actn).project_functional_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
4106                 (p_action_in_tbl(i_actn).project_functional_rate      IS NOT NULL AND
4107                  p_action_in_tbl(i_actn).project_functional_rate      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4108                 (p_action_in_tbl(i_actn).funding_rate_type IS NOT NULL AND
4109                  p_action_in_tbl(i_actn).funding_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4110                 (p_action_in_tbl(i_actn).funding_rate_date IS NOT NULL AND
4111                  p_action_in_tbl(i_actn).funding_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
4112                 (p_action_in_tbl(i_actn).funding_rate      IS NOT NULL AND
4113                  p_action_in_tbl(i_actn).funding_rate      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
4114               )THEN
4115 	       -- In Update context, if none of the billing event related parameters are passed,
4116 	       -- then it is not required to call pa_event_pub.update_event
4117 	       NULL;
4118            ELSE
4119 
4120    --  Populating the Billing Event   PLSQL table
4121            i_bill := i_bill + 1;
4122 
4123            l_event_in_tbl(i_bill).p_pm_event_reference    :=         p_action_in_tbl(i_actn).pm_event_reference ;  -- 3651489 changed from action_ref to event_ref
4124            l_event_in_tbl(i_bill).p_task_number           :=         l_fin_task_num_tbl(i_actn)                 ; -- 3749462 passing task num, earlier was passed as null
4125            l_event_in_tbl(i_bill).p_event_number          :=         null                                       ;
4126            l_event_in_tbl(i_bill).p_event_type            :=         p_action_in_tbl(i_actn).event_type         ;
4127            l_event_in_tbl(i_bill).p_description           :=         p_action_in_tbl(i_actn).description        ;
4128            l_event_in_tbl(i_bill).p_bill_hold_flag        :=         p_action_in_tbl(i_actn).bill_hold_flag     ;
4129            l_event_in_tbl(i_bill).p_completion_date       :=         l_completion_date_tbl(i_actn)              ; -- 3749462 , create mode event date can't be set
4130            l_event_in_tbl(i_bill).p_project_number        :=         l_project_number                           ;
4131            l_event_in_tbl(i_bill).p_organization_name     :=         l_organization_name                        ;
4132            l_event_in_tbl(i_bill).p_inventory_org_name    :=         null                                       ;
4133            l_event_in_tbl(i_bill).p_inventory_item_id     :=         null                                       ;
4134            l_event_in_tbl(i_bill).p_quantity_billed       :=         p_action_in_tbl(i_actn).quantity           ;
4135            l_event_in_tbl(i_bill).p_uom_code              :=         p_action_in_tbl(i_actn).uom_code           ;
4136            l_event_in_tbl(i_bill).p_unit_price            :=         p_action_in_tbl(i_actn).unit_price         ;
4137            l_event_in_tbl(i_bill).p_bill_trans_currency_code :=      p_action_in_tbl(i_actn).currency           ;
4138            l_event_in_tbl(i_bill).p_bill_trans_bill_amount:=         p_action_in_tbl(i_actn).invoice_amount     ;
4139            l_event_in_tbl(i_bill).p_bill_trans_rev_amount :=         p_action_in_tbl(i_actn).revenue_amount     ;
4140            l_event_in_tbl(i_bill).p_project_rate_type     :=         p_action_in_tbl(i_actn).project_rate_type  ;
4141            l_event_in_tbl(i_bill).p_project_rate_date     :=         p_action_in_tbl(i_actn).project_rate_date  ;
4142            l_event_in_tbl(i_bill).p_project_exchange_rate :=         p_action_in_tbl(i_actn).project_rate       ;
4143            l_event_in_tbl(i_bill).p_projfunc_rate_type    :=         p_action_in_tbl(i_actn).project_functional_rate_type;
4144            l_event_in_tbl(i_bill).p_projfunc_rate_date    :=         p_action_in_tbl(i_actn).project_functional_rate_date;
4145            l_event_in_tbl(i_bill).p_projfunc_exchange_rate:=         p_action_in_tbl(i_actn).project_functional_rate     ;
4146            l_event_in_tbl(i_bill).p_funding_rate_type     :=         p_action_in_tbl(i_actn).funding_rate_type  ;
4147            l_event_in_tbl(i_bill).p_funding_rate_date     :=         p_action_in_tbl(i_actn).funding_rate_date  ;
4148            l_event_in_tbl(i_bill).p_funding_exchange_rate :=         p_action_in_tbl(i_actn).funding_rate   ;
4149            l_event_in_tbl(i_bill).p_adjusting_revenue_flag:=         null                                       ;
4150            l_event_in_tbl(i_bill).p_event_id              :=         NULL                                       ;
4151            -- 3651489 changed from deliverable proj element id to version id, as element version id should be passed to billing
4152            l_event_in_tbl(i_bill).p_deliverable_id        :=         l_object_version_id                        ;
4153            -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
4154            l_event_in_tbl(i_bill).p_action_id             :=         l_actn_version_id                          ;
4155            l_event_in_tbl(i_bill).p_context               :=         'D'     ;-- to be passed as 'D' for deliverable action event
4156            l_event_in_tbl(i_bill).p_record_version_number :=         1                                          ;
4157 
4158        IF p_debug_mode = 'Y' THEN
4159                pa_debug.write(g_module_name,'Populated Billing PLSQL table',3) ;
4160            END IF;
4161 
4162            END IF; -- Bug 7759051 (For Billing events)
4163 
4164        ELSE
4165            i_none := i_none + 1;
4166 
4167        IF p_debug_mode = 'Y' THEN
4168                pa_debug.write(g_module_name,'Function code is NONE',3) ;
4169            END IF;
4170        END IF;
4171 
4172        -- Bug 7759051 - Reduced the scope to only OKE Procurement and Shipping
4173        -- END IF;
4174        i_actn := p_action_in_tbl.next(i_actn);
4175 
4176     END LOOP; -- i_act is not null
4177 
4178     IF  p_debug_mode = 'Y' THEN
4179          pa_debug.write(g_module_name,'action processed ['||i_actn||']bill['||i_bill||']proc['||i_proc||']ship['||i_ship||']none['||i_none||']',5);
4180     END IF;
4181 
4182   --  Invoke the API to create records in OKE tables
4183     IF ( i_ship > 0) THEN
4184 
4185        i_ship1 := l_dlv_ship_action_tbl.first();
4186 
4187        WHILE (i_ship1 IS NOT NULL) LOOP
4188 
4189            l_dlv_ship_action_rec.pa_deliverable_id         :=  l_dlv_ship_action_tbl(i_ship1).pa_deliverable_id        ;
4190            l_dlv_ship_action_rec.pa_action_id              :=  l_dlv_ship_action_tbl(i_ship1).pa_action_id             ;
4191            l_dlv_ship_action_rec.action_name               :=  l_dlv_ship_action_tbl(i_ship1).action_name              ;
4192            l_dlv_ship_action_rec.ship_finnancial_task_id   :=  l_dlv_ship_action_tbl(i_ship1).ship_finnancial_task_id  ;
4193            l_dlv_ship_action_rec.demand_schedule           :=  l_dlv_ship_action_tbl(i_ship1).demand_schedule          ;
4194            l_dlv_ship_action_rec.ship_from_organization_id :=  l_dlv_ship_action_tbl(i_ship1).ship_from_organization_id;
4195            l_dlv_ship_action_rec.ship_from_location_id     :=  l_dlv_ship_action_tbl(i_ship1).ship_from_location_id    ;
4196            l_dlv_ship_action_rec.ship_to_organization_id   :=  l_dlv_ship_action_tbl(i_ship1).ship_to_organization_id  ;
4197            l_dlv_ship_action_rec.ship_to_location_id       :=  l_dlv_ship_action_tbl(i_ship1).ship_to_location_id      ;
4198            l_dlv_ship_action_rec.promised_shipment_date    :=  l_dlv_ship_action_tbl(i_ship1).promised_shipment_date   ;
4199            l_dlv_ship_action_rec.volume                    :=  l_dlv_ship_action_tbl(i_ship1).volume                   ;
4200            l_dlv_ship_action_rec.volume_uom                :=  l_dlv_ship_action_tbl(i_ship1).volume_uom               ;
4201            l_dlv_ship_action_rec.weight                    :=  l_dlv_ship_action_tbl(i_ship1).weight                   ;
4202            l_dlv_ship_action_rec.weight_uom                :=  l_dlv_ship_action_tbl(i_ship1).weight_uom               ;
4203            l_dlv_ship_action_rec.ready_to_ship_flag        :=  l_dlv_ship_action_tbl(i_ship1).ready_to_ship_flag       ;
4204            l_dlv_ship_action_rec.initiate_planning_flag    :=  l_dlv_ship_action_tbl(i_ship1).initiate_planning_flag   ;
4205            l_dlv_ship_action_rec.initiate_shipping_flag    :=  l_dlv_ship_action_tbl(i_ship1).initiate_shipping_flag   ;
4206            l_dlv_ship_action_rec.expected_shipment_date    :=  l_dlv_ship_action_tbl(i_ship1).expected_shipment_date   ;
4207            l_dlv_ship_action_rec.uom_code                  :=  l_dlv_ship_action_tbl(i_ship1).uom_code                 ;
4208            l_dlv_ship_action_rec.quantity                  :=  l_dlv_ship_action_tbl(i_ship1).quantity                 ;
4209 
4210            oke_amg_grp.manage_dlv_action
4211               ( p_api_version          =>    p_api_version
4212               , p_init_msg_list         =>    FND_API.G_FALSE
4213               , p_commit                =>    p_commit
4214               , p_action                =>    l_action
4215               , p_dlv_action_type       =>    g_dlv_action_ship
4216               , p_master_inv_org_id     =>    l_org_id
4217               , p_item_dlv              =>    l_item_dlv
4218               , p_dlv_ship_action_rec   =>    l_dlv_ship_action_rec
4219               , p_dlv_req_action_rec    =>    l_dlv_req_action_rec_b
4220               , x_return_status         =>    x_return_status
4221               , x_msg_data              =>    x_msg_data
4222               , x_msg_count             =>    x_msg_count
4223               );
4224 
4225            IF  p_debug_mode = 'Y' THEN
4226               pa_debug.write(g_module_name,'Returned from oke_amg_grp.manage_dlv_action for shipping action ['||x_return_status||']',5);
4227            END IF;
4228 
4229            i_ship1 := l_dlv_ship_action_tbl.next(i_ship1);
4230 
4231        END LOOP;
4232 
4233     END IF;
4234 
4235     IF ( i_proc > 0 ) THEN
4236 
4237        i_proc1 := l_dlv_req_action_tbl.first();
4238 
4239        WHILE (i_proc1 IS NOT NULL) LOOP
4240 
4241            l_dlv_req_action_rec.pa_deliverable_id          :=  l_dlv_req_action_tbl(i_proc1).pa_deliverable_id          ;
4242            l_dlv_req_action_rec.pa_action_id               :=  l_dlv_req_action_tbl(i_proc1).pa_action_id               ;
4243            l_dlv_req_action_rec.action_name                :=  l_dlv_req_action_tbl(i_proc1).action_name                ;
4244            l_dlv_req_action_rec.proc_finnancial_task_id    :=  l_dlv_req_action_tbl(i_proc1).proc_finnancial_task_id    ;
4245            l_dlv_req_action_rec.destination_type_code      :=  l_dlv_req_action_tbl(i_proc1).destination_type_code      ;
4246            l_dlv_req_action_rec.receiving_org_id           :=  l_dlv_req_action_tbl(i_proc1).receiving_org_id           ;
4247            l_dlv_req_action_rec.receiving_location_id      :=  l_dlv_req_action_tbl(i_proc1).receiving_location_id      ;
4248            l_dlv_req_action_rec.po_need_by_date            :=  l_dlv_req_action_tbl(i_proc1).po_need_by_date            ;
4249            l_dlv_req_action_rec.vendor_id                  :=  l_dlv_req_action_tbl(i_proc1).vendor_id                  ;
4250            l_dlv_req_action_rec.vendor_site_id             :=  l_dlv_req_action_tbl(i_proc1).vendor_site_id             ;
4251 --         l_dlv_req_action_rec.project_currency           :=  l_dlv_req_action_tbl(i_proc1).project_currency           ;
4252            l_dlv_req_action_rec.quantity                   :=  l_dlv_req_action_tbl(i_proc1).quantity                   ;
4253            l_dlv_req_action_rec.unit_price                 :=  l_dlv_req_action_tbl(i_proc1).unit_price                 ;
4254            l_dlv_req_action_rec.exchange_rate_type         :=  l_dlv_req_action_tbl(i_proc1).exchange_rate_type         ;
4255            l_dlv_req_action_rec.exchange_rate_date         :=  l_dlv_req_action_tbl(i_proc1).exchange_rate_date         ;
4256            l_dlv_req_action_rec.exchange_rate              :=  l_dlv_req_action_tbl(i_proc1).exchange_rate              ;
4257            l_dlv_req_action_rec.expenditure_type           :=  l_dlv_req_action_tbl(i_proc1).expenditure_type           ;
4258            l_dlv_req_action_rec.expenditure_org_id         :=  l_dlv_req_action_tbl(i_proc1).expenditure_org_id         ;
4259            l_dlv_req_action_rec.expenditure_item_date      :=  l_dlv_req_action_tbl(i_proc1).expenditure_item_date      ;
4260            l_dlv_req_action_rec.requisition_line_type_id   :=  l_dlv_req_action_tbl(i_proc1).requisition_line_type_id   ;
4261            l_dlv_req_action_rec.category_id                :=  l_dlv_req_action_tbl(i_proc1).category_id                ;
4262            l_dlv_req_action_rec.ready_to_procure_flag      :=  l_dlv_req_action_tbl(i_proc1).ready_to_procure_flag      ;
4263            l_dlv_req_action_rec.initiate_procure_flag      :=  l_dlv_req_action_tbl(i_proc1).initiate_procure_flag      ;
4264            l_dlv_req_action_rec.uom_code                   :=  l_dlv_req_action_tbl(i_proc1).uom_code                   ;
4265            l_dlv_req_action_rec.currency                   :=  l_dlv_req_action_tbl(i_proc1).currency                   ;
4266 
4267            oke_amg_grp.manage_dlv_action
4268               (  p_api_version          =>    p_api_version
4269               , p_init_msg_list         =>    FND_API.G_FALSE
4270               , p_commit                =>    p_commit
4271               , p_action                =>    l_action
4272               , p_dlv_action_type       =>    g_dlv_action_proc
4273               , p_master_inv_org_id     =>    l_org_id
4274               , p_item_dlv              =>    l_item_dlv
4275               , p_dlv_ship_action_rec   =>    l_dlv_ship_action_rec_b
4276               , p_dlv_req_action_rec    =>    l_dlv_req_action_rec
4277               , x_return_status         =>    x_return_status
4278               , x_msg_data              =>    x_msg_data
4279               , x_msg_count             =>    x_msg_count
4280               );
4281 
4282        IF  p_debug_mode = 'Y' THEN
4283               pa_debug.write(g_module_name,'Returned from oke_amg_grp.manage_dlv_action for proc action ['||x_return_status||']',5);
4284            END IF;
4285 
4286            i_proc1 := l_dlv_req_action_tbl.next(i_proc1);
4287 
4288       END LOOP;
4289 
4290     END IF;
4291 
4292   --  Invoke the API to create event for billing actions
4293     IF ( i_bill > 0 ) THEN
4294         IF ( p_insert_or_update = g_insert) THEN
4295 
4296            Pa_Event_Pub.create_event
4297            (  p_api_version_number   =>   p_api_version
4298              ,p_commit               =>   p_commit
4299              ,p_init_msg_list        =>   FND_API.G_FALSE
4300              ,p_pm_product_code      =>   l_pm_source_code
4301              ,p_event_in_tbl         =>   l_event_in_tbl
4302              ,p_event_out_tbl        =>   l_event_out_tbl
4303              ,p_msg_count            =>   x_msg_count
4304              ,p_msg_data             =>   x_msg_data
4305              ,p_return_status        =>   x_return_status
4306            );
4307 
4308           IF  p_debug_mode = 'Y' THEN
4309               pa_debug.write(g_module_name,'Returned from Pa_Event_Pub.create_event for billing action ['||x_return_status||']',5);
4310            END IF;
4311 
4312           IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4313                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4314           ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
4315                RAISE  FND_API.G_EXC_ERROR;
4316           END IF;
4317 
4318        ELSIF ( p_insert_or_update = g_update) THEN
4319 
4320          Pa_Event_Pub.Update_Event
4321           (   p_api_version_number   =>   p_api_version
4322             , p_commit               =>   p_commit
4323             , p_init_msg_list        =>   FND_API.G_FALSE
4324             , p_pm_product_code      =>   l_pm_source_code
4325             , p_event_in_tbl         =>   l_event_in_tbl
4326             , p_event_out_tbl        =>   l_event_out_tbl
4327             , p_msg_count            =>   x_msg_count
4328             , p_msg_data             =>   x_msg_data
4329             , p_return_status        =>   x_return_status
4330            );
4331 
4332            IF  p_debug_mode = 'Y' THEN
4333               pa_debug.write(g_module_name,'Returned from Pa_Event_Pub.update_event for billing action ['||x_return_status||']',5);
4334            END IF;
4335 
4336           IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4337                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4338           ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
4339                RAISE  FND_API.G_EXC_ERROR;
4340           END IF;
4341 
4342       END IF; -- p_insert_or_update values
4343     END IF;   -- i_bill > 0
4344 
4345     IF  p_debug_mode = 'Y' THEN
4346         pa_debug.reset_curr_function;
4347         pa_debug.write(g_module_name,l_api_name||': Exiting without error',5);
4348     END IF;
4349 
4350  EXCEPTION
4351    WHEN FND_API.G_EXC_ERROR  THEN
4352       IF (p_commit = FND_API.G_TRUE) THEN
4353          ROLLBACK TO create_dlvr_actions_wrapper;
4354       END IF;
4355       x_return_status := FND_API.G_RET_STS_ERROR;
4356       l_msg_count := FND_MSG_PUB.count_msg;
4357 
4358       IF l_msg_count = 1 AND x_msg_data IS NULL
4359       THEN
4360            PA_INTERFACE_UTILS_PUB.get_messages
4361                (p_encoded        => FND_API.G_FALSE,
4362                 p_msg_index      => 1,
4363                 p_msg_count      => x_msg_count,
4364                 p_msg_data       => l_msg_data,
4365                 p_data           => l_data,
4366                 p_msg_index_out  => l_msg_index_out);
4367 
4368        x_msg_data := l_data;
4369            x_msg_count := l_msg_count;
4370      ELSE
4371           x_msg_count := l_msg_count;
4372 
4373      END IF;
4374 
4375      IF  p_debug_mode = 'Y' THEN
4376           pa_debug.reset_curr_function;
4377           pa_debug.write(g_module_name,l_api_name||': Inside G_EXC_ERROR exception',5);
4378      END IF;
4379 
4380   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
4381      IF (p_commit = FND_API.G_TRUE) THEN
4382         ROLLBACK TO create_dlvr_actions_wrapper;
4383      END IF;
4384      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4385      l_msg_count := FND_MSG_PUB.count_msg;
4386 
4387      IF l_msg_count = 1 AND x_msg_data IS NULL
4388      THEN
4389            PA_INTERFACE_UTILS_PUB.get_messages
4390                (p_encoded        => FND_API.G_FALSE,
4391                 p_msg_index      => 1,
4392                 p_msg_count      => x_msg_count,
4393                 p_msg_data       => l_msg_data,
4394                 p_data           => l_data,
4395                 p_msg_index_out  => l_msg_index_out);
4396 
4397        x_msg_data := l_data;
4398            x_msg_count := l_msg_count;
4399      ELSE
4400           x_msg_count := l_msg_count;
4401 
4402      END IF;
4403 
4404      IF  p_debug_mode = 'Y' THEN
4405           pa_debug.reset_curr_function;
4406           pa_debug.write(g_module_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
4407      END IF;
4408 
4409    WHEN OTHERS THEN
4410       IF (p_commit = FND_API.G_TRUE) THEN
4411          ROLLBACK TO create_dlvr_actions_wrapper;
4412       END IF;
4413       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4414       x_msg_count := 1;
4415       x_msg_data := SQLERRM;
4416 
4417       IF p_debug_mode = 'Y' THEN
4418           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
4419           pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
4420           pa_debug.reset_curr_function;
4421       END IF;
4422 
4423 
4424       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
4425         FND_MSG_PUB.add_exc_msg
4426                    ( p_pkg_name            => G_PKG_NAME
4427                    , p_procedure_name      => l_api_name   );
4428       END IF;
4429   END  Create_Dlvr_Actions_Wrapper;
4430 -------3435905 : FP M : Deliverables Changes For AMG -END--------------------
4431 
4432 PROCEDURE RUN_ACTION_CONC_PROCESS
4433 (
4434  errbuf                 OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4435 ,retcode                OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4436 ,p_function              IN     pa_lookups.lookup_code%TYPE
4437 ,p_project_number_from   IN     pa_projects_all.segment1%TYPE := NULL
4438 ,p_project_number_to     IN     pa_projects_all.segment1%TYPE := NULL
4439 )
4440 IS
4441 l_project_id_tbl             SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE() ;
4442 l_count                      NUMBER ;
4443 l_request_id                 pa_proj_elem_ver_structure.conc_request_id%TYPE;
4444 
4445 l_debug_mode                 VARCHAR2(10);
4446 l_debug_level3               NUMBER := 3;
4447 l_msg_count                  NUMBER := 0;
4448 l_msg_data                   VARCHAR2(2000);
4449 l_data                       VARCHAR2(2000);
4450 l_msg_index_out              NUMBER;
4451 l_return_status              VARCHAR2(2000);
4452 l_error_message_code         VARCHAR2(2000);
4453 -- Added for Bug Number 4907103
4454 l_project_number_from    pa_projects_all.segment1%TYPE :=nvl(p_project_number_from,p_project_number_to);
4455 l_project_number_to pa_projects_all.segment1%TYPE :=nvl(p_project_number_to,p_project_number_from) ;
4456 -- 3752898
4457 -- We need this variable only for passing to OKE API
4458 -- Though they dont have any logic as of now to re-initialise Message stack if l_init_msg_list is TRUE ,
4459 -- Its not correct to initialise this variable as TRUE .By default this value should be FALSE
4460 l_init_msg_list              VARCHAR2(20) := FND_API.G_FALSE ;
4461 
4462 l_valid                      VARCHAR2(1);
4463 
4464 /* Commented for Bug Number 4907103
4465 CURSOR c_project_id_range IS
4466 SELECT proj.project_id
4467 FROM PA_PROJECTS_ALL proj
4468 WHERE segment1 between nvl(p_project_number_from,p_project_number_to)
4469                    and nvl(p_project_number_to,p_project_number_from) ;
4470 */
4471 -- Changed  for Bug Number 4907103
4472 CURSOR c_project_id_range IS
4473 SELECT proj.project_id
4474 FROM PA_PROJECTS_ALL proj
4475 WHERE segment1 between l_project_number_from and l_project_number_to;
4476 -- End of BugNumber 4907103
4477 CURSOR c_valid_project_number_entry(l_project_number IN pa_projects_all.segment1%TYPE) IS
4478 SELECT 'Y'
4479 FROM PA_PROJECTS_ALL
4480 WHERE segment1 = l_project_number;
4481 
4482 BEGIN
4483 
4484  -- Set the error stack.
4485 pa_debug.set_err_stack('PA_ACTIONS_PUB.RUN_ACTION_CONC_PROCESS');
4486 
4487 -- Get the Debug mode into local variable and set it to 'Y'if its NULL
4488 l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
4489 
4490 l_request_id  := FND_GLOBAL.CONC_REQUEST_ID;
4491 retcode       := '0';
4492 errbuf        := NULL;
4493 
4494  -- Initialize the return status to success
4495  l_return_status := FND_API.G_RET_STS_SUCCESS;
4496  pa_debug.set_process('PLSQL','LOG',l_debug_mode);
4497 
4498 IF l_debug_mode = 'Y' THEN
4499      pa_debug.set_curr_function( p_function   => 'RUN_ACTION_CONC_PROCESS',
4500                                  p_debug_mode => l_debug_mode );
4501      pa_debug.g_err_stage:= 'Entering RUN_ACTION_CONC_PROCESS : ' || l_request_id;
4502      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4503 END IF;
4504 
4505 --Printing Input Parameters
4506 
4507 IF l_debug_mode = 'Y' THEN
4508      pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Function is :' || p_function ;
4509      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4510      pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Project Number From is :' || p_project_number_from ;
4511      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4512      pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Project Number To is :' || p_project_number_to ;
4513      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4514 END IF;
4515 
4516 --Valid Parameter Validations
4517 IF ( (p_project_number_from IS NOT NULL) OR (p_project_number_to IS NOT NULL) ) THEN
4518      IF p_project_number_from IS NOT NULL THEN
4519           OPEN c_valid_project_number_entry(p_project_number_from) ;
4520           FETCH c_valid_project_number_entry INTO l_valid ;
4521 
4522           IF c_valid_project_number_entry%NOTFOUND THEN
4523                IF l_debug_mode = 'Y' THEN
4524                     pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Invalid value entered for Project Number From';
4525                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4526                END IF;
4527                l_return_status := FND_API.G_RET_STS_ERROR;
4528                PA_UTILS.ADD_MESSAGE
4529                 (p_app_short_name => 'PA',
4530                      p_msg_name       => 'PA_INV_PARAM_PASSED');
4531                CLOSE c_valid_project_number_entry ;
4532                RAISE Invalid_Arg_Exc_Dlv;
4533           END IF ;
4534      ELSE
4535           OPEN c_valid_project_number_entry(p_project_number_to) ;
4536           FETCH c_valid_project_number_entry INTO l_valid ;
4537 
4538           IF c_valid_project_number_entry%NOTFOUND THEN
4539                IF l_debug_mode = 'Y' THEN
4540                     pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Invalid value entered for Project Number To' ;
4541                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4542                END IF;
4543                l_return_status := FND_API.G_RET_STS_ERROR;
4544                PA_UTILS.ADD_MESSAGE
4545                         (p_app_short_name => 'PA',
4546                          p_msg_name       => 'PA_INV_PARAM_PASSED');
4547            CLOSE c_valid_project_number_entry ;
4548                RAISE Invalid_Arg_Exc_Dlv;
4549           END IF ;
4550       END IF;
4551 END IF;
4552 
4553 --Business Rule Validations
4554 IF (p_function IS NULL) THEN
4555      IF l_debug_mode = 'Y' THEN
4556           pa_debug.g_err_stage:= 'Mandatory parameter to this API : Function is NULL';
4557           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4558      END IF;
4559      l_return_status := FND_API.G_RET_STS_ERROR;
4560      PA_UTILS.ADD_MESSAGE
4561            (p_app_short_name => 'PA',
4562             p_msg_name       => 'PA_INV_PARAM_PASSED');
4563      RAISE Invalid_Arg_Exc_Dlv;
4564 END IF;
4565 
4566 IF l_debug_mode = 'Y' THEN
4567     pa_debug.g_err_stage := 'Before doing cursor operation';
4568     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4569 END IF;
4570 
4571 OPEN   c_project_id_range ;
4572 FETCH  c_project_id_range  BULK COLLECT INTO l_project_id_tbl ;
4573 CLOSE  c_project_id_range;
4574 
4575 IF l_debug_mode = 'Y' THEN
4576     pa_debug.g_err_stage := 'After fetching the project id range into local table';
4577     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4578 END IF;
4579 
4580 IF(NVL(l_project_id_tbl.LAST,0) > 0) THEN
4581 
4582      IF l_debug_mode = 'Y' THEN
4583           pa_debug.g_err_stage := 'Project Id table is not empty';
4584           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4585      END IF;
4586 
4587     FOR l_count IN l_project_id_tbl.FIRST..l_project_id_tbl.LAST LOOP
4588 
4589         --Bug   3611598 If and Only if Deliverable is Enabled for a Project,Proceed
4590 
4591         PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Type_Exists
4592         (
4593           p_project_id     => l_project_id_tbl(l_count)
4594          ,p_structure_type => 'DELIVERABLE'
4595          ,x_return_status  => l_return_status
4596          ,x_error_message_code => l_error_message_code
4597         );
4598 
4599         IF l_return_status = 'E' THEN -- This API returns 'E' if Structure Type is Enabled
4600 
4601              IF p_function = 'DEMAND' THEN
4602                   OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4603                                   P_PROJECT_ID     => l_project_id_tbl(l_count)
4604                                  ,P_Task_ID        => null
4605                                  ,P_Init_Msg_List  => l_init_msg_list
4606                                  ,X_RETURN_STATUS  => l_return_status
4607                                  ,X_MSG_COUNT      => l_msg_count
4608                                  ,X_MSG_DATA       => l_msg_data
4609                             );
4610                      IF l_debug_mode = 'Y' THEN
4611                           pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status ;
4612                           pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4613                           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4614                      END IF;
4615 
4616                      IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4617                           RAISE Invalid_Arg_Exc_Dlv ;
4618                      END IF ;
4619             ELSIF p_function = 'PROCUREMENT' THEN
4620              OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4621                             P_PROJECT_ID     => l_project_id_tbl(l_count)
4622                             ,P_Task_ID        => null
4623                             ,P_Init_Msg_List  => l_init_msg_list
4624                             ,X_RETURN_STATUS  => l_return_status
4625                             ,X_MSG_COUNT      => l_msg_count
4626                             ,X_MSG_DATA       => l_msg_data
4627                                          );
4628                     IF l_debug_mode = 'Y' THEN
4629                              pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4630                              pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4631                              pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4632                     END IF;
4633 
4634                     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4635                              RAISE Invalid_Arg_Exc_Dlv ;
4636                     END IF ;
4637 
4638              ELSIF p_function = 'BOTH' THEN
4639                  OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4640                                    P_PROJECT_ID     => l_project_id_tbl(l_count)
4641                                   ,P_Task_ID        => null
4642                                   ,P_Init_Msg_List  => l_init_msg_list
4643                                   ,X_RETURN_STATUS  => l_return_status
4644                                   ,X_MSG_COUNT      => l_msg_count
4645                                   ,X_MSG_DATA       => l_msg_data
4646                                );
4647                         IF l_debug_mode = 'Y' THEN
4648                              pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status;
4649                              pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4650                              pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4651                         END IF;
4652 
4653                     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4654                          RAISE Invalid_Arg_Exc_Dlv ;
4655                     END IF ;
4656                     OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4657                             P_PROJECT_ID     => l_project_id_tbl(l_count)
4658                             ,P_Task_ID        => null
4659                             ,P_Init_Msg_List  => l_init_msg_list
4660                             ,X_RETURN_STATUS  => l_return_status
4661                             ,X_MSG_COUNT      => l_msg_count
4662                             ,X_MSG_DATA       => l_msg_data
4663                             );
4664                     IF l_debug_mode = 'Y' THEN
4665                              pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4666                              pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4667                              pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4668                     END IF;
4669 
4670                     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4671                          RAISE Invalid_Arg_Exc_Dlv ;
4672                     END IF ;
4673 
4674              END IF;
4675 
4676         END IF;
4677 
4678     END LOOP;
4679      IF l_debug_mode = 'Y' THEN
4680           pa_debug.g_err_stage := 'After Calling OKE API for all the actions (passed project id)';
4681           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4682      END IF;
4683 
4684 ELSE
4685 
4686      IF l_debug_mode = 'Y' THEN
4687           pa_debug.g_err_stage := 'Here,No Project Id range is entered';
4688           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4689      END IF;
4690 
4691     IF p_function = 'DEMAND' THEN
4692 
4693                IF l_debug_mode = 'Y' THEN
4694                     pa_debug.g_err_stage := 'Selected Option is Initiate Demand(project_id is null)';
4695                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4696                END IF;
4697 
4698              OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4699                              P_PROJECT_ID     => null
4700                             ,P_Task_ID        => null
4701                             ,P_Init_Msg_List  => l_init_msg_list
4702                             ,X_RETURN_STATUS  => l_return_status
4703                             ,X_MSG_COUNT      => l_msg_count
4704                             ,X_MSG_DATA       => l_msg_data
4705                             );
4706                IF l_debug_mode = 'Y' THEN
4707                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status;
4708                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4709                END IF;
4710 
4711                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4712                 RAISE Invalid_Arg_Exc_Dlv ;
4713             END IF ;
4714 
4715      ELSIF p_function = 'PROCUREMENT' THEN
4716 
4717           IF l_debug_mode = 'Y' THEN
4718           pa_debug.g_err_stage := 'Selected Option is Initiate Procurement(project_id is null)';
4719           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4720           END IF;
4721              OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4722                             P_PROJECT_ID     => null
4723                             ,P_Task_ID        => null
4724                             ,P_Init_Msg_List  => l_init_msg_list
4725                             ,X_RETURN_STATUS  => l_return_status
4726                             ,X_MSG_COUNT      => l_msg_count
4727                             ,X_MSG_DATA       => l_msg_data
4728                             );
4729                IF l_debug_mode = 'Y' THEN
4730                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4731                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4732                END IF;
4733 
4734 
4735                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4736                 RAISE Invalid_Arg_Exc_Dlv ;
4737             END IF ;
4738     ELSIF p_function = 'BOTH' THEN
4739 
4740                IF l_debug_mode = 'Y' THEN
4741                     pa_debug.g_err_stage := 'Selected Option is All(project_id is null)';
4742                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4743                END IF;
4744 
4745              OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4746                                              P_PROJECT_ID     => null
4747                             ,P_Task_ID        => null
4748                             ,P_Init_Msg_List  => l_init_msg_list
4749                                 ,X_RETURN_STATUS  => l_return_status
4750                                 ,X_MSG_COUNT      => l_msg_count
4751                             ,X_MSG_DATA       => l_msg_data
4752                             );
4753                IF l_debug_mode = 'Y' THEN
4754                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status;
4755                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4756                END IF;
4757 
4758                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4759                 RAISE Invalid_Arg_Exc_Dlv ;
4760             END IF ;
4761 
4762                OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4763                                                       P_PROJECT_ID     => null
4764                                                      ,P_Task_ID        => null
4765                                                      ,P_Init_Msg_List  => l_init_msg_list
4766                                                      ,X_RETURN_STATUS  => l_return_status
4767                                                      ,X_MSG_COUNT      => l_msg_count
4768                                                      ,X_MSG_DATA       => l_msg_data
4769                                                 );
4770 
4771                IF l_debug_mode = 'Y' THEN
4772                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4773                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4774                END IF;
4775 
4776                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4777                 RAISE Invalid_Arg_Exc_Dlv ;
4778             END IF ;
4779          END IF;
4780 
4781 END IF;
4782 
4783 IF l_debug_mode = 'Y' THEN
4784      pa_debug.g_err_stage:= 'Exiting RUN_ACTION_CONC_PROCESS';
4785      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4786      pa_debug.reset_err_stack;
4787      pa_debug.reset_curr_function;    --Added for bug 4945876
4788 END IF;
4789 
4790 EXCEPTION
4791 
4792 WHEN Invalid_Arg_Exc_Dlv THEN
4793      l_return_status := FND_API.G_RET_STS_ERROR;
4794      l_msg_count := FND_MSG_PUB.count_msg;
4795      retcode     := '-1';
4796 
4797      IF l_debug_mode = 'Y' THEN
4798         pa_debug.g_err_stage := 'Inside Invalid Argument exception of RUN_ACTION_CONC_PROCESS';
4799         pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' ||  pa_debug.g_err_stage);
4800      END IF;
4801 
4802      IF  c_project_id_range%ISOPEN THEN
4803           CLOSE c_project_id_range ;
4804      END IF;
4805 
4806      IF c_valid_project_number_entry%ISOPEN THEN
4807           CLOSE c_valid_project_number_entry ;
4808      END IF;
4809 
4810      IF c_valid_project_number_entry%ISOPEN THEN
4811           CLOSE c_valid_project_number_entry ;
4812      END IF ;
4813 
4814      IF l_msg_count >= 1 THEN
4815            PA_INTERFACE_UTILS_PUB.get_messages
4816                (p_encoded        => FND_API.G_TRUE,
4817                 p_msg_index      => 1,
4818                 p_msg_count      => l_msg_count,
4819                 p_msg_data       => l_msg_data,
4820                 p_data           => l_data,
4821                 p_msg_index_out  => l_msg_index_out);
4822                 errbuf := l_data;
4823      END IF;
4824 
4825      IF l_debug_mode = 'Y' THEN
4826           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_Stack);
4827           pa_debug.reset_err_stack;
4828 	  pa_debug.reset_curr_function;    --Added for bug 4945876
4829      END IF ;
4830      RAISE; /* Will have to raise since called as part of conc request .After Reports is built for the C.P no need for this raise */
4831 
4832 WHEN OTHERS THEN
4833      l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4834      retcode         := '-1';
4835      errbuf          := SQLERRM;
4836 
4837      IF  c_project_id_range%ISOPEN THEN
4838      CLOSE c_project_id_range ;
4839      END IF;
4840 
4841      IF c_valid_project_number_entry%ISOPEN THEN
4842           CLOSE c_valid_project_number_entry ;
4843      END IF;
4844 
4845      IF c_valid_project_number_entry%ISOPEN THEN
4846           CLOSE c_valid_project_number_entry ;
4847      END IF ;
4848 
4849      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
4850                      ,p_procedure_name  => 'RUN_ACTION_CONC_PROCESS'
4851                      ,p_error_text      => errbuf);
4852 
4853      IF l_debug_mode = 'Y' THEN
4854           pa_debug.g_err_stage:='Unexpected Error'||errbuf;
4855           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4856           pa_debug.reset_err_stack;
4857 	  pa_debug.reset_curr_function;    --Added for bug 4945876
4858      END IF;
4859 
4860      RAISE;
4861 END  RUN_ACTION_CONC_PROCESS ;
4862 
4863 
4864 -- SubProgram           : UPD_DLV_ACTIONS_IN_BULK_TM ( 3578694 )
4865 -- Type                 : PROCEDURE
4866 -- Purpose              : Public API to Update Deliverable Actions From TM Home Actions Page
4867 -- Note                 : Its a BULK API
4868 -- Assumptions          : None
4869 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
4870 -- ---------------------------  ---------    ----------      ---------    ---------------------------
4871 -- p_api_version                   IN          NUMBER            N      Standard Parameter
4872 -- p_init_msg_list                 IN          VARCHAR2          N      Standard Parameter
4873 -- p_commit                        IN          VARCHAR2          N      Standard Parameter
4874 -- p_validate_only                 IN          VARCHAR2          N      Standard Parameter
4875 -- p_validation_level              IN          NUMBER            N      Standard Parameter
4876 -- p_calling_module                IN          VARCHAR2          N      Standard Parameter
4877 -- p_debug_mode                    IN          VARCHAR2          N      Standard Parameter
4878 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
4879 -- p_name_tbl                      IN          PLSQL Table       N        Action Name
4880 -- p_manager_person_id_tbl         IN          PLSQL Table       N        Manager Id
4881 -- p_function_code_tbl             IN          PLSQL Table       N        Action Function
4882 -- p_due_date_tbl                  IN          PLSQL Table       N        Due Date
4883 -- p_completed_flag_tbl            IN          PLSQL Table       N        Completed Flag
4884 -- p_completion_date_tbl           IN          PLSQL Table       N        Completed Date
4885 -- p_description_tbl               IN          PLSQL Table       N        Description
4886 -- p_attribute_category_tbl        IN          PLSQL Table       N        DFF Field
4887 -- p_attribute1_tbl                IN          PLSQL Table       N        DFF Filed
4888 -- p_attribute2_tbl                IN          PLSQL Table       N        DFF Field
4889 -- p_attribute3_tbl                IN          PLSQL Table       N        DFF Filed
4890 -- p_attribute4_tbl                IN          PLSQL Table       N        DFF Field
4891 -- p_attribute5_tbl                IN          PLSQL Table       N        DFF Filed
4892 -- p_attribute6_tbl                IN          PLSQL Table       N        DFF Field
4893 -- p_attribute7_tbl                IN          PLSQL Table       N        DFF Filed
4894 -- p_attribute8_tbl                IN          PLSQL Table       N        DFF Field
4895 -- p_attribute9_tbl                IN          PLSQL Table       N        DFF Filed
4896 -- p_attribute10_tbl               IN          PLSQL Table       N        DFF Field
4897 -- p_attribute11_tbl               IN          PLSQL Table       N        DFF Filed
4898 -- p_attribute12_tbl               IN          PLSQL Table       N        DFF Field
4899 -- p_attribute13_tbl               IN          PLSQL Table       N        DFF Filed
4900 -- p_attribute14_tbl               IN          PLSQL Table       N        DFF Field
4901 -- p_attribute15_tbl               IN          PLSQL Table       N        DFF Filed
4902 -- p_element_version_id_tbl        IN          PLSQL Table       N        Action VErsion Id
4903 -- p_proj_element_id_tbl           IN          PLSQL Table       N        Action Element Id
4904 -- p_record_version_number_tbl     IN          PLSQL Table       N        Record Version NUmber
4905 -- p_project_id_tbl                IN          PLSQL Table       N        Project Id
4906 -- p_object_id_tbl                 IN          PLSQL Table       Y        Parent Id
4907 -- p_object_version_id_tbl         IN          PLSQL Table       N        Parent Version ID
4908 -- p_object_type                   IN          VARCHAR2          Y        Parent Type
4909 -- p_pm_source_code                IN          NUMBER            N        PM Source Code
4910 -- p_pm_source_reference           IN          VARCHAR2          N        PM Source Reference
4911 -- p_insert_or_update              IN          VARCHAR2          N        Identifies the API Mode
4912 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
4913 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
4914 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
4915 
4916 PROCEDURE UPD_DLV_ACTIONS_IN_BULK_TM
4917      (p_api_version               IN NUMBER    :=1.0
4918      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
4919      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
4920      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
4921      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
4922      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
4923      ,p_debug_mode                IN VARCHAR2  :='N'
4924      ,p_max_msg_count             IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4925      ,p_name_tbl                  IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4926      ,p_manager_person_id_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4927      ,p_function_code_tbl         IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
4928      ,p_due_date_tbl              IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
4929      ,p_completed_flag_tbl        IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()
4930      ,p_completion_date_tbl       IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
4931      ,p_description_tbl           IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE()
4932      ,p_attribute_category_tbl    IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
4933      ,p_attribute1_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4934      ,p_attribute2_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4935      ,p_attribute3_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4936      ,p_attribute4_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4937      ,p_attribute5_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4938      ,p_attribute6_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4939      ,p_attribute7_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4940      ,p_attribute8_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4941      ,p_attribute9_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4942      ,p_attribute10_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4943      ,p_attribute11_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4944      ,p_attribute12_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4945      ,p_attribute13_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4946      ,p_attribute14_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4947      ,p_attribute15_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4948      ,p_element_version_id_tbl    IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4949      ,p_proj_element_id_tbl       IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4950      ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4951      ,p_project_id_tbl            IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4952      ,p_object_id_tbl             IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4953      ,p_object_version_id_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4954      ,p_object_type               IN PA_LOOKUPS.LOOKUP_CODE%TYPE
4955      ,p_pm_source_code            IN pa_proj_elements.pm_source_code%TYPE := null
4956      ,p_pm_source_reference       IN pa_proj_elements.pm_source_reference%TYPE := null
4957      ,p_pm_source_reference_tbl   IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
4958      ,p_insert_or_update          IN VARCHAR2 := 'UPDATE'
4959      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4960      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4961      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4962      )
4963 IS
4964 
4965      l_debug_mode                 VARCHAR2(10);
4966      l_msg_count                  NUMBER ;
4967      l_data                       VARCHAR2(2000);
4968      l_msg_data                   VARCHAR2(2000);
4969      l_msg_index_out              NUMBER;
4970 
4971      l_upd_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4972      l_upd_mgr_person_id_tbl      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4973      l_upd_function_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
4974      l_upd_due_date_tbl           SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
4975      l_upd_comp_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()      ;
4976      l_upd_comp_date_tbl          SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
4977      l_upd_element_id_tbl         SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4978      l_upd_element_ver_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4979      l_upd_rec_ver_num_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4980      l_upd_description_tbl        SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE();
4981      l_upd_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()    ;
4982      l_upd_attribute1_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4983      l_upd_attribute2_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4984      l_upd_attribute3_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4985      l_upd_attribute4_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4986      l_upd_attribute5_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4987      l_upd_attribute6_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4988      l_upd_attribute7_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4989      l_upd_attribute8_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4990      l_upd_attribute9_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4991      l_upd_attribute10_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4992      l_upd_attribute11_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4993      l_upd_attribute12_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4994      l_upd_attribute13_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4995      l_upd_attribute14_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4996      l_upd_attribute15_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4997 
4998      j_upd NUMBER ;
4999 
5000      l_name_tbl                   SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
5001      l_completed_flag_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE()      ;
5002      l_completion_date_tbl        SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
5003      l_description_tbl            SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE();
5004      l_function_code_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
5005      l_due_date_tbl               SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
5006      l_element_version_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
5007      l_proj_element_id_tbl        SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
5008      l_user_action_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
5009      l_action_owner_id_tbl        SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
5010      l_pm_source_reference_tbl    SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
5011      l_object_id                  NUMBER;
5012      l_object_version_id          NUMBER;
5013      l_project_id                 NUMBER;
5014 
5015      l_return_status              VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
5016      l_count NUMBER;
5017 
5018 BEGIN
5019 
5020      -- this api will be called from TM Home Update Actions Page
5021      -- popluate plsql table, having single row, and pass this table
5022      -- to validation actions api for validations
5023      -- if validations are successful, call UPDATE_DLV_ACTIONS_IN_BULK api
5024 
5025      x_msg_count := 0;
5026      x_return_status := FND_API.G_RET_STS_SUCCESS;
5027      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5028 
5029      IF l_debug_mode = 'Y' THEN
5030           PA_DEBUG.set_curr_function( p_function   => 'UPD_DLV_ACTIONS_IN_BULK_TM',
5031                                       p_debug_mode => l_debug_mode );
5032           pa_debug.g_err_stage:= 'Inside UPD_DLV_ACTIONS_IN_BULK_TM ';
5033           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
5034      END IF;
5035 
5036      IF l_debug_mode = 'Y' THEN
5037           pa_debug.g_err_stage:= 'Printing Input parameters';
5038           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
5039           pa_debug.write(g_module_name,'p_insert_or_update'||':'||p_insert_or_update,3) ;
5040      END IF;
5041 
5042      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
5043       FND_MSG_PUB.initialize;
5044      END IF;
5045 
5046      IF (p_commit = FND_API.G_TRUE) THEN
5047       savepoint CR_UP_DLV_ACTIONS_SP ;
5048      END IF;
5049 
5050      -- Call the validation API. It will
5051      -- perform all the validation.
5052      IF l_debug_mode = 'Y' THEN
5053           pa_debug.g_err_stage:= 'Calling PA_ACTIONS_PUB.VALIDATE_ACTIONS';
5054           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
5055      END IF ;
5056 
5057      l_name_tbl.extend;
5058      l_completed_flag_tbl.extend;
5059      l_completion_date_tbl.extend;
5060      l_description_tbl.extend;
5061      l_function_code_tbl.extend;
5062      l_due_date_tbl.extend;
5063      l_element_version_id_tbl.extend;
5064      l_proj_element_id_tbl.extend;
5065      l_user_action_tbl.extend;
5066      l_action_owner_id_tbl.extend;
5067      l_pm_source_reference_tbl.extend;
5068 
5069      l_count:= 0;
5070 
5071      IF l_debug_mode = 'Y' THEN
5072           pa_debug.write(g_module_name,'No of actions ' || p_name_tbl.last,3) ;
5073      END IF ;
5074 
5075      IF nvl(p_name_tbl.last,0) >= 1 THEN -- Only if something is fetched
5076 
5077          l_count := l_count + 1;
5078 
5079          FOR i in p_name_tbl.FIRST .. p_name_tbl.LAST LOOP
5080 
5081              IF l_debug_mode = 'Y' THEN
5082                   pa_debug.write(g_module_name,'i ' || i,3) ;
5083              END IF ;
5084 
5085              l_name_tbl(l_count)                    := p_name_tbl(i);
5086 
5087              l_completed_flag_tbl(l_count)          := p_completed_flag_tbl(i);
5088              l_completion_date_tbl(l_count)         := p_completion_date_tbl(i);
5089              l_description_tbl(l_count)             := p_description_tbl(i);
5090              l_function_code_tbl(l_count)           := p_function_code_tbl(i);
5091              l_due_date_tbl(l_count)                := p_due_date_tbl(i);
5092              l_element_version_id_tbl(l_count)      := p_element_version_id_tbl(i);
5093              l_proj_element_id_tbl(l_count)         := p_proj_element_id_tbl(i);
5094              l_user_action_tbl(l_count)             := 'MODIFIED';
5095              l_action_owner_id_tbl(l_count)         := p_manager_person_id_tbl(i);
5096              l_object_id                            := p_object_id_tbl(i);
5097              l_object_version_id                    := p_object_version_id_tbl(i);
5098              l_project_id                           := p_project_id_tbl(i);
5099 
5100              IF l_debug_mode = 'Y' THEN
5101                   pa_debug.write(g_module_name,' validating action p_element_version_id_tbl ' || p_element_version_id_tbl(i) ,3) ;
5102                   pa_debug.write(g_module_name,' validating action ( version id ) ' || l_element_version_id_tbl(l_count) ,3) ;
5103              END IF ;
5104 
5105              PA_ACTIONS_PUB.VALIDATE_ACTIONS
5106                     ( p_init_msg_list         => FND_API.G_FALSE
5107                      ,p_debug_mode            => l_debug_mode
5108                      ,p_name_tbl              => l_name_tbl
5109                      ,p_completed_flag_tbl    => l_completed_flag_tbl
5110                      ,p_completion_date_tbl   => l_completion_date_tbl
5111                      ,p_description_tbl       => l_description_tbl
5112                      ,p_function_code_tbl     => l_function_code_tbl
5113                      ,p_due_date_tbl          => l_due_date_tbl
5114                      ,p_element_version_id_tbl=> l_element_version_id_tbl
5115                      ,p_proj_element_id_tbl   => l_proj_element_id_tbl
5116                      ,p_user_action_tbl       => l_user_action_tbl
5117                      ,p_object_id             => l_object_id
5118                      ,p_object_version_id     => l_object_version_id
5119                      ,p_object_type           => p_object_type
5120                      ,p_project_id            => l_project_id
5121                      ,p_action_owner_id_tbl   => l_action_owner_id_tbl
5122                      ,p_carrying_out_org_id   => NULL
5123                      ,p_action_reference_tbl  => p_pm_source_reference_tbl
5124                      ,p_deliverable_id        => l_object_id
5125                      ,p_insert_or_update      => 'UPDATE'
5126                      ,x_return_status         => x_return_status
5127                      ,x_msg_count             => x_msg_count
5128                      ,x_msg_data              => x_msg_data
5129                    ) ;
5130 
5131                    IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5132                         l_return_status := FND_API.G_RET_STS_ERROR;
5133                    END IF;
5134 
5135          END LOOP ;
5136 
5137      END IF;
5138 
5139      IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5140               RAISE Invalid_Arg_Exc_Dlv ;
5141      END IF ;
5142 
5143      -- Loop through p_name_tbl to find out the
5144      -- actions which are updated by user.
5145 
5146      -- Initialize the local variable
5147      j_upd := 0 ;
5148 
5149      IF nvl(p_name_tbl.last,0) >= 1 THEN -- Only if something is fetched
5150 
5151           FOR i in p_name_tbl.FIRST .. p_name_tbl.LAST LOOP
5152 
5153                     IF l_debug_mode = 'Y' THEN
5154                          pa_debug.g_err_stage:= 'Update Operation';
5155                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5156                     END IF;
5157 
5158                     j_upd:=j_upd+1 ;
5159 
5160                     -- Get all the actions which are updated, into
5161                     -- local plsql tables, which will be used to
5162                     -- call PLSQL bulk API for update.
5163 
5164                     -- extend the size of PLSQL table
5165                     l_upd_element_id_tbl.extend        ;
5166                     l_upd_element_ver_id_tbl.extend    ;
5167                     l_upd_rec_ver_num_id_tbl.extend    ;
5168                     l_upd_name_tbl.extend              ;
5169                     l_upd_function_code_tbl.extend     ;
5170                     l_upd_mgr_person_id_tbl.extend     ;
5171                     l_upd_due_date_tbl.extend          ;
5172                     l_upd_comp_flag_tbl.extend         ;
5173                     l_upd_comp_date_tbl.extend         ;
5174                     l_upd_attribute_category_tbl.extend;
5175                     l_upd_attribute1_tbl.extend        ;
5176                     l_upd_attribute2_tbl.extend        ;
5177                     l_upd_attribute3_tbl.extend        ;
5178                     l_upd_attribute4_tbl.extend        ;
5179                     l_upd_attribute5_tbl.extend        ;
5180                     l_upd_attribute6_tbl.extend        ;
5181                     l_upd_attribute7_tbl.extend        ;
5182                     l_upd_attribute8_tbl.extend        ;
5183                     l_upd_attribute9_tbl.extend        ;
5184                     l_upd_attribute10_tbl.extend       ;
5185                     l_upd_attribute11_tbl.extend       ;
5186                     l_upd_attribute12_tbl.extend       ;
5187                     l_upd_attribute13_tbl.extend       ;
5188                     l_upd_attribute14_tbl.extend       ;
5189                     l_upd_attribute15_tbl.extend       ;
5190                     l_upd_description_tbl.extend       ;
5191 
5192                     l_upd_element_id_tbl(j_upd)      := p_proj_element_id_tbl(i)           ;
5193                     l_upd_element_ver_id_tbl(j_upd)  := p_element_version_id_tbl(i)        ;
5194                     l_upd_rec_ver_num_id_tbl(j_upd)  := p_record_version_number_tbl(i)     ;
5195                     l_upd_name_tbl(j_upd)            := p_name_tbl(i)                      ;
5196                     l_upd_function_code_tbl(j_upd)   := p_function_code_tbl(i)             ;
5197 
5198 --                    IF p_object_type <> g_dlvr_types THEN // removed for bug# 3578694, not required condition
5199                          l_upd_mgr_person_id_tbl(j_upd)     := p_manager_person_id_tbl(i)  ;
5200                          l_upd_due_date_tbl(j_upd)          := p_due_date_tbl(i)           ;
5201                          l_upd_comp_flag_tbl(j_upd)         := p_completed_flag_tbl(i)     ;
5202                          l_upd_comp_date_tbl(j_upd)         := p_completion_date_tbl(i)    ;
5203                          l_upd_attribute_category_tbl(j_upd):= p_attribute_category_tbl(i) ;
5204                          l_upd_attribute1_tbl(j_upd)        := p_attribute1_tbl(i)         ;
5205                          l_upd_attribute2_tbl(j_upd)        := p_attribute2_tbl(i)         ;
5206                          l_upd_attribute3_tbl(j_upd)        := p_attribute3_tbl(i)         ;
5207                          l_upd_attribute4_tbl(j_upd)        := p_attribute4_tbl(i)         ;
5208                          l_upd_attribute5_tbl(j_upd)        := p_attribute5_tbl(i)         ;
5209                          l_upd_attribute6_tbl(j_upd)        := p_attribute6_tbl(i)         ;
5210                          l_upd_attribute7_tbl(j_upd)        := p_attribute7_tbl(i)         ;
5211                          l_upd_attribute8_tbl(j_upd)        := p_attribute8_tbl(i)         ;
5212                          l_upd_attribute9_tbl(j_upd)        := p_attribute9_tbl(i)         ;
5213                          l_upd_attribute10_tbl(j_upd)       := p_attribute10_tbl(i)        ;
5214                          l_upd_attribute11_tbl(j_upd)       := p_attribute11_tbl(i)        ;
5215                          l_upd_attribute12_tbl(j_upd)       := p_attribute12_tbl(i)        ;
5216                          l_upd_attribute13_tbl(j_upd)       := p_attribute13_tbl(i)        ;
5217                          l_upd_attribute14_tbl(j_upd)       := p_attribute14_tbl(i)        ;
5218                          l_upd_attribute15_tbl(j_upd)       := p_attribute15_tbl(i)        ;
5219                          l_upd_description_tbl(j_upd)       := p_description_tbl(i)        ;
5220 --                    END IF ;
5221 
5222 
5223           END LOOP ;
5224 
5225 
5226          -- Call Update API to perform the update operation
5227          IF j_upd > 0 THEN
5228 
5229                IF l_debug_mode = 'Y' THEN
5230                          pa_debug.g_err_stage:= 'Call UPDATE_DLV_ACTIONS_IN_BULK ';
5231                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5232                END IF;
5233 
5234                PA_ACTIONS_PUB.UPDATE_DLV_ACTIONS_IN_BULK
5235                     (p_api_version               => p_api_version
5236                     ,p_init_msg_list             => FND_API.G_FALSE
5237                     ,p_commit                    => p_commit
5238                     ,p_validate_only             => p_validate_only
5239                     ,p_validation_level          => p_validation_level
5240                     ,p_calling_module            => p_calling_module
5241                     ,p_debug_mode                => l_debug_mode
5242                     ,p_max_msg_count             => p_max_msg_count
5243                     ,p_name_tbl                  => l_upd_name_tbl
5244                     ,p_manager_person_id_tbl     => l_upd_mgr_person_id_tbl
5245                     ,p_function_code_tbl         => l_upd_function_code_tbl
5246                     ,p_due_date_tbl              => l_upd_due_date_tbl
5247                     ,p_completed_flag_tbl        => l_upd_comp_flag_tbl
5248                     ,p_completion_date_tbl       => l_upd_comp_date_tbl
5249                     ,p_description_tbl           => l_upd_description_tbl
5250                     ,p_attribute_category_tbl    => l_upd_attribute_category_tbl
5251                     ,p_attribute1_tbl            => l_upd_attribute1_tbl
5252                     ,p_attribute2_tbl            => l_upd_attribute2_tbl
5253                     ,p_attribute3_tbl            => l_upd_attribute3_tbl
5254                     ,p_attribute4_tbl            => l_upd_attribute4_tbl
5255                     ,p_attribute5_tbl            => l_upd_attribute5_tbl
5256                     ,p_attribute6_tbl            => l_upd_attribute6_tbl
5257                     ,p_attribute7_tbl            => l_upd_attribute7_tbl
5258                     ,p_attribute8_tbl            => l_upd_attribute8_tbl
5259                     ,p_attribute9_tbl            => l_upd_attribute9_tbl
5260                     ,p_attribute10_tbl           => l_upd_attribute10_tbl
5261                     ,p_attribute11_tbl           => l_upd_attribute11_tbl
5262                     ,p_attribute12_tbl           => l_upd_attribute12_tbl
5263                     ,p_attribute13_tbl           => l_upd_attribute13_tbl
5264                     ,p_attribute14_tbl           => l_upd_attribute14_tbl
5265                     ,p_attribute15_tbl           => l_upd_attribute15_tbl
5266                     ,p_element_version_id_tbl    => l_upd_element_ver_id_tbl
5267                     ,p_proj_element_id_tbl       => l_upd_element_id_tbl
5268                     ,p_record_version_number_tbl => l_upd_rec_ver_num_id_tbl
5269                     ,p_project_id                => NULL
5270                     ,p_object_id                 => NULL
5271                     ,p_object_version_id         => NULL
5272                     ,p_object_type               => p_object_type
5273                     ,p_pm_source_code            => p_pm_source_code
5274                     ,p_pm_source_reference       => p_pm_source_reference
5275                     ,p_carrying_out_organization_id => NULL
5276                     ,x_return_status             => x_return_status
5277                     ,x_msg_count                 => x_msg_count
5278                     ,x_msg_data                  => x_msg_data
5279                     ) ;
5280 
5281 
5282                IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5283                    RAISE Invalid_Arg_Exc_Dlv ;
5284                END IF ;
5285 
5286          END IF ;
5287 
5288 
5289          IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5290             RAISE Invalid_Arg_Exc_Dlv ;
5291          END IF ;
5292 
5293      END IF ;  -- Only if something is fetched
5294 
5295      IF l_debug_mode = 'Y' THEN
5296            pa_debug.g_err_stage:= 'Exiting UPD_DLV_ACTIONS_IN_BULK_TM' ;
5297            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5298            pa_debug.reset_curr_function;
5299      END IF;
5300 
5301 EXCEPTION
5302 WHEN Invalid_Arg_Exc_Dlv THEN
5303      x_return_status := FND_API.G_RET_STS_ERROR;
5304      l_msg_count := FND_MSG_PUB.count_msg;
5305 
5306      IF (p_commit = FND_API.G_TRUE) THEN
5307            ROLLBACK TO CR_UP_DLV_ACTIONS_SP;
5308      END IF ;
5309 
5310      IF l_debug_mode = 'Y' THEN
5311         pa_debug.g_err_stage := 'inside invalid arg exception of UPD_DLV_ACTIONS_IN_BULK_TM';
5312         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
5313      END IF;
5314 
5315      IF l_msg_count = 1 THEN
5316            PA_INTERFACE_UTILS_PUB.get_messages
5317                (p_encoded        => FND_API.G_TRUE,
5318                 p_msg_index      => 1,
5319                 p_msg_count      => l_msg_count,
5320                 p_msg_data       => l_msg_data,
5321                 p_data           => l_data,
5322                 p_msg_index_out  => l_msg_index_out);
5323            x_msg_data  := l_data;
5324            x_msg_count := l_msg_count;
5325      ELSE
5326             x_msg_count := l_msg_count;
5327      END IF;
5328      IF l_debug_mode = 'Y' THEN
5329        pa_debug.reset_curr_function;
5330      END IF ;
5331      RETURN;
5332 WHEN OTHERS THEN
5333      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5334      x_msg_count     := 1;
5335      x_msg_data      := SQLERRM;
5336 
5337      IF (p_commit = FND_API.G_TRUE) THEN
5338            ROLLBACK TO CR_UP_DLV_ACTIONS_SP;
5339      END IF ;
5340 
5341      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
5342                      ,p_procedure_name  => 'UPD_DLV_ACTIONS_IN_BULK_TM');
5343 
5344      IF p_debug_mode = 'Y' THEN
5345           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5346           pa_debug.write(g_module_name,'UPD_DLV_ACTIONS_IN_BULK_TM: '|| pa_debug.g_err_stage,5);
5347           pa_debug.reset_curr_function;
5348      END IF;
5349      RAISE;
5350 END UPD_DLV_ACTIONS_IN_BULK_TM ;
5351 
5352 
5353 /*=======================================================================
5354    This is a wrapper API that will launch the concurrent process
5355    PRC: Initiate Project Deliverable Actions
5356    For Initiating Demand as soon as a Project Is Approved,we need to
5357    call this Wrapper API whenever Project Status is changed to Approved.
5358 
5359    Please not that ,the Caller of this API should validate for the Project
5360    Status Change = Approved .
5361 
5362    So,The parameters that would be passed to this concurrent process are :
5363    1) 'Demand' and 2) The Project Number
5364   =======================================================================*/
5365 
5366 
5367 PROCEDURE RUN_ACTION_CONC_PROCESS_WRP
5368      (
5369       p_api_version               IN NUMBER    :=1.0
5370      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
5371      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
5372      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
5373      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
5374      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
5375      ,p_debug_mode                IN VARCHAR2  :='N'
5376      ,p_max_msg_count             IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5377      ,p_project_id                IN PA_PROJECTS_ALL.PROJECT_ID%TYPE
5378      ,p_project_number            IN PA_PROJECTS_ALL.SEGMENT1%TYPE  -- 3671408 added IN paramter
5379      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5380      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5381      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5382      )
5383      IS
5384      l_return_status              VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
5385      l_project_number             PA_PROJECTS_ALL.SEGMENT1%TYPE  ;
5386      l_status_code                PA_PROJECT_STATUSES.PROJECT_SYSTEM_STATUS_CODE%TYPE ;
5387      l_request_id                 PA_PROJ_ELEM_VER_STRUCTURE.CONC_REQUEST_ID%TYPE;
5388 
5389      l_debug_mode                 VARCHAR2(1);
5390      l_msg_count                  NUMBER ;
5391      l_data                       VARCHAR2(2000);
5392      l_msg_data                   VARCHAR2(2000);
5393      l_msg_index_out              NUMBER;
5394 
5395      -- 3671408 removed following cursor
5396      -- as project_number is been directly passed to api,
5397 /*
5398      CURSOR c_project_number_from IS
5399      SELECT SEGMENT1
5400      FROM   PA_PROJECTS_ALL
5401      WHERE  PROJECT_ID = p_project_id ;
5402 */
5403     -- THE FOLLOWING CURSOR WILL NOT BE USED ANYWHERE
5404      /*CURSOR c_project_sys_status_code IS
5405      SELECT PROJECT_SYSTEM_STATUS_CODE
5406      FROM PA_PROJECT_STATUSES pps,
5407                PA_PROJECTS_ALL pa
5408      WHERE pa.PROJECT_ID = p_project_id
5409        AND pps.PROJECT_STATUS_CODE = pa.PROJECT_STATUS_CODE ;
5410     */
5411      PRAGMA AUTONOMOUS_TRANSACTION;
5412 
5413      BEGIN
5414 
5415      x_msg_count := 0;
5416      x_return_status := FND_API.G_RET_STS_SUCCESS;
5417      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5418 
5419      IF l_debug_mode = 'Y' THEN
5420           pa_debug.g_err_stage:= 'Entering RUN_ACTION_CONC_PROCESS_WRP';
5421           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5422 
5423           pa_debug.set_curr_function( p_function   => 'RUN_ACTION_CONC_PROCESS_WRP',
5424                                       p_debug_mode => l_debug_mode );
5425      END IF;
5426 
5427      -- Initialise Message Stack
5428      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
5429       FND_MSG_PUB.initialize;
5430      END IF;
5431 
5432      -- Define Save Point
5433      IF (p_commit = FND_API.G_TRUE) THEN
5434       savepoint RUN_ACTION_CONC_PROCESS_WRP_SP ;
5435      END IF;
5436 
5437      --Printing Input Parameters
5438 
5439      IF l_debug_mode = 'Y' THEN
5440           pa_debug.g_err_stage:= 'The Project Id is :' || p_project_id ;
5441           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5442      END IF ;
5443 
5444      -- Validate Input parameters
5445      IF l_debug_mode = 'Y' THEN
5446           pa_debug.g_err_stage:= 'Validating Input parameters';
5447           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5448      END IF;
5449 
5450      IF p_project_id IS NULL THEN
5451           IF l_debug_mode = 'Y' THEN
5452                pa_debug.g_err_stage:= 'Mandatory parameter to this API : Project ID is NULL';
5453                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5454           END IF;
5455           l_return_status := FND_API.G_RET_STS_ERROR;
5456           PA_UTILS.ADD_MESSAGE
5457                 (p_app_short_name => 'PA',
5458                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5459           RAISE Invalid_Arg_Exc_Dlv;
5460      END IF;
5461 
5462      --Check for valid project id passed
5463      IF l_debug_mode = 'Y' THEN
5464          pa_debug.g_err_stage := 'Before doing cursor operation';
5465          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5466      END IF;
5467 
5468     -- 3671408 project_number is passed directly to the api
5469     -- removed below code to retrieve and validate project_number
5470 /*
5471      OPEN c_project_number_from;
5472      FETCH c_project_number_from INTO l_project_number;
5473 
5474      IF c_project_number_from%NOTFOUND THEN
5475           IF l_debug_mode = 'Y' THEN
5476                pa_debug.g_err_stage:= 'No Project Number returned for the passed Project ID ';
5477                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5478           END IF;
5479           l_return_status := FND_API.G_RET_STS_ERROR;
5480           PA_UTILS.ADD_MESSAGE
5481                 (p_app_short_name => 'PA',
5482                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5483           RAISE Invalid_Arg_Exc_Dlv;
5484      END IF;
5485 
5486      CLOSE c_project_number_from ;
5487 */
5488 
5489      -- 3671408 added below code to validate project_number
5490 
5491      IF p_project_number IS NULL THEN
5492           IF l_debug_mode = 'Y' THEN
5493                pa_debug.g_err_stage:= 'No Project Number returned for the passed Project ID ';
5494                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5495           END IF;
5496           l_return_status := FND_API.G_RET_STS_ERROR;
5497           PA_UTILS.ADD_MESSAGE
5498                 (p_app_short_name => 'PA',
5499                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5500           RAISE Invalid_Arg_Exc_Dlv;
5501      END IF;
5502 
5503      -- 3671408 end
5504 
5505      IF l_debug_mode = 'Y' THEN
5506          pa_debug.g_err_stage := 'After doing cursor operation - Valid Project Number ';
5507          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5508      END IF;
5509 
5510     -- If the new project status has not been committed into Database,this cursor will fail
5511     -- This is due to the Autonomous Transaction definition.So,commented the following code
5512     /* --If the project status is Approved,then only submit the request.
5513      --If not return
5514 
5515      OPEN c_project_sys_status_code;
5516      FETCH c_project_sys_status_code into l_status_code ;
5517      CLOSE c_project_sys_status_code;
5518      IF nvl(l_status_code,'-99') <> 'APPROVED' THEN
5519          IF l_debug_mode = 'Y' THEN
5520                pa_debug.g_err_stage := 'The Project Status is not approved .So,No need to invoke concurrent process ';
5521                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5522          END IF;
5523          RETURN;
5524      END IF ;
5525      */
5526      -- Submit the request.
5527      l_request_id := fnd_request.submit_request
5528      (
5529            application                =>   'PA',
5530            program                    =>   'PAINIACT',
5531            description                =>   'PRC: Initiate Project Deliverable Actions',
5532            start_time                 =>   NULL,
5533            sub_request                =>   false,
5534            argument1                  =>   'DEMAND',
5535            argument2                  =>   p_project_number, -- 3671408 changed parameter value to passed IN parameter
5536            argument3                  =>   NULL
5537      );
5538      IF l_debug_mode = 'Y' THEN
5539           pa_debug.g_err_stage:= 'Request id is '||l_request_id;
5540           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5541      END IF;
5542 
5543      -- Throw an error if the request could not be submitted.
5544      IF l_request_id = 0 THEN
5545           PA_UTILS.ADD_MESSAGE
5546                 (p_app_short_name => 'PA',
5547                  p_msg_name       => 'PA_DLV_INI_CONC_PGM_ERR');
5548           RAISE Invalid_Arg_Exc_Dlv;
5549      END IF;
5550 
5551      COMMIT ;
5552 
5553      IF l_debug_mode = 'Y' THEN
5554           pa_debug.g_err_stage:= 'Exiting RUN_ACTION_CONC_PROCESS_WRP ' ;
5555           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5556 	  pa_debug.reset_curr_function;    --Added for bug 4945876
5557      END IF;
5558  EXCEPTION
5559 WHEN Invalid_Arg_Exc_Dlv THEN
5560      x_return_status := FND_API.G_RET_STS_ERROR;
5561      l_msg_count := FND_MSG_PUB.count_msg;
5562 
5563     -- 3671408  cursor is not used now , commented below code
5564     /*
5565      --Close any open cursors and roll back
5566      IF c_project_number_from%ISOPEN THEN
5567           CLOSE c_project_number_from;
5568      END IF;
5569     */
5570     -- 3671408 end
5571    /*  IF c_project_sys_status_code%ISOPEN THEN
5572           CLOSE c_project_sys_status_code;
5573      END IF;*/
5574 
5575      IF (p_commit = FND_API.G_TRUE) THEN
5576            ROLLBACK TO RUN_ACTION_CONC_PROCESS_WRP_SP;
5577      END IF ;
5578 
5579      IF l_debug_mode = 'Y' THEN
5580         pa_debug.g_err_stage := 'Inside Invalid arg exception of RUN_ACTION_CONC_PROCESS_WRP';
5581         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
5582      END IF;
5583 
5584      IF l_msg_count = 1 THEN
5585            PA_INTERFACE_UTILS_PUB.get_messages
5586                (p_encoded        => FND_API.G_TRUE,
5587                 p_msg_index      => 1,
5588                 p_msg_count      => l_msg_count,
5589                 p_msg_data       => l_msg_data,
5590                 p_data           => l_data,
5591                 p_msg_index_out  => l_msg_index_out);
5592            x_msg_data  := l_data;
5593            x_msg_count := l_msg_count;
5594      END IF;
5595      IF l_debug_mode = 'Y' THEN
5596        pa_debug.reset_curr_function;
5597      END IF ;
5598      RETURN;
5599  WHEN OTHERS THEN
5600      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5601      x_msg_count     := 1;
5602      x_msg_data      := SQLERRM;
5603 
5604     -- 3671408 cursor is not used now, removed below code
5605      /*
5606      --Close any open cursors and roll back
5607      IF c_project_number_from%ISOPEN THEN
5608           CLOSE c_project_number_from;
5609      END IF;
5610      */
5611      -- 3671408
5612 
5613      /*IF c_project_sys_status_code%ISOPEN THEN
5614           CLOSE c_project_sys_status_code;
5615      END IF;*/
5616 
5617      IF (p_commit = FND_API.G_TRUE) THEN
5618            ROLLBACK TO RUN_ACTION_CONC_PROCESS_WRP_SP;
5619      END IF ;
5620 
5621      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
5622                      ,p_procedure_name  => 'RUN_ACTION_CONC_PROCESS_WRP');
5623 
5624      IF p_debug_mode = 'Y' THEN
5625           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5626           pa_debug.write(g_module_name, pa_debug.g_err_stage,5);
5627           pa_debug.reset_curr_function;
5628      END IF;
5629      RAISE;
5630 END RUN_ACTION_CONC_PROCESS_WRP ;
5631 
5632 /*==================================================================================
5633   This is the wrapper API which has to be called from FORMS whenever Project Status
5634   is changed to 'Approved' .This API inturn places call to another wrapper API
5635   RUN_ACTION_CONC_PROCESS_WRP - which places concurrent request for automatically
5636   generating demand (When the Project Status is 'Approved')
5637   ==================================================================================*/
5638 
5639 PROCEDURE RUN_ACTION_CONC_FRM_WRP
5640      (
5641       p_project_id                IN PA_PROJECTS_ALL.PROJECT_ID%TYPE
5642     , x_return_status          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5643     , x_msg_count              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5644     , x_msg_data               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5645      )
5646      IS
5647      l_project_number             PA_PROJECTS_ALL.SEGMENT1%TYPE  ;
5648 
5649      -- 3671408 Added below cursor to retrieve project_number
5650 
5651      CURSOR c_project_details(p_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE) IS
5652      SELECT segment1
5653      FROM  PA_PROJECTS_ALL
5654      WHERE PROJECT_ID = p_project_id;
5655 
5656      BEGIN
5657      x_msg_count := 0;
5658      x_return_status := FND_API.G_RET_STS_SUCCESS;
5659 
5660      IF p_project_id IS NULL THEN
5661           x_return_status := FND_API.G_RET_STS_ERROR;
5662           PA_UTILS.ADD_MESSAGE
5663                 (p_app_short_name => 'PA',
5664                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5665           RAISE Invalid_Arg_Exc_Dlv;
5666      END IF;
5667 
5668      -- 3671408 added code to retrieve project number
5669 
5670      OPEN  c_project_details(p_project_id) ;
5671      FETCH c_project_details INTO l_project_number ;
5672      CLOSE c_project_details;
5673 
5674      --Bug 3752898
5675      --While Calling this API ,the Message Stack should not be re-initialized.
5676      --If it gets reinitialized it will break fix for Bug # 3134205
5677 
5678      PA_ACTIONS_PUB.RUN_ACTION_CONC_PROCESS_WRP
5679      (
5680       p_calling_module            =>  'FORMS'
5681      ,p_init_msg_list             =>  FND_API.G_FALSE   -- 3752898 , Passing False to avoid re-initialization of Message Stack
5682      ,p_project_id                =>  p_project_id
5683      ,p_project_number            =>  l_project_number  -- 3671408 , passing retrieved value
5684      ,x_return_status             =>  x_return_status
5685      ,x_msg_count                 =>  x_msg_count
5686      ,x_msg_data                  =>  x_msg_data
5687      );
5688 
5689      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5690             RAISE Invalid_Arg_Exc_Dlv ;
5691      END IF ;
5692 
5693 EXCEPTION
5694 WHEN Invalid_Arg_Exc_Dlv THEN
5695 
5696      -- 3671408 added code to handle cursor
5697      IF c_project_details%ISOPEN THEN
5698           CLOSE c_project_details;
5699      END IF;
5700 
5701      x_return_status := FND_API.G_RET_STS_ERROR;
5702      x_msg_count := FND_MSG_PUB.count_msg;
5703      x_msg_data :='Invalid Argument Exception inside RUN_ACTION_CONC_FRM_WRP' || x_msg_data;
5704      RETURN;
5705  WHEN OTHERS THEN
5706      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5707      x_msg_count := FND_MSG_PUB.count_msg;
5708      x_msg_data := SQLERRM;
5709 
5710      -- 3671408 added code to handle cursor
5711      IF c_project_details%ISOPEN THEN
5712           CLOSE c_project_details;
5713      END IF;
5714 
5715      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
5716                      ,p_procedure_name  => 'RUN_ACTION_CONC_FRM_WRP');
5717 
5718      RAISE;
5719 END RUN_ACTION_CONC_FRM_WRP;
5720 
5721 END PA_ACTIONS_PUB;