DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_CONTROL_ITEMS_PUB

Source


1 PACKAGE BODY PA_CONTROL_ITEMS_PUB AS
2 --$Header: PACICIPB.pls 120.1 2007/02/08 11:22:30 sukhanna ship $
3 
4 
5 procedure getPartyIdFromName(
6          p_project_id            IN  NUMBER
7         ,p_name                  IN  VARCHAR2
8         ,x_party_id              OUT NOCOPY NUMBER
9         ,x_return_status         OUT NOCOPY VARCHAR2
10         ,x_msg_count             OUT NOCOPY NUMBER
11         ,x_msg_data              OUT NOCOPY VARCHAR2
12 ) is
13 
14    l_party_id       NUMBER := NULL;
15 
16 BEGIN
17        x_return_status := 'S';
18       BEGIN
19         SELECT DISTINCT ppp.resource_source_id party_id
20         INTO l_party_id
21         FROM hz_parties hzp,
22  	     pa_project_parties ppp
23         WHERE hzp.party_name = p_name
24           AND hzp.party_type = 'PERSON'
25           AND ppp.resource_source_id = hzp.party_id
26           AND ppp.resource_type_id = 112
27           AND ppp.project_id = p_project_id
28           AND (TRUNC(SYSDATE) BETWEEN TRUNC(ppp.start_date_active)
29                                   AND TRUNC(NVL(ppp.end_date_active, SYSDATE)));
30 
31 
32       EXCEPTION
33          when TOO_MANY_ROWS then
34            PA_UTILS.Add_Message( p_app_short_name => 'PA'
35                                 ,p_msg_name       => 'PA_OWNER_NAME_MULTIPLE');
36            x_return_status := 'E';
37          when NO_DATA_FOUND then
38            l_party_id := NULL;
39          when OTHERS then
40            PA_UTILS.Add_Message( p_app_short_name => 'PA'
41                                 ,p_msg_name       => 'PA_CI_NO_OWNER');
42            x_return_status := 'E';
43        END;
44 
45        IF (x_return_status = 'S' AND l_party_id is NULL) THEN
46          SELECT DISTINCT ppf.party_id party_id
47          INTO l_party_id
48          FROM pa_project_parties ppp,
49               per_all_people_f ppf
50          WHERE ppf.full_name = p_name
51 	   AND (TRUNC(SYSDATE) BETWEEN TRUNC(ppf.effective_start_date)
52                                    AND TRUNC(ppf.effective_end_date))
53 	   AND ppp.resource_source_id = ppf.person_id
54            AND ppp.resource_type_id = 101
55            AND ppp.project_id = p_project_id
56            AND (TRUNC(SYSDATE) BETWEEN TRUNC(ppp.start_date_active)
57                                    AND TRUNC(NVL(ppp.end_date_active, SYSDATE)));
58        END IF;
59 
60  x_party_id := l_party_id;
61 
62  exception when TOO_MANY_ROWS then
63            PA_UTILS.Add_Message( p_app_short_name => 'PA'
64                                 ,p_msg_name       => 'PA_OWNER_NAME_MULTIPLE');
65            x_return_status := 'E';
66 
67  when OTHERS then
68            PA_UTILS.Add_Message( p_app_short_name => 'PA'
69                                 ,p_msg_name       => 'PA_CI_NO_OWNER');
70            x_return_status := 'E';
71 
72 end getPartyIdFromName;
73 
74 
75 procedure ADD_CONTROL_ITEM(
76  	 p_api_version          IN     NUMBER :=  1.0
77  	,p_init_msg_list        IN     VARCHAR2 := fnd_api.g_true
78  	,p_commit               IN     VARCHAR2 := FND_API.g_false
79  	,p_validate_only        IN     VARCHAR2 := FND_API.g_true
80  	,p_max_msg_count        IN     NUMBER := FND_API.g_miss_num
81 
82         ,p_ci_type_id           IN  NUMBER
83         ,p_summary              IN  VARCHAR2
84         ,p_status_code          IN  VARCHAR2
85         ,p_owner_id             IN  NUMBER    := NULL
86         ,p_owner_name           IN  VARCHAR2  := NULL
87         ,p_highlighted_flag     IN  VARCHAR2  := 'N'
88         ,p_progress_status_code IN  VARCHAR2  := NULL
89         ,p_progress_as_of_date  IN  DATE      := NULL
90         ,p_classification_code  IN  NUMBER
91         ,p_reason_code          IN  NUMBER
92         ,p_project_id           IN  NUMBER
93         ,p_object_type          IN  VARCHAR2   := NULL
94         ,p_object_id            IN  NUMBER     := NULL
95         ,p_object_name          IN  VARCHAR2   := NULL
96         ,p_ci_number            IN  VARCHAR2   := NULL
97         ,p_date_required        IN  DATE       := NULL
98         ,p_date_closed          IN  DATE       := NULL
99         ,p_closed_by_id         IN  NUMBER     := NULL
100 
101 
102         ,p_description          IN  VARCHAR2   := NULL
103         ,p_status_overview      IN  VARCHAR2   := NULL
104         ,p_resolution           IN  VARCHAR2   := NULL
105         ,p_resolution_code      IN  NUMBER     := NULL
106         ,p_priority_code        IN  VARCHAR2   := NULL
107         ,p_effort_level_code    IN  VARCHAR2   := NULL
108         ,p_open_action_num      IN  NUMBER     := NULL
109 
110         ,p_price                IN  NUMBER     := NULL
111         ,p_price_currency_code  IN  VARCHAR2   := NULL
112         ,p_source_type_code     IN  VARCHAR2   := NULL
113         ,p_source_comment       IN  VARCHAR2   := NULL
114         ,p_source_number        IN  VARCHAR2   := NULL
115         ,p_source_date_received IN  DATE       := NULL
116         ,p_source_organization  IN  VARCHAR2  := NULL
117         ,p_source_person        IN  VARCHAR2  := NULL
118         ,p_attribute_category    IN  VARCHAR2 := NULL
119 
120         ,p_attribute1            IN  VARCHAR2 := NULL
121         ,p_attribute2            IN  VARCHAR2 := NULL
122         ,p_attribute3            IN  VARCHAR2 := NULL
123         ,p_attribute4            IN  VARCHAR2 := NULL
124         ,p_attribute5            IN  VARCHAR2 := NULL
125         ,p_attribute6            IN  VARCHAR2 := NULL
126         ,p_attribute7            IN  VARCHAR2 := NULL
127         ,p_attribute8            IN  VARCHAR2 := NULL
128         ,p_attribute9            IN  VARCHAR2 := NULL
129         ,p_attribute10           IN  VARCHAR2 := NULL
130         ,p_attribute11           IN  VARCHAR2 := NULL
131         ,p_attribute12           IN  VARCHAR2 := NULL
132         ,p_attribute13           IN  VARCHAR2 := NULL
133         ,p_attribute14           IN  VARCHAR2 := NULL
134         ,p_attribute15           IN  VARCHAR2 := NULL
135 
136   	,px_ci_id               IN  OUT NOCOPY NUMBER
137         ,x_ci_number             OUT NOCOPY VARCHAR2
138   	,x_return_status         OUT NOCOPY VARCHAR2
139   	,x_msg_count             OUT NOCOPY NUMBER
140  	,x_msg_data              OUT NOCOPY VARCHAR2
141 ) is
142 
143    l_msg_index_out        NUMBER;
144    l_last_modified_by_id  NUMBER;
145    l_owner_id             NUMBER := NULL;
146    l_object_id            NUMBER;
147    l_debug_mode                    VARCHAR2(1);
148    l_debug_level6                   CONSTANT NUMBER := 6;
149    g_module_name      VARCHAR2(100) := 'pa.plsql.CreateCI,Add_Control_Item';
150    l_classification_code  NUMBER;   /*Bug 4049588*/
151    l_reason_code          NUMBER;   /* Bug 4049588*/
152 
153 BEGIN
154 
155   -- Initialize the Error Stack
156   PA_DEBUG.init_err_stack('PA_CONTROL_ITEMS_PUB.Add_Control_Item');
157 
158   -- Initialize the return status to success
159   x_return_status := FND_API.G_RET_STS_SUCCESS;
160 
161   --Clear the global PL/SQL message table
162   IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
163     FND_MSG_PUB.initialize;
164   END IF;
165   --get hz_parties.party_id of the logged in user
166   l_last_modified_by_id := PA_CONTROL_ITEMS_UTILS.GetPartyId(fnd_global.user_id );
167   l_owner_id            := p_owner_id;
168   l_object_id           := p_object_id;
169 
170 
171   -- check mandatory owner_id
172   IF (l_owner_id IS NULL) THEN
173      IF (p_owner_name is not null) then
174      getPartyIdFromName(
175          p_project_id     => p_project_id
176         ,p_name           => p_owner_name
177         ,x_party_id       => l_owner_id
178         ,x_return_status  => x_return_status
179         ,x_msg_count      => x_msg_count
180         ,x_msg_data       => x_msg_data);
181      ELSE
182         PA_UTILS.Add_Message( p_app_short_name => 'PA'
183                              ,p_msg_name       => 'PA_CI_NO_OWNER');
184         x_return_status := 'E';
185      END IF;
186   END IF;
187 
188     --Bug 4049588. Check if Classification Code and Reason Code are null.
189     l_classification_code := p_classification_code ;
190     l_reason_code := p_reason_code;
191     IF (l_classification_code IS NULL OR l_reason_code IS NULL )
192        THEN
193          IF (l_classification_code IS NULL) THEN
194             PA_UTILS.Add_Message( p_app_short_name => 'PA'
195                                ,p_msg_name       => 'PA_CI_NO_CLASSIFICATION_CODE');
196              x_return_status := 'E';
197           END IF;
198          IF (l_reason_code IS NULL) THEN
199             PA_UTILS.Add_Message( p_app_short_name => 'PA'
200                                ,p_msg_name       => 'PA_CI_NO_REASON_CODE');
201              x_return_status := 'E';
202          END IF;
203     END IF;
204 
205 
206   IF (l_object_id IS NULL AND p_object_name is not null) THEN
207      -- try to get object id  from name - as of now we're only handling PA_TASKS objects
208        begin
209        select proj_element_id
210           into l_object_id
211           from PA_FIN_LATEST_PUB_TASKS_V
212           where element_name = p_object_name
213           and project_id     = p_project_id;
214 
215         exception when TOO_MANY_ROWS then
216            PA_UTILS.Add_Message( p_app_short_name => 'PA'
217                                 ,p_msg_name       => 'PA_OBJECT_NAME_MULTIPLE');
218            x_return_status := 'E';
219 
220         when OTHERS then
221            PA_UTILS.Add_Message( p_app_short_name => 'PA'
222                                 ,p_msg_name       => 'PA_OBJECT_NAME_INV');
223            x_return_status := 'E';
224        end;
225 
226   END IF;
227 
228 
229 l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
230 	  IF l_debug_mode = 'Y' THEN
231 	          pa_debug.g_err_stage:= 'About to call the private method';
232 	          pa_debug.write(g_module_name,pa_debug.g_err_stage,
233                                      l_debug_level6);
234 	  END IF;
235 
236   IF (x_return_status <> 'E')THEN
237       PA_CONTROL_ITEMS_PVT.ADD_CONTROL_ITEM(
238          p_api_version
239         ,p_init_msg_list
240         ,p_commit
241         ,p_validate_only
242         ,p_max_msg_count
243 
244         ,p_ci_type_id
245         ,p_summary
246         ,p_status_code
247         ,l_owner_id
248         ,nvl(p_highlighted_flag,'N')
249         ,p_progress_status_code
250         ,p_progress_as_of_date
251         ,p_classification_code
252         ,p_reason_code
253         ,p_project_id
254         ,l_last_modified_by_id
255         ,p_object_type
256         ,l_object_id
257         ,p_ci_number
258         ,p_date_required
259         ,p_date_closed
260         ,p_closed_by_id
261 
262         ,p_description
263         ,p_status_overview
264         ,p_resolution
265  	,p_resolution_code
266         ,p_priority_code
267         ,p_effort_level_code
268         ,p_open_action_num
269 
270         ,p_price
271         ,p_price_currency_code
272         ,p_source_type_code
273         ,p_source_comment
274         ,p_source_number
275         ,p_source_date_received
276         ,p_source_organization
277         ,p_source_person
278 
279         ,p_attribute_category
280         ,p_attribute1
281 
282         ,p_attribute2
283         ,p_attribute3
284         ,p_attribute4
285         ,p_attribute5
286         ,p_attribute6
287         ,p_attribute7
288         ,p_attribute8
289         ,p_attribute9
290         ,p_attribute10
291         ,p_attribute11
292         ,p_attribute12
293         ,p_attribute13
294         ,p_attribute14
295         ,p_attribute15
296         ,px_ci_id
297         ,x_ci_number
298         ,x_return_status
299         ,x_msg_count
300         ,x_msg_data
301 
302         );
303     END IF;
304 
305   IF l_debug_mode = 'Y' THEN
306 	          pa_debug.g_err_stage:= 'private method called';
307 	          pa_debug.write(g_module_name,pa_debug.g_err_stage,
308                                      l_debug_level6);
309 	  END IF;
310 
311 
312   -- IF the number of messages is 1 then fetch the message code from the stack
313   -- and return its text
314   x_msg_count :=  FND_MSG_PUB.Count_Msg;
315   IF x_msg_count = 1 THEN
316     pa_interface_utils_pub.get_messages ( p_encoded       => FND_API.G_TRUE
317                                          ,p_msg_index     => 1
318                                          ,p_data          => x_msg_data
319                                          ,p_msg_index_out => l_msg_index_out
320                                         );
321   END IF;
322 
323   -- Reset the error stack when returning to the calling program
324   PA_DEBUG.Reset_Err_Stack;
325 
326 
327 EXCEPTION
328     WHEN OTHERS THEN
329       rollback;
330        -- Set the excetption Message and the stack
331        FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_CONTROL_ITEMS_PUB.ADD_CONTROL_ITEM'
332                                 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
333 
334         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
335         RAISE;
336 
337 end ADD_CONTROL_ITEM;
338 
339 procedure UPDATE_CONTROL_ITEM (
340          p_api_version          IN     NUMBER :=  1.0
341         ,p_init_msg_list        IN     VARCHAR2 := fnd_api.g_true
342         ,p_commit               IN     VARCHAR2 := FND_API.g_false
343         ,p_validate_only        IN     VARCHAR2 := FND_API.g_true
344         ,p_max_msg_count        IN     NUMBER := FND_API.g_miss_num
345         ,p_ci_id                IN  NUMBER
346         ,p_ci_type_id           IN  NUMBER
347         ,p_summary              IN  VARCHAR2
348         ,p_status_code          IN  VARCHAR2  := NULL
349 
350         ,p_owner_id             IN  NUMBER    := NULL
351         ,p_owner_name           IN  VARCHAR2  := NULL
352         ,p_highlighted_flag     IN  VARCHAR2  := 'N'
353         ,p_progress_status_code IN  VARCHAR2
354         ,p_progress_as_of_date  IN  DATE
355         ,p_classification_code  IN  NUMBER
356         ,p_reason_code          IN  NUMBER
357         ,p_record_version_number IN  NUMBER
358         ,p_project_id           IN  NUMBER
359         ,p_object_type          IN  VARCHAR2   := NULL
360         ,p_object_id            IN  NUMBER     := NULL
361         ,p_object_name          IN  VARCHAR2   := NULL
362         ,p_ci_number            IN  VARCHAR2   := NULL
363         ,p_date_required        IN  DATE       := NULL
364         ,p_date_closed          IN  DATE       := NULL
365         ,p_closed_by_id         IN  NUMBER     := NULL
366 
367         ,p_description          IN  VARCHAR2   := NULL
368         ,p_status_overview      IN  VARCHAR2   := NULL
369         ,p_resolution           IN  VARCHAR2   := NULL
370         ,p_resolution_code      IN  NUMBER     := NULL
371         ,p_priority_code        IN  VARCHAR2   := NULL
372         ,p_effort_level_code    IN  VARCHAR2   := NULL
373         ,p_open_action_num      IN  NUMBER    := NULL
374         ,p_price                IN  NUMBER         := NULL
375         ,p_price_currency_code  IN  VARCHAR2   := NULL
376         ,p_source_type_code     IN  VARCHAR2   := NULL
377         ,p_source_comment       IN  VARCHAR2   := NULL
378         ,p_source_number        IN  VARCHAR2   := NULL
379         ,p_source_date_received IN  DATE           := NULL
380         ,p_source_organization  IN  VARCHAR2  := NULL
381         ,p_source_person        IN  VARCHAR2       := NULL
382 
383         ,p_attribute_category    IN  VARCHAR2 := NULL
384 
385         ,p_attribute1            IN  VARCHAR2 := NULL
386         ,p_attribute2            IN  VARCHAR2 := NULL
387         ,p_attribute3            IN  VARCHAR2 := NULL
388         ,p_attribute4            IN  VARCHAR2 := NULL
392         ,p_attribute8            IN  VARCHAR2 := NULL
389         ,p_attribute5            IN  VARCHAR2 := NULL
390         ,p_attribute6            IN  VARCHAR2 := NULL
391         ,p_attribute7            IN  VARCHAR2 := NULL
393         ,p_attribute9            IN  VARCHAR2 := NULL
394         ,p_attribute10           IN  VARCHAR2 := NULL
395         ,p_attribute11           IN  VARCHAR2 := NULL
396         ,p_attribute12           IN  VARCHAR2 := NULL
397         ,p_attribute13           IN  VARCHAR2 := NULL
398         ,p_attribute14           IN  VARCHAR2 := NULL
399         ,p_attribute15           IN  VARCHAR2 := NULL
400         ,x_return_status         OUT NOCOPY VARCHAR2
401         ,x_msg_count             OUT NOCOPY NUMBER
402         ,x_msg_data              OUT NOCOPY VARCHAR2
403 ) is
404 
405    l_msg_index_out        NUMBER;
406    l_last_modified_by_id  NUMBER;
407    l_owner_id             NUMBER;
408    l_object_id            NUMBER;
409    l_chgowner_allowed     VARCHAR2(1);   /* Bug3297238 */
410    l_curr_owner_id        NUMBER;
411    l_to_owner_allowed     VARCHAR2(1);   /* Bug#4050242 */
412    l_classification_code  NUMBER;   /* Bug 4049588.*/
413    l_reason_code          NUMBER;   /* Bug 4049588.*/
414 
415    cursor c_curr_owner is
416      select owner_id from pa_control_items
417       where ci_id = p_ci_id;
418 begin
419 
420   -- Initialize the Error Stack
421   PA_DEBUG.init_err_stack('PA_CONTROL_ITEMS_PUB.UPDATE_CONTROL_ITEM');
422 
423   -- Initialize the return status to success
424   x_return_status := FND_API.G_RET_STS_SUCCESS;
425 
426   --Clear the global PL/SQL message table
427   IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
428     FND_MSG_PUB.initialize;
429   END IF;
430 
431   --get hz_parties.party_id of the logged in user
432   l_last_modified_by_id := PA_CONTROL_ITEMS_UTILS.GetPartyId(fnd_global.user_id );
433   l_owner_id            := p_owner_id;
434   l_object_id           := p_object_id;
435 
436   -- check mandatory owner_id
437   IF (l_owner_id IS NULL) THEN
438      IF (p_owner_name is not null) then
439      getPartyIdFromName(
440          p_project_id     => p_project_id
441         ,p_name           => p_owner_name
442         ,x_party_id       => l_owner_id
443         ,x_return_status  => x_return_status
444         ,x_msg_count      => x_msg_count
445         ,x_msg_data       => x_msg_data);
446      ELSE
447         PA_UTILS.Add_Message( p_app_short_name => 'PA'
448                              ,p_msg_name       => 'PA_CI_NO_OWNER');
449         x_return_status := 'E';
450      END IF;
451   END IF;
452 
453     --Bug 4049588. Check if Classification Code and Reason Code are null.
454     l_classification_code := p_classification_code ;
455     l_reason_code := p_reason_code;
456     IF (l_classification_code IS NULL OR l_reason_code IS NULL )
457        THEN
458          IF (l_classification_code IS NULL) THEN
459             PA_UTILS.Add_Message( p_app_short_name => 'PA'
460                                ,p_msg_name       => 'PA_CI_NO_CLASSIFICATION_CODE');
461              x_return_status := 'E';
462           END IF;
463          IF (l_reason_code IS NULL) THEN
464             PA_UTILS.Add_Message( p_app_short_name => 'PA'
465                                ,p_msg_name       => 'PA_CI_NO_REASON_CODE');
466              x_return_status := 'E';
467          END IF;
468     END IF;
469 
470   /* Code added for Bug#3297238, starts here */
471     open c_curr_owner;
472     fetch c_curr_owner into l_curr_owner_id;
473     close c_curr_owner;
474 
475    if (l_owner_id <> l_curr_owner_id) then
476       l_chgowner_allowed := pa_ci_security_pkg.check_change_owner_access(p_ci_id);
477       if (l_chgowner_allowed <> 'T') then
478           PA_UTILS.Add_Message( p_app_short_name => 'PA'
479                                ,p_msg_name       => 'PA_CI_OWNER_CHG_NOT_ALLOWED');
480           x_return_status := 'E';
481       /* Code added for Bug#4050242, starts here */
482       else
483           l_to_owner_allowed := pa_ci_security_pkg.is_to_owner_allowed(p_ci_id, l_owner_id);
484 	  if (l_to_owner_allowed <> 'T') then
485 		  PA_UTILS.Add_Message( p_app_short_name => 'PA'
486 				       ,p_msg_name       => 'PA_CI_TO_OWNER_NOT_ALLOWED');
487 		  x_return_status := 'E';
488           end if;
489       /* Code added for Bug#4050242, ends here */
490       end if;
491 
492  --  Bug 3650877: Commneted this check for the owner id.
493 
494    --elsif (l_owner_id = l_curr_owner_id) then
495    --       PA_UTILS.Add_Message( p_app_short_name => 'PA'
496    --                           ,p_msg_name       => 'PA_CI_CHANGE_OWNER_INVALID');
497    --       x_return_status := 'E';
498    end if;
499   /* Code added for Bug#3297238, ends here */
500 
501   IF (l_object_id IS NULL AND p_object_name is not null) THEN
502     -- try to get object id  from name - as of now we're only handling PA_TASKS objects
503        begin
504        select proj_element_id
505           into l_object_id
506           from PA_FIN_LATEST_PUB_TASKS_V
507           where element_name = p_object_name
508           and project_id     = p_project_id;
509 
510         exception when TOO_MANY_ROWS then
511            PA_UTILS.Add_Message( p_app_short_name => 'PA'
515         when OTHERS then
512                                 ,p_msg_name       => 'PA_OBJECT_NAME_MULTIPLE');
513            x_return_status := 'E';
514 
516            PA_UTILS.Add_Message( p_app_short_name => 'PA'
517                                 ,p_msg_name       => 'PA_OBJECT_NAME_INV');
518            x_return_status := 'E';
519        end;
520 
521   END IF;
522 
523 
524   IF (x_return_status <> 'E')THEN
525       PA_CONTROL_ITEMS_PVT.UPDATE_CONTROL_ITEM(
526          p_api_version
527         ,p_init_msg_list
528         ,p_commit
529         ,p_validate_only
530         ,p_max_msg_count
531 
532         ,p_ci_id
533         ,p_ci_type_id
534         ,p_summary
535         ,p_status_code
536         ,l_owner_id
537         ,nvl(p_highlighted_flag,'N')
538         ,p_progress_status_code
539         ,p_progress_as_of_date
540         ,p_classification_code
541         ,p_reason_code
542         ,p_record_version_number
543         ,p_project_id
544         ,l_last_modified_by_id
545         ,p_object_type
546         ,l_object_id
547         ,p_ci_number
548         ,p_date_required
549         ,p_date_closed
550         ,p_closed_by_id
551 
552         ,p_description
553         ,p_status_overview
554         ,p_resolution
555         ,p_resolution_code
556         ,p_priority_code
557         ,p_effort_level_code
558         ,p_open_action_num
559         ,p_price
560         ,p_price_currency_code
561         ,p_source_type_code
562         ,p_source_comment
563         ,p_source_number
564         ,p_source_date_received
565         ,p_source_organization
566         ,p_source_person
567 
568         ,p_attribute_category
569 
570         ,p_attribute1
571         ,p_attribute2
572         ,p_attribute3
573         ,p_attribute4
574         ,p_attribute5
575         ,p_attribute6
576         ,p_attribute7
577         ,p_attribute8
578         ,p_attribute9
579         ,p_attribute10
580         ,p_attribute11
581         ,p_attribute12
582         ,p_attribute13
583         ,p_attribute14
584         ,p_attribute15
585         ,x_return_status
586         ,x_msg_count
587         ,x_msg_data
588        );
589    END IF;
590 
591   -- IF the number of messaages is 1 then fetch the message code from the stack
592   -- and return its text
593   x_msg_count :=  FND_MSG_PUB.Count_Msg;
594   IF x_msg_count = 1 THEN
595     pa_interface_utils_pub.get_messages ( p_encoded       => FND_API.G_TRUE
596                                          ,p_msg_index     => 1
597                                          ,p_data          => x_msg_data
598                                          ,p_msg_index_out => l_msg_index_out
599                                         );
600   END IF;
601 
602   -- Reset the error stack when returning to the calling program
603   PA_DEBUG.Reset_Err_Stack;
604 
605 
606 EXCEPTION
607     WHEN OTHERS THEN
608       rollback;
609        -- Set the excetption Message and the stack
610        FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_CONTROL_ITEMS_PUB.UPDATE_CONTROL_ITEM'
611                                 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
612 
613         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
614         RAISE;
615 end UPDATE_CONTROL_ITEM;
616 
617 
618 
619 procedure DELETE_CONTROL_ITEM (
620          p_api_version          IN     NUMBER :=  1.0
621         ,p_init_msg_list        IN     VARCHAR2 := fnd_api.g_true
622         ,p_commit               IN     VARCHAR2 := FND_API.g_false
623         ,p_validate_only        IN     VARCHAR2 := FND_API.g_true
624         ,p_max_msg_count        IN     NUMBER := FND_API.g_miss_num
625 
626   	,p_ci_id                IN  NUMBER
627         ,p_record_version_number       IN     NUMBER
628   	,x_return_status               OUT NOCOPY    VARCHAR2
629   	,x_msg_count                   OUT NOCOPY    NUMBER
630   	,x_msg_data                    OUT NOCOPY    VARCHAR2
631 
632 ) is
633 
634    l_msg_index_out        NUMBER;
635 --   l_status_code          pa_control_items.status_code%type;
636 
637 --   cursor valid_ci is
638 --     select status_code
639 --       from pa_control_items
640 --      where ci_id = p_ci_id;
641 
642 begin
643 
644   -- Initialize the Error Stack
645   PA_DEBUG.init_err_stack('PA_CONTROL_ITEMS_PUB.DELETE_CONTROL_ITEM');
646 
647   -- Initialize the return status to success
648   x_return_status := FND_API.G_RET_STS_SUCCESS;
649 
650   --Clear the global PL/SQL message table
651   IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
652     FND_MSG_PUB.initialize;
653   END IF;
654 /*
655   open valid_ci;
656   fetch valid_ci into l_status_code;
657 
658   if (valid_ci%notfound) then
659      --- invalid ci_id error
660        PA_UTILS.Add_Message( p_app_short_name => 'PA'
661                               ,p_msg_name      => 'PA_CI_INVALID_ITEM');
662        x_return_status := FND_API.G_RET_STS_ERROR;
663   else
664      if (l_status_code <> 'CI_DRAFT') then
665      --- invalid status error
669      end if;
666        PA_UTILS.Add_Message( p_app_short_name => 'PA'
667                               ,p_msg_name      => 'PA_CI_ONLY_DRAFT_DEL');
668        x_return_status := FND_API.G_RET_STS_ERROR;
670   end if;
671   close valid_ci;
672 
673 
674   if (x_return_status = 'S') then */
675 
676    PA_CONTROL_ITEMS_PVT.DELETE_CONTROL_ITEM(
677          p_api_version
678         ,p_init_msg_list
679         ,p_commit
680         ,p_validate_only
681         ,p_max_msg_count
682 
683         ,p_ci_id
684         ,p_record_version_number
685         ,x_return_status
686         ,x_msg_count
687         ,x_msg_data
688        );
689 --  end if;
690 
691 
692   -- IF the number of messaages is 1 then fetch the message code from the stack
693   -- and return its text
694   x_msg_count :=  FND_MSG_PUB.Count_Msg;
695   IF x_msg_count = 1 THEN
696     pa_interface_utils_pub.get_messages ( p_encoded       => FND_API.G_TRUE
697                                          ,p_msg_index     => 1
698                                          ,p_data          => x_msg_data
699                                          ,p_msg_index_out => l_msg_index_out
700                                         );
701   END IF;
702 
703   -- Reset the error stack when returning to the calling program
704   PA_DEBUG.Reset_Err_Stack;
705 
706 
707 EXCEPTION
708     WHEN OTHERS THEN
709       rollback;
710        -- Set the excetption Message and the stack
711        FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_CONTROL_ITEMS_PUB.DELETE_CONTROL_ITEM'
712                                 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
713 
714 
715         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
716         RAISE;
717 end DELETE_CONTROL_ITEM;
718 
719 procedure COPY_CONTROL_ITEM (
720          p_api_version            IN     NUMBER :=  1.0
721         ,p_init_msg_list          IN     VARCHAR2 := fnd_api.g_true
722         ,p_commit                 IN     VARCHAR2 := FND_API.g_false
723         ,p_validate_only          IN     VARCHAR2 := FND_API.g_true
724         ,p_max_msg_count          IN     NUMBER := FND_API.g_miss_num
725 
726         ,p_project_id             IN  NUMBER
727         ,p_ci_id_from             IN  NUMBER   -- copy from this
728         ,p_ci_type_id             IN  NUMBER   -- copy to this
729         ,p_classification_code_id IN  NUMBER
730         ,p_reason_code_id         IN  NUMBER
731         ,p_include                IN  VARCHAR2 := 'N'
732         ,p_record_version_number_from  IN     NUMBER
733         ,x_ci_id                       OUT NOCOPY NUMBER
734         ,x_ci_number                   OUT NOCOPY VARCHAR2
735         ,x_return_status               OUT NOCOPY    VARCHAR2
736         ,x_msg_count                   OUT NOCOPY    NUMBER
737         ,x_msg_data                    OUT NOCOPY    VARCHAR2
738 
739 ) is
740 
741    l_msg_index_out   NUMBER;
742 
743 begin
744 
745   -- Initialize the Error Stack
746   PA_DEBUG.init_err_stack('PA_CONTROL_ITEMS_PUB.COPY_CONTROL_ITEM');
747 
748   -- Initialize the return status to success
749   x_return_status := FND_API.G_RET_STS_SUCCESS;
750 
751   --Clear the global PL/SQL message table
752   IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
753     FND_MSG_PUB.initialize;
754   END IF;
755 
756      pa_control_items_pvt.COPY_CONTROL_ITEM (
757          p_commit             => p_commit
758         ,p_validate_only      => p_validate_only
759 
760         ,p_project_id         => p_project_id
761         ,p_ci_id_from         => p_ci_id_from   -- copy from this
762         ,p_ci_type_id         => p_ci_type_id   -- copy to this
763         ,p_classification_code_id => p_classification_code_id
764         ,p_reason_code_id     => p_reason_code_id
765         ,p_include            => p_include
766         ,p_record_version_number_from  => p_record_version_number_from
767         ,x_ci_id                       => x_ci_id
768         ,x_ci_number                   => x_ci_number
769         ,x_return_status               => x_return_status
770         ,x_msg_count                   => x_msg_count
771         ,x_msg_data                    => x_msg_data);
772 
773   -- IF the number of messages is 1 then fetch the message code from the stack
774   -- and return its text
775   x_msg_count :=  FND_MSG_PUB.Count_Msg;
776   IF x_msg_count = 1 THEN
777     pa_interface_utils_pub.get_messages ( p_encoded       => FND_API.G_TRUE
778                                          ,p_msg_index     => 1
779                                          ,p_data          => x_msg_data
780                                          ,p_msg_index_out => l_msg_index_out
781                                         );
782   end if;
783 
784   if (p_commit = 'T' and x_return_status = 'S') then
785       commit;
786   end if;
787 
788  -- Reset the error stack when returning to the calling program
789   PA_DEBUG.Reset_Err_Stack;
790 
791 
792 EXCEPTION
793     WHEN OTHERS THEN
794       rollback;
795        -- Set the excetption Message and the stack
796        FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_CONTROL_ITEMS_PUB.COPY_CONTROL_ITEM'
797                                 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
798 
799 
800         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
801         RAISE;
802 end COPY_CONTROL_ITEM;
803 
804 procedure INCLUDE_CONTROL_ITEM(
805          p_api_version          IN     NUMBER :=  1.0
806         ,p_init_msg_list        IN     VARCHAR2 := fnd_api.g_true
807         ,p_commit               IN     VARCHAR2 := FND_API.g_false
808         ,p_validate_only        IN     VARCHAR2 := FND_API.g_true
809         ,p_max_msg_count        IN     NUMBER := FND_API.g_miss_num
810 
811         ,p_from_ci_id             IN     NUMBER
812         ,p_to_ci_id               IN     NUMBER
813         ,p_record_version_number_to    IN  NUMBER
814         ,x_relationship_id             OUT NOCOPY NUMBER
815         ,x_return_status               OUT NOCOPY    VARCHAR2
816         ,x_msg_count                   OUT NOCOPY    NUMBER
817         ,x_msg_data                    OUT NOCOPY    VARCHAR2
818 ) is
819 
820    l_relationship_id      NUMBER;
821    l_msg_index_out        NUMBER;
822 
823 begin
824 
825   -- Initialize the Error Stack
826   PA_DEBUG.init_err_stack('PA_CONTROL_ITEMS_PUB.INCLUDE_CONTROL_ITEM');
827 
828   -- Initialize the return status to success
829   x_return_status := FND_API.G_RET_STS_SUCCESS;
830 
831   --Clear the global PL/SQL message table
832   IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
833     FND_MSG_PUB.initialize;
834   END IF;
835 
836   if (x_return_status = FND_API.G_RET_STS_SUCCESS) then
837      PA_CONTROL_ITEMS_PVT.INCLUDE_CONTROL_ITEM(
838          p_api_version                => p_api_version
839         ,p_init_msg_list              => p_init_msg_list
840         ,p_commit                     => p_commit
841         ,p_validate_only              => p_validate_only
842         ,p_max_msg_count              => p_max_msg_count
843         ,p_from_ci_id                   => p_from_ci_id
844         ,p_to_ci_id                     => p_to_ci_id
845         ,p_record_version_number_to     => p_record_version_number_to
846         ,x_relationship_id            => l_relationship_id
847         ,x_return_status              => x_return_status
848         ,x_msg_count                  => x_msg_count
849         ,x_msg_data                   => x_msg_data);
850    end if;
851 
852  -- IF the number of messaages is 1 then fetch the message code from the stack
853   -- and return its text
854   x_msg_count :=  FND_MSG_PUB.Count_Msg;
855   IF x_msg_count = 1 THEN
856     pa_interface_utils_pub.get_messages ( p_encoded       => FND_API.G_TRUE
857                                          ,p_msg_index     => 1
858                                          ,p_data          => x_msg_data
859                                          ,p_msg_index_out => l_msg_index_out
860                                         );
861   END IF;
862 
863   if (p_commit = 'T' and x_return_status = 'S') then
864       commit;
865   end if;
866 
867  -- Reset the error stack when returning to the calling program
868   PA_DEBUG.Reset_Err_Stack;
869 
870 
871 EXCEPTION
872     WHEN OTHERS THEN
873       rollback;
874        -- Set the excetption Message and the stack
875        FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_CONTROL_ITEMS_PUB.INCLUDE_CONTROL_ITEM'
876                                 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
877 
878 
879         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
880         RAISE;
881 end INCLUDE_CONTROL_ITEM;
882 
883 
884 function GET_OBJECT_NAME(p_object_id   IN  NUMBER
885                         ,p_object_type IN  VARCHAR2
886 ) return VARCHAR2 is
887 
888 begin
889    null;
890 end GET_OBJECT_NAME;
891 
892 
893 END  PA_CONTROL_ITEMS_PUB;