DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTF_DELIVERABLE_GRP

Source


1 PACKAGE BODY JTF_Deliverable_GRP AS
2 /* $Header: JTFGDLVB.pls 115.17 2004/07/09 18:49:38 applrt ship $ */
3 g_amv_api_version CONSTANT NUMBER := 1.0;
4 
5 TYPE DlvCurTyp IS REF CURSOR;
6 
7 g_view_name CONSTANT VARCHAR2(48) := 'jtf_dsp_amv_items_v';
8 
9 PROCEDURE list_deliverable (
10      p_api_version            IN   NUMBER,
11 	p_init_msg_list          IN   VARCHAR2 := FND_API.g_false,
12 	x_return_status          OUT  VARCHAR2,
13 	x_msg_count              OUT  NUMBER,
14 	x_msg_data               OUT  VARCHAR2,
15 	p_item_type              IN   VARCHAR2,
16 	p_item_applicable_to     IN   VARCHAR2,
17 	p_search_type            IN   VARCHAR2,
18 	p_search_value           IN   VARCHAR2,
19 	p_start_id               IN   NUMBER,
20 	p_batch_size             IN   NUMBER,
21 	x_row_count              OUT  NUMBER,
22 	x_dlv_id_tbl             OUT  NUMBER_TABLE,
23 	x_acc_name_tbl           OUT  VARCHAR2_TABLE_100,
24 	x_dsp_name_tbl           OUT  VARCHAR2_TABLE_300,
25 	x_item_type_tbl          OUT  VARCHAR2_TABLE_100,
26 	x_appl_to_tbl            OUT  VARCHAR2_TABLE_100,
27 	x_keyword_tbl            OUT  VARCHAR2_TABLE_300,
28 	x_desc_tbl               OUT  VARCHAR2_TABLE_2000,
29 	x_version_tbl            OUT  NUMBER_TABLE,
30 	x_file_name_tbl          OUT  VARCHAR2_TABLE_300,
31 
32 	--added by G. Zhang 05/17/01 5:42PM
33 	x_file_id_tbl          OUT  NUMBER_TABLE ) IS
34 
35 BEGIN
36 
37 	list_deliverable(
38 		p_api_version,
39 		p_init_msg_list,
40 		x_return_status,
41 		x_msg_count,
42 		x_msg_data,
43 		NULL,
44 		p_item_type,
45 		p_item_applicable_to,
46 		p_search_type,
47 		p_search_value,
48 		p_start_id,
49 		p_batch_size,
50 		x_row_count,
51 		x_dlv_id_tbl,
52 		x_acc_name_tbl,
53 		x_dsp_name_tbl,
54 		x_item_type_tbl,
55 		x_appl_to_tbl,
56 		x_keyword_tbl,
57 		x_desc_tbl,
58 		x_version_tbl,
59 		x_file_name_tbl,
60 
61 		--added by G. Zhang  05/17/01 5:42PM
62 		x_file_id_tbl
63 	);
64 
65 END list_deliverable;
66 
67 
68 PROCEDURE list_deliverable (
69 	p_api_version            IN   NUMBER,
70 	p_init_msg_list          IN   VARCHAR2 := FND_API.g_false,
71 	x_return_status          OUT  VARCHAR2,
72 	x_msg_count              OUT  NUMBER,
73 	x_msg_data               OUT  VARCHAR2,
74 	p_category_id			IN	NUMBER,
75 	p_item_type			IN	VARCHAR2,
76 	p_item_applicable_to	IN	VARCHAR2,
77 	p_search_type			IN	VARCHAR2,
78 	p_search_value			IN	VARCHAR2,
79 	p_start_id			IN	NUMBER,
80 	p_batch_size			IN 	NUMBER,
81 	x_row_count			OUT	NUMBER,
82 	x_dlv_id_tbl			OUT	NUMBER_TABLE,
83 	x_acc_name_tbl			OUT	VARCHAR2_TABLE_100,
84 	x_dsp_name_tbl			OUT	VARCHAR2_TABLE_300,
85 	x_item_type_tbl		OUT	VARCHAR2_TABLE_100,
86 	x_appl_to_tbl			OUT	VARCHAR2_TABLE_100,
87 	x_keyword_tbl			OUT	VARCHAR2_TABLE_300,
88 	x_desc_tbl			OUT	VARCHAR2_TABLE_2000,
89 	x_version_tbl			OUT	NUMBER_TABLE,
90 	x_file_name_tbl		OUT	VARCHAR2_TABLE_300,
91 
92 	--added by G. Zhang  05/17/01 5:42PM
93 	x_file_id_tbl		OUT	NUMBER_TABLE ) IS
94 
95 	l_api_name CONSTANT VARCHAR2(30) := 'list_deliverable';
96 	l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
97 
98 	l_return_status VARCHAR2(1);
99 
100 	l_dlv_cv DlvCurTyp;
101 	l_flag NUMBER := 0;
102 	l_search_value VARCHAR2(240);
103 	sql_cond VARCHAR2(480) := 'FROM ' || g_view_name
104 		|| ' WHERE application_id = :appl_id ';
105 	sql_stmt VARCHAR2(960);
106 
107 	start_pnt NUMBER;
108 	end_pnt NUMBER;
109 
110 	l_dlv_id_tbl JTF_NUMBER_TABLE;
111 	l_acc_name_tbl JTF_VARCHAR2_TABLE_100;
112 	l_dsp_name_tbl JTF_VARCHAR2_TABLE_300;
113 	l_item_type_tbl JTF_VARCHAR2_TABLE_100;
114 	l_appl_to_tbl JTF_VARCHAR2_TABLE_100;
115 	l_keyword_tbl JTF_VARCHAR2_TABLE_300;
116 	l_desc_tbl JTF_VARCHAR2_TABLE_2000;
117 	l_version_tbl JTF_NUMBER_TABLE;
118 	l_file_name_tbl JTF_VARCHAR2_TABLE_300;
119 
120 	--added by G. Zhang 05/17/01 5:42PM
121 	l_file_id_tbl JTF_NUMBER_TABLE;
122 
123 	l_index NUMBER;
124 	l_count NUMBER;
125 
126 	l_appl_id NUMBER;
127 
128 BEGIN
129 
130 	-- Standard call to check for call compatibility
131 	IF NOT FND_API.compatible_api_call(
132 		g_api_version,
133 		p_api_version,
134 		l_api_name,
135 		g_pkg_name
136 	) THEN
137 		RAISE FND_API.g_exc_unexpected_error;
138 	END IF;
139 
140 	-- Initialize message list if p_init_msg_list is set to TRUE
141 	IF FND_API.to_boolean(p_init_msg_list) THEN
142 		FND_MSG_PUB.initialize;
143 	END IF;
144 
145 	-- Initialize API rturn status to success
146 	x_return_status := FND_API.g_ret_sts_success;
147 
148 	-- API body
149 
150 	IF p_start_id < -1 OR p_batch_size < 0
151 		OR (p_start_id = -1 AND p_batch_size = 0) THEN
152 		FND_MESSAGE.set_name('JTF', 'JTF_DSP_QUERY_INVLD');
153 		FND_MESSAGE.set_token('0', TO_CHAR(p_start_id));
154 		FND_MESSAGE.set_token('1', TO_CHAR(p_batch_size));
155 		FND_MSG_PUB.add;
156 		RAISE FND_API.g_exc_unexpected_error;
157 	END IF;
158 
159 	IF p_category_id IS NOT NULL
160 		AND TRIM(p_item_applicable_to) <> 'CATEGORY' THEN
161 		FND_MESSAGE.set_name('JTF', 'JTF_DSP_AVAIL_INVLD');
162 		FND_MESSAGE.set_token('0', TO_CHAR(p_category_id));
163 		FND_MESSAGE.set_token('1', p_item_applicable_to);
164 		FND_MSG_PUB.add;
165 		RAISE FND_API.g_exc_unexpected_error;
166 	END IF;
167 
168 	IF TRIM(p_item_type) IS NOT NULL THEN
169 		l_flag := 1;
170 		sql_cond := sql_cond || 'AND deliverable_type_code = :item_type ';
171 	END IF;
172 
173 	IF TRIM(p_item_applicable_to) IS NOT NULL THEN
174 		l_flag := l_flag + 10;
175 		sql_cond := sql_cond || 'AND applicable_to_code = :appl_to ';
176 	END IF;
177 
178 	IF TRIM(p_search_type) IS NOT NULL AND TRIM(p_search_value) IS NOT NULL THEN
179 		l_flag := l_flag + 100;
180           	l_search_value := '%' || LOWER(TRIM(p_search_value)) || '%';
181           	sql_cond := sql_cond || 'AND LOWER(' || p_search_type || ') LIKE :value ';
182 	END IF;
183 
184 	IF p_category_id IS NOT NULL THEN
185 		l_flag := l_flag + 1000;
186 		sql_cond := sql_cond
187 			|| 'AND item_id NOT IN (SELECT item_id FROM jtf_dsp_tpl_ctg '
188 			|| 'WHERE category_id = :ctg_id) ';
189 	END IF;
190 
191 -- dbms_output.put_line('resp_appl_id=' || FND_GLOBAL.resp_appl_id);
192 
193 -- fnd_global.apps_initialize(fnd_global.user_id, fnd_global.resp_id, 671);
194 -- l_appl_id := FND_GLOBAL.resp_appl_id;
195 l_appl_id := 671;
196 
197 	-- Get Total Row Number
198 	sql_stmt := 'SELECT COUNT(*) ' || sql_cond;
199      IF l_flag = 1111 THEN
200 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
201 			p_item_type, p_item_applicable_to, l_search_value, p_category_id;
202 	ELSIF l_flag = 1110 THEN
203 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
204 			p_item_applicable_to, l_search_value, p_category_id;
205 	ELSIF l_flag = 1101 THEN
206 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
207 			p_item_type, l_search_value, p_category_id;
208 	ELSIF l_flag = 1100 THEN
209 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
210 			l_search_value, p_category_id;
211 	ELSIF l_flag = 1011 THEN
212 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
213 			p_item_type, p_item_applicable_to, p_category_id;
214 	ELSIF l_flag = 1010 THEN
215 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
216 			p_item_applicable_to, p_category_id;
217 	ELSIF l_flag = 1001 THEN
218 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
219 			p_item_type, p_category_id;
220 	ELSIF l_flag = 1000 THEN
221 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
222 		p_category_id;
223 	ELSIF l_flag = 111 THEN
224 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
225 			p_item_type, p_item_applicable_to, l_search_value;
226 	ELSIF l_flag = 110 THEN
227 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
228 			p_item_applicable_to, l_search_value;
229 	ELSIF l_flag = 101 THEN
230 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
231 			p_item_type, l_search_value;
232 	ELSIF l_flag = 100 THEN
233 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
234 			l_search_value;
235 	ELSIF l_flag = 11 THEN
236 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
237 			p_item_type, p_item_applicable_to;
238 	ELSIF l_flag = 10 THEN
239 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
240 			p_item_applicable_to;
241 	ELSIF l_flag = 1 THEN
242 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
243 			p_item_type;
244 	ELSE
245 		OPEN l_dlv_cv FOR sql_stmt USING l_appl_id;
246 	END IF;
247 
248      FETCH l_dlv_cv INTO x_row_count;
249 	CLOSE l_dlv_cv;
250 
251 	IF x_row_count = 0 THEN
252 		FND_MSG_PUB.count_and_get(
253 			p_encoded      =>   FND_API.g_false,
254 			p_count        =>   x_msg_count,
255 			p_data         =>   x_msg_data
256 		);
257 		RETURN;
258 	END IF;
259 
260      x_dlv_id_tbl := NULL;
261 	x_acc_name_tbl := NULL;
262 	x_dsp_name_tbl := NULL;
263 	x_item_type_tbl := NULL;
264 	x_appl_to_tbl := NULL;
265 	x_desc_tbl := NULL;
266 	x_keyword_tbl := NULL;
267 	x_file_name_tbl := NULL;
268 
269 	--added by G. Zhang 05/17/01 5:42PM
270 	x_file_id_tbl :=NULL;
271 
272 	x_version_tbl := NULL;
273 
274 	-- Get matched rows
275 	IF p_start_id > -1 THEN
276 		IF p_start_id >= x_row_count THEN
277 			FND_MSG_PUB.count_and_get(
278 				p_encoded      =>   FND_API.g_false,
279 				p_count        =>   x_msg_count,
280 				p_data         =>   x_msg_data
281 			);
282 			RETURN;
283 		END IF;
284 
285 		start_pnt := p_start_id + 1;
286 		IF p_batch_size > 0 THEN
287 			end_pnt := p_start_id + p_batch_size;
288 		ELSE
289 			end_pnt := x_row_count;
290 		END IF;
291 	ELSE
292 		end_pnt := x_row_count;
293 		start_pnt := end_pnt - p_batch_size + 1;
294 		IF start_pnt < 1 THEN
295 			start_pnt := 1;
296 		END IF;
297 	END IF;
298 
299 	sql_stmt := 'BEGIN '
300 		|| 'SELECT item_id, access_name, item_name, deliverable_type_code, '
301 
302 		--modified by G. Zhang 05/17/01 5:42PM
303 		|| 'applicable_to_code, description, keyword, file_name, file_id, '
304 
305 		|| 'object_version_number '
306 		|| 'BULK COLLECT INTO :id_tbl, :acc_tbl, :dsp_tbl, :type_tbl, '
307 
308 		--modified by G. Zhang 05/17/01 5:42PM
309 		|| ':appl_tbl, :desc_tbl, :key_tbl, :file_tbl, :file_id_tbl, :version_tbl '
310 
311 		|| 'FROM (SELECT * '
312 		|| sql_cond
313 		|| 'ORDER BY item_name ) '
314 		|| 'WHERE ROWNUM <= :row_num '
315 		|| '; END;';
316 
317 -- dbms_output.put_line('sql_cond=' || sql_cond);
318 -- dbms_output.put_line('row_num=' || end_pnt);
319 -- dbms_output.put_line('sql_stmt=' || sql_stmt);
320 
321 	IF l_flag = 1111 THEN
322 		EXECUTE IMMEDIATE sql_stmt USING
323 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
324 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
325 
326 			--modified by G. Zhang 05/17/01 5:42PM
327 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
328 
329 			l_appl_id,
330 			p_item_type, p_item_applicable_to, l_search_value,
331 			p_category_id,
332 			end_pnt;
333 	ELSIF l_flag = 1110 THEN
334 		EXECUTE IMMEDIATE sql_stmt USING
335 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
336 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
337 
338 			--modified by G. Zhang 05/17/01 5:42PM
339 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
340 
341 			l_appl_id,
342 			p_item_applicable_to, l_search_value,
343 			p_category_id,
344 			end_pnt;
345 	ELSIF l_flag = 1101 THEN
346 		EXECUTE IMMEDIATE sql_stmt USING
347 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
348 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
349 
350 			--modified by G. Zhang 05/17/01 5:42PM
351 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
352 
353 			l_appl_id,
354 			p_item_type, l_search_value,
355 			p_category_id,
356 			end_pnt;
357 	ELSIF l_flag = 1100 THEN
358 		EXECUTE IMMEDIATE sql_stmt USING
359 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
360 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
361 
362 			--modified by G. Zhang 05/17/01 5:42PM
363 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
364 
365 			l_appl_id,
366 			l_search_value,
367 			p_category_id,
368 			end_pnt;
369 	ELSIF l_flag = 1011 THEN
370 		EXECUTE IMMEDIATE sql_stmt USING
371 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
372 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
373 
374 			--modified by G. 3
375 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
376 
377 			l_appl_id,
378 			p_item_type, p_item_applicable_to,
379 			p_category_id,
380 			end_pnt;
381 	ELSIF l_flag = 1010 THEN
382 		EXECUTE IMMEDIATE sql_stmt USING
383 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
384 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
385 
386 			--modified by G. Zhang 05/17/01 5:42PM
387 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
388 
389 			l_appl_id,
390 			p_item_applicable_to,
391 			p_category_id,
392 			end_pnt;
393 	ELSIF l_flag = 1001 THEN
394 		EXECUTE IMMEDIATE sql_stmt USING
395 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
396 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
397 
398 			--added by G. Zhang 05/17/01 5:42PM
399 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
400 
401 			l_appl_id,
402 			p_item_type,
403 			p_category_id,
404 			end_pnt;
405 	ELSIF l_flag = 1000 THEN
406 		EXECUTE IMMEDIATE sql_stmt USING
407 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
408 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
409 
410 			--modified by G. Zhang 05/17/01 5:42PM
411 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
412 
413 			l_appl_id,
414 			p_category_id,
415 			end_pnt;
416      ELSIF l_flag = 111 THEN
417 		EXECUTE IMMEDIATE sql_stmt USING
418 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
419 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
420 
421 			--modified by G. Zhang 05/17/01 5:42PM
422 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
423 
424 			l_appl_id,
425 			p_item_type, p_item_applicable_to, l_search_value, end_pnt;
426 	ELSIF l_flag = 110 THEN
427 		EXECUTE IMMEDIATE sql_stmt USING
428 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
429 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
430 
431 			--modified by G. Zhang 05/17/01 5:42PM
432 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
433 
434 			l_appl_id,
435 			p_item_applicable_to, l_search_value, end_pnt;
436 	ELSIF l_flag = 101 THEN
437 		EXECUTE IMMEDIATE sql_stmt USING
438 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
439 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
440 
441 			--modified by G. Zhang 05/17/01 5:42PM
442 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
443 
444 			l_appl_id,
445 			p_item_type, l_search_value, end_pnt;
446 	ELSIF l_flag = 100 THEN
447 		EXECUTE IMMEDIATE sql_stmt USING
448 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
449 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
450 
451 			--modified by G. Zhang 05/17/01 5:42PM
452 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
453 
454 			l_appl_id,
455 			l_search_value, end_pnt;
456 	ELSIF l_flag = 11 THEN
457 		EXECUTE IMMEDIATE sql_stmt USING
458 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
459 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
460 
461 			--modified by G. Zhang 05/17/01 5:42PM
462 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
463 
464 			l_appl_id,
465 			p_item_type, p_item_applicable_to, end_pnt;
466 	ELSIF l_flag = 10 THEN
467 		EXECUTE IMMEDIATE sql_stmt USING
468 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
469 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
470 
471 			--modified by G. Zhang 05/17/01 5:42PM
472 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
473 
474 			l_appl_id,
475 			p_item_applicable_to, end_pnt;
476 	ELSIF l_flag = 1 THEN
477 		EXECUTE IMMEDIATE sql_stmt USING
478 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
479 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
480 
481 			--modified by G. Zhang 05/17/01 5:42PM
482 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
483 
484 			l_appl_id,
485 			p_item_type, end_pnt;
486 	ELSE
487 		EXECUTE IMMEDIATE sql_stmt USING
488 			OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
489 			OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
490 
491 			--modified by G. Zhang 05/17/01 5:42PM
492 			OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
493 
494 			l_appl_id,
495 			end_pnt;
496 	END IF;
497 
498 -- dbms_output.put_line('executed');
499 
500 	IF l_dlv_id_tbl IS NOT NULL AND start_pnt <= l_dlv_id_tbl.COUNT THEN
501 		x_dlv_id_tbl := NUMBER_TABLE(l_dlv_id_tbl(start_pnt));
502 		x_acc_name_tbl := VARCHAR2_TABLE_100(l_acc_name_tbl(start_pnt));
503 		x_dsp_name_tbl := VARCHAR2_TABLE_300(l_dsp_name_tbl(start_pnt));
504 		x_item_type_tbl := VARCHAR2_TABLE_100(l_item_type_tbl(start_pnt));
505 		x_appl_to_tbl := VARCHAR2_TABLE_100(l_appl_to_tbl(start_pnt));
506 		x_desc_tbl := VARCHAR2_TABLE_2000(l_desc_tbl(start_pnt));
507 		x_keyword_tbl := VARCHAR2_TABLE_300(l_keyword_tbl(start_pnt));
508 		x_file_name_tbl := VARCHAR2_TABLE_300(l_file_name_tbl(start_pnt));
509 
510 		--added by G. Zhang 05/17/01 5:42PM
511 		x_file_id_tbl := NUMBER_TABLE(l_file_id_tbl(start_pnt));
512 
513 		x_version_tbl := NUMBER_TABLE(l_version_tbl(start_pnt));
514 
515 		l_count := 1;
516 		FOR l_index IN start_pnt+1..l_dlv_id_tbl.COUNT LOOP
517 			IF l_index > end_pnt THEN
518 				EXIT;
519 			END IF;
520 			x_dlv_id_tbl.EXTEND;
521 			x_acc_name_tbl.EXTEND;
522 			x_dsp_name_tbl.EXTEND;
523 			x_item_type_tbl.EXTEND;
524 			x_appl_to_tbl.EXTEND;
525 			x_desc_tbl.EXTEND;
526 			x_keyword_tbl.EXTEND;
527 			x_file_name_tbl.EXTEND;
528 
529 			--added by G. Zhang 05/17/01 5:42PM
530 			x_file_id_tbl.EXTEND;
531 
532 			x_version_tbl.EXTEND;
533 
534 			l_count := l_count + 1;
535 			x_dlv_id_tbl(l_count) := l_dlv_id_tbl(l_index);
536 			x_acc_name_tbl(l_count) := l_acc_name_tbl(l_index);
537 			x_dsp_name_tbl(l_count) := l_dsp_name_tbl(l_index);
538 			x_item_type_tbl(l_count) := l_item_type_tbl(l_index);
539 			x_appl_to_tbl(l_count) := l_appl_to_tbl(l_index);
540 			x_desc_tbl(l_count) := l_desc_tbl(l_index);
541 			x_keyword_tbl(l_count) := l_keyword_tbl(l_index);
542 			x_file_name_tbl(l_count) := l_file_name_tbl(l_index);
543 
544 			--added by G. Zhang 05/17/01 5:42PM
545 			x_file_id_tbl(l_count) := l_file_id_tbl(l_index);
546 
547 			x_version_tbl(l_count) := l_version_tbl(l_index);
548 		END LOOP;
549 	END IF;
550 
551 /*
552      -- Get matchined rows
553 	IF p_start_id > -1 THEN
554 		IF p_start_id >= x_row_count THEN
555 			RETURN;
556 		END IF;
557 
558 		start_pnt := p_start_id;
559 		IF p_batch_size > 0 THEN
560 			end_pnt := p_start_id + p_batch_size;
561 		ELSE
562 			end_pnt := x_row_count;
563 		END IF;
564 	ELSE
565 		end_pnt := x_row_count;
566 		start_pnt := end_pnt - p_batch_size;
567 		IF start_pnt < 0 THEN
568 			start_pnt := 0;
569 		END IF;
570 	END IF;
571 
572      IF l_flag = 111 THEN
573 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
574 			p_item_type, p_item_applicable_to, l_search_value, end_pnt;
575 	ELSIF l_flag = 110 THEN
576 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
577 			p_item_applicable_to, l_search_value, end_pnt;
578 	ELSIF l_flag = 101 THEN
579 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
580 			p_item_type, l_search_value, end_pnt;
581 	ELSIF l_flag = 100 THEN
582 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
583 			l_search_value, end_pnt;
584 	ELSIF l_flag = 11 THEN
585 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
586 			p_item_type, p_item_applicable_to, end_pnt;
587 	ELSIF l_flag = 10 THEN
588 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
589 			p_item_applicable_to, end_pnt;
590 	ELSIF l_flag = 1 THEN
591 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
592 			p_item_type, end_pnt;
593 	ELSE
594 		OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id, end_pnt;
595 	END IF;
596 
597 	IF start_pnt > 0 THEN
598 		FETCH l_dlv_cv BULK COLLECT INTO l_dlv_id_tbl, l_acc_name_tbl,
599 			l_dsp_name_tbl, l_item_type_tbl, l_appl_to_tbl, l_desc_tbl,
600 			l_keyword_tbl, l_file_name_tbl, l_version_tbl LIMIT start_pnt;
601 		IF l_dlv_cv%NOTFOUND THEN
602 			CLOSE l_dlv_cv;
603 			RETURN;
604 		END IF;
605 	END IF;
606 
607 	FETCH l_dlv_cv BULK COLLECT INTO x_dlv_id_tbl, x_acc_name_tbl,
608 		x_dsp_name_tbl, x_item_type_tbl, x_appl_to_tbl, x_desc_tbl,
609 		x_keyword_tbl, x_file_name_tbl, x_version_tbl;
610 	CLOSE l_dlv_cv;
611 */
612 
613 	-- Standard call to get message count and if count is 1, get message info
614 	FND_MSG_PUB.count_and_get(
615 		p_encoded      =>   FND_API.g_false,
616 		p_count        =>   x_msg_count,
617 		p_data         =>   x_msg_data
618 	);
619 
620 EXCEPTION
621 
622 	WHEN FND_API.g_exc_unexpected_error THEN
623 		x_return_status := FND_API.g_ret_sts_unexp_error ;
624 		FND_MSG_PUB.count_and_get(
625 			p_encoded => FND_API.g_false,
626 			p_count   => x_msg_count,
627 			p_data    => x_msg_data
628 		);
629 
630 	WHEN OTHERS THEN
631 		x_return_status := FND_API.g_ret_sts_unexp_error ;
632 
633 		IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
634 			FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
635 		END IF;
636 
637 		FND_MSG_PUB.count_and_get(
638 			p_encoded => FND_API.g_false,
639 			p_count   => x_msg_count,
640 			p_data    => x_msg_data
641 		);
642 
643 END list_deliverable;
644 
645 
646 ---------------------------------------------------------------------
647 -- PROCEDURE
648 --    save_deliverable
649 --
650 -- PURPOSE
651 --    Save a logical deliverable
652 --
653 -- PARAMETERS
654 --    p_deliverable_rec:	The logical deliverables to be saved
655 --
656 -- NOTES
657 --    1. Insert a new deliverable if deliverable_id is null; update otherwise
658 --    2. Raise an exception if access_name or display_name is missing;
659 --	    or access_name is not unique
660 --	 3. Raise an exception if item_type or item_applicable_to is missing
661 --	    or invalid (create)
662 --	 4. Raise an exception if the deliverable doesn't exist; or the version
663 --	    doesn't match (update)
664 --    5. Raise an exception for any other errors
665 
666 ---------------------------------------------------------------------
667 PROCEDURE save_deliverable (
668 	p_api_version			IN	NUMBER,
669 	p_init_msg_list		IN	VARCHAR2 := FND_API.g_false,
670 	p_commit				IN	VARCHAR2 := FND_API.g_false,
671 	x_return_status		OUT	VARCHAR2,
672 	x_msg_count			OUT	NUMBER,
673 	x_msg_data			OUT	VARCHAR2,
674 	p_deliverable_rec		IN OUT DELIVERABLE_REC_TYPE ) IS
675 
676 	l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
677 	l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
678 
679 	l_operation_type VARCHAR2(10) := 'INSERT';
680 
681 	l_deliverable_id NUMBER;
682 	l_item_rec JTF_AMV_ITEM_PUB.ITEM_REC_TYPE;
683 	l_return_status VARCHAR2(1);
684 
685 	l_appl_id NUMBER;
686 
687 BEGIN
688 
689 	-- Standard start of API savepoint
690 	SAVEPOINT save_deliverable_grp;
691 
692 	-- Standard call to check for call compatibility
693 	IF NOT FND_API.compatible_api_call(
694 		g_api_version,
695 		p_api_version,
696 		l_api_name,
697 		g_pkg_name
698 	) THEN
699 		RAISE FND_API.g_exc_unexpected_error;
700 	END IF;
701 
702 	-- Initialize message list if p_init_msg_list is set to TRUE
703 	IF FND_API.to_boolean(p_init_msg_list) THEN
704 		FND_MSG_PUB.initialize;
705 	END IF;
706 
707 	-- Initialize API rturn status to success
708 	x_return_status := FND_API.g_ret_sts_success;
709 
710 	-- API body
711 
712           	l_item_rec.external_access_flag := NULL;
713 			l_item_rec.text_string := NULL;
714 			l_item_rec.language_code := NULL;
715 			l_item_rec.status_code := NULL;
716 			l_item_rec.effective_start_date := NULL;
717 			l_item_rec.EXPIRATION_DATE := NULL;
718 			l_item_rec.ITEM_TYPE := NULL;
719 			l_item_rec.URL_STRING := NULL;
720 			l_item_rec.PUBLICATION_DATE := NULL;
721 			l_item_rec.PRIORITY := NULL;
722 			l_item_rec.CONTENT_TYPE_ID := NULL;
723 			l_item_rec.OWNER_ID := NULL;
724 			l_item_rec.DEFAULT_APPROVER_ID := NULL;
725 			l_item_rec.ITEM_DESTINATION_TYPE := NULL;
726 
727 			l_item_rec.creation_date := NULL;
728 			l_item_rec.created_by := NULL;
729 			l_item_rec.last_update_date := NULL;
730 			l_item_rec.last_updated_by := NULL;
731           	l_item_rec.last_update_login := NULL;
732 
733 -- fnd_global.apps_initialize(fnd_global.user_id, fnd_global.resp_id, 671);
734 -- l_appl_id := FND_GLOBAL.resp_appl_id;
735 l_appl_id := 671;
736 
737 			l_item_rec.application_id := l_appl_id;
738 
739 			/*
740 			p_deliverable_rec.x_action_status
741 				:= FND_API.g_ret_sts_error;
742 			*/
743 
744 			l_item_rec.item_id
745 				:= p_deliverable_rec.deliverable_id;
746                l_item_rec.item_name
747 				:= TRIM(p_deliverable_rec.display_name);
748 			l_item_rec.access_name
749 				:= TRIM(p_deliverable_rec.access_name);
750 			l_item_rec.description := p_deliverable_rec.description;
751 			l_item_rec.object_version_number
752 				:= p_deliverable_rec.object_version_number;
753 
754 			IF NOT JTF_DSPMGRVALIDATION_GRP.check_deliverable_accessname(
755 				l_item_rec.item_id, l_item_rec.access_name) THEN
756 				RAISE FND_API.g_exc_error;
757 			END IF;
758 
759 			IF l_item_rec.item_id IS NOT NULL THEN
760 				-- Update an existing deliverable
761 				l_operation_type := 'UPDATE';
762 			END IF;
763 
764 			IF (l_operation_type = 'INSERT') THEN
765 				l_item_rec.deliverable_type_code
766 					:= TRIM(p_deliverable_rec.item_type);
767 				l_item_rec.applicable_to_code
768 					:= TRIM(p_deliverable_rec.item_applicable_to);
769 
770 				JTF_AMV_ITEM_PUB.create_item(
771 					p_api_version		=> g_amv_api_version,
772 					x_return_status	=> l_return_status,
773 					x_msg_count		=> x_msg_count,
774 					x_msg_data		=> x_msg_data,
775 					p_item_rec		=> l_item_rec,
776 					x_item_id			=> l_deliverable_id
777 				);
778 
779 				IF l_return_status = FND_API.g_ret_sts_error THEN
780 					RAISE FND_API.g_exc_error;
781 				ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
782 					RAISE FND_API.g_exc_unexpected_error;
783 				END IF;
784 
785 				IF TRIM(p_deliverable_rec.keywords) IS NOT NULL THEN
786 					JTF_AMV_ITEM_PUB.add_itemkeyword(
787 						p_api_version		=> g_amv_api_version,
788 						x_return_status	=> l_return_status,
789 						x_msg_count		=> x_msg_count,
790 						x_msg_data		=> x_msg_data,
791 						p_item_id			=> l_deliverable_id,
792 						p_keyword	=> p_deliverable_rec.keywords
793 					);
794 
795 					IF l_return_status = FND_API.g_ret_sts_error THEN
796 						RAISE FND_API.g_exc_error;
797 					ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
798 						RAISE FND_API.g_exc_unexpected_error;
799 					END IF;
800 				END IF;
801 
802 				p_deliverable_rec.deliverable_id := l_deliverable_id;
803 				p_deliverable_rec.object_version_number := 1;
804 
805 			ELSE
806 
807 				l_item_rec.deliverable_type_code := FND_API.g_miss_char;
808 				l_item_rec.applicable_to_code  := FND_API.g_miss_char;
809 
810 				JTF_AMV_ITEM_PUB.update_item(
811 					p_api_version       => g_amv_api_version,
812 					x_return_status     => l_return_status,
813 					x_msg_count         => x_msg_count,
814 					x_msg_data          => x_msg_data,
815 					p_item_rec          => l_item_rec
816 				);
817 
818 				IF l_return_status = FND_API.g_ret_sts_error THEN
819 					RAISE FND_API.g_exc_error;
820 				ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
821 					RAISE FND_API.g_exc_unexpected_error;
822 				END IF;
823 
824 				-- Delete existing keywords
825 				JTF_AMV_ITEM_PUB.delete_itemkeyword(
826 					p_api_version		=> g_amv_api_version,
827 					x_return_status	=> l_return_status,
828 					x_msg_count		=> x_msg_count,
829 					x_msg_data		=> x_msg_data,
830 					p_item_id	=> p_deliverable_rec.deliverable_id,
831 					p_keyword_tab		=> NULL
832 				);
833 
834                     IF l_return_status = FND_API.g_ret_sts_error THEN
835 					RAISE FND_API.g_exc_error;
836 				ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
837 					RAISE FND_API.g_exc_unexpected_error;
838 				END IF;
839 
840 				IF TRIM(p_deliverable_rec.keywords) IS NOT NULL THEN
841 					JTF_AMV_ITEM_PUB.add_itemkeyword(
842 						p_api_version		=> g_amv_api_version,
843 						x_return_status	=> l_return_status,
844 						x_msg_count		=> x_msg_count,
845 						x_msg_data		=> x_msg_data,
846 						p_item_id => p_deliverable_rec.deliverable_id,
847 						p_keyword			=> p_deliverable_rec.keywords
848 					);
849 
850 					IF l_return_status = FND_API.g_ret_sts_error THEN
851 						RAISE FND_API.g_exc_error;
852 					ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
853 						RAISE FND_API.g_exc_unexpected_error;
854 					END IF;
855 				END IF;
856 
857 				-- update the object_version_number
858 				p_deliverable_rec.object_version_number :=
859 					p_deliverable_rec.object_version_number + 1;
860 
861 			END IF;
862 
863 			p_deliverable_rec.x_action_status
864 				:= FND_API.g_ret_sts_success;
865 
866 	-- Check if the caller requested to commit ,
867 	-- If p_commit set to true, commit the transaction
868 	IF  FND_API.to_boolean(p_commit) THEN
869 		COMMIT;
870 	END IF;
871 
872      -- Standard call to get message count and if count is 1, get message info
873 	FND_MSG_PUB.count_and_get(
874 		p_encoded      =>   FND_API.g_false,
875 		p_count        =>   x_msg_count,
876 		p_data         =>   x_msg_data
877 	);
878 
879 EXCEPTION
880 
881 	WHEN FND_API.g_exc_error THEN
882 		ROLLBACK TO save_deliverable_grp;
883 		x_return_status := FND_API.g_ret_sts_error;
884 		p_deliverable_rec.x_action_status := FND_API.g_ret_sts_error;
885 		FND_MSG_PUB.count_and_get(
886 			p_encoded => FND_API.g_false,
887 			p_count   => x_msg_count,
888 			p_data    => x_msg_data
889 		);
890 
891 	WHEN FND_API.g_exc_unexpected_error THEN
892 		ROLLBACK TO save_deliverable_grp;
893 		x_return_status := FND_API.g_ret_sts_unexp_error;
894 		p_deliverable_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
895 		FND_MSG_PUB.count_and_get(
896 			p_encoded => FND_API.g_false,
897 			p_count   => x_msg_count,
898 			p_data    => x_msg_data
899 		);
900 
901 	WHEN OTHERS THEN
902 		ROLLBACK TO save_deliverable_grp;
903 		x_return_status := FND_API.g_ret_sts_unexp_error;
904 		p_deliverable_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
905 
906 		IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
907 			FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
908 		END IF;
909 
910 		FND_MSG_PUB.count_and_get(
911 			p_encoded => FND_API.g_false,
912 			p_count   => x_msg_count,
913 			p_data    => x_msg_data
914 		);
915 
916 END save_deliverable;
917 
918 
919 ---------------------------------------------------------------------
920 -- PROCEDURE
921 --    save_deliverable
922 --
923 -- PURPOSE
924 --    Save a collection of logical deliverables
925 --
926 -- PARAMETERS
927 --    p_deliverable_tbl: A collection of the logical deliverables to be saved
928 --
929 -- NOTES
930 --    1. Insert a new deliverable if deliverable_id is null; update otherwise
931 --    2. Raise an exception if access_name or display_name is missing;
932 --       or access_name is not unique
933 --    3. Raise an exception if item_type or item_applicable_to is missing
934 --       or invalid (create)
935 --    4. Raise an exception if the deliverable doesn't exist; or the version
936 --       doesn't match (update)
937 --    5. Raise an exception for any other errors
938 
939 ---------------------------------------------------------------------
940 PROCEDURE save_deliverable (
941 	p_api_version            IN   NUMBER,
942 	p_init_msg_list          IN   VARCHAR2 := FND_API.g_false,
943 	p_commit                 IN   VARCHAR2 := FND_API.g_false,
944 	x_return_status          OUT  VARCHAR2,
945 	x_msg_count              OUT  NUMBER,
946 	x_msg_data               OUT  VARCHAR2,
947 	p_deliverable_tbl        IN OUT DELIVERABLE_TBL_TYPE ) IS
948 
949 	l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
950 	l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
951 
952 	l_return_status VARCHAR2(1);
953 
954 	l_index NUMBER;
955 
956 BEGIN
957 
958 	-- Standard start of API savepoint
959 	SAVEPOINT save_deliverable_grp;
960 
961 	-- Standard call to check for call compatibility
962 	IF NOT FND_API.compatible_api_call(
963 		g_api_version,
964 		p_api_version,
965 		l_api_name,
966 		g_pkg_name
967 	) THEN
968 		RAISE FND_API.g_exc_unexpected_error;
969 	END IF;
970 
971 	-- Initialize message list if p_init_msg_list is set to TRUE
972 	IF FND_API.to_boolean(p_init_msg_list) THEN
973 		FND_MSG_PUB.initialize;
974 	END IF;
975 
976 	-- Initialize API rturn status to success
977 	x_return_status := FND_API.g_ret_sts_success;
978 
979 	-- API body
980 
981      IF p_deliverable_tbl IS NOT NULL THEN
982           FOR l_index IN 1..p_deliverable_tbl.COUNT LOOP
983 
984 			save_deliverable(
985 				p_api_version       => p_api_version,
986 				x_return_status     => l_return_status,
987 				x_msg_count         => x_msg_count,
988 				x_msg_data          => x_msg_data,
989 				p_deliverable_rec	=> p_deliverable_tbl(l_index)
990 			);
991 
992 			IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
993 				x_return_status := FND_API.g_ret_sts_unexp_error;
994 			ELSIF l_return_status = FND_API.g_ret_sts_error
995 				AND x_return_status <> FND_API.g_ret_sts_unexp_error THEN
996 				x_return_status := FND_API.g_ret_sts_error;
997 			END IF;
998 
999 		END LOOP;
1000 	END IF;
1001 
1002      -- Check if the caller requested to commit ,
1003 	-- If p_commit set to true, commit the transaction
1004 	IF  FND_API.to_boolean(p_commit) THEN
1005 		COMMIT;
1006 	END IF;
1007 
1008 	-- Standard call to get message count and if count is 1, get message info
1009 	FND_MSG_PUB.count_and_get(
1010 		p_encoded      =>   FND_API.g_false,
1011 		p_count        =>   x_msg_count,
1012 		p_data         =>   x_msg_data
1013 	);
1014 
1015 
1016 EXCEPTION
1017 
1018 	WHEN FND_API.g_exc_error THEN
1019 		ROLLBACK TO save_deliverable_grp;
1020 		x_return_status := FND_API.g_ret_sts_error;
1021 		FND_MSG_PUB.count_and_get(
1022 			p_encoded => FND_API.g_false,
1023 			p_count   => x_msg_count,
1024 			p_data    => x_msg_data
1025 		);
1026 
1027 	WHEN FND_API.g_exc_unexpected_error THEN
1028 		ROLLBACK TO save_deliverable_grp;
1029 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1030 		FND_MSG_PUB.count_and_get(
1031 			p_encoded => FND_API.g_false,
1032 			p_count   => x_msg_count,
1033 			p_data    => x_msg_data
1034 		);
1035 
1036 
1037 	WHEN OTHERS THEN
1038 		ROLLBACK TO save_deliverable_grp;
1039 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1040 
1041 		IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1042 			FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1043 		END IF;
1044 
1045 		FND_MSG_PUB.count_and_get(
1046 			p_encoded => FND_API.g_false,
1047 			p_count   => x_msg_count,
1048 			p_data    => x_msg_data
1049 		);
1050 
1051 END save_deliverable;
1052 
1053 
1054 ---------------------------------------------------------------------
1055 -- PROCEDURE
1056 --    save_deliverable
1057 --
1058 -- PURPOSE
1059 --    Save a logical deliverable with the default attachment for all-site
1060 --	 and all-language
1061 --
1062 -- PARAMETERS
1063 --    p_dlv_ath_rec: A logical deliverable with the default attachment
1064 --	 for all-site and all-language to be saved
1065 --
1066 -- NOTES
1067 --    1. Insert a new deliverable if deliverable_id is null; update otherwise
1068 --    2. Raise an exception if access_name or display_name is missing;
1069 --       or access_name is not unique
1070 --    3. Raise an exception if item_type or item_applicable_to is missing
1071 --       or invalid (create)
1072 --    4. Raise an exception if the deliverable doesn't exist; or the version
1073 --       doesn't match (update)
1074 --	 5. If creating/updating deliverable succeeds, update the default
1075 --	    attachment for all-site and all-language
1076 --	 6. Raise an exception if fails to create an attachment, or all-site
1077 --	    and all-language mappings. Only undo the changes made to attachment
1078 --	    physicalmap tables
1079 --	 7. Raise an exception if chosen default attachment is invalid, e.g.,
1080 --	    it's not associated with the given deliverable.
1081 --    8. Raise an exception for any other errors
1082 
1083 ---------------------------------------------------------------------
1084 PROCEDURE save_deliverable (
1085 	p_api_version            IN   NUMBER,
1086 	p_init_msg_list          IN   VARCHAR2 := FND_API.g_false,
1087 	p_commit                 IN   VARCHAR2 := FND_API.g_false,
1088 	x_return_status          OUT  VARCHAR2,
1089 	x_msg_count              OUT  NUMBER,
1090 	x_msg_data               OUT  VARCHAR2,
1091 	p_dlv_ath_rec            IN OUT DLV_ATH_REC_TYPE ) IS
1092 
1093      l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
1094 	l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1095 
1096 	l_operation_type VARCHAR2(10) := 'INSERT';
1097 	l_create_attachment VARCHAR2(1) := FND_API.g_false;
1098 	l_delete_mapping VARCHAR2(1) := FND_API.g_false;
1099 	l_create_mapping VARCHAR2(1) := FND_API.g_false;
1100 	l_attachment_id NUMBER;
1101 
1102 	l_deliverable_rec DELIVERABLE_REC_TYPE;
1103 	l_attachment_rec JTF_Attachment_GRP.ATTACHMENT_REC_TYPE;
1104 	l_language_code_tbl JTF_PhysicalMap_GRP.LANGUAGE_CODE_TBL_TYPE
1105 		:= JTF_PhysicalMap_GRP.LANGUAGE_CODE_TBL_TYPE(NULL);
1106 
1107 	l_return_status VARCHAR2(1);
1108 
1109 BEGIN
1110 
1111 	-- Standard start of API savepoint
1112 	SAVEPOINT save_deliverable_grp;
1113 
1114 	-- Standard call to check for call compatibility
1115 	IF NOT FND_API.compatible_api_call(
1116 		g_api_version,
1117 		p_api_version,
1118 		l_api_name,
1119 		g_pkg_name
1120 	) THEN
1121 		RAISE FND_API.g_exc_unexpected_error;
1122 	END IF;
1123 
1124 	-- Initialize message list if p_init_msg_list is set to TRUE
1125 	IF FND_API.to_boolean(p_init_msg_list) THEN
1126 		FND_MSG_PUB.initialize;
1127 	END IF;
1128 
1129      -- Initialize API rturn status to success
1130 	x_return_status := FND_API.g_ret_sts_success;
1131 
1132 	-- API body
1133 
1134 	IF p_dlv_ath_rec.deliverable_id IS NOT NULL THEN
1135 		-- Update an existing deliverable
1136 		l_operation_type := 'UPDATE';
1137 	END IF;
1138 
1139 	l_deliverable_rec.deliverable_id := p_dlv_ath_rec.deliverable_id;
1140 	l_deliverable_rec.access_name := p_dlv_ath_rec.access_name;
1141 	l_deliverable_rec.display_name := p_dlv_ath_rec.display_name;
1142 	l_deliverable_rec.item_type := p_dlv_ath_rec.item_type;
1143 	l_deliverable_rec.item_applicable_to := p_dlv_ath_rec.item_applicable_to;
1144 	l_deliverable_rec.keywords := p_dlv_ath_rec.keywords;
1145 	l_deliverable_rec.description := p_dlv_ath_rec.description;
1146 	l_deliverable_rec.object_version_number := p_dlv_ath_rec.object_version_number;
1147 	l_deliverable_rec.x_action_status := NULL;
1148 
1149 	save_deliverable(
1150 		p_api_version			=> p_api_version,
1151 		x_return_status		=> l_return_status,
1152 		x_msg_count			=> x_msg_count,
1153 		x_msg_data			=> x_msg_data,
1154 		p_deliverable_rec		=> l_deliverable_rec
1155 	);
1156 
1157 	p_dlv_ath_rec.deliverable_id := l_deliverable_rec.deliverable_id;
1158 	p_dlv_ath_rec.object_version_number := l_deliverable_rec.object_version_number;
1159 	p_dlv_ath_rec.x_action_status := l_deliverable_rec.x_action_status;
1160 
1161 	IF l_return_status = FND_API.g_ret_sts_error THEN
1162 		RAISE FND_API.g_exc_error;
1163 	ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1164 		RAISE FND_API.g_exc_unexpected_error;
1165 	END IF;
1166 
1167 	-- Update/Create default attachment for all-site and all-language
1168 
1169   BEGIN
1170 
1171 	SAVEPOINT save_one_attachment_grp;
1172 
1173 	IF l_operation_type = 'INSERT' THEN
1174 
1175 		-- Create an attachment for all-site and all-language if any
1176 		IF TRIM(p_dlv_ath_rec.ath_file_name) IS NOT NULL THEN
1177 			l_create_attachment := FND_API.g_true;
1178 			l_create_mapping := FND_API.g_true;
1179 
1180 		END IF;
1181 
1182 	ELSE
1183 
1184 		-- Update the default attachment for the existing deliverable
1185 
1186 		IF TRIM(p_dlv_ath_rec.ath_file_name) IS NULL THEN
1187 			l_delete_mapping := FND_API.g_true;
1188 
1189 		ELSE
1190 
1191 			-- Check if it's an existing attachment
1192 			-- If so, validate it! Update all-site and all-lang mappings
1193 			-- if it's the new default
1194 			-- If not, delete all-site and all-lang mappings if any
1195 			-- and create the new attachment with all-site and all-lang
1196 			-- mappings
1197 
1198 			--modified by G. Zhang 05/23/01 10:57AM
1199 			l_attachment_id := JTF_DSPMGRVALIDATION_GRP.check_attachment_exists(
1200 			  p_dlv_ath_rec.deliverable_id,p_dlv_ath_rec.ath_file_id,p_dlv_ath_rec.ath_file_name);
1201 
1202 			IF l_attachment_id IS NOT NULL THEN
1203 				-- existing attachment
1204 				-- validate it!
1205 				--modified by G. Zhang 05/23/01 10:57AM
1206 				--IF NOT JTF_DSPMGRVALIDATION_GRP.check_attachment_deliverable(
1207 				--	l_attachment_id, p_dlv_ath_rec.deliverable_id) THEN
1208 				--	-- invalid attachment for the given deliverable
1209 				--	RAISE FND_API.g_exc_error;
1210 				--END  IF;
1211 
1212 				IF NOT JTF_DSPMGRVALIDATION_GRP.check_default_attachment(
1213 					l_attachment_id) THEN
1214 					l_delete_mapping := FND_API.g_true;
1215 					l_create_mapping := FND_API.g_true;
1216 				END IF;
1217 
1218 			ELSE
1219 				-- new attachment
1220 				l_create_attachment := FND_API.g_true;
1221 				l_delete_mapping := FND_API.g_true;
1222 				l_create_mapping := FND_API.g_true;
1223 			END IF;
1224 
1225 		END IF;
1226 
1227 	END IF;
1228 
1229 	IF l_create_attachment = FND_API.g_true THEN
1230 		l_attachment_rec.attachment_id := NULL;
1231 		l_attachment_rec.deliverable_id := p_dlv_ath_rec.deliverable_id;
1232 		l_attachment_rec.file_name := p_dlv_ath_rec.ath_file_name;
1233 
1234 		--added by G. Zhang 05/17/01 5:42PM
1235 		l_attachment_rec.file_id := p_dlv_ath_rec.ath_file_id;
1236 
1237 		l_attachment_rec.object_version_number := NULL;
1238 		l_attachment_rec.x_action_status := NULL;
1239 		JTF_Attachment_GRP.save_attachment(
1240 
1241 			p_api_version            => p_api_version,
1242 			x_return_status          => l_return_status,
1243 			x_msg_count              => x_msg_count,
1244 			x_msg_data               => x_msg_data,
1245 			p_attachment_rec         => l_attachment_rec
1246 		);
1247 
1248 		IF l_return_status = FND_API.g_ret_sts_error THEN
1249 			RAISE FND_API.g_exc_error;
1250 		ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1251 			RAISE FND_API.g_exc_unexpected_error;
1252 		END IF;
1253 
1254 		l_attachment_id := l_attachment_rec.attachment_id;
1255 	END IF;
1256 
1257 	IF l_delete_mapping = FND_API.g_true THEN
1258 		-- Delete all-site and all-lang mapping for this deliverable
1259 		JTF_PhysicalMap_GRP.delete_dlv_all_all(
1260 			p_deliverable_id         => p_dlv_ath_rec.deliverable_id
1261 		);
1262 	END IF;
1263 
1264 	IF l_create_mapping = FND_API.g_true THEN
1265 		-- Create all-site and all-lang mapping for this default attachment
1266 		JTF_PhysicalMap_GRP.save_physicalmap(
1267 			p_api_version            => p_api_version,
1268 			x_return_status          => l_return_status,
1269 			x_msg_count              => x_msg_count,
1270 			x_msg_data               => x_msg_data,
1271 			p_attachment_id          => l_attachment_id,
1272 			p_msite_id               => NULL,
1273 			p_language_code_tbl      => l_language_code_tbl
1274 		);
1275 
1276           IF l_return_status = FND_API.g_ret_sts_error THEN
1277 			RAISE FND_API.g_exc_error;
1278 		ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1279 			RAISE FND_API.g_exc_unexpected_error;
1280 		END IF;
1281 	END IF;
1282 
1283 	p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_success;
1284 
1285   EXCEPTION
1286 
1287 	WHEN FND_API.g_exc_error THEN
1288 		ROLLBACK TO save_one_attachment_grp;
1289 		p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_error;
1290 		x_return_status := FND_API.g_ret_sts_error;
1291 
1292 	WHEN FND_API.g_exc_unexpected_error THEN
1293 		ROLLBACK TO save_one_attachment_grp;
1294 		p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_unexp_error;
1295 		x_return_status := FND_API.g_ret_sts_unexp_error;
1296 
1297 	WHEN OTHERS THEN
1298 		ROLLBACK TO save_one_attachment_grp;
1299 		p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_unexp_error;
1300 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1301 
1302 		IF FND_MSG_PUB.check_msg_level(
1303 			FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1304 			FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1305 		END IF;
1306   END;
1307 
1308      -- Check if the caller requested to commit ,
1309 	-- If p_commit set to true, commit the transaction
1310 	IF  FND_API.to_boolean(p_commit) THEN
1311 		COMMIT;
1312 	END IF;
1313 
1314 	-- Standard call to get message count and if count is 1, get message info
1315 	FND_MSG_PUB.count_and_get(
1316 		p_encoded      =>   FND_API.g_false,
1317 		p_count        =>   x_msg_count,
1318 		p_data         =>   x_msg_data
1319 	);
1320 
1321 EXCEPTION
1322 
1323 	WHEN FND_API.g_exc_error THEN
1324 		ROLLBACK TO save_deliverable_grp;
1325 		x_return_status := FND_API.g_ret_sts_error;
1326 		p_dlv_ath_rec.x_action_status := FND_API.g_ret_sts_error;
1327 		FND_MSG_PUB.count_and_get(
1328 			p_encoded => FND_API.g_false,
1329 			p_count   => x_msg_count,
1330 			p_data    => x_msg_data
1331 		);
1332 
1333 	WHEN FND_API.g_exc_unexpected_error THEN
1334 		ROLLBACK TO save_deliverable_grp;
1335 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1336 		p_dlv_ath_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
1337 		FND_MSG_PUB.count_and_get(
1338 			p_encoded => FND_API.g_false,
1339 			p_count   => x_msg_count,
1340 			p_data    => x_msg_data
1341 		);
1342 
1343      WHEN OTHERS THEN
1344 		ROLLBACK TO save_deliverable_grp;
1345 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1346 		p_dlv_ath_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
1347 
1348 		IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1349 			FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1350 		END IF;
1351 
1352           FND_MSG_PUB.count_and_get(
1353 			p_encoded => FND_API.g_false,
1354 			p_count   => x_msg_count,
1355 			p_data    => x_msg_data
1356 		);
1357 
1358 END save_deliverable;
1359 
1360 
1361 ---------------------------------------------------------------------
1362 -- PROCEDURE
1363 --    save_deliverable
1364 --
1365 -- PURPOSE
1366 --    Save a collection of logical deliverables with the default attachments
1367 --	 for all-site and all-language
1368 --
1369 -- PARAMETERS
1370 --    p_dlv_ath_tbl: A collection of logical deliverables with the default
1371 --	 attachments for all-site and all-language to be saved
1372 --
1373 -- NOTES
1374 --    1. Insert a new deliverable if deliverable_id is null; update otherwise
1375 --    2. Raise an exception if access_name or display_name is missing;
1376 --       or access_name is not unique
1377 --    3. Raise an exception if item_type or item_applicable_to is missing
1378 --       or invalid (create)
1379 --    4. Raise an exception if the deliverable doesn't exist; or the version
1380 --       doesn't match (update)
1381 --    5. If creating/updating deliverable succeeds, update the default
1382 --       attachment for all-site and all-language
1383 --    6. Raise an exception if fails to create an attachment, or all-site
1384 --       and all-language mappings. Only undo the changes made to attachment
1385 --       physicalmap tables
1386 --    7. Raise an exception if chosen default attachment is invalid, e.g.,
1387 --       it's not associated with the given deliverable.
1388 --    8. Raise an exception for any other errors
1389 
1390 ---------------------------------------------------------------------
1391 PROCEDURE save_deliverable (
1392 	p_api_version            IN   NUMBER,
1393 	p_init_msg_list          IN   VARCHAR2 := FND_API.g_false,
1394 	p_commit                 IN   VARCHAR2 := FND_API.g_false,
1395 	x_return_status          OUT  VARCHAR2,
1396 	x_msg_count              OUT  NUMBER,
1397 	x_msg_data               OUT  VARCHAR2,
1398 	p_dlv_ath_tbl        	IN OUT DLV_ATH_TBL_TYPE ) IS
1399 
1400 	l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
1401 	l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1402 
1403 	l_return_status VARCHAR2(1);
1404 
1405 BEGIN
1406 
1407      -- Standard start of API savepoint
1408 	SAVEPOINT save_deliverable_grp;
1409 
1410 	-- Standard call to check for call compatibility
1411 	IF NOT FND_API.compatible_api_call(
1412 		g_api_version,
1413 		p_api_version,
1414 		l_api_name,
1415 		g_pkg_name
1416 	) THEN
1417 		RAISE FND_API.g_exc_unexpected_error;
1418 	END IF;
1419 
1420      -- Initialize message list if p_init_msg_list is set to TRUE
1421 	IF FND_API.to_boolean(p_init_msg_list) THEN
1422 		FND_MSG_PUB.initialize;
1423 	END IF;
1424 
1425 	-- Initialize API rturn status to success
1426 	x_return_status := FND_API.g_ret_sts_success;
1427 
1428 	-- API body
1429 
1430      IF p_dlv_ath_tbl IS NOT NULL THEN
1431 		FOR l_index IN 1..p_dlv_ath_tbl.COUNT LOOP
1432 
1433 			save_deliverable(
1434 				p_api_version       => p_api_version,
1435 				x_return_status     => l_return_status,
1436 				x_msg_count         => x_msg_count,
1437 				x_msg_data          => x_msg_data,
1438 				p_dlv_ath_rec   	=> p_dlv_ath_tbl(l_index)
1439 			);
1440 
1441 			IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1442 				x_return_status := FND_API.g_ret_sts_unexp_error;
1443 			ELSIF l_return_status = FND_API.g_ret_sts_error
1444 				AND x_return_status <> FND_API.g_ret_sts_unexp_error THEN
1445 				x_return_status := FND_API.g_ret_sts_error;
1446 			END IF;
1447 
1448 		END LOOP;
1449 	END IF;
1450 
1451      -- Check if the caller requested to commit ,
1452 	-- If p_commit set to true, commit the transaction
1453 	IF  FND_API.to_boolean(p_commit) THEN
1454 		COMMIT;
1455 	END IF;
1456 
1457 	-- Standard call to get message count and if count is 1, get message info
1458 	FND_MSG_PUB.count_and_get(
1459 		p_encoded      =>   FND_API.g_false,
1460 		p_count        =>   x_msg_count,
1461 		p_data         =>   x_msg_data
1462 	);
1463 
1464 EXCEPTION
1465 
1466 	WHEN FND_API.g_exc_error THEN
1467 		ROLLBACK TO save_deliverable_grp;
1468 		x_return_status := FND_API.g_ret_sts_error;
1469 		FND_MSG_PUB.count_and_get(
1470 			p_encoded => FND_API.g_false,
1471 			p_count   => x_msg_count,
1472 			p_data    => x_msg_data
1473 		);
1474 
1475 	WHEN FND_API.g_exc_unexpected_error THEN
1476 		ROLLBACK TO save_deliverable_grp;
1477 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1478 		FND_MSG_PUB.count_and_get(
1479 			p_encoded => FND_API.g_false,
1480 			p_count   => x_msg_count,
1481 			p_data    => x_msg_data
1482 		);
1483 
1484      WHEN OTHERS THEN
1485 		ROLLBACK TO save_deliverable_grp;
1486 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1487 
1488 		IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1489 			FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1490 		END IF;
1491 
1492 		FND_MSG_PUB.count_and_get(
1493 			p_encoded => FND_API.g_false,
1494 			p_count   => x_msg_count,
1495 			p_data    => x_msg_data
1496 		);
1497 
1498 END save_deliverable;
1499 
1500 
1501 ---------------------------------------------------------------------
1502 -- PROCEDURE
1503 --    delete_deliverable
1504 --
1505 -- PURPOSE
1506 --    Delete a collection of logical deliverables
1507 --
1508 -- PARAMETERS
1509 --    p_dlv_id_ver_tbl: A collection of IDs and versions of the logical
1510 --		deliverables to be deleted
1511 --
1512 -- NOTES
1513 --    1. Delete all the deliverables and associated physical attachments along
1514 --	    with all the associations
1515 --	 2. Raise an exception if the deliverable doesn't exist; or the version
1516 --	    doesn't match
1517 --    3. A logical deliverable is not allowed to be deleted if it's currently
1518 -- 	    in use unless the caller has the right privilege
1519 --    4. Raise an exception for any other errors
1520 ---------------------------------------------------------------------
1521 PROCEDURE delete_deliverable (
1522      p_api_version            IN   NUMBER,
1523 	p_init_msg_list          IN   VARCHAR2 := FND_API.g_false,
1524 	p_commit                 IN   VARCHAR2  := FND_API.g_false,
1525 	x_return_status          OUT  VARCHAR2,
1526 	x_msg_count              OUT  NUMBER,
1527 	x_msg_data               OUT  VARCHAR2,
1528 	p_dlv_id_ver_tbl		IN OUT DLV_ID_VER_TBL_TYPE ) IS
1529 
1530 	l_api_name CONSTANT VARCHAR2(30) := 'delete_deliverable';
1531 	l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1532 
1533 	l_index NUMBER;
1534 
1535 	l_return_status VARCHAR2(1);
1536 
1537 BEGIN
1538 
1539 	-- Standard start of API savepoint
1540 	SAVEPOINT delete_deliverable_grp;
1541 
1542 	-- Standard call to check for call compatibility
1543 	IF NOT FND_API.compatible_api_call(
1544          g_api_version,
1545          p_api_version,
1546          l_api_name,
1547          g_pkg_name
1548 	) THEN
1549 		RAISE FND_API.g_exc_unexpected_error;
1550 	END IF;
1551 
1552 	-- Initialize message list if p_init_msg_list is set to TRUE
1553 	IF FND_API.to_boolean(p_init_msg_list) THEN
1554 		FND_MSG_PUB.initialize;
1555 	END IF;
1556 
1557 	-- Initialize API rturn status to success
1558 	x_return_status := FND_API.g_ret_sts_success;
1559 
1560 	-- API body
1561 
1562 	-- Check if the deliverable exists
1563 	IF p_dlv_id_ver_tbl IS NOT NULL THEN
1564 		FOR l_index IN 1..p_dlv_id_ver_tbl.COUNT LOOP
1565 		BEGIN
1566 
1567 			-- Standard start of API savepoint
1568 			SAVEPOINT delete_one_deliverable_grp;
1569 
1570 			IF NOT JTF_DSPMGRVALIDATION_GRP.check_deliverable_exists(
1571 				p_dlv_id_ver_tbl(l_index).deliverable_id,
1572 				p_dlv_id_ver_tbl(l_index).object_version_number) THEN
1573 				RAISE FND_API.g_exc_error;
1574 			END IF;
1575 
1576 			-- Delete from the section tables
1577 			JTF_DSP_SECTION_GRP.update_deliverable_to_null(
1578 				p_api_version			=> p_api_version,
1579 				p_deliverable_id =>	p_dlv_id_ver_tbl(l_index).deliverable_id,
1580 				x_return_status		=> l_return_status,
1581 				x_msg_count			=> x_msg_count,
1582 				x_msg_data			=> x_msg_data
1583 			);
1584 
1585 			IF l_return_status = FND_API.g_ret_sts_error THEN
1586 				RAISE FND_API.g_exc_error;
1587 			ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1588 				RAISE FND_API.g_exc_unexpected_error;
1589 			END IF;
1590 
1591 			-- Delete all the associated display contexts
1592 			JTF_DisplayContext_GRP.delete_deliverable(
1593 				p_dlv_id_ver_tbl(l_index).deliverable_id
1594 			);
1595 
1596 			-- Delete all the associated template categories
1597 			JTF_TplCategory_GRP.delete_deliverable(
1598 				p_dlv_id_ver_tbl(l_index).deliverable_id
1599 			);
1600 
1601 			-- Delete all the associated logical contents
1602 			JTF_LogicalContent_GRP.delete_deliverable(
1603 				p_dlv_id_ver_tbl(l_index).deliverable_id
1604 			);
1605 
1606 			-- Delete all the associated physical_site_language mappings
1607 			JTF_PhysicalMap_GRP.delete_deliverable(
1608 				p_dlv_id_ver_tbl(l_index).deliverable_id
1609 			);
1610 
1611 			-- Delete the item
1612 			JTF_AMV_ITEM_PUB.delete_item(
1613 				p_api_version		=> g_amv_api_version,
1614 				x_return_status	=> l_return_status,
1615 				x_msg_count		=> x_msg_count,
1616 				x_msg_data		=> x_msg_data,
1617 				p_item_id			=> p_dlv_id_ver_tbl(l_index).deliverable_id
1618 			);
1619 
1620 			IF l_return_status = FND_API.g_ret_sts_error THEN
1621 				RAISE FND_API.g_exc_error;
1622 			ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1623 				RAISE FND_API.g_exc_unexpected_error;
1624 			END IF;
1625 
1626 			p_dlv_id_ver_tbl(l_index).x_action_status
1627 				:= FND_API.g_ret_sts_success;
1628 
1629 		EXCEPTION
1630 
1631 			WHEN FND_API.g_exc_error THEN
1632 				ROLLBACK TO delete_one_deliverable_grp;
1633 				IF x_return_status <> FND_API.g_ret_sts_unexp_error THEN
1634 					x_return_status := FND_API.g_ret_sts_error;
1635 				END IF;
1636 				p_dlv_id_ver_tbl(l_index).x_action_status
1637 					:= FND_API.g_ret_sts_error;
1638 
1639 			WHEN FND_API.g_exc_unexpected_error THEN
1640 				ROLLBACK TO delete_one_deliverable_grp;
1641 				x_return_status := FND_API.g_ret_sts_unexp_error;
1642 				p_dlv_id_ver_tbl(l_index).x_action_status
1643 					:= FND_API.g_ret_sts_unexp_error;
1644 
1645 			WHEN OTHERS THEN
1646 				ROLLBACK TO delete_one_deliverable_grp;
1647 				x_return_status := FND_API.g_ret_sts_unexp_error ;
1648 				p_dlv_id_ver_tbl(l_index).x_action_status
1649 					:= FND_API.g_ret_sts_unexp_error;
1650 
1651 				IF FND_MSG_PUB.check_msg_level(
1652 					FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1653 					FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1654 				END IF;
1655 
1656 		END;
1657 		END LOOP;
1658 	END IF;
1659 
1660 	-- Check if the caller requested to commit ,
1661 	-- If p_commit set to true, commit the transaction
1662 	IF  FND_API.to_boolean(p_commit) THEN
1663 		COMMIT;
1664 	END IF;
1665 
1666 	-- Standard call to get message count and if count is 1, get message info
1667 	FND_MSG_PUB.count_and_get(
1668 		p_encoded      =>   FND_API.g_false,
1669 		p_count        =>   x_msg_count,
1670 		p_data         =>   x_msg_data
1671 	);
1672 
1673 EXCEPTION
1674 
1675      WHEN FND_API.g_exc_error THEN
1676 		ROLLBACK TO delete_deliverable_grp;
1677 		x_return_status := FND_API.g_ret_sts_error;
1678 		FND_MSG_PUB.count_and_get(
1679 			p_encoded      =>   FND_API.g_false,
1680 			p_count        =>   x_msg_count,
1681 			p_data         =>   x_msg_data
1682 		);
1683 
1684 	WHEN FND_API.g_exc_unexpected_error THEN
1685 		ROLLBACK TO delete_deliverable_grp;
1686 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1687 		FND_MSG_PUB.count_and_get(
1688 			p_encoded      =>   FND_API.g_false,
1689 			p_count        =>   x_msg_count,
1690 			p_data         =>   x_msg_data
1691 		);
1692 
1693      WHEN OTHERS THEN
1694 		ROLLBACK TO delete_deliverable_grp;
1695 		x_return_status := FND_API.g_ret_sts_unexp_error ;
1696 
1697 		IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1698 			FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1699 		END IF;
1700 
1701 		FND_MSG_PUB.count_and_get(
1702 			p_encoded      =>   FND_API.g_false,
1703 			p_count        =>   x_msg_count,
1704 			p_data         =>   x_msg_data
1705 		);
1706 
1707 END delete_deliverable;
1708 
1709 
1710 END JTF_Deliverable_GRP;