DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_ACTIONS_PUB

Source


1 PACKAGE BODY PA_ACTIONS_PUB as
2 /* $Header: PAACTNPB.pls 120.4.12010000.2 2008/09/18 22:59:09 skkoppul 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
2874              AND p_action_in_rec.initiate_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
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
2991      l_action_owner_id_tbl    SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
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()   ;
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 
3061      l_msg_index_out              NUMBER;
3062      l_msg_count                  NUMBER ;
3063      l_data                       VARCHAR2(2000);
3064      l_msg_data                   VARCHAR2(2000);
3068      SELECT   vers.element_version_id
3065      l_err_message fnd_new_messages.message_text%TYPE ;
3066 
3067      Cursor C_vers (p_proj_element_id IN NUMBER) IS
3069            ,  elem.carrying_out_organization_id
3070        ,  proj.segment1
3071        ,  elem.element_Number
3072        ,  proj.project_id
3073        ,  Pa_Deliverable_Utils.IS_Dlvr_Item_Based(vers.element_version_id)
3074      FROM     pa_proj_element_versions vers
3075            ,  pa_proj_elements elem
3076        ,  pa_projects_all proj
3077      WHERE    vers.proj_element_id = elem.proj_element_id
3078      AND      elem.project_id  = vers.project_id
3079      AND      elem.proj_element_id  = p_Proj_element_id
3080      AND      elem.project_id  = proj.project_id
3081      AND      elem.object_type = 'PA_DELIVERABLES';
3082 
3083      CURSOR C_org_name (p_org_id IN NUMBER) IS
3084      SELECT name
3085      FROM pa_organizations_event_v
3086      WHERE organization_id = P_org_id
3087      AND TRUNC(SYSDATE) BETWEEN date_from AND nvl(date_to, TRUNC(SYSDATE));
3088 
3089      -- 3651489 added cursor to retrieve actions' element version id
3090      -- proj element id is passed as argument
3091 
3092      Cursor C_act_ver (p_proj_element_id IN NUMBER) IS
3093      SELECT   pev.element_version_id
3094      FROM     pa_proj_element_versions pev
3095      WHERE    pev.proj_element_id   = p_proj_element_id
3096      AND      pev.object_type       = 'PA_ACTIONS';
3097 
3098     -- 3749462 changes for financial top task and lowest chargeable task validation
3099 
3100     l_fin_task_id   pa_proj_elements.proj_element_id%TYPE;
3101     --added for bug: 4537865
3102     l_new_fin_task_id pa_proj_elements.proj_element_id%TYPE;
3103     --added for bug: 4537865
3104     l_fin_task_ref  VARCHAR2(25);
3105 
3106 
3107     Cursor is_top_task (project_id NUMBER, fin_task_id NUMBER) IS
3108        SELECT
3109               TASK_NUMBER
3110        FROM
3111               PA_TASKS
3112        WHERE
3113                  PROJECT_ID = project_id
3114              AND TASK_ID    = TOP_TASK_ID
3115              AND TASK_ID    = fin_task_id;
3116 
3117     Cursor is_lowest_task (project_id NUMBER, fin_task_id NUMBER) IS
3118        SELECT
3119               TASK_NUMBER
3120        FROM
3121               PA_TASKS
3122        WHERE
3123                  PROJECT_ID      = project_id
3124              AND TASK_ID         = fin_task_id
3125              AND CHARGEABLE_FLAG = 'Y';
3126 
3127     -- For Bug 3749447 , Added below local variables and cursor
3128 
3129     l_unique_flag VARCHAR2(1);
3130 
3131     Cursor C_dlvr_type(l_project_id NUMBER, l_deliverable_id NUMBER) IS
3132        SELECT type_id
3133        FROM   PA_PROJ_ELEMENTS
3134        WHERE  proj_element_id = l_deliverable_id
3135        AND    project_id      = l_project_id
3136        AND    OBJECT_TYPE     = 'PA_DELIVERABLES';
3137 
3138     l_dlvr_type_id            Pa_Proj_Elements.type_id%TYPE;
3139 
3140     l_dlvr_prg_enabled  VARCHAR2(1) := NULL;
3141     l_dlvr_action_enabled  VARCHAR2(1) := NULL;
3142     l_status_code   PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
3143 
3144     -- end 3749447
3145 
3146     -- 3651542 added local variable for defaulting
3147 
3148     l_default_owner_id      NUMBER;
3149     l_default_owner_name    PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
3150     l_default_date          DATE;
3151     l_earliest_start_date   DATE;
3152     l_earliest_finish_date  DATE;
3153 
3154     -- bug 7385017 skkoppul
3155     l_update_oke_yn         VARCHAR2(1) := 'Y';
3156 
3157 BEGIN
3158 
3159     IF p_commit = FND_API.G_TRUE THEN
3160        SAVEPOINT create_dlvr_actions_wrapper;
3161     END IF;
3162 --  Standard call to check for call compatibility.
3163     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
3164                                p_api_version  ,
3165                                l_api_name         ,
3166                                G_PKG_NAME       )
3167     THEN
3168        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3169     END IF;
3170 
3171 --  Initialize the message table if requested.
3172     IF FND_API.TO_BOOLEAN( p_init_msg_list )   THEN
3173        FND_MSG_PUB.initialize;
3174     END IF;
3175 
3176     IF p_debug_mode = 'Y' THEN
3177           PA_DEBUG.set_curr_function( p_function   => l_api_name,
3178                                       p_debug_mode => p_debug_mode );
3179           pa_debug.g_err_stage:= 'Inside '||l_api_name;
3180           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
3181     END IF;
3182 
3183 --  Set API return status to success
3184     x_return_status := FND_API.G_RET_STS_SUCCESS;
3185 
3186 --  OKE apis expect CREATE instead of INSERT. Initializing local variable
3187 --  l_action based on value of p_insert_or_update
3188 
3189     IF (p_insert_or_update = g_insert) THEN
3190        l_action := g_create;
3191     ELSE
3192        l_action := p_insert_or_update;
3193     END IF;
3194 
3195     i_actn := p_action_in_tbl.first();
3196 
3197     WHILE i_actn IS NOT NULL LOOP
3198 
3199    /* Bug # 3590235 : Added a condition to check null value for action_owner_id */
3200 
3201         IF ( p_action_in_tbl(i_actn).action_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
3202             p_action_in_tbl(i_actn).action_owner_id IS NULL) THEN
3203               l_action_owner_id := null;
3204         ELSE
3208         IF ( i_actn = p_action_in_tbl.first()) THEN
3205               l_action_owner_id := p_action_in_tbl(i_actn).action_owner_id ;
3206         END IF;
3207 
3209            l_object_id                    :=  p_action_in_tbl(i_actn).deliverable_id     ;
3210            l_object_type                  :=  g_deliverables                             ;
3211            l_pm_source_code               :=  nvl(p_action_in_tbl(i_actn).pm_source_code,'MSPROJECT')     ;
3212 
3213            -- Getting the project /deliverable related information
3214            Open C_vers (l_object_id);
3215            Fetch C_vers INTO l_object_version_id, l_carrying_out_organization_id,
3216                              l_project_number, l_deliverable_number, l_project_id, l_item_dlv;
3217            Close C_vers;
3218 
3219            Pa_Deliverable_Utils.Get_Project_Details    (
3220                       p_project_id                   =>  l_project_id
3221                      ,x_projfunc_currency_code       =>  l_projfunc_currency_code
3222                      ,x_org_id                       =>  l_org_id
3223                      );
3224 
3225 
3226            IF p_debug_mode = 'Y' THEN
3227               pa_debug.write(g_module_name,'Entering the loop fetched values obj id ['||l_object_id||']vers id['||l_object_version_id||']',3) ;
3228               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) ;
3229               pa_debug.write(g_module_name,'org id ['||l_org_id||']PFC['|| l_projfunc_currency_code||']item dlv['||l_item_dlv||']',3) ;
3230            END IF;
3231 
3232            -- 3651542 Added below code to retrieve default owner and date in create mode
3233            -- Assumption : defaulting will done for 'PROJECT' only , for AMG task flow is not
3234            -- considered , Also, this will be in case of project , not the template
3235 
3236            -- because of above assumption, passing task ver id null
3237            -- l_earliest_start_date and l_earliest_finish_date will be null
3238 
3239            -- retrieve only once, i.e. this call will be made for only first action
3240 
3241             IF (l_action = g_create) THEN
3242                 PA_DELIVERABLE_UTILS.GET_DEFAULT_ACTN_DATE
3243                     (
3244                           p_dlvr_ver_id             =>  l_object_version_id
3245                          ,p_task_ver_id             =>  NULL
3246                          ,p_project_mode            =>  'PROJECT'
3247                          ,x_due_date                =>  l_default_date
3248                          ,x_earliest_start_date     =>  l_earliest_start_date
3249                          ,x_earliest_finish_date    =>  l_earliest_finish_date
3250                      );
3251 
3252                 PA_DELIVERABLE_UTILS.GET_DEFAULT_ACTION_OWNER
3253                     (
3254                          p_dlvr_ver_id              =>  l_object_version_id
3255                         ,x_owner_id                 =>  l_default_owner_id
3256                         ,x_owner_name               =>  l_default_owner_name
3257                     );
3258             END IF;
3259 
3260             -- 3651542 end
3261         END IF;
3262 
3263         -- 3749447 Start
3264         -- If this api is called for creating actions, do below validation
3265         --      1. for deliverable, action is enabled
3266         --      2. for deliverable, action reference is unique
3267         --      3. action name is valid , i.e not null and not '^'
3268 
3269         IF l_action = g_create THEN
3270 
3271            OPEN C_dlvr_type(l_project_id,l_object_id);
3272            FETCH C_dlvr_Type INTO l_dlvr_type_id;
3273            CLOSE  C_dlvr_type;
3274 
3275            -- Will create actions only when deliverable type of deliverable
3276            -- has action creation enabled.
3277 
3278            Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
3279            (
3280                p_dlvr_type_id                 =>  l_dlvr_type_id
3281               ,x_dlvr_prg_enabled             =>  l_dlvr_prg_enabled
3282               ,x_dlvr_action_enabled          =>  l_dlvr_action_enabled
3283               ,x_dlvr_default_status_code     =>  l_status_code
3284             );
3285 
3286            IF (l_dlvr_action_enabled <> 'Y') THEN
3287 
3288                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3289                   l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
3290                   PA_UTILS.ADD_MESSAGE
3291                                (p_app_short_name => 'PA',
3292                                 p_msg_name       => 'PA_ACTION_VALID_ERR',
3293                                 p_token1         => 'PROJECT',
3294                                 p_value1         =>  l_project_number,
3295                                 p_token2         => 'DLVR_REFERENCE',
3296                                 p_value2         =>  l_deliverable_number,
3297                                 p_token3         => 'ACTION_REFERENCE',
3298                                 p_value3         =>  p_action_in_tbl(i_actn).pm_action_reference,
3299                                 p_token4         => 'MESSAGE',
3300                                 p_value4         =>  l_err_message
3301                                );
3302                END IF;
3303 
3304                x_return_status             := FND_API.G_RET_STS_ERROR;
3305                RAISE FND_API.G_EXC_ERROR;
3306 
3307            END IF;
3308 
3309             -- Validate Action reference - not null, unique
3310             pa_deliverable_utils.is_action_reference_unique (
3314                , x_unique_flag           => l_unique_flag
3311                  p_action_reference      => p_action_in_tbl(i_actn).pm_action_reference
3312                , p_deliverable_id        => l_object_id
3313                , p_project_id            => l_project_id
3315                , x_return_status         => x_return_status
3316                );
3317 
3318             IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
3319                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3320             ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
3321                 RAISE FND_API.G_EXC_ERROR;
3322             END IF;
3323 
3324             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
3325 
3326                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3327                   l_err_message := FND_MESSAGE.GET_STRING('PA','PA_ACTION_NAME_NULL_ERROR') ;
3328                   PA_UTILS.ADD_MESSAGE
3329                                (p_app_short_name => 'PA',
3330                                 p_msg_name       => 'PA_ACTION_VALID_ERR',
3331                                 p_token1         => 'PROJECT',
3332                                 p_value1         =>  l_project_number,
3333                                 p_token2         => 'DLVR_REFERENCE',
3334                                 p_value2         =>  l_deliverable_number,
3335                                 p_token3         => 'ACTION_REFERENCE',
3336                                 p_value3         =>  p_action_in_tbl(i_actn).pm_action_reference,
3337                                 p_token4         => 'MESSAGE',
3338                                 p_value4         =>  l_err_message
3339                                );
3340 
3341                END IF;
3342                x_return_status             := FND_API.G_RET_STS_ERROR;
3343                RAISE FND_API.G_EXC_ERROR;
3344 
3345             END IF;
3346 
3347         END IF;
3348 
3349         -- end 3749447
3350 
3351   --  Populating the action PLSQL table
3352 
3353         l_action_name_tbl.extend;
3354         l_action_owner_id_tbl.extend;
3355         l_function_code_tbl.extend;
3356         l_due_date_tbl.extend;
3357         l_completed_flag_tbl.extend;
3358         l_completion_date_tbl.extend;
3359         l_element_version_id_tbl.extend;
3360         l_proj_element_id_tbl.extend;
3361         l_rec_ver_num_id_tbl.extend;
3362         l_description_tbl.extend;
3363         l_user_action_tbl.extend;
3364         l_pm_source_reference_tbl.extend;
3365 
3366         l_attribute_category_tbl.extend;
3367         l_attribute1_tbl.extend        ;
3368         l_attribute2_tbl.extend        ;
3369         l_attribute3_tbl.extend        ;
3370         l_attribute4_tbl.extend        ;
3371         l_attribute5_tbl.extend        ;
3372         l_attribute6_tbl.extend        ;
3373         l_attribute7_tbl.extend        ;
3374         l_attribute8_tbl.extend        ;
3375         l_attribute9_tbl.extend        ;
3376         l_attribute10_tbl.extend       ;
3377         l_attribute11_tbl.extend       ;
3378         l_attribute12_tbl.extend       ;
3379         l_attribute13_tbl.extend       ;
3380         l_attribute14_tbl.extend       ;
3381         l_attribute15_tbl.extend       ;
3382 
3383         -- 3749462 changes for financial top task and lowest chargeable task validation
3384         l_fin_task_id_tbl.extend       ;
3385         l_fin_task_num_tbl.extend     ;
3386 
3387 -- to be modified        l_pm_source_code_tbl(i_actn)        :=  p_action_in_tbl(i_actn).pm_source_code      ;
3388 -- to be modified       l_pm_source_reference_tbl(i_actn)   :=  p_action_in_tbl(i_actn).pm_source_reference ;
3389 
3390 -- Changed the direct initialization of local variables to select statement as values would differ in case of update or create bug 3651139
3391         IF (l_action = g_create) THEN
3392            SELECT
3393                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         )
3394              , l_action_owner_id
3395              , 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       )
3396              , 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            )
3397              , NULL                               --l_completed_flag
3398              , NULL                               --l_completion_date
3399              , NULL                               --l_element_version_id
3400              , NULL                               --l_proj_element_id
3401              , 1                                  --l_rec_ver_num_id
3402              , decode(p_action_in_tbl(i_actn).description        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).description         )
3403              , p_insert_or_update
3404              , 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 )
3405              , NULL               --l_attribute_category
3406              , NULL               --l_attribute1
3407              , NULL               --l_attribute2
3408              , NULL               --l_attribute3
3409              , NULL               --l_attribute4
3410              , NULL               --l_attribute5
3411              , NULL               --l_attribute6
3412              , NULL               --l_attribute7
3413              , NULL               --l_attribute8
3414              , NULL               --l_attribute9
3418              , NULL               --l_attribute13
3415              , NULL               --l_attribute10
3416              , NULL               --l_attribute11
3417              , NULL               --l_attribute12
3419              , NULL               --l_attribute14
3420              , NULL               --l_attribute15
3421            INTO
3422                l_action_name_tbl(i_actn)
3423              , l_action_owner_id_tbl(i_actn)
3424              , l_function_code_tbl(i_actn)
3425              , l_due_date_tbl(i_actn)
3426              , l_completed_flag_tbl(i_actn)
3427              , l_completion_date_tbl(i_actn)
3428              , l_element_version_id_tbl(i_actn)
3429              , l_proj_element_id_tbl(i_actn)
3430              , l_rec_ver_num_id_tbl(i_actn)
3431              , l_description_tbl(i_actn)
3432              , l_user_action_tbl(i_actn)
3433              , l_pm_source_reference_tbl(i_actn)
3434              , l_attribute_category_tbl(i_actn)
3435              , l_attribute1_tbl(i_actn)
3436              , l_attribute2_tbl(i_actn)
3437              , l_attribute3_tbl(i_actn)
3438              , l_attribute4_tbl(i_actn)
3439              , l_attribute5_tbl(i_actn)
3440              , l_attribute6_tbl(i_actn)
3441              , l_attribute7_tbl(i_actn)
3442              , l_attribute8_tbl(i_actn)
3443              , l_attribute9_tbl(i_actn)
3444              , l_attribute10_tbl(i_actn)
3445              , l_attribute11_tbl(i_actn)
3446              , l_attribute12_tbl(i_actn)
3447              , l_attribute13_tbl(i_actn)
3448              , l_attribute14_tbl(i_actn)
3449              , l_attribute15_tbl(i_actn)
3450           FROM DUAL;
3451         ELSE    -- UPDATE
3452            SELECT
3453                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         )
3454              , 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     )
3455              , 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       )
3456              , 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            )
3457              , decode(action_status_code , 'DLVR_COMPLETED', 'Y', 'N')                             --l_completed_flag
3458              , 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
3459              , element_version_id
3460              , proj_element_id
3461              , NULL                               --l_rec_ver_num_id
3462              , decode(p_action_in_tbl(i_actn).description        ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , description, p_action_in_tbl(i_actn).description         )
3463              -- 3729250 removed p_insert_or_update passing , for update expected value is 'MODIFIED'
3464              -- because CR_UP_DLV_ACTIONS_IN_BULK procedure is expecting this value to be 'MODIFIED' , not 'UPDATE'
3465              , g_modified
3466              , 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 )
3467              , attribute_category
3468              , attribute1
3469              , attribute2
3470              , attribute3
3471              , attribute4
3472              , attribute5
3473              , attribute6
3474              , attribute7
3475              , attribute8
3476              , attribute9
3477              , attribute10
3478              , attribute11
3479              , attribute12
3480              , attribute13
3481              , attribute14
3482              , attribute15
3483            INTO
3484                l_action_name_tbl(i_actn)
3485              , l_action_owner_id_tbl(i_actn)
3486              , l_function_code_tbl(i_actn)
3487              , l_due_date_tbl(i_actn)
3488              , l_completed_flag_tbl(i_actn)
3489              , l_completion_date_tbl(i_actn)
3490              , l_element_version_id_tbl(i_actn)
3491              , l_proj_element_id_tbl(i_actn)
3492              , l_rec_ver_num_id_tbl(i_actn)
3493              , l_description_tbl(i_actn)
3494              , l_user_action_tbl(i_actn)
3495              , l_pm_source_reference_tbl(i_actn)
3496              , l_attribute_category_tbl(i_actn)
3497              , l_attribute1_tbl(i_actn)
3498              , l_attribute2_tbl(i_actn)
3499              , l_attribute3_tbl(i_actn)
3500              , l_attribute4_tbl(i_actn)
3501              , l_attribute5_tbl(i_actn)
3502              , l_attribute6_tbl(i_actn)
3503              , l_attribute7_tbl(i_actn)
3504              , l_attribute8_tbl(i_actn)
3505              , l_attribute9_tbl(i_actn)
3506              , l_attribute10_tbl(i_actn)
3507              , l_attribute11_tbl(i_actn)
3508              , l_attribute12_tbl(i_actn)
3509              , l_attribute13_tbl(i_actn)
3510              , l_attribute14_tbl(i_actn)
3511              , l_attribute15_tbl(i_actn)
3512           FROM pa_dlvr_actions_V
3513           where proj_element_id = p_action_in_tbl(i_actn).action_id;
3514         END IF; -- l_action= g_create
3515 
3516         -- 3651542  if create mode , check action_owner_id and due_date is not passed
3517         -- set default owner id and due date to local variable
3518 
3519         IF (l_action = g_create) THEN
3523 
3520             IF p_action_in_tbl(i_actn).action_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3521                 l_action_owner_id_tbl(i_actn) := l_default_owner_id;
3522             END IF;
3524             IF p_action_in_tbl(i_actn).due_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
3525                 l_due_date_tbl(i_actn) := l_default_date;
3526             END IF;
3527         END IF;
3528 
3529         -- 3749462 changes for financial top task and lowest chargeable task validation
3530 
3531         l_fin_task_id   := NULL;
3532         l_fin_task_ref  := NULL;
3533 
3534         -- if passed financial task id or reference is not passed , set it to null
3535 
3536         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
3537             l_fin_task_id   := p_action_in_tbl(i_actn).financial_task_id;
3538         END IF;
3539 
3540         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
3541             l_fin_task_ref  := p_action_in_tbl(i_actn).financial_task_reference;
3542         END IF;
3543 
3544         -- if task reference / id is passed , validate passed reference with id
3545         -- if only reference is passed, retrieve id
3546 
3547         IF ( l_fin_task_id IS NOT NULL OR l_fin_task_ref IS NOT NULL ) THEN
3548 
3549             PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
3550                        p_pa_project_id      => l_project_id
3551                      , p_structure_type     => 'FINANCIAL'
3552                      , p_pa_task_id         => l_fin_task_id
3553                      , p_pm_task_reference  => l_fin_task_ref
3554                   -- , p_out_task_id        => l_fin_task_id     * added for bug: 4537865
3555 		     , p_out_task_id	    => l_new_fin_task_id
3556 		  --                                             * added for bug: 4537865
3557                      , p_return_status      => x_return_status );
3558 
3559 	    --added for bug: 4537865
3560             IF x_return_status = FND_API.G_RET_STS_SUCCESS	 THEN
3561 	    l_fin_task_id := l_new_fin_task_id;
3562             END IF;
3563             --added for bug: 4537865
3564 
3565             IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
3566                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3567             ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
3568                   RAISE FND_API.G_EXC_ERROR;
3569             END IF;
3570 
3571             IF l_function_code_tbl(i_actn) IN ( 'SHIPPING' , 'PROCUREMENT') THEN
3572 
3573                 -- For Procurement / Shipping action , validate passed financial task should be lowest chargeable task
3574 
3575                 Open is_lowest_task (l_project_id,l_fin_task_id);
3576                 Fetch is_lowest_task INTO l_fin_task_num_tbl(i_actn);
3577 
3578                 IF is_lowest_task%NOTFOUND THEN
3579                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3580                        l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DLVR_INVALID_LOW_FIN_TASK') ;
3581                        PA_UTILS.ADD_MESSAGE
3582                                    (p_app_short_name => 'PA',
3583                                     p_msg_name       => 'PA_ACTION_VALID_ERR',
3584                                     p_token1         => 'PROJECT',
3585                                     p_value1         =>  l_project_number,
3586                                     p_token2         => 'DLVR_REFERENCE',
3587                                     p_value2         =>  l_deliverable_number,
3588                                     p_token3         => 'ACTION_REFERENCE',
3589                                     p_value3         =>  l_pm_source_reference_tbl(i_actn),
3590                                     p_token4         => 'MESSAGE',
3591                                     p_value4         =>  l_err_message
3592                                    );
3593 
3594                     END IF;
3595                     x_return_status             := FND_API.G_RET_STS_ERROR;
3596 
3597                     RAISE FND_API.G_EXC_ERROR;
3598                 ELSE
3599                     l_fin_task_id_tbl(i_actn)   := l_fin_task_id;
3600                 END IF;
3601 
3602                 Close is_lowest_task;
3603 
3604             ELSIF l_function_code_tbl(i_actn) IN ( 'BILLING') THEN
3605 
3606                 -- For Billing action , validate passed financial task should be top financial task
3607 
3608                 Open is_top_task (l_project_id,l_fin_task_id);
3609                 Fetch is_top_task INTO l_fin_task_num_tbl(i_actn);
3610 
3611                 IF is_top_task%NOTFOUND THEN
3612                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3613                        l_err_message := FND_MESSAGE.GET_STRING('PA','PA_DLVR_INVALID_TOP_FIN_TASK') ;
3614                        PA_UTILS.ADD_MESSAGE
3615                                    (p_app_short_name => 'PA',
3616                                     p_msg_name       => 'PA_ACTION_VALID_ERR',
3617                                     p_token1         => 'PROJECT',
3618                                     p_value1         =>  l_project_number,
3619                                     p_token2         => 'DLVR_REFERENCE',
3620                                     p_value2         =>  l_deliverable_number,
3621                                     p_token3         => 'ACTION_REFERENCE',
3622                                     p_value3         =>  l_pm_source_reference_tbl(i_actn),
3626 
3623                                     p_token4         => 'MESSAGE',
3624                                     p_value4         =>  l_err_message
3625                                    );
3627                     END IF;
3628                     x_return_status             := FND_API.G_RET_STS_ERROR;
3629 
3630                     RAISE FND_API.G_EXC_ERROR;
3631                 ELSE
3632                     l_fin_task_id_tbl(i_actn)   := l_fin_task_id;
3633                 END IF;
3634 
3635                 Close is_top_task;
3636 
3637             END IF;
3638         ELSE
3639             l_fin_task_num_tbl(i_actn) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
3640         END IF;
3641 
3642         -- for bug# 3749462
3643         -- create mode, completion date is null and comleted flag will become 'N'
3644         -- update mode, if comp date is passed, make completed flag 'Y'
3645         -- update mode, if action is complte and comp date is not passed, completed flag will retain value from the db
3646 
3647         IF l_completion_date_tbl(i_actn) IS NOT NULL THEN
3648             l_completed_flag_tbl(i_actn) := 'Y';
3649         END IF;
3650 
3651         i_actn := p_action_in_tbl.next(i_actn);
3652 
3653     END LOOP;
3654 
3655     IF p_debug_mode = 'Y' THEN
3656         pa_debug.write(g_module_name,'Populated action PLSQL table, calling api for bulk insert',3) ;
3657     END IF;
3658 
3659   --  Invoke the API to create dlvr actions in bulk.
3660 
3661     Pa_Actions_Pub.CR_UP_DLV_ACTIONS_IN_BULK (
3662         p_init_msg_list                 =>  p_init_msg_list
3663        ,p_commit                        =>  p_commit
3664        ,p_validate_only                 =>  FND_API.G_FALSE
3665        ,p_validation_level              =>  FND_API.G_VALID_LEVEL_FULL
3666        ,p_calling_module                =>  'AMG'
3667        ,p_debug_mode                    =>  p_debug_mode
3668        ,p_max_msg_count                 =>  NULL
3669        ,p_name_tbl                      =>  l_action_name_tbl
3670        ,p_manager_person_id_tbl         =>  l_action_owner_id_tbl
3671        ,p_function_code_tbl             =>  l_function_code_tbl
3672        ,p_due_date_tbl                  =>  l_due_date_tbl
3673        ,p_completed_flag_tbl            =>  l_completed_flag_tbl
3674        ,p_completion_date_tbl           =>  l_completion_date_tbl
3675        ,p_description_tbl               =>  l_description_tbl
3676        ,p_element_version_id_tbl        =>  l_element_version_id_tbl
3677        ,p_proj_element_id_tbl           =>  l_proj_element_id_tbl
3678        ,p_user_action_tbl               =>  l_user_action_tbl
3679        ,p_record_version_number_tbl     =>  l_rec_ver_num_id_tbl
3680        ,p_attribute_category_tbl        =>  l_attribute_category_tbl
3681        ,p_attribute1_tbl                =>  l_attribute1_tbl
3682        ,p_attribute2_tbl                =>  l_attribute2_tbl
3683        ,p_attribute3_tbl                =>  l_attribute3_tbl
3684        ,p_attribute4_tbl                =>  l_attribute4_tbl
3685        ,p_attribute5_tbl                =>  l_attribute5_tbl
3686        ,p_attribute6_tbl                =>  l_attribute6_tbl
3687        ,p_attribute7_tbl                =>  l_attribute7_tbl
3688        ,p_attribute8_tbl                =>  l_attribute8_tbl
3689        ,p_attribute9_tbl                =>  l_attribute9_tbl
3690        ,p_attribute10_tbl               =>  l_attribute10_tbl
3691        ,p_attribute11_tbl               =>  l_attribute11_tbl
3692        ,p_attribute12_tbl               =>  l_attribute12_tbl
3693        ,p_attribute13_tbl               =>  l_attribute13_tbl
3694        ,p_attribute14_tbl               =>  l_attribute14_tbl
3695        ,p_attribute15_tbl               =>  l_attribute15_tbl
3696        ,p_project_id                    =>  l_project_id
3697        ,p_object_id                     =>  l_object_id
3698        ,p_object_version_id             =>  l_object_version_id
3699        ,p_object_type                   =>  l_object_type
3700        ,p_pm_source_code                =>  l_pm_source_code
3701        ,p_pm_source_reference           =>  l_pm_source_reference
3702        ,p_pm_source_reference_tbl       =>  l_pm_source_reference_tbl
3703        ,p_carrying_out_organization_id  =>  l_carrying_out_organization_id
3704        ,p_insert_or_update              =>  p_insert_or_update
3705        ,x_return_status                 =>  x_return_status
3706        ,x_msg_count                     =>  x_msg_count
3707        ,x_msg_data                      =>  x_msg_data);
3708 
3709      IF  p_debug_mode = 'Y' THEN
3710            pa_debug.write(g_module_name,'Returned from Pa_Actions_Pub.CR_UP_DLV_ACTIONS_IN_BULK ['||x_return_status||']',5);
3711      END IF;
3712 
3713      IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3714             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3715      ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
3716             RAISE  FND_API.G_EXC_ERROR;
3717      END IF;
3718 
3719   -- After successfull creation of actions, looping the action-in table and populating
3720   -- OKE and Billing PLSQL tables
3721 
3722      i_actn := p_action_in_tbl.first();
3723 
3724      WHILE i_actn IS NOT NULL LOOP
3725 
3726         -- bug 7385017 skkoppul - default it to 'Y' as we are looping through
3727         l_update_oke_yn := 'Y';
3728 
3729 -- Derive the action_id based on action reference in case of INSERT only.
3730 -- It is not required in case of UPDATE as action id will be passed as in parameter.
3731 
3732         IF (p_insert_or_update = 'INSERT') THEN
3733 
3737                    ,p_action_id         =>  null
3734             Pa_Deliverable_Utils.Convert_pm_actionref_to_id
3735                (
3736                     p_action_reference  =>  p_action_in_tbl(i_actn).pm_action_reference
3738                    ,p_deliverable_id    =>  l_object_id
3739                    ,p_project_id        =>  l_Project_id
3740                    ,p_out_action_id     =>  l_action_id
3741                    ,p_return_status     =>  x_return_status
3742                );
3743 
3744         ELSE -- p_insert_or_update = 'INSERT'
3745 
3746             -- bug 7385017 skkoppul - if action record is empty,
3747             -- OKE_AMG_GRP.manage_dlv_action should not be called so update the flag
3748             IF is_action_rec_empty_yn(p_action_in_tbl(i_actn),l_function_code_tbl(i_actn)) = 'Y' THEN
3749                l_update_oke_yn := 'N';
3750             END IF;
3751 
3752             l_action_id := p_action_in_tbl(i_actn).action_id;
3753 
3754         END IF; --p_insert_or_update = 'INSERT'
3755 
3756         IF  p_debug_mode = 'Y' THEN
3757            pa_debug.write(g_module_name,'Derived action id ['||l_action_id||']for reference['||p_action_in_tbl(i_actn).pm_action_reference||
3758                       ']status['||x_return_status||']',5);
3759         END IF;
3760 
3761         IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3762             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3763         ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
3764             RAISE  FND_API.G_EXC_ERROR;
3765         END IF;
3766 
3767         IF  p_debug_mode = 'Y' THEN
3768            pa_debug.write(g_module_name,'Should we update OKE attributes? '||l_update_oke_yn);
3769         END IF;
3770 
3771         -- bug 7385017 skkoppul - Update only in case of changes to OKE attributes
3772         IF l_update_oke_yn = 'Y' THEN
3773 
3774            -- 3651489 retrieving action's element version id
3775 
3776            Open C_act_ver (l_action_id);
3777            Fetch C_act_ver INTO l_actn_version_id;
3778            Close C_act_ver;
3779 
3780   --  Populating the OKE Procurement PLSQL table
3781 
3782         -- 3729250, In update mode, if function is not passed, p_action_in_tbl(i_actn).function_code value is G_PA_MISS_CHAR
3783         -- and so below condition was failing and oke data was not getting updated
3784         -- changed from p_action_in_tbl(i_actn).function_code to l_function_code_tbl(i_actn)
3785         IF ( l_function_code_tbl(i_actn) = g_procurement) THEN
3786            i_proc := i_proc + 1;
3787 
3788            IF (l_action = g_create) THEN   -- added IF condition and else part of the code bug 3651139
3789               SELECT l_object_version_id
3790                  ,  l_actn_version_id     -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3791                  ,  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               )
3792                  ,  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
3793                  ,  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     )
3794                  ,  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          )
3795                  ,  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     )
3796                  -- 3729250 , po_need_by_date should be populated with procurement action due date
3797                  -- 3749462 changed from po_need_by_date to p_action_in_tbl(i_actn).due_date
3798                  ,  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
3799                  ,  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                 )
3800                  ,  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          )
3801                  ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).quantity                  )
3802                  ,  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                )
3803                  ,  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        )
3804                  ,  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        )
3805                  ,  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             )
3806                  ,  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          )
3807                  ,  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        )
3808                  ,  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     )
3812                  ,  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     )
3809                  ,  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  )
3810                  ,  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               )
3811                  ,  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     )
3813                  ,  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                  )
3814                  ,  decode(p_action_in_tbl(i_actn).currency                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR , null, p_action_in_tbl(i_actn).currency                  )
3815              INTO
3816                     l_dlv_req_action_tbl(i_proc).pa_deliverable_id
3817                  ,  l_dlv_req_action_tbl(i_proc).pa_action_id
3818                  ,  l_dlv_req_action_tbl(i_proc).action_name
3819                  ,  l_dlv_req_action_tbl(i_proc).proc_finnancial_task_id
3820                  ,  l_dlv_req_action_tbl(i_proc).destination_type_code
3821                  ,  l_dlv_req_action_tbl(i_proc).receiving_org_id
3822                  ,  l_dlv_req_action_tbl(i_proc).receiving_location_id
3823                  ,  l_dlv_req_action_tbl(i_proc).po_need_by_date
3824                  ,  l_dlv_req_action_tbl(i_proc).vendor_id
3825                  ,  l_dlv_req_action_tbl(i_proc).vendor_site_id
3826                  ,  l_dlv_req_action_tbl(i_proc).quantity
3827                  ,  l_dlv_req_action_tbl(i_proc).unit_price
3828                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_type
3829                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_date
3830                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate
3831                  ,  l_dlv_req_action_tbl(i_proc).expenditure_type
3832                  ,  l_dlv_req_action_tbl(i_proc).expenditure_org_id
3833                  ,  l_dlv_req_action_tbl(i_proc).expenditure_item_date
3834                  ,  l_dlv_req_action_tbl(i_proc).requisition_line_type_id
3835                  ,  l_dlv_req_action_tbl(i_proc).category_id
3836                  ,  l_dlv_req_action_tbl(i_proc).ready_to_procure_flag
3837                  ,  l_dlv_req_action_tbl(i_proc).initiate_procure_flag
3838                  ,  l_dlv_req_action_tbl(i_proc).uom_code
3839                  ,  l_dlv_req_action_tbl(i_proc).currency
3840                  FROM DUAL;
3841 
3842            ELSE    -- UPDATE
3843 
3844               SELECT l_object_version_id
3845                  ,  l_actn_version_id     -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3846                  ,  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               )
3847                  ,  decode(l_fin_task_id_tbl(i_actn)                         ,NULL                                  , task_id               , l_fin_task_id_tbl(i_actn)                         ) -- for bug# 3749462
3848                  ,  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     )
3849                  ,  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          )
3850                  ,  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     )
3851                  -- 3729250 , po_need_by_date should be populated with procurement action due date
3852                  -- 3749462 changed from po_need_by_date to l_due_date_tbl(i_actn)
3853                  ,  l_due_date_tbl(i_actn)
3854                  ,  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                 )
3855                  ,  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          )
3856                  ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , quantity              , p_action_in_tbl(i_actn).quantity                  )
3857                  ,  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                )
3858                  ,  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        )
3859                  ,  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        )
3860                  ,  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             )
3861                  ,  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          )
3862                  ,  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        )
3866                  ,  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     )
3863                  ,  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     )
3864                  ,  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  )
3865                  ,  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               )
3867                  ,  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     )
3868                  ,  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                  )
3869                  ,  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                  )
3870              INTO
3871                     l_dlv_req_action_tbl(i_proc).pa_deliverable_id
3872                  ,  l_dlv_req_action_tbl(i_proc).pa_action_id
3873                  ,  l_dlv_req_action_tbl(i_proc).action_name
3874                  ,  l_dlv_req_action_tbl(i_proc).proc_finnancial_task_id
3875                  ,  l_dlv_req_action_tbl(i_proc).destination_type_code
3876                  ,  l_dlv_req_action_tbl(i_proc).receiving_org_id
3877                  ,  l_dlv_req_action_tbl(i_proc).receiving_location_id
3878                  ,  l_dlv_req_action_tbl(i_proc).po_need_by_date
3879                  ,  l_dlv_req_action_tbl(i_proc).vendor_id
3880                  ,  l_dlv_req_action_tbl(i_proc).vendor_site_id
3881                  ,  l_dlv_req_action_tbl(i_proc).quantity
3882                  ,  l_dlv_req_action_tbl(i_proc).unit_price
3883                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_type
3884                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate_date
3885                  ,  l_dlv_req_action_tbl(i_proc).exchange_rate
3886                  ,  l_dlv_req_action_tbl(i_proc).expenditure_type
3887                  ,  l_dlv_req_action_tbl(i_proc).expenditure_org_id
3888                  ,  l_dlv_req_action_tbl(i_proc).expenditure_item_date
3889                  ,  l_dlv_req_action_tbl(i_proc).requisition_line_type_id
3890                  ,  l_dlv_req_action_tbl(i_proc).category_id
3891                  ,  l_dlv_req_action_tbl(i_proc).ready_to_procure_flag
3892                  ,  l_dlv_req_action_tbl(i_proc).initiate_procure_flag
3893                  ,  l_dlv_req_action_tbl(i_proc).uom_code
3894                  ,  l_dlv_req_action_tbl(i_proc).currency
3895                  FROM oke_deliverable_actions_v
3896                  WHERE pa_action_id = l_actn_version_id;
3897 
3898            END IF; -- l_action= g_create
3899 
3900        IF p_debug_mode = 'Y' THEN
3901                pa_debug.write(g_module_name,'Populated OKE Procurement PLSQL table',3) ;
3902            END IF;
3903 
3904         -- 3729250, In update mode, if function is not passed, p_action_in_tbl(i_actn).function_code value is G_PA_MISS_CHAR
3905         -- and so below condition was failing and oke data was not getting updated
3906         -- changed from p_action_in_tbl(i_actn).function_code to l_function_code_tbl(i_actn)
3907 
3908           ELSIF ( l_function_code_tbl(i_actn) = g_shipping) THEN
3909            --  Populating the OKE Shipping    PLSQL table
3910            i_ship := i_ship + 1;
3911 
3912            IF (l_action = g_create) THEN  -- added IF condition and else part of the code bug 3651139
3913               SELECT l_object_version_id
3914               ,  l_actn_version_id             -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3915               ,  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               )
3916               ,  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
3917               ,  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           )
3918               ,  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 )
3919               ,  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     )
3920               ,  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   )
3921               ,  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       )
3922               ,  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   )
3923               -- 3729250 , expected_shipment_date should be populated with shipping action due date
3924               -- 3749462 , changed from p_action_in_tbl(i_actn).expected_shipment_date to p_action_in_tbl(i_actn).due_date
3925               ,  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
3929               ,  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                )
3926               ,  decode(p_action_in_tbl(i_actn).volume                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).volume                    )
3927               ,  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                   )
3928               ,  decode(p_action_in_tbl(i_actn).weight                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).weight                    )
3930               ,  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        )
3931               ,  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    )
3932               ,  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    )
3933               ,  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                     )
3934               ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , null, p_action_in_tbl(i_actn).quantity                  )
3935               INTO
3936                  l_dlv_ship_action_tbl(i_ship).pa_deliverable_id
3937               ,  l_dlv_ship_action_tbl(i_ship).pa_action_id
3938               ,  l_dlv_ship_action_tbl(i_ship).action_name
3939               ,  l_dlv_ship_action_tbl(i_ship).ship_finnancial_task_id
3940               ,  l_dlv_ship_action_tbl(i_ship).demand_schedule
3941               ,  l_dlv_ship_action_tbl(i_ship).ship_from_organization_id
3942               ,  l_dlv_ship_action_tbl(i_ship).ship_from_location_id
3943               ,  l_dlv_ship_action_tbl(i_ship).ship_to_organization_id
3944               ,  l_dlv_ship_action_tbl(i_ship).ship_to_location_id
3945               ,  l_dlv_ship_action_tbl(i_ship).promised_shipment_date
3946               ,  l_dlv_ship_action_tbl(i_ship).expected_shipment_date
3947               ,  l_dlv_ship_action_tbl(i_ship).volume
3948               ,  l_dlv_ship_action_tbl(i_ship).volume_uom
3949               ,  l_dlv_ship_action_tbl(i_ship).weight
3950               ,  l_dlv_ship_action_tbl(i_ship).weight_uom
3951               ,  l_dlv_ship_action_tbl(i_ship).ready_to_ship_flag
3952               ,  l_dlv_ship_action_tbl(i_ship).initiate_planning_flag
3953               ,  l_dlv_ship_action_tbl(i_ship).initiate_shipping_flag
3954               ,  l_dlv_ship_action_tbl(i_ship).uom_code
3955               ,  l_dlv_ship_action_tbl(i_ship).quantity
3956               FROM DUAL;
3957 
3958            ELSE    -- UPDATE
3959               SELECT l_object_version_id
3960               ,  l_actn_version_id             -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
3961               ,  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               )
3962               ,  decode(l_fin_task_id_tbl(i_actn)                         ,NULL                                  , task_id               , l_fin_task_id_tbl(i_actn)                         ) -- for bug# 3749462
3963               ,  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           )
3964               ,  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 )
3965               ,  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     )
3966               ,  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   )
3967               ,  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       )
3968               ,  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    )
3969               -- 3729250 , expected_shipment_date should be populated with shipping action due date
3970               -- 3749462 , changed from p_action_in_tbl(i_actn).expected_shipment_date to l_due_date_tbl(i_actn)
3971               ,  l_due_date_tbl(i_actn)
3972               ,  decode(p_action_in_tbl(i_actn).volume                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , volume                , p_action_in_tbl(i_actn).volume                    )
3973               ,  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                   )
3974               ,  decode(p_action_in_tbl(i_actn).weight                    ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , weight                , p_action_in_tbl(i_actn).weight                    )
3975               ,  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                )
3976               ,  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        )
3977               ,  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    )
3981               INTO
3978               ,  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    )
3979               ,  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                     )
3980               ,  decode(p_action_in_tbl(i_actn).quantity                  ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  , quantity              , p_action_in_tbl(i_actn).quantity                  )
3982                  l_dlv_ship_action_tbl(i_ship).pa_deliverable_id
3983               ,  l_dlv_ship_action_tbl(i_ship).pa_action_id
3984               ,  l_dlv_ship_action_tbl(i_ship).action_name
3985               ,  l_dlv_ship_action_tbl(i_ship).ship_finnancial_task_id
3986               ,  l_dlv_ship_action_tbl(i_ship).demand_schedule
3987               ,  l_dlv_ship_action_tbl(i_ship).ship_from_organization_id
3988               ,  l_dlv_ship_action_tbl(i_ship).ship_from_location_id
3989               ,  l_dlv_ship_action_tbl(i_ship).ship_to_organization_id
3990               ,  l_dlv_ship_action_tbl(i_ship).ship_to_location_id
3991               ,  l_dlv_ship_action_tbl(i_ship).promised_shipment_date
3992               ,  l_dlv_ship_action_tbl(i_ship).expected_shipment_date
3993               ,  l_dlv_ship_action_tbl(i_ship).volume
3994               ,  l_dlv_ship_action_tbl(i_ship).volume_uom
3995               ,  l_dlv_ship_action_tbl(i_ship).weight
3996               ,  l_dlv_ship_action_tbl(i_ship).weight_uom
3997               ,  l_dlv_ship_action_tbl(i_ship).ready_to_ship_flag
3998               ,  l_dlv_ship_action_tbl(i_ship).initiate_planning_flag
3999               ,  l_dlv_ship_action_tbl(i_ship).initiate_shipping_flag
4000               ,  l_dlv_ship_action_tbl(i_ship).uom_code
4001               ,  l_dlv_ship_action_tbl(i_ship).quantity
4002               FROM oke_deliverable_actions_v
4003               WHERE pa_action_id = l_actn_version_id;
4004 
4005            END IF; -- l_action= g_create
4006 
4007            /*                       INSPECTION_REQ_FLAG        Varchar2(1),*/
4008 
4009        IF p_debug_mode = 'Y' THEN
4010                pa_debug.write(g_module_name,'Populated OKE Shipping PLSQL table',3) ;
4011            END IF;
4012 
4013         -- 3729250, In update mode, if function is not passed, p_action_in_tbl(i_actn).function_code value is G_PA_MISS_CHAR
4014         -- and so below condition was failing and oke data was not getting updated
4015         -- changed from p_action_in_tbl(i_actn).function_code to l_function_code_tbl(i_actn)
4016        ELSIF ( l_function_code_tbl(i_actn) = g_billing) THEN
4017 
4018            -- 4027500 Passing l_organization_name as PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR if update mode and p_organization_id
4019            -- is not passed
4020            -- else call C_org_name to derive organization_name from id
4021            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
4022                l_organization_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
4023            ELSE
4024                OPEN C_org_name(p_action_in_tbl(i_actn).organization_id);
4025                FETCH C_org_name INTO l_organization_name;
4026                IF (C_org_name%rowcount = 0 ) THEN
4027                   l_err_message := FND_MESSAGE.GET_STRING('PA','PA_INVALID_EVNT_ORG_AMG') ; -- 3810957, changed error msg code
4028                   PA_UTILS.ADD_MESSAGE
4029                                    (p_app_short_name => 'PA',
4030                                     p_msg_name       => 'PA_ACTN_VALID_ERR',
4031                                     p_token1         => 'PROJECT',
4032                                     p_value1         =>  l_project_number,
4033                                     p_token2         =>  'DLVR_REFERENCE',
4034                                     p_value2         =>  l_deliverable_number,
4035                                     p_token3         => 'MESSAGE',
4036                                     p_value3         =>  l_err_message
4037                                     );
4038                  x_return_status             := FND_API.G_RET_STS_ERROR;
4039                  CLOSE C_org_name;
4040 
4041                  -- Added for bug# 3810957 , throwing invalid cursor error
4042                  -- here, C_org_name cursor was closed and second time closing it was throwing above error
4043                  -- if invalid event org id , set return status to 'E' , close the cursor and raise FND_API.G_EXC_ERROR exception
4044                  RAISE  FND_API.G_EXC_ERROR;
4045                  -- 3810957 end
4046                END IF;
4047                CLOSE C_org_name;
4048            END IF;
4049 
4050            IF p_debug_mode = 'Y' THEN
4051                pa_debug.write(g_module_name,'Organization name derived ['||l_organization_name||']',3) ;
4052            END IF;
4053 
4054 
4055    --  Populating the Billing Event   PLSQL table
4056            i_bill := i_bill + 1;
4057 
4058            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
4059            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
4060            l_event_in_tbl(i_bill).p_event_number          :=         null                                       ;
4061            l_event_in_tbl(i_bill).p_event_type            :=         p_action_in_tbl(i_actn).event_type         ;
4062            l_event_in_tbl(i_bill).p_description           :=         p_action_in_tbl(i_actn).description        ;
4066            l_event_in_tbl(i_bill).p_organization_name     :=         l_organization_name                        ;
4063            l_event_in_tbl(i_bill).p_bill_hold_flag        :=         p_action_in_tbl(i_actn).bill_hold_flag     ;
4064            l_event_in_tbl(i_bill).p_completion_date       :=         l_completion_date_tbl(i_actn)              ; -- 3749462 , create mode event date can't be set
4065            l_event_in_tbl(i_bill).p_project_number        :=         l_project_number                           ;
4067            l_event_in_tbl(i_bill).p_inventory_org_name    :=         null                                       ;
4068            l_event_in_tbl(i_bill).p_inventory_item_id     :=         null                                       ;
4069            l_event_in_tbl(i_bill).p_quantity_billed       :=         p_action_in_tbl(i_actn).quantity           ;
4070            l_event_in_tbl(i_bill).p_uom_code              :=         p_action_in_tbl(i_actn).uom_code           ;
4071            l_event_in_tbl(i_bill).p_unit_price            :=         p_action_in_tbl(i_actn).unit_price         ;
4072            l_event_in_tbl(i_bill).p_bill_trans_currency_code :=      p_action_in_tbl(i_actn).currency           ;
4073            l_event_in_tbl(i_bill).p_bill_trans_bill_amount:=         p_action_in_tbl(i_actn).invoice_amount     ;
4074            l_event_in_tbl(i_bill).p_bill_trans_rev_amount :=         p_action_in_tbl(i_actn).revenue_amount     ;
4075            l_event_in_tbl(i_bill).p_project_rate_type     :=         p_action_in_tbl(i_actn).project_rate_type  ;
4076            l_event_in_tbl(i_bill).p_project_rate_date     :=         p_action_in_tbl(i_actn).project_rate_date  ;
4077            l_event_in_tbl(i_bill).p_project_exchange_rate :=         p_action_in_tbl(i_actn).project_rate       ;
4078            l_event_in_tbl(i_bill).p_projfunc_rate_type    :=         p_action_in_tbl(i_actn).project_functional_rate_type;
4079            l_event_in_tbl(i_bill).p_projfunc_rate_date    :=         p_action_in_tbl(i_actn).project_functional_rate_date;
4080            l_event_in_tbl(i_bill).p_projfunc_exchange_rate:=         p_action_in_tbl(i_actn).project_functional_rate     ;
4081            l_event_in_tbl(i_bill).p_funding_rate_type     :=         p_action_in_tbl(i_actn).funding_rate_type  ;
4082            l_event_in_tbl(i_bill).p_funding_rate_date     :=         p_action_in_tbl(i_actn).funding_rate_date  ;
4083            l_event_in_tbl(i_bill).p_funding_exchange_rate :=         p_action_in_tbl(i_actn).funding_rate   ;
4084            l_event_in_tbl(i_bill).p_adjusting_revenue_flag:=         null                                       ;
4085            l_event_in_tbl(i_bill).p_event_id              :=         NULL                                       ;
4086            -- 3651489 changed from deliverable proj element id to version id, as element version id should be passed to billing
4087            l_event_in_tbl(i_bill).p_deliverable_id        :=         l_object_version_id                        ;
4088            -- 3651489 changed from l_action_id to l_actn_version_id, as element version id should be passed to oke
4089            l_event_in_tbl(i_bill).p_action_id             :=         l_actn_version_id                          ;
4090            l_event_in_tbl(i_bill).p_context               :=         'D'     ;-- to be passed as 'D' for deliverable action event
4091            l_event_in_tbl(i_bill).p_record_version_number :=         1                                          ;
4092 
4093        IF p_debug_mode = 'Y' THEN
4094                pa_debug.write(g_module_name,'Populated Billing PLSQL table',3) ;
4095            END IF;
4096        ELSE
4097            i_none := i_none + 1;
4098 
4099        IF p_debug_mode = 'Y' THEN
4100                pa_debug.write(g_module_name,'Function code is NONE',3) ;
4101            END IF;
4102        END IF;
4103 
4104        END IF;
4105        i_actn := p_action_in_tbl.next(i_actn);
4106 
4107     END LOOP; -- i_act is not null
4108 
4109     IF  p_debug_mode = 'Y' THEN
4110          pa_debug.write(g_module_name,'action processed ['||i_actn||']bill['||i_bill||']proc['||i_proc||']ship['||i_ship||']none['||i_none||']',5);
4111     END IF;
4112 
4113   --  Invoke the API to create records in OKE tables
4114     IF ( i_ship > 0) THEN
4115 
4116        i_ship1 := l_dlv_ship_action_tbl.first();
4117 
4118        WHILE (i_ship1 IS NOT NULL) LOOP
4119 
4120            l_dlv_ship_action_rec.pa_deliverable_id         :=  l_dlv_ship_action_tbl(i_ship1).pa_deliverable_id        ;
4121            l_dlv_ship_action_rec.pa_action_id              :=  l_dlv_ship_action_tbl(i_ship1).pa_action_id             ;
4122            l_dlv_ship_action_rec.action_name               :=  l_dlv_ship_action_tbl(i_ship1).action_name              ;
4123            l_dlv_ship_action_rec.ship_finnancial_task_id   :=  l_dlv_ship_action_tbl(i_ship1).ship_finnancial_task_id  ;
4124            l_dlv_ship_action_rec.demand_schedule           :=  l_dlv_ship_action_tbl(i_ship1).demand_schedule          ;
4125            l_dlv_ship_action_rec.ship_from_organization_id :=  l_dlv_ship_action_tbl(i_ship1).ship_from_organization_id;
4126            l_dlv_ship_action_rec.ship_from_location_id     :=  l_dlv_ship_action_tbl(i_ship1).ship_from_location_id    ;
4127            l_dlv_ship_action_rec.ship_to_organization_id   :=  l_dlv_ship_action_tbl(i_ship1).ship_to_organization_id  ;
4128            l_dlv_ship_action_rec.ship_to_location_id       :=  l_dlv_ship_action_tbl(i_ship1).ship_to_location_id      ;
4129            l_dlv_ship_action_rec.promised_shipment_date    :=  l_dlv_ship_action_tbl(i_ship1).promised_shipment_date   ;
4130            l_dlv_ship_action_rec.volume                    :=  l_dlv_ship_action_tbl(i_ship1).volume                   ;
4131            l_dlv_ship_action_rec.volume_uom                :=  l_dlv_ship_action_tbl(i_ship1).volume_uom               ;
4132            l_dlv_ship_action_rec.weight                    :=  l_dlv_ship_action_tbl(i_ship1).weight                   ;
4136            l_dlv_ship_action_rec.initiate_shipping_flag    :=  l_dlv_ship_action_tbl(i_ship1).initiate_shipping_flag   ;
4133            l_dlv_ship_action_rec.weight_uom                :=  l_dlv_ship_action_tbl(i_ship1).weight_uom               ;
4134            l_dlv_ship_action_rec.ready_to_ship_flag        :=  l_dlv_ship_action_tbl(i_ship1).ready_to_ship_flag       ;
4135            l_dlv_ship_action_rec.initiate_planning_flag    :=  l_dlv_ship_action_tbl(i_ship1).initiate_planning_flag   ;
4137            l_dlv_ship_action_rec.expected_shipment_date    :=  l_dlv_ship_action_tbl(i_ship1).expected_shipment_date   ;
4138            l_dlv_ship_action_rec.uom_code                  :=  l_dlv_ship_action_tbl(i_ship1).uom_code                 ;
4139            l_dlv_ship_action_rec.quantity                  :=  l_dlv_ship_action_tbl(i_ship1).quantity                 ;
4140 
4141            oke_amg_grp.manage_dlv_action
4142               ( p_api_version          =>    p_api_version
4143               , p_init_msg_list         =>    FND_API.G_FALSE
4144               , p_commit                =>    p_commit
4145               , p_action                =>    l_action
4146               , p_dlv_action_type       =>    g_dlv_action_ship
4147               , p_master_inv_org_id     =>    l_org_id
4148               , p_item_dlv              =>    l_item_dlv
4149               , p_dlv_ship_action_rec   =>    l_dlv_ship_action_rec
4150               , p_dlv_req_action_rec    =>    l_dlv_req_action_rec_b
4151               , x_return_status         =>    x_return_status
4152               , x_msg_data              =>    x_msg_data
4153               , x_msg_count             =>    x_msg_count
4154               );
4155 
4156            IF  p_debug_mode = 'Y' THEN
4157               pa_debug.write(g_module_name,'Returned from oke_amg_grp.manage_dlv_action for shipping action ['||x_return_status||']',5);
4158            END IF;
4159 
4160            i_ship1 := l_dlv_ship_action_tbl.next(i_ship1);
4161 
4162        END LOOP;
4163 
4164     END IF;
4165 
4166     IF ( i_proc > 0 ) THEN
4167 
4168        i_proc1 := l_dlv_req_action_tbl.first();
4169 
4170        WHILE (i_proc1 IS NOT NULL) LOOP
4171 
4172            l_dlv_req_action_rec.pa_deliverable_id          :=  l_dlv_req_action_tbl(i_proc1).pa_deliverable_id          ;
4173            l_dlv_req_action_rec.pa_action_id               :=  l_dlv_req_action_tbl(i_proc1).pa_action_id               ;
4174            l_dlv_req_action_rec.action_name                :=  l_dlv_req_action_tbl(i_proc1).action_name                ;
4175            l_dlv_req_action_rec.proc_finnancial_task_id    :=  l_dlv_req_action_tbl(i_proc1).proc_finnancial_task_id    ;
4176            l_dlv_req_action_rec.destination_type_code      :=  l_dlv_req_action_tbl(i_proc1).destination_type_code      ;
4177            l_dlv_req_action_rec.receiving_org_id           :=  l_dlv_req_action_tbl(i_proc1).receiving_org_id           ;
4178            l_dlv_req_action_rec.receiving_location_id      :=  l_dlv_req_action_tbl(i_proc1).receiving_location_id      ;
4179            l_dlv_req_action_rec.po_need_by_date            :=  l_dlv_req_action_tbl(i_proc1).po_need_by_date            ;
4180            l_dlv_req_action_rec.vendor_id                  :=  l_dlv_req_action_tbl(i_proc1).vendor_id                  ;
4181            l_dlv_req_action_rec.vendor_site_id             :=  l_dlv_req_action_tbl(i_proc1).vendor_site_id             ;
4182 --         l_dlv_req_action_rec.project_currency           :=  l_dlv_req_action_tbl(i_proc1).project_currency           ;
4183            l_dlv_req_action_rec.quantity                   :=  l_dlv_req_action_tbl(i_proc1).quantity                   ;
4184            l_dlv_req_action_rec.unit_price                 :=  l_dlv_req_action_tbl(i_proc1).unit_price                 ;
4185            l_dlv_req_action_rec.exchange_rate_type         :=  l_dlv_req_action_tbl(i_proc1).exchange_rate_type         ;
4186            l_dlv_req_action_rec.exchange_rate_date         :=  l_dlv_req_action_tbl(i_proc1).exchange_rate_date         ;
4187            l_dlv_req_action_rec.exchange_rate              :=  l_dlv_req_action_tbl(i_proc1).exchange_rate              ;
4188            l_dlv_req_action_rec.expenditure_type           :=  l_dlv_req_action_tbl(i_proc1).expenditure_type           ;
4189            l_dlv_req_action_rec.expenditure_org_id         :=  l_dlv_req_action_tbl(i_proc1).expenditure_org_id         ;
4190            l_dlv_req_action_rec.expenditure_item_date      :=  l_dlv_req_action_tbl(i_proc1).expenditure_item_date      ;
4191            l_dlv_req_action_rec.requisition_line_type_id   :=  l_dlv_req_action_tbl(i_proc1).requisition_line_type_id   ;
4192            l_dlv_req_action_rec.category_id                :=  l_dlv_req_action_tbl(i_proc1).category_id                ;
4193            l_dlv_req_action_rec.ready_to_procure_flag      :=  l_dlv_req_action_tbl(i_proc1).ready_to_procure_flag      ;
4194            l_dlv_req_action_rec.initiate_procure_flag      :=  l_dlv_req_action_tbl(i_proc1).initiate_procure_flag      ;
4195            l_dlv_req_action_rec.uom_code                   :=  l_dlv_req_action_tbl(i_proc1).uom_code                   ;
4196            l_dlv_req_action_rec.currency                   :=  l_dlv_req_action_tbl(i_proc1).currency                   ;
4197 
4198            oke_amg_grp.manage_dlv_action
4199               (  p_api_version          =>    p_api_version
4200               , p_init_msg_list         =>    FND_API.G_FALSE
4201               , p_commit                =>    p_commit
4202               , p_action                =>    l_action
4203               , p_dlv_action_type       =>    g_dlv_action_proc
4204               , p_master_inv_org_id     =>    l_org_id
4205               , p_item_dlv              =>    l_item_dlv
4206               , p_dlv_ship_action_rec   =>    l_dlv_ship_action_rec_b
4207               , p_dlv_req_action_rec    =>    l_dlv_req_action_rec
4208               , x_return_status         =>    x_return_status
4209               , x_msg_data              =>    x_msg_data
4210               , x_msg_count             =>    x_msg_count
4214               pa_debug.write(g_module_name,'Returned from oke_amg_grp.manage_dlv_action for proc action ['||x_return_status||']',5);
4211               );
4212 
4213        IF  p_debug_mode = 'Y' THEN
4215            END IF;
4216 
4217            i_proc1 := l_dlv_req_action_tbl.next(i_proc1);
4218 
4219       END LOOP;
4220 
4221     END IF;
4222 
4223   --  Invoke the API to create event for billing actions
4224     IF ( i_bill > 0 ) THEN
4225         IF ( p_insert_or_update = g_insert) THEN
4226 
4227            Pa_Event_Pub.create_event
4228            (  p_api_version_number   =>   p_api_version
4229              ,p_commit               =>   p_commit
4230              ,p_init_msg_list        =>   FND_API.G_FALSE
4231              ,p_pm_product_code      =>   l_pm_source_code
4232              ,p_event_in_tbl         =>   l_event_in_tbl
4233              ,p_event_out_tbl        =>   l_event_out_tbl
4234              ,p_msg_count            =>   x_msg_count
4235              ,p_msg_data             =>   x_msg_data
4236              ,p_return_status        =>   x_return_status
4237            );
4238 
4239           IF  p_debug_mode = 'Y' THEN
4240               pa_debug.write(g_module_name,'Returned from Pa_Event_Pub.create_event for billing action ['||x_return_status||']',5);
4241            END IF;
4242 
4243           IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4244                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4245           ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
4246                RAISE  FND_API.G_EXC_ERROR;
4247           END IF;
4248 
4249        ELSIF ( p_insert_or_update = g_update) THEN
4250 
4251          Pa_Event_Pub.Update_Event
4252           (   p_api_version_number   =>   p_api_version
4253             , p_commit               =>   p_commit
4254             , p_init_msg_list        =>   FND_API.G_FALSE
4255             , p_pm_product_code      =>   l_pm_source_code
4256             , p_event_in_tbl         =>   l_event_in_tbl
4257             , p_event_out_tbl        =>   l_event_out_tbl
4258             , p_msg_count            =>   x_msg_count
4259             , p_msg_data             =>   x_msg_data
4260             , p_return_status        =>   x_return_status
4261            );
4262 
4263            IF  p_debug_mode = 'Y' THEN
4264               pa_debug.write(g_module_name,'Returned from Pa_Event_Pub.update_event for billing action ['||x_return_status||']',5);
4265            END IF;
4266 
4267           IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4268                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4269           ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
4270                RAISE  FND_API.G_EXC_ERROR;
4271           END IF;
4272 
4273       END IF; -- p_insert_or_update values
4274     END IF;   -- i_bill > 0
4275 
4276     IF  p_debug_mode = 'Y' THEN
4277         pa_debug.reset_curr_function;
4278         pa_debug.write(g_module_name,l_api_name||': Exiting without error',5);
4279     END IF;
4280 
4281  EXCEPTION
4282    WHEN FND_API.G_EXC_ERROR  THEN
4283       IF (p_commit = FND_API.G_TRUE) THEN
4284          ROLLBACK TO create_dlvr_actions_wrapper;
4285       END IF;
4286       x_return_status := FND_API.G_RET_STS_ERROR;
4287       l_msg_count := FND_MSG_PUB.count_msg;
4288 
4289       IF l_msg_count = 1 AND x_msg_data IS NULL
4290       THEN
4291            PA_INTERFACE_UTILS_PUB.get_messages
4292                (p_encoded        => FND_API.G_FALSE,
4293                 p_msg_index      => 1,
4294                 p_msg_count      => x_msg_count,
4295                 p_msg_data       => l_msg_data,
4296                 p_data           => l_data,
4297                 p_msg_index_out  => l_msg_index_out);
4298 
4299        x_msg_data := l_data;
4300            x_msg_count := l_msg_count;
4301      ELSE
4302           x_msg_count := l_msg_count;
4303 
4304      END IF;
4305 
4306      IF  p_debug_mode = 'Y' THEN
4307           pa_debug.reset_curr_function;
4308           pa_debug.write(g_module_name,l_api_name||': Inside G_EXC_ERROR exception',5);
4309      END IF;
4310 
4311   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
4312      IF (p_commit = FND_API.G_TRUE) THEN
4313         ROLLBACK TO create_dlvr_actions_wrapper;
4314      END IF;
4315      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4316      l_msg_count := FND_MSG_PUB.count_msg;
4317 
4318      IF l_msg_count = 1 AND x_msg_data IS NULL
4319      THEN
4320            PA_INTERFACE_UTILS_PUB.get_messages
4321                (p_encoded        => FND_API.G_FALSE,
4322                 p_msg_index      => 1,
4323                 p_msg_count      => x_msg_count,
4324                 p_msg_data       => l_msg_data,
4325                 p_data           => l_data,
4326                 p_msg_index_out  => l_msg_index_out);
4327 
4328        x_msg_data := l_data;
4329            x_msg_count := l_msg_count;
4330      ELSE
4331           x_msg_count := l_msg_count;
4332 
4333      END IF;
4334 
4335      IF  p_debug_mode = 'Y' THEN
4336           pa_debug.reset_curr_function;
4337           pa_debug.write(g_module_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
4338      END IF;
4339 
4340    WHEN OTHERS THEN
4341       IF (p_commit = FND_API.G_TRUE) THEN
4342          ROLLBACK TO create_dlvr_actions_wrapper;
4343       END IF;
4344       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4345       x_msg_count := 1;
4346       x_msg_data := SQLERRM;
4347 
4348       IF p_debug_mode = 'Y' THEN
4352       END IF;
4349           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
4350           pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
4351           pa_debug.reset_curr_function;
4353 
4354 
4355       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
4356         FND_MSG_PUB.add_exc_msg
4357                    ( p_pkg_name            => G_PKG_NAME
4358                    , p_procedure_name      => l_api_name   );
4359       END IF;
4360   END  Create_Dlvr_Actions_Wrapper;
4361 -------3435905 : FP M : Deliverables Changes For AMG -END--------------------
4362 
4363 PROCEDURE RUN_ACTION_CONC_PROCESS
4364 (
4365  errbuf                 OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4366 ,retcode                OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4367 ,p_function              IN     pa_lookups.lookup_code%TYPE
4368 ,p_project_number_from   IN     pa_projects_all.segment1%TYPE := NULL
4369 ,p_project_number_to     IN     pa_projects_all.segment1%TYPE := NULL
4370 )
4371 IS
4372 l_project_id_tbl             SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE() ;
4373 l_count                      NUMBER ;
4374 l_request_id                 pa_proj_elem_ver_structure.conc_request_id%TYPE;
4375 
4376 l_debug_mode                 VARCHAR2(10);
4377 l_debug_level3               NUMBER := 3;
4378 l_msg_count                  NUMBER := 0;
4379 l_msg_data                   VARCHAR2(2000);
4380 l_data                       VARCHAR2(2000);
4381 l_msg_index_out              NUMBER;
4382 l_return_status              VARCHAR2(2000);
4383 l_error_message_code         VARCHAR2(2000);
4384 -- Added for Bug Number 4907103
4385 l_project_number_from    pa_projects_all.segment1%TYPE :=nvl(p_project_number_from,p_project_number_to);
4386 l_project_number_to pa_projects_all.segment1%TYPE :=nvl(p_project_number_to,p_project_number_from) ;
4387 -- 3752898
4388 -- We need this variable only for passing to OKE API
4389 -- Though they dont have any logic as of now to re-initialise Message stack if l_init_msg_list is TRUE ,
4390 -- Its not correct to initialise this variable as TRUE .By default this value should be FALSE
4391 l_init_msg_list              VARCHAR2(20) := FND_API.G_FALSE ;
4392 
4393 l_valid                      VARCHAR2(1);
4394 
4395 /* Commented for Bug Number 4907103
4396 CURSOR c_project_id_range IS
4397 SELECT proj.project_id
4398 FROM PA_PROJECTS_ALL proj
4399 WHERE segment1 between nvl(p_project_number_from,p_project_number_to)
4400                    and nvl(p_project_number_to,p_project_number_from) ;
4401 */
4402 -- Changed  for Bug Number 4907103
4403 CURSOR c_project_id_range IS
4404 SELECT proj.project_id
4405 FROM PA_PROJECTS_ALL proj
4406 WHERE segment1 between l_project_number_from and l_project_number_to;
4407 -- End of BugNumber 4907103
4408 CURSOR c_valid_project_number_entry(l_project_number IN pa_projects_all.segment1%TYPE) IS
4409 SELECT 'Y'
4410 FROM PA_PROJECTS_ALL
4411 WHERE segment1 = l_project_number;
4412 
4413 BEGIN
4414 
4415  -- Set the error stack.
4416 pa_debug.set_err_stack('PA_ACTIONS_PUB.RUN_ACTION_CONC_PROCESS');
4417 
4418 -- Get the Debug mode into local variable and set it to 'Y'if its NULL
4419 l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
4420 
4421 l_request_id  := FND_GLOBAL.CONC_REQUEST_ID;
4422 retcode       := '0';
4423 errbuf        := NULL;
4424 
4425  -- Initialize the return status to success
4426  l_return_status := FND_API.G_RET_STS_SUCCESS;
4427  pa_debug.set_process('PLSQL','LOG',l_debug_mode);
4428 
4429 IF l_debug_mode = 'Y' THEN
4430      pa_debug.set_curr_function( p_function   => 'RUN_ACTION_CONC_PROCESS',
4431                                  p_debug_mode => l_debug_mode );
4432      pa_debug.g_err_stage:= 'Entering RUN_ACTION_CONC_PROCESS : ' || l_request_id;
4433      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4434 END IF;
4435 
4436 --Printing Input Parameters
4437 
4438 IF l_debug_mode = 'Y' THEN
4439      pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Function is :' || p_function ;
4440      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4441      pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Project Number From is :' || p_project_number_from ;
4442      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4443      pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Project Number To is :' || p_project_number_to ;
4444      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4445 END IF;
4446 
4447 --Valid Parameter Validations
4448 IF ( (p_project_number_from IS NOT NULL) OR (p_project_number_to IS NOT NULL) ) THEN
4449      IF p_project_number_from IS NOT NULL THEN
4450           OPEN c_valid_project_number_entry(p_project_number_from) ;
4451           FETCH c_valid_project_number_entry INTO l_valid ;
4452 
4453           IF c_valid_project_number_entry%NOTFOUND THEN
4454                IF l_debug_mode = 'Y' THEN
4455                     pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Invalid value entered for Project Number From';
4456                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4457                END IF;
4458                l_return_status := FND_API.G_RET_STS_ERROR;
4459                PA_UTILS.ADD_MESSAGE
4460                 (p_app_short_name => 'PA',
4461                      p_msg_name       => 'PA_INV_PARAM_PASSED');
4462                CLOSE c_valid_project_number_entry ;
4463                RAISE Invalid_Arg_Exc_Dlv;
4467           FETCH c_valid_project_number_entry INTO l_valid ;
4464           END IF ;
4465      ELSE
4466           OPEN c_valid_project_number_entry(p_project_number_to) ;
4468 
4469           IF c_valid_project_number_entry%NOTFOUND THEN
4470                IF l_debug_mode = 'Y' THEN
4471                     pa_debug.g_err_stage:= 'RUN_ACTION_CONC_PROCESS : Invalid value entered for Project Number To' ;
4472                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4473                END IF;
4474                l_return_status := FND_API.G_RET_STS_ERROR;
4475                PA_UTILS.ADD_MESSAGE
4476                         (p_app_short_name => 'PA',
4477                          p_msg_name       => 'PA_INV_PARAM_PASSED');
4478            CLOSE c_valid_project_number_entry ;
4479                RAISE Invalid_Arg_Exc_Dlv;
4480           END IF ;
4481       END IF;
4482 END IF;
4483 
4484 --Business Rule Validations
4485 IF (p_function IS NULL) THEN
4486      IF l_debug_mode = 'Y' THEN
4487           pa_debug.g_err_stage:= 'Mandatory parameter to this API : Function is NULL';
4488           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4489      END IF;
4490      l_return_status := FND_API.G_RET_STS_ERROR;
4491      PA_UTILS.ADD_MESSAGE
4492            (p_app_short_name => 'PA',
4493             p_msg_name       => 'PA_INV_PARAM_PASSED');
4494      RAISE Invalid_Arg_Exc_Dlv;
4495 END IF;
4496 
4497 IF l_debug_mode = 'Y' THEN
4498     pa_debug.g_err_stage := 'Before doing cursor operation';
4499     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4500 END IF;
4501 
4502 OPEN   c_project_id_range ;
4503 FETCH  c_project_id_range  BULK COLLECT INTO l_project_id_tbl ;
4504 CLOSE  c_project_id_range;
4505 
4506 IF l_debug_mode = 'Y' THEN
4507     pa_debug.g_err_stage := 'After fetching the project id range into local table';
4508     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4509 END IF;
4510 
4511 IF(NVL(l_project_id_tbl.LAST,0) > 0) THEN
4512 
4513      IF l_debug_mode = 'Y' THEN
4514           pa_debug.g_err_stage := 'Project Id table is not empty';
4515           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4516      END IF;
4517 
4518     FOR l_count IN l_project_id_tbl.FIRST..l_project_id_tbl.LAST LOOP
4519 
4520         --Bug   3611598 If and Only if Deliverable is Enabled for a Project,Proceed
4521 
4522         PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Type_Exists
4523         (
4524           p_project_id     => l_project_id_tbl(l_count)
4525          ,p_structure_type => 'DELIVERABLE'
4526          ,x_return_status  => l_return_status
4527          ,x_error_message_code => l_error_message_code
4528         );
4529 
4530         IF l_return_status = 'E' THEN -- This API returns 'E' if Structure Type is Enabled
4531 
4532              IF p_function = 'DEMAND' THEN
4533                   OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4534                                   P_PROJECT_ID     => l_project_id_tbl(l_count)
4535                                  ,P_Task_ID        => null
4536                                  ,P_Init_Msg_List  => l_init_msg_list
4537                                  ,X_RETURN_STATUS  => l_return_status
4538                                  ,X_MSG_COUNT      => l_msg_count
4539                                  ,X_MSG_DATA       => l_msg_data
4540                             );
4541                      IF l_debug_mode = 'Y' THEN
4542                           pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status ;
4543                           pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4544                           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4545                      END IF;
4546 
4547                      IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4548                           RAISE Invalid_Arg_Exc_Dlv ;
4549                      END IF ;
4550             ELSIF p_function = 'PROCUREMENT' THEN
4551              OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4552                             P_PROJECT_ID     => l_project_id_tbl(l_count)
4553                             ,P_Task_ID        => null
4554                             ,P_Init_Msg_List  => l_init_msg_list
4555                             ,X_RETURN_STATUS  => l_return_status
4556                             ,X_MSG_COUNT      => l_msg_count
4557                             ,X_MSG_DATA       => l_msg_data
4558                                          );
4559                     IF l_debug_mode = 'Y' THEN
4560                              pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4561                              pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4562                              pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4563                     END IF;
4564 
4565                     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4566                              RAISE Invalid_Arg_Exc_Dlv ;
4567                     END IF ;
4568 
4569              ELSIF p_function = 'BOTH' THEN
4570                  OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4571                                    P_PROJECT_ID     => l_project_id_tbl(l_count)
4572                                   ,P_Task_ID        => null
4573                                   ,P_Init_Msg_List  => l_init_msg_list
4577                                );
4574                                   ,X_RETURN_STATUS  => l_return_status
4575                                   ,X_MSG_COUNT      => l_msg_count
4576                                   ,X_MSG_DATA       => l_msg_data
4578                         IF l_debug_mode = 'Y' THEN
4579                              pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status;
4580                              pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4581                              pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4582                         END IF;
4583 
4584                     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4585                          RAISE Invalid_Arg_Exc_Dlv ;
4586                     END IF ;
4587                     OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4588                             P_PROJECT_ID     => l_project_id_tbl(l_count)
4589                             ,P_Task_ID        => null
4590                             ,P_Init_Msg_List  => l_init_msg_list
4591                             ,X_RETURN_STATUS  => l_return_status
4592                             ,X_MSG_COUNT      => l_msg_count
4593                             ,X_MSG_DATA       => l_msg_data
4594                             );
4595                     IF l_debug_mode = 'Y' THEN
4596                              pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4597                              pa_debug.g_err_stage := pa_debug.g_err_stage || ' for project id '||l_project_id_tbl(l_count) ;
4598                              pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4599                     END IF;
4600 
4601                     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4602                          RAISE Invalid_Arg_Exc_Dlv ;
4603                     END IF ;
4604 
4605              END IF;
4606 
4607         END IF;
4608 
4609     END LOOP;
4610      IF l_debug_mode = 'Y' THEN
4611           pa_debug.g_err_stage := 'After Calling OKE API for all the actions (passed project id)';
4612           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4613      END IF;
4614 
4615 ELSE
4616 
4617      IF l_debug_mode = 'Y' THEN
4618           pa_debug.g_err_stage := 'Here,No Project Id range is entered';
4619           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4620      END IF;
4621 
4622     IF p_function = 'DEMAND' THEN
4623 
4624                IF l_debug_mode = 'Y' THEN
4625                     pa_debug.g_err_stage := 'Selected Option is Initiate Demand(project_id is null)';
4626                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4627                END IF;
4628 
4629              OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4630                              P_PROJECT_ID     => null
4631                             ,P_Task_ID        => null
4632                             ,P_Init_Msg_List  => l_init_msg_list
4633                             ,X_RETURN_STATUS  => l_return_status
4634                             ,X_MSG_COUNT      => l_msg_count
4635                             ,X_MSG_DATA       => l_msg_data
4636                             );
4637                IF l_debug_mode = 'Y' THEN
4638                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status;
4639                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4640                END IF;
4641 
4642                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4643                 RAISE Invalid_Arg_Exc_Dlv ;
4644             END IF ;
4645 
4646      ELSIF p_function = 'PROCUREMENT' THEN
4647 
4648           IF l_debug_mode = 'Y' THEN
4649           pa_debug.g_err_stage := 'Selected Option is Initiate Procurement(project_id is null)';
4650           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4651           END IF;
4652              OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4653                             P_PROJECT_ID     => null
4654                             ,P_Task_ID        => null
4655                             ,P_Init_Msg_List  => l_init_msg_list
4656                             ,X_RETURN_STATUS  => l_return_status
4657                             ,X_MSG_COUNT      => l_msg_count
4658                             ,X_MSG_DATA       => l_msg_data
4659                             );
4660                IF l_debug_mode = 'Y' THEN
4661                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4662                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4663                END IF;
4664 
4665 
4666                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4667                 RAISE Invalid_Arg_Exc_Dlv ;
4668             END IF ;
4669     ELSIF p_function = 'BOTH' THEN
4670 
4671                IF l_debug_mode = 'Y' THEN
4672                     pa_debug.g_err_stage := 'Selected Option is All(project_id is null)';
4673                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4674                END IF;
4675 
4676              OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS(
4677                                              P_PROJECT_ID     => null
4678                             ,P_Task_ID        => null
4679                             ,P_Init_Msg_List  => l_init_msg_list
4680                                 ,X_RETURN_STATUS  => l_return_status
4684                IF l_debug_mode = 'Y' THEN
4681                                 ,X_MSG_COUNT      => l_msg_count
4682                             ,X_MSG_DATA       => l_msg_data
4683                             );
4685                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_MDS returned status :' || l_return_status;
4686                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4687                END IF;
4688 
4689                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4690                 RAISE Invalid_Arg_Exc_Dlv ;
4691             END IF ;
4692 
4693                OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ(
4694                                                       P_PROJECT_ID     => null
4695                                                      ,P_Task_ID        => null
4696                                                      ,P_Init_Msg_List  => l_init_msg_list
4697                                                      ,X_RETURN_STATUS  => l_return_status
4698                                                      ,X_MSG_COUNT      => l_msg_count
4699                                                      ,X_MSG_DATA       => l_msg_data
4700                                                 );
4701 
4702                IF l_debug_mode = 'Y' THEN
4703                     pa_debug.g_err_stage := 'OKE_DELIVERABLE_UTILS_PUB.BATCH_REQ returned status :' || l_return_status;
4704                     pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4705                END IF;
4706 
4707                IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4708                 RAISE Invalid_Arg_Exc_Dlv ;
4709             END IF ;
4710          END IF;
4711 
4712 END IF;
4713 
4714 IF l_debug_mode = 'Y' THEN
4715      pa_debug.g_err_stage:= 'Exiting RUN_ACTION_CONC_PROCESS';
4716      pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4717      pa_debug.reset_err_stack;
4718      pa_debug.reset_curr_function;    --Added for bug 4945876
4719 END IF;
4720 
4721 EXCEPTION
4722 
4723 WHEN Invalid_Arg_Exc_Dlv THEN
4724      l_return_status := FND_API.G_RET_STS_ERROR;
4725      l_msg_count := FND_MSG_PUB.count_msg;
4726      retcode     := '-1';
4727 
4728      IF l_debug_mode = 'Y' THEN
4729         pa_debug.g_err_stage := 'Inside Invalid Argument exception of RUN_ACTION_CONC_PROCESS';
4730         pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' ||  pa_debug.g_err_stage);
4731      END IF;
4732 
4733      IF  c_project_id_range%ISOPEN THEN
4734           CLOSE c_project_id_range ;
4735      END IF;
4736 
4737      IF c_valid_project_number_entry%ISOPEN THEN
4738           CLOSE c_valid_project_number_entry ;
4739      END IF;
4740 
4741      IF c_valid_project_number_entry%ISOPEN THEN
4742           CLOSE c_valid_project_number_entry ;
4743      END IF ;
4744 
4745      IF l_msg_count >= 1 THEN
4746            PA_INTERFACE_UTILS_PUB.get_messages
4747                (p_encoded        => FND_API.G_TRUE,
4748                 p_msg_index      => 1,
4749                 p_msg_count      => l_msg_count,
4750                 p_msg_data       => l_msg_data,
4751                 p_data           => l_data,
4752                 p_msg_index_out  => l_msg_index_out);
4753                 errbuf := l_data;
4754      END IF;
4755 
4756      IF l_debug_mode = 'Y' THEN
4757           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_Stack);
4758           pa_debug.reset_err_stack;
4759 	  pa_debug.reset_curr_function;    --Added for bug 4945876
4760      END IF ;
4761      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 */
4762 
4763 WHEN OTHERS THEN
4764      l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4765      retcode         := '-1';
4766      errbuf          := SQLERRM;
4767 
4768      IF  c_project_id_range%ISOPEN THEN
4769      CLOSE c_project_id_range ;
4770      END IF;
4771 
4772      IF c_valid_project_number_entry%ISOPEN THEN
4773           CLOSE c_valid_project_number_entry ;
4774      END IF;
4775 
4776      IF c_valid_project_number_entry%ISOPEN THEN
4777           CLOSE c_valid_project_number_entry ;
4778      END IF ;
4779 
4780      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
4781                      ,p_procedure_name  => 'RUN_ACTION_CONC_PROCESS'
4782                      ,p_error_text      => errbuf);
4783 
4784      IF l_debug_mode = 'Y' THEN
4785           pa_debug.g_err_stage:='Unexpected Error'||errbuf;
4786           pa_debug.write_file('RUN_ACTION_CONC_PROCESS :' || pa_debug.g_err_stage);
4787           pa_debug.reset_err_stack;
4788 	  pa_debug.reset_curr_function;    --Added for bug 4945876
4789      END IF;
4790 
4791      RAISE;
4792 END  RUN_ACTION_CONC_PROCESS ;
4793 
4794 
4795 -- SubProgram           : UPD_DLV_ACTIONS_IN_BULK_TM ( 3578694 )
4796 -- Type                 : PROCEDURE
4797 -- Purpose              : Public API to Update Deliverable Actions From TM Home Actions Page
4798 -- Note                 : Its a BULK API
4799 -- Assumptions          : None
4800 -- Parameter                      IN/OUT        Type         Required     Description and Purpose
4801 -- ---------------------------  ---------    ----------      ---------    ---------------------------
4802 -- p_api_version                   IN          NUMBER            N      Standard Parameter
4803 -- p_init_msg_list                 IN          VARCHAR2          N      Standard Parameter
4804 -- p_commit                        IN          VARCHAR2          N      Standard Parameter
4808 -- p_debug_mode                    IN          VARCHAR2          N      Standard Parameter
4805 -- p_validate_only                 IN          VARCHAR2          N      Standard Parameter
4806 -- p_validation_level              IN          NUMBER            N      Standard Parameter
4807 -- p_calling_module                IN          VARCHAR2          N      Standard Parameter
4809 -- p_max_msg_count                 IN          NUMBER            N        Standard Parameter
4810 -- p_name_tbl                      IN          PLSQL Table       N        Action Name
4811 -- p_manager_person_id_tbl         IN          PLSQL Table       N        Manager Id
4812 -- p_function_code_tbl             IN          PLSQL Table       N        Action Function
4813 -- p_due_date_tbl                  IN          PLSQL Table       N        Due Date
4814 -- p_completed_flag_tbl            IN          PLSQL Table       N        Completed Flag
4815 -- p_completion_date_tbl           IN          PLSQL Table       N        Completed Date
4816 -- p_description_tbl               IN          PLSQL Table       N        Description
4817 -- p_attribute_category_tbl        IN          PLSQL Table       N        DFF Field
4818 -- p_attribute1_tbl                IN          PLSQL Table       N        DFF Filed
4819 -- p_attribute2_tbl                IN          PLSQL Table       N        DFF Field
4820 -- p_attribute3_tbl                IN          PLSQL Table       N        DFF Filed
4821 -- p_attribute4_tbl                IN          PLSQL Table       N        DFF Field
4822 -- p_attribute5_tbl                IN          PLSQL Table       N        DFF Filed
4823 -- p_attribute6_tbl                IN          PLSQL Table       N        DFF Field
4824 -- p_attribute7_tbl                IN          PLSQL Table       N        DFF Filed
4825 -- p_attribute8_tbl                IN          PLSQL Table       N        DFF Field
4826 -- p_attribute9_tbl                IN          PLSQL Table       N        DFF Filed
4827 -- p_attribute10_tbl               IN          PLSQL Table       N        DFF Field
4828 -- p_attribute11_tbl               IN          PLSQL Table       N        DFF Filed
4829 -- p_attribute12_tbl               IN          PLSQL Table       N        DFF Field
4830 -- p_attribute13_tbl               IN          PLSQL Table       N        DFF Filed
4831 -- p_attribute14_tbl               IN          PLSQL Table       N        DFF Field
4832 -- p_attribute15_tbl               IN          PLSQL Table       N        DFF Filed
4833 -- p_element_version_id_tbl        IN          PLSQL Table       N        Action VErsion Id
4834 -- p_proj_element_id_tbl           IN          PLSQL Table       N        Action Element Id
4835 -- p_record_version_number_tbl     IN          PLSQL Table       N        Record Version NUmber
4836 -- p_project_id_tbl                IN          PLSQL Table       N        Project Id
4837 -- p_object_id_tbl                 IN          PLSQL Table       Y        Parent Id
4838 -- p_object_version_id_tbl         IN          PLSQL Table       N        Parent Version ID
4839 -- p_object_type                   IN          VARCHAR2          Y        Parent Type
4840 -- p_pm_source_code                IN          NUMBER            N        PM Source Code
4841 -- p_pm_source_reference           IN          VARCHAR2          N        PM Source Reference
4842 -- p_insert_or_update              IN          VARCHAR2          N        Identifies the API Mode
4843 -- x_return_status                 OUT         VARCHAR2          N        Mandatory Out Parameter
4844 -- x_msg_count                     OUT         NUMBER            N        Mandatory Out Parameter
4845 -- x_msg_data                      OUT         VARCHAR2          N        Mandatory Out Parameter
4846 
4847 PROCEDURE UPD_DLV_ACTIONS_IN_BULK_TM
4848      (p_api_version               IN NUMBER    :=1.0
4849      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
4850      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
4851      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
4852      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
4853      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
4854      ,p_debug_mode                IN VARCHAR2  :='N'
4855      ,p_max_msg_count             IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4856      ,p_name_tbl                  IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4857      ,p_manager_person_id_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4858      ,p_function_code_tbl         IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
4859      ,p_due_date_tbl              IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
4860      ,p_completed_flag_tbl        IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()
4861      ,p_completion_date_tbl       IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()
4862      ,p_description_tbl           IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE()
4863      ,p_attribute_category_tbl    IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
4864      ,p_attribute1_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4865      ,p_attribute2_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4866      ,p_attribute3_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4867      ,p_attribute4_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4868      ,p_attribute5_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4869      ,p_attribute6_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4870      ,p_attribute7_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4874      ,p_attribute11_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4871      ,p_attribute8_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4872      ,p_attribute9_tbl            IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4873      ,p_attribute10_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4875      ,p_attribute12_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4876      ,p_attribute13_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4877      ,p_attribute14_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4878      ,p_attribute15_tbl           IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
4879      ,p_element_version_id_tbl    IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4880      ,p_proj_element_id_tbl       IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4881      ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4882      ,p_project_id_tbl            IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4883      ,p_object_id_tbl             IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4884      ,p_object_version_id_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()
4885      ,p_object_type               IN PA_LOOKUPS.LOOKUP_CODE%TYPE
4886      ,p_pm_source_code            IN pa_proj_elements.pm_source_code%TYPE := null
4887      ,p_pm_source_reference       IN pa_proj_elements.pm_source_reference%TYPE := null
4888      ,p_pm_source_reference_tbl   IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
4889      ,p_insert_or_update          IN VARCHAR2 := 'UPDATE'
4890      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4891      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4892      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4893      )
4894 IS
4895 
4896      l_debug_mode                 VARCHAR2(10);
4897      l_msg_count                  NUMBER ;
4898      l_data                       VARCHAR2(2000);
4899      l_msg_data                   VARCHAR2(2000);
4900      l_msg_index_out              NUMBER;
4901 
4902      l_upd_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4903      l_upd_mgr_person_id_tbl      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4904      l_upd_function_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
4905      l_upd_due_date_tbl           SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
4906      l_upd_comp_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE()      ;
4907      l_upd_comp_date_tbl          SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
4908      l_upd_element_id_tbl         SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4909      l_upd_element_ver_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4910      l_upd_rec_ver_num_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4911      l_upd_description_tbl        SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE();
4912      l_upd_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()    ;
4913      l_upd_attribute1_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4914      l_upd_attribute2_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4915      l_upd_attribute3_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4916      l_upd_attribute4_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4917      l_upd_attribute5_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4918      l_upd_attribute6_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4919      l_upd_attribute7_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4920      l_upd_attribute8_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4921      l_upd_attribute9_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4922      l_upd_attribute10_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4923      l_upd_attribute11_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4924      l_upd_attribute12_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4925      l_upd_attribute13_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4926      l_upd_attribute14_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4927      l_upd_attribute15_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4928 
4929      j_upd NUMBER ;
4930 
4931      l_name_tbl                   SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE()   ;
4932      l_completed_flag_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE()      ;
4933      l_completion_date_tbl        SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
4934      l_description_tbl            SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE();
4935      l_function_code_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
4936      l_due_date_tbl               SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE()                   ;
4937      l_element_version_id_tbl     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4938      l_proj_element_id_tbl        SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4942      l_object_id                  NUMBER;
4939      l_user_action_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
4940      l_action_owner_id_tbl        SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()                     ;
4941      l_pm_source_reference_tbl    SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE()     ;
4943      l_object_version_id          NUMBER;
4944      l_project_id                 NUMBER;
4945 
4946      l_return_status              VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
4947      l_count NUMBER;
4948 
4949 BEGIN
4950 
4951      -- this api will be called from TM Home Update Actions Page
4952      -- popluate plsql table, having single row, and pass this table
4953      -- to validation actions api for validations
4954      -- if validations are successful, call UPDATE_DLV_ACTIONS_IN_BULK api
4955 
4956      x_msg_count := 0;
4957      x_return_status := FND_API.G_RET_STS_SUCCESS;
4958      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
4959 
4960      IF l_debug_mode = 'Y' THEN
4961           PA_DEBUG.set_curr_function( p_function   => 'UPD_DLV_ACTIONS_IN_BULK_TM',
4962                                       p_debug_mode => l_debug_mode );
4963           pa_debug.g_err_stage:= 'Inside UPD_DLV_ACTIONS_IN_BULK_TM ';
4964           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
4965      END IF;
4966 
4967      IF l_debug_mode = 'Y' THEN
4968           pa_debug.g_err_stage:= 'Printing Input parameters';
4969           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
4970           pa_debug.write(g_module_name,'p_insert_or_update'||':'||p_insert_or_update,3) ;
4971      END IF;
4972 
4973      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
4974       FND_MSG_PUB.initialize;
4975      END IF;
4976 
4977      IF (p_commit = FND_API.G_TRUE) THEN
4978       savepoint CR_UP_DLV_ACTIONS_SP ;
4979      END IF;
4980 
4981      -- Call the validation API. It will
4982      -- perform all the validation.
4983      IF l_debug_mode = 'Y' THEN
4984           pa_debug.g_err_stage:= 'Calling PA_ACTIONS_PUB.VALIDATE_ACTIONS';
4985           pa_debug.write(g_module_name,pa_debug.g_err_stage,3) ;
4986      END IF ;
4987 
4988      l_name_tbl.extend;
4989      l_completed_flag_tbl.extend;
4990      l_completion_date_tbl.extend;
4991      l_description_tbl.extend;
4992      l_function_code_tbl.extend;
4993      l_due_date_tbl.extend;
4994      l_element_version_id_tbl.extend;
4995      l_proj_element_id_tbl.extend;
4996      l_user_action_tbl.extend;
4997      l_action_owner_id_tbl.extend;
4998      l_pm_source_reference_tbl.extend;
4999 
5000      l_count:= 0;
5001 
5002      IF l_debug_mode = 'Y' THEN
5003           pa_debug.write(g_module_name,'No of actions ' || p_name_tbl.last,3) ;
5004      END IF ;
5005 
5006      IF nvl(p_name_tbl.last,0) >= 1 THEN -- Only if something is fetched
5007 
5008          l_count := l_count + 1;
5009 
5010          FOR i in p_name_tbl.FIRST .. p_name_tbl.LAST LOOP
5011 
5012              IF l_debug_mode = 'Y' THEN
5013                   pa_debug.write(g_module_name,'i ' || i,3) ;
5014              END IF ;
5015 
5016              l_name_tbl(l_count)                    := p_name_tbl(i);
5017 
5018              l_completed_flag_tbl(l_count)          := p_completed_flag_tbl(i);
5019              l_completion_date_tbl(l_count)         := p_completion_date_tbl(i);
5020              l_description_tbl(l_count)             := p_description_tbl(i);
5021              l_function_code_tbl(l_count)           := p_function_code_tbl(i);
5022              l_due_date_tbl(l_count)                := p_due_date_tbl(i);
5023              l_element_version_id_tbl(l_count)      := p_element_version_id_tbl(i);
5024              l_proj_element_id_tbl(l_count)         := p_proj_element_id_tbl(i);
5025              l_user_action_tbl(l_count)             := 'MODIFIED';
5026              l_action_owner_id_tbl(l_count)         := p_manager_person_id_tbl(i);
5027              l_object_id                            := p_object_id_tbl(i);
5028              l_object_version_id                    := p_object_version_id_tbl(i);
5029              l_project_id                           := p_project_id_tbl(i);
5030 
5031              IF l_debug_mode = 'Y' THEN
5032                   pa_debug.write(g_module_name,' validating action p_element_version_id_tbl ' || p_element_version_id_tbl(i) ,3) ;
5033                   pa_debug.write(g_module_name,' validating action ( version id ) ' || l_element_version_id_tbl(l_count) ,3) ;
5034              END IF ;
5035 
5036              PA_ACTIONS_PUB.VALIDATE_ACTIONS
5037                     ( p_init_msg_list         => FND_API.G_FALSE
5038                      ,p_debug_mode            => l_debug_mode
5039                      ,p_name_tbl              => l_name_tbl
5040                      ,p_completed_flag_tbl    => l_completed_flag_tbl
5041                      ,p_completion_date_tbl   => l_completion_date_tbl
5042                      ,p_description_tbl       => l_description_tbl
5043                      ,p_function_code_tbl     => l_function_code_tbl
5044                      ,p_due_date_tbl          => l_due_date_tbl
5045                      ,p_element_version_id_tbl=> l_element_version_id_tbl
5046                      ,p_proj_element_id_tbl   => l_proj_element_id_tbl
5047                      ,p_user_action_tbl       => l_user_action_tbl
5048                      ,p_object_id             => l_object_id
5049                      ,p_object_version_id     => l_object_version_id
5050                      ,p_object_type           => p_object_type
5051                      ,p_project_id            => l_project_id
5052                      ,p_action_owner_id_tbl   => l_action_owner_id_tbl
5053                      ,p_carrying_out_org_id   => NULL
5054                      ,p_action_reference_tbl  => p_pm_source_reference_tbl
5055                      ,p_deliverable_id        => l_object_id
5056                      ,p_insert_or_update      => 'UPDATE'
5057                      ,x_return_status         => x_return_status
5058                      ,x_msg_count             => x_msg_count
5059                      ,x_msg_data              => x_msg_data
5060                    ) ;
5061 
5062                    IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5063                         l_return_status := FND_API.G_RET_STS_ERROR;
5064                    END IF;
5065 
5066          END LOOP ;
5067 
5068      END IF;
5069 
5070      IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5071               RAISE Invalid_Arg_Exc_Dlv ;
5072      END IF ;
5073 
5074      -- Loop through p_name_tbl to find out the
5075      -- actions which are updated by user.
5076 
5077      -- Initialize the local variable
5078      j_upd := 0 ;
5079 
5080      IF nvl(p_name_tbl.last,0) >= 1 THEN -- Only if something is fetched
5081 
5085                          pa_debug.g_err_stage:= 'Update Operation';
5082           FOR i in p_name_tbl.FIRST .. p_name_tbl.LAST LOOP
5083 
5084                     IF l_debug_mode = 'Y' THEN
5086                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5087                     END IF;
5088 
5089                     j_upd:=j_upd+1 ;
5090 
5091                     -- Get all the actions which are updated, into
5092                     -- local plsql tables, which will be used to
5093                     -- call PLSQL bulk API for update.
5094 
5095                     -- extend the size of PLSQL table
5096                     l_upd_element_id_tbl.extend        ;
5097                     l_upd_element_ver_id_tbl.extend    ;
5098                     l_upd_rec_ver_num_id_tbl.extend    ;
5099                     l_upd_name_tbl.extend              ;
5100                     l_upd_function_code_tbl.extend     ;
5101                     l_upd_mgr_person_id_tbl.extend     ;
5102                     l_upd_due_date_tbl.extend          ;
5103                     l_upd_comp_flag_tbl.extend         ;
5104                     l_upd_comp_date_tbl.extend         ;
5105                     l_upd_attribute_category_tbl.extend;
5106                     l_upd_attribute1_tbl.extend        ;
5107                     l_upd_attribute2_tbl.extend        ;
5108                     l_upd_attribute3_tbl.extend        ;
5109                     l_upd_attribute4_tbl.extend        ;
5110                     l_upd_attribute5_tbl.extend        ;
5111                     l_upd_attribute6_tbl.extend        ;
5112                     l_upd_attribute7_tbl.extend        ;
5113                     l_upd_attribute8_tbl.extend        ;
5114                     l_upd_attribute9_tbl.extend        ;
5115                     l_upd_attribute10_tbl.extend       ;
5116                     l_upd_attribute11_tbl.extend       ;
5117                     l_upd_attribute12_tbl.extend       ;
5118                     l_upd_attribute13_tbl.extend       ;
5119                     l_upd_attribute14_tbl.extend       ;
5120                     l_upd_attribute15_tbl.extend       ;
5121                     l_upd_description_tbl.extend       ;
5122 
5123                     l_upd_element_id_tbl(j_upd)      := p_proj_element_id_tbl(i)           ;
5124                     l_upd_element_ver_id_tbl(j_upd)  := p_element_version_id_tbl(i)        ;
5125                     l_upd_rec_ver_num_id_tbl(j_upd)  := p_record_version_number_tbl(i)     ;
5126                     l_upd_name_tbl(j_upd)            := p_name_tbl(i)                      ;
5127                     l_upd_function_code_tbl(j_upd)   := p_function_code_tbl(i)             ;
5128 
5129 --                    IF p_object_type <> g_dlvr_types THEN // removed for bug# 3578694, not required condition
5130                          l_upd_mgr_person_id_tbl(j_upd)     := p_manager_person_id_tbl(i)  ;
5131                          l_upd_due_date_tbl(j_upd)          := p_due_date_tbl(i)           ;
5132                          l_upd_comp_flag_tbl(j_upd)         := p_completed_flag_tbl(i)     ;
5133                          l_upd_comp_date_tbl(j_upd)         := p_completion_date_tbl(i)    ;
5134                          l_upd_attribute_category_tbl(j_upd):= p_attribute_category_tbl(i) ;
5135                          l_upd_attribute1_tbl(j_upd)        := p_attribute1_tbl(i)         ;
5136                          l_upd_attribute2_tbl(j_upd)        := p_attribute2_tbl(i)         ;
5137                          l_upd_attribute3_tbl(j_upd)        := p_attribute3_tbl(i)         ;
5138                          l_upd_attribute4_tbl(j_upd)        := p_attribute4_tbl(i)         ;
5139                          l_upd_attribute5_tbl(j_upd)        := p_attribute5_tbl(i)         ;
5140                          l_upd_attribute6_tbl(j_upd)        := p_attribute6_tbl(i)         ;
5141                          l_upd_attribute7_tbl(j_upd)        := p_attribute7_tbl(i)         ;
5142                          l_upd_attribute8_tbl(j_upd)        := p_attribute8_tbl(i)         ;
5143                          l_upd_attribute9_tbl(j_upd)        := p_attribute9_tbl(i)         ;
5144                          l_upd_attribute10_tbl(j_upd)       := p_attribute10_tbl(i)        ;
5145                          l_upd_attribute11_tbl(j_upd)       := p_attribute11_tbl(i)        ;
5146                          l_upd_attribute12_tbl(j_upd)       := p_attribute12_tbl(i)        ;
5147                          l_upd_attribute13_tbl(j_upd)       := p_attribute13_tbl(i)        ;
5148                          l_upd_attribute14_tbl(j_upd)       := p_attribute14_tbl(i)        ;
5149                          l_upd_attribute15_tbl(j_upd)       := p_attribute15_tbl(i)        ;
5150                          l_upd_description_tbl(j_upd)       := p_description_tbl(i)        ;
5151 --                    END IF ;
5152 
5153 
5154           END LOOP ;
5155 
5156 
5157          -- Call Update API to perform the update operation
5158          IF j_upd > 0 THEN
5159 
5160                IF l_debug_mode = 'Y' THEN
5161                          pa_debug.g_err_stage:= 'Call UPDATE_DLV_ACTIONS_IN_BULK ';
5162                          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5163                END IF;
5164 
5165                PA_ACTIONS_PUB.UPDATE_DLV_ACTIONS_IN_BULK
5166                     (p_api_version               => p_api_version
5167                     ,p_init_msg_list             => FND_API.G_FALSE
5168                     ,p_commit                    => p_commit
5169                     ,p_validate_only             => p_validate_only
5170                     ,p_validation_level          => p_validation_level
5171                     ,p_calling_module            => p_calling_module
5172                     ,p_debug_mode                => l_debug_mode
5173                     ,p_max_msg_count             => p_max_msg_count
5174                     ,p_name_tbl                  => l_upd_name_tbl
5175                     ,p_manager_person_id_tbl     => l_upd_mgr_person_id_tbl
5176                     ,p_function_code_tbl         => l_upd_function_code_tbl
5177                     ,p_due_date_tbl              => l_upd_due_date_tbl
5181                     ,p_attribute_category_tbl    => l_upd_attribute_category_tbl
5178                     ,p_completed_flag_tbl        => l_upd_comp_flag_tbl
5179                     ,p_completion_date_tbl       => l_upd_comp_date_tbl
5180                     ,p_description_tbl           => l_upd_description_tbl
5182                     ,p_attribute1_tbl            => l_upd_attribute1_tbl
5183                     ,p_attribute2_tbl            => l_upd_attribute2_tbl
5184                     ,p_attribute3_tbl            => l_upd_attribute3_tbl
5185                     ,p_attribute4_tbl            => l_upd_attribute4_tbl
5186                     ,p_attribute5_tbl            => l_upd_attribute5_tbl
5187                     ,p_attribute6_tbl            => l_upd_attribute6_tbl
5188                     ,p_attribute7_tbl            => l_upd_attribute7_tbl
5189                     ,p_attribute8_tbl            => l_upd_attribute8_tbl
5190                     ,p_attribute9_tbl            => l_upd_attribute9_tbl
5191                     ,p_attribute10_tbl           => l_upd_attribute10_tbl
5192                     ,p_attribute11_tbl           => l_upd_attribute11_tbl
5193                     ,p_attribute12_tbl           => l_upd_attribute12_tbl
5194                     ,p_attribute13_tbl           => l_upd_attribute13_tbl
5195                     ,p_attribute14_tbl           => l_upd_attribute14_tbl
5196                     ,p_attribute15_tbl           => l_upd_attribute15_tbl
5197                     ,p_element_version_id_tbl    => l_upd_element_ver_id_tbl
5198                     ,p_proj_element_id_tbl       => l_upd_element_id_tbl
5199                     ,p_record_version_number_tbl => l_upd_rec_ver_num_id_tbl
5200                     ,p_project_id                => NULL
5201                     ,p_object_id                 => NULL
5202                     ,p_object_version_id         => NULL
5203                     ,p_object_type               => p_object_type
5204                     ,p_pm_source_code            => p_pm_source_code
5205                     ,p_pm_source_reference       => p_pm_source_reference
5206                     ,p_carrying_out_organization_id => NULL
5207                     ,x_return_status             => x_return_status
5208                     ,x_msg_count                 => x_msg_count
5209                     ,x_msg_data                  => x_msg_data
5210                     ) ;
5211 
5212 
5213                IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5214                    RAISE Invalid_Arg_Exc_Dlv ;
5215                END IF ;
5216 
5217          END IF ;
5218 
5219 
5220          IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5221             RAISE Invalid_Arg_Exc_Dlv ;
5222          END IF ;
5223 
5224      END IF ;  -- Only if something is fetched
5225 
5226      IF l_debug_mode = 'Y' THEN
5227            pa_debug.g_err_stage:= 'Exiting UPD_DLV_ACTIONS_IN_BULK_TM' ;
5228            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5229            pa_debug.reset_curr_function;
5230      END IF;
5231 
5232 EXCEPTION
5233 WHEN Invalid_Arg_Exc_Dlv THEN
5234      x_return_status := FND_API.G_RET_STS_ERROR;
5235      l_msg_count := FND_MSG_PUB.count_msg;
5236 
5237      IF (p_commit = FND_API.G_TRUE) THEN
5238            ROLLBACK TO CR_UP_DLV_ACTIONS_SP;
5239      END IF ;
5240 
5241      IF l_debug_mode = 'Y' THEN
5242         pa_debug.g_err_stage := 'inside invalid arg exception of UPD_DLV_ACTIONS_IN_BULK_TM';
5243         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
5244      END IF;
5245 
5246      IF l_msg_count = 1 THEN
5247            PA_INTERFACE_UTILS_PUB.get_messages
5248                (p_encoded        => FND_API.G_TRUE,
5249                 p_msg_index      => 1,
5250                 p_msg_count      => l_msg_count,
5251                 p_msg_data       => l_msg_data,
5252                 p_data           => l_data,
5253                 p_msg_index_out  => l_msg_index_out);
5254            x_msg_data  := l_data;
5255            x_msg_count := l_msg_count;
5256      ELSE
5257             x_msg_count := l_msg_count;
5258      END IF;
5259      IF l_debug_mode = 'Y' THEN
5260        pa_debug.reset_curr_function;
5261      END IF ;
5262      RETURN;
5263 WHEN OTHERS THEN
5264      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5265      x_msg_count     := 1;
5266      x_msg_data      := SQLERRM;
5267 
5268      IF (p_commit = FND_API.G_TRUE) THEN
5269            ROLLBACK TO CR_UP_DLV_ACTIONS_SP;
5270      END IF ;
5271 
5272      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
5273                      ,p_procedure_name  => 'UPD_DLV_ACTIONS_IN_BULK_TM');
5274 
5275      IF p_debug_mode = 'Y' THEN
5276           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5277           pa_debug.write(g_module_name,'UPD_DLV_ACTIONS_IN_BULK_TM: '|| pa_debug.g_err_stage,5);
5278           pa_debug.reset_curr_function;
5279      END IF;
5280      RAISE;
5281 END UPD_DLV_ACTIONS_IN_BULK_TM ;
5282 
5283 
5287    For Initiating Demand as soon as a Project Is Approved,we need to
5284 /*=======================================================================
5285    This is a wrapper API that will launch the concurrent process
5286    PRC: Initiate Project Deliverable Actions
5288    call this Wrapper API whenever Project Status is changed to Approved.
5289 
5290    Please not that ,the Caller of this API should validate for the Project
5291    Status Change = Approved .
5292 
5293    So,The parameters that would be passed to this concurrent process are :
5294    1) 'Demand' and 2) The Project Number
5295   =======================================================================*/
5296 
5297 
5298 PROCEDURE RUN_ACTION_CONC_PROCESS_WRP
5299      (
5300       p_api_version               IN NUMBER    :=1.0
5301      ,p_init_msg_list             IN VARCHAR2  :=FND_API.G_TRUE
5302      ,p_commit                    IN VARCHAR2  :=FND_API.G_FALSE
5303      ,p_validate_only             IN VARCHAR2  :=FND_API.G_TRUE
5304      ,p_validation_level          IN NUMBER    :=FND_API.G_VALID_LEVEL_FULL
5305      ,p_calling_module            IN VARCHAR2  :='SELF_SERVICE'
5306      ,p_debug_mode                IN VARCHAR2  :='N'
5307      ,p_max_msg_count             IN NUMBER    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5308      ,p_project_id                IN PA_PROJECTS_ALL.PROJECT_ID%TYPE
5309      ,p_project_number            IN PA_PROJECTS_ALL.SEGMENT1%TYPE  -- 3671408 added IN paramter
5310      ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5311      ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5312      ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5313      )
5314      IS
5315      l_return_status              VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
5316      l_project_number             PA_PROJECTS_ALL.SEGMENT1%TYPE  ;
5317      l_status_code                PA_PROJECT_STATUSES.PROJECT_SYSTEM_STATUS_CODE%TYPE ;
5318      l_request_id                 PA_PROJ_ELEM_VER_STRUCTURE.CONC_REQUEST_ID%TYPE;
5319 
5320      l_debug_mode                 VARCHAR2(1);
5321      l_msg_count                  NUMBER ;
5322      l_data                       VARCHAR2(2000);
5323      l_msg_data                   VARCHAR2(2000);
5324      l_msg_index_out              NUMBER;
5325 
5326      -- 3671408 removed following cursor
5327      -- as project_number is been directly passed to api,
5328 /*
5329      CURSOR c_project_number_from IS
5330      SELECT SEGMENT1
5331      FROM   PA_PROJECTS_ALL
5332      WHERE  PROJECT_ID = p_project_id ;
5333 */
5334     -- THE FOLLOWING CURSOR WILL NOT BE USED ANYWHERE
5335      /*CURSOR c_project_sys_status_code IS
5336      SELECT PROJECT_SYSTEM_STATUS_CODE
5337      FROM PA_PROJECT_STATUSES pps,
5338                PA_PROJECTS_ALL pa
5339      WHERE pa.PROJECT_ID = p_project_id
5340        AND pps.PROJECT_STATUS_CODE = pa.PROJECT_STATUS_CODE ;
5341     */
5342      PRAGMA AUTONOMOUS_TRANSACTION;
5343 
5344      BEGIN
5345 
5346      x_msg_count := 0;
5347      x_return_status := FND_API.G_RET_STS_SUCCESS;
5348      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5349 
5350      IF l_debug_mode = 'Y' THEN
5351           pa_debug.g_err_stage:= 'Entering RUN_ACTION_CONC_PROCESS_WRP';
5352           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5353 
5354           pa_debug.set_curr_function( p_function   => 'RUN_ACTION_CONC_PROCESS_WRP',
5355                                       p_debug_mode => l_debug_mode );
5356      END IF;
5357 
5358      -- Initialise Message Stack
5359      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
5360       FND_MSG_PUB.initialize;
5361      END IF;
5362 
5363      -- Define Save Point
5364      IF (p_commit = FND_API.G_TRUE) THEN
5365       savepoint RUN_ACTION_CONC_PROCESS_WRP_SP ;
5366      END IF;
5367 
5368      --Printing Input Parameters
5369 
5370      IF l_debug_mode = 'Y' THEN
5371           pa_debug.g_err_stage:= 'The Project Id is :' || p_project_id ;
5372           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5373      END IF ;
5374 
5375      -- Validate Input parameters
5376      IF l_debug_mode = 'Y' THEN
5377           pa_debug.g_err_stage:= 'Validating Input parameters';
5378           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5379      END IF;
5380 
5381      IF p_project_id IS NULL THEN
5382           IF l_debug_mode = 'Y' THEN
5383                pa_debug.g_err_stage:= 'Mandatory parameter to this API : Project ID is NULL';
5384                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5385           END IF;
5386           l_return_status := FND_API.G_RET_STS_ERROR;
5387           PA_UTILS.ADD_MESSAGE
5388                 (p_app_short_name => 'PA',
5389                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5390           RAISE Invalid_Arg_Exc_Dlv;
5391      END IF;
5392 
5393      --Check for valid project id passed
5394      IF l_debug_mode = 'Y' THEN
5395          pa_debug.g_err_stage := 'Before doing cursor operation';
5396          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5397      END IF;
5398 
5399     -- 3671408 project_number is passed directly to the api
5400     -- removed below code to retrieve and validate project_number
5401 /*
5402      OPEN c_project_number_from;
5403      FETCH c_project_number_from INTO l_project_number;
5404 
5405      IF c_project_number_from%NOTFOUND THEN
5406           IF l_debug_mode = 'Y' THEN
5407                pa_debug.g_err_stage:= 'No Project Number returned for the passed Project ID ';
5408                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5409           END IF;
5410           l_return_status := FND_API.G_RET_STS_ERROR;
5411           PA_UTILS.ADD_MESSAGE
5412                 (p_app_short_name => 'PA',
5413                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5417      CLOSE c_project_number_from ;
5414           RAISE Invalid_Arg_Exc_Dlv;
5415      END IF;
5416 
5418 */
5419 
5420      -- 3671408 added below code to validate project_number
5421 
5422      IF p_project_number IS NULL THEN
5423           IF l_debug_mode = 'Y' THEN
5424                pa_debug.g_err_stage:= 'No Project Number returned for the passed Project ID ';
5425                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5426           END IF;
5427           l_return_status := FND_API.G_RET_STS_ERROR;
5428           PA_UTILS.ADD_MESSAGE
5429                 (p_app_short_name => 'PA',
5430                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5431           RAISE Invalid_Arg_Exc_Dlv;
5432      END IF;
5433 
5434      -- 3671408 end
5435 
5436      IF l_debug_mode = 'Y' THEN
5437          pa_debug.g_err_stage := 'After doing cursor operation - Valid Project Number ';
5438          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5439      END IF;
5440 
5441     -- If the new project status has not been committed into Database,this cursor will fail
5442     -- This is due to the Autonomous Transaction definition.So,commented the following code
5443     /* --If the project status is Approved,then only submit the request.
5444      --If not return
5445 
5446      OPEN c_project_sys_status_code;
5447      FETCH c_project_sys_status_code into l_status_code ;
5448      CLOSE c_project_sys_status_code;
5449      IF nvl(l_status_code,'-99') <> 'APPROVED' THEN
5450          IF l_debug_mode = 'Y' THEN
5451                pa_debug.g_err_stage := 'The Project Status is not approved .So,No need to invoke concurrent process ';
5452                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5453          END IF;
5454          RETURN;
5455      END IF ;
5456      */
5457      -- Submit the request.
5458      l_request_id := fnd_request.submit_request
5459      (
5460            application                =>   'PA',
5461            program                    =>   'PAINIACT',
5462            description                =>   'PRC: Initiate Project Deliverable Actions',
5463            start_time                 =>   NULL,
5464            sub_request                =>   false,
5465            argument1                  =>   'DEMAND',
5466            argument2                  =>   p_project_number, -- 3671408 changed parameter value to passed IN parameter
5467            argument3                  =>   NULL
5468      );
5469      IF l_debug_mode = 'Y' THEN
5470           pa_debug.g_err_stage:= 'Request id is '||l_request_id;
5471           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5472      END IF;
5473 
5474      -- Throw an error if the request could not be submitted.
5475      IF l_request_id = 0 THEN
5476           PA_UTILS.ADD_MESSAGE
5477                 (p_app_short_name => 'PA',
5478                  p_msg_name       => 'PA_DLV_INI_CONC_PGM_ERR');
5479           RAISE Invalid_Arg_Exc_Dlv;
5480      END IF;
5481 
5482      COMMIT ;
5483 
5484      IF l_debug_mode = 'Y' THEN
5485           pa_debug.g_err_stage:= 'Exiting RUN_ACTION_CONC_PROCESS_WRP ' ;
5486           pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5487 	  pa_debug.reset_curr_function;    --Added for bug 4945876
5488      END IF;
5489  EXCEPTION
5490 WHEN Invalid_Arg_Exc_Dlv THEN
5491      x_return_status := FND_API.G_RET_STS_ERROR;
5492      l_msg_count := FND_MSG_PUB.count_msg;
5493 
5494     -- 3671408  cursor is not used now , commented below code
5495     /*
5496      --Close any open cursors and roll back
5497      IF c_project_number_from%ISOPEN THEN
5498           CLOSE c_project_number_from;
5499      END IF;
5500     */
5501     -- 3671408 end
5502    /*  IF c_project_sys_status_code%ISOPEN THEN
5503           CLOSE c_project_sys_status_code;
5504      END IF;*/
5505 
5506      IF (p_commit = FND_API.G_TRUE) THEN
5507            ROLLBACK TO RUN_ACTION_CONC_PROCESS_WRP_SP;
5508      END IF ;
5509 
5510      IF l_debug_mode = 'Y' THEN
5511         pa_debug.g_err_stage := 'Inside Invalid arg exception of RUN_ACTION_CONC_PROCESS_WRP';
5512         pa_debug.write(g_module_name,pa_debug.g_err_stage,5);
5513      END IF;
5514 
5515      IF l_msg_count = 1 THEN
5516            PA_INTERFACE_UTILS_PUB.get_messages
5517                (p_encoded        => FND_API.G_TRUE,
5518                 p_msg_index      => 1,
5519                 p_msg_count      => l_msg_count,
5520                 p_msg_data       => l_msg_data,
5521                 p_data           => l_data,
5522                 p_msg_index_out  => l_msg_index_out);
5523            x_msg_data  := l_data;
5524            x_msg_count := l_msg_count;
5525      END IF;
5526      IF l_debug_mode = 'Y' THEN
5527        pa_debug.reset_curr_function;
5528      END IF ;
5529      RETURN;
5530  WHEN OTHERS THEN
5531      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5532      x_msg_count     := 1;
5533      x_msg_data      := SQLERRM;
5534 
5535     -- 3671408 cursor is not used now, removed below code
5536      /*
5537      --Close any open cursors and roll back
5538      IF c_project_number_from%ISOPEN THEN
5539           CLOSE c_project_number_from;
5540      END IF;
5541      */
5542      -- 3671408
5543 
5544      /*IF c_project_sys_status_code%ISOPEN THEN
5545           CLOSE c_project_sys_status_code;
5546      END IF;*/
5547 
5548      IF (p_commit = FND_API.G_TRUE) THEN
5549            ROLLBACK TO RUN_ACTION_CONC_PROCESS_WRP_SP;
5550      END IF ;
5551 
5552      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
5553                      ,p_procedure_name  => 'RUN_ACTION_CONC_PROCESS_WRP');
5554 
5555      IF p_debug_mode = 'Y' THEN
5556           pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5560      RAISE;
5557           pa_debug.write(g_module_name, pa_debug.g_err_stage,5);
5558           pa_debug.reset_curr_function;
5559      END IF;
5561 END RUN_ACTION_CONC_PROCESS_WRP ;
5562 
5563 /*==================================================================================
5564   This is the wrapper API which has to be called from FORMS whenever Project Status
5565   is changed to 'Approved' .This API inturn places call to another wrapper API
5566   RUN_ACTION_CONC_PROCESS_WRP - which places concurrent request for automatically
5567   generating demand (When the Project Status is 'Approved')
5568   ==================================================================================*/
5569 
5570 PROCEDURE RUN_ACTION_CONC_FRM_WRP
5571      (
5572       p_project_id                IN PA_PROJECTS_ALL.PROJECT_ID%TYPE
5573     , x_return_status          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5574     , x_msg_count              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5575     , x_msg_data               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5576      )
5577      IS
5578      l_project_number             PA_PROJECTS_ALL.SEGMENT1%TYPE  ;
5579 
5580      -- 3671408 Added below cursor to retrieve project_number
5581 
5582      CURSOR c_project_details(p_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE) IS
5583      SELECT segment1
5584      FROM  PA_PROJECTS_ALL
5585      WHERE PROJECT_ID = p_project_id;
5586 
5587      BEGIN
5588      x_msg_count := 0;
5589      x_return_status := FND_API.G_RET_STS_SUCCESS;
5590 
5591      IF p_project_id IS NULL THEN
5592           x_return_status := FND_API.G_RET_STS_ERROR;
5593           PA_UTILS.ADD_MESSAGE
5594                 (p_app_short_name => 'PA',
5595                  p_msg_name       => 'PA_INV_PARAM_PASSED');
5596           RAISE Invalid_Arg_Exc_Dlv;
5597      END IF;
5598 
5599      -- 3671408 added code to retrieve project number
5600 
5601      OPEN  c_project_details(p_project_id) ;
5602      FETCH c_project_details INTO l_project_number ;
5603      CLOSE c_project_details;
5604 
5605      --Bug 3752898
5606      --While Calling this API ,the Message Stack should not be re-initialized.
5607      --If it gets reinitialized it will break fix for Bug # 3134205
5608 
5609      PA_ACTIONS_PUB.RUN_ACTION_CONC_PROCESS_WRP
5610      (
5611       p_calling_module            =>  'FORMS'
5612      ,p_init_msg_list             =>  FND_API.G_FALSE   -- 3752898 , Passing False to avoid re-initialization of Message Stack
5613      ,p_project_id                =>  p_project_id
5614      ,p_project_number            =>  l_project_number  -- 3671408 , passing retrieved value
5615      ,x_return_status             =>  x_return_status
5616      ,x_msg_count                 =>  x_msg_count
5617      ,x_msg_data                  =>  x_msg_data
5618      );
5619 
5620      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5621             RAISE Invalid_Arg_Exc_Dlv ;
5622      END IF ;
5623 
5624 EXCEPTION
5625 WHEN Invalid_Arg_Exc_Dlv THEN
5626 
5627      -- 3671408 added code to handle cursor
5628      IF c_project_details%ISOPEN THEN
5629           CLOSE c_project_details;
5630      END IF;
5631 
5632      x_return_status := FND_API.G_RET_STS_ERROR;
5633      x_msg_count := FND_MSG_PUB.count_msg;
5634      x_msg_data :='Invalid Argument Exception inside RUN_ACTION_CONC_FRM_WRP' || x_msg_data;
5635      RETURN;
5636  WHEN OTHERS THEN
5637      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5638      x_msg_count := FND_MSG_PUB.count_msg;
5639      x_msg_data := SQLERRM;
5640 
5641      -- 3671408 added code to handle cursor
5642      IF c_project_details%ISOPEN THEN
5643           CLOSE c_project_details;
5644      END IF;
5645 
5646      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_ACTIONS_PUB'
5647                      ,p_procedure_name  => 'RUN_ACTION_CONC_FRM_WRP');
5648 
5649      RAISE;
5650 END RUN_ACTION_CONC_FRM_WRP;
5651 
5652 END PA_ACTIONS_PUB;