DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMA_STANDARD

Source


1 PACKAGE BODY gma_standard AS
2 /* $Header: GMASTNDB.pls 120.2 2005/12/15 11:10:25 txdaniel noship $ */
3 
4 counter pls_integer;
5 v_eventQuery EDR_STANDARD.eventQuery;
6 v_ameRuleinputvalues EDR_STANDARD.ameRuleinputvalues;
7 
8 G_PKG_NAME CONSTANT VARCHAR2(30) := 'EDR_FILES_PUB';
9 
10 PROCEDURE PSIG_STATUS
11 	(
12 	p_event 	in	varchar2,
13 	p_event_key	in    varchar2,
14         P_status        out NOCOPY   varchar2
15 	) IS
16 BEGIN
17       edr_standard.psig_status(p_event, p_event_key, p_status);
18 END PSIG_STATUS;
19 
20 /* signature Requirement. This Procedure returns signature requireemnt for a given event.
21    The status is 'Yes' */
22 PROCEDURE PSIG_REQUIRED
23 	(
24 	 p_event 	 in	varchar2,
25 	 p_event_key in   varchar2,
26        P_status    out  NOCOPY boolean
27 	) is
28 BEGIN
29       edr_standard.psig_required(p_event, p_event_key, p_status);
30 END PSIG_REQUIRED;
31 
32 /* eRecord Requirement. This Procedure returns signature requirement for a given event.
33    The status is 'true' or 'false' */
34 PROCEDURE EREC_REQUIRED
35 	(
36 	p_event 	 in	varchar2,
37 	p_event_key	 in   varchar2,
38       P_status     out NOCOPY  boolean
39 	) is
40 BEGIN
41       edr_standard.erec_required(p_event, p_event_key, p_status);
42 END EREC_REQUIRED;
43 
44 FUNCTION PSIG_QUERY(p_eventQuery GMA_STANDARD.eventQuery) return number IS PRAGMA AUTONOMOUS_TRANSACTION;
45 i number;
46 begin
47       v_eventQuery.DELETE; -- Added for bug 4874228
48       for counter IN 1..p_eventQuery.COUNT loop
49          v_eventQuery(counter).event_name := p_eventQuery(counter).event_name;
50          v_eventQuery(counter).event_key := p_eventQuery(counter).event_key;
51          v_eventQuery(counter).key_type := p_eventQuery(counter).key_type;
52       end loop;
53       i := edr_standard.psig_query(v_eventQuery);
54       return i;
55 END PSIG_QUERY;
56 
57 PROCEDURE GET_AMERULE_INPUT_VALUES( ameapplication IN varchar2,
58                           		ameruleid IN NUMBER,
59                           		amerulename IN VARCHAR2,
60                           		ameruleinputvalues OUT NOCOPY GMA_STANDARD.ameruleinputvalues) is
61 BEGIN
62       for counter IN 1..ameruleinputvalues.COUNT loop
63          v_ameRuleinputvalues(counter).input_name := ameruleinputvalues(counter).input_name;
64          v_ameRuleinputvalues(counter).input_value := ameruleinputvalues(counter).input_value;
65       end loop;
66 
67       edr_standard.get_amerule_input_values(ameapplication, ameruleid, amerulename, v_ameRuleinputvalues);
68 
69       for counter IN 1..ameruleinputvalues.COUNT loop
70          v_ameRuleinputvalues(counter).input_name := ameruleinputvalues(counter).input_name;
71          v_ameRuleinputvalues(counter).input_value := ameruleinputvalues(counter).input_value;
72       end loop;
73 END GET_AMERULE_INPUT_VALUES;
74 
75 PROCEDURE DISPLAY_DATE(P_DATE_IN in DATE , P_DATE_OUT OUT NOCOPY Varchar2) IS
76 BEGIN
77   edr_standard.display_date(p_date_in, p_date_out);
78 END DISPLAY_DATE;
79 
80 PROCEDURE UPLOAD_FILE(	p_api_version		IN NUMBER,
81 			p_commit		IN VARCHAR2,
82 			p_called_from_forms	IN VARCHAR2,
83 			p_file_name 		IN VARCHAR2,
84 			p_category 		IN VARCHAR2,
85 			p_content_type 		IN VARCHAR2,
86 			p_version_label		IN VARCHAR2,
87 			p_file_data	 	IN BLOB,
88 			p_file_format 		IN VARCHAR2,
89 			p_source_lang		IN VARCHAR2,
90 			p_description		IN VARCHAR2,
91 			p_file_exists_action	IN VARCHAR2,
92 			p_submit_for_approval	IN VARCHAR2,
93 			p_attribute1 		IN VARCHAR2,
94 			p_attribute2 		IN VARCHAR2,
95 			p_attribute3 		IN VARCHAR2,
96 			p_attribute4 		IN VARCHAR2,
97 			p_attribute5 		IN VARCHAR2,
98 			p_attribute6 		IN VARCHAR2,
99 			p_attribute7 		IN VARCHAR2,
100 			p_attribute8 		IN VARCHAR2,
101 			p_attribute9 		IN VARCHAR2,
102 			p_attribute10 		IN VARCHAR2,
103 			p_created_by 		IN NUMBER,
104 			p_creation_date 	IN DATE,
105 			p_last_updated_by 	IN NUMBER,
106 			p_last_update_login 	IN NUMBER,
107 			p_last_update_date 	IN DATE,
108 			x_return_status 	OUT NOCOPY VARCHAR2,
109 			x_msg_data		OUT NOCOPY VARCHAR2)
110 AS
111 
112 /*	Alpha Variables */
113 L_API_NAME 		CONSTANT VARCHAR2(30) := 'UPLOAD_FILE';
114 L_FILE_NAME		VARCHAR2(2000);
115 L_EXTENSION		VARCHAR2(2000);
116 L_RETURN_STATUS 	VARCHAR2(1);
117 L_CONCAT_SEGS		VARCHAR2(200);
118 L_STATUS		VARCHAR2(30);
119 L_EVENT_USER_KEY 	VARCHAR2(2000);
120 L_USER			VARCHAR2(240);
121 L_MSG_DATA		VARCHAR2(200);
122 L_FILE_DATA		BLOB;
123 
124 L_SEG_ARRAY		FND_FLEX_EXT.SEGMENTARRAY;
125 
126 /* 	Numeric Variables */
127 L_COUNT			NUMBER;
128 L_ORACLE_ERROR		NUMBER;
129 L_API_VERSION		CONSTANT NUMBER := 1.0;
130 L_VERSION		NUMBER;
131 L_POS			NUMBER;
132 L_RESP_ID		NUMBER;
133 L_RESP_APPL_ID		NUMBER;
134 L_ROW_ID	        VARCHAR2(240);
135 L_FILE_ID		NUMBER;
136 L_CATEGORY_ID		NUMBER;
137 L_FND_DOCUMENT_ID	NUMBER;
138 L_ATTACHED_DOCUMENT_ID 	NUMBER;
139 X_DOCUMENT_ID   	NUMBER;
140 L_MEDIA_ID      	NUMBER;
141 
142 I 			INTEGER;
143 
144 /*	Exceptions */
145 EDR_FILES_FILE_NAME_NULL EXCEPTION;
146 EDR_FILES_CATEGORY_NULL	 EXCEPTION;
147 EDR_FILES_FILE_NULL	 EXCEPTION;
148 EDR_FILES_FORMAT_NULL	 EXCEPTION;
149 EDR_FILES_SRC_LANG_NULL  EXCEPTION;
150 EDR_FILES_EXIST_ACT_NULL EXCEPTION;
151 EDR_FILES_ERES_ERROR	 EXCEPTION;
152 EDR_FILES_INSERT_ERROR	 EXCEPTION;
153 EDR_FILES_INV_FLEX_VALUE EXCEPTION;
154 EDR_FILES_ALREADY_EXISTS EXCEPTION;
155 EDR_FILES_OVERWRITE_ERROR EXCEPTION;
156 EDR_FILES_APPL_ID_NULL   EXCEPTION;
157 EDR_FILES_RESP_ID_NULL   EXCEPTION;
158 EDR_FILES_USER_NULL      EXCEPTION;
159 
160 /* 	Cursors */
161 CURSOR c_get_category IS
162    SELECT category_id
163    FROM  fnd_document_categories
164    WHERE name = p_category;
165 LocalCatRecord c_get_category%ROWTYPE;
166 
167 CURSOR c_get_exists IS
168    SELECT  version_number, status
169    FROM    edr_files_b
170    WHERE   original_file_name = p_file_name
171    AND	   category_id = LocalCatRecord.category_id;
172 LocalExistsRecord c_get_exists%ROWTYPE;
173 
174 CURSOR c_get_seq_num IS
175    SELECT  edr_files_b_s.nextval
176    FROM    dual;
177 LocalSeqRecord c_get_seq_num%ROWTYPE;
178 
179 CURSOR c_get_event IS
180    SELECT a.file_name, b.name
181    FROM   edr_files_b a, fnd_document_categories b
182    WHERE  a.category_id = b.category_id
183    AND	  a.file_id = l_file_id;
184 LocalEventRecord c_get_event%ROWTYPE;
185 
186  /* Used to get the next attached_document_id  for a new attachment SKARIMIS*/
187 CURSOR  c_get_id IS
188    SELECT fnd_attached_documents_s.nextval
189    FROM dual;
190 
191 /* Used to check if the attribute is required in the flexfield */
192 CURSOR c_get_flex1 IS
193    SELECT count(*)
194    FROM  fnd_descr_flex_column_usages
195    WHERE application_id = '709'
196    AND descriptive_flexfield_name = 'EDR_FILE_ATTRIBUTES'
197    AND descriptive_flex_context_code = p_category;
198 LocalFlex1Record	c_get_flex1%ROWTYPE;
199 
200 BEGIN
201 /* Get ids */
202    l_resp_appl_id 	:= FND_GLOBAL.RESP_APPL_ID;
203    l_resp_id		:= FND_GLOBAL.RESP_ID;
204    l_user	 	:= FND_GLOBAL.USER_NAME;
205 
206    IF l_resp_appl_id IS NULL THEN
207       RAISE EDR_FILES_APPL_ID_NULL;
208    END IF;
209 
210    IF l_resp_id IS NULL THEN
211       RAISE EDR_FILES_RESP_ID_NULL;
212    END IF;
213 
214    IF l_user IS NULL THEN
215       RAISE EDR_FILES_USER_NULL;
216    END IF;
217 
218 /*  Check the API version passed in matches the
219 **  internal API version.
220 */
221 
222    IF NOT FND_API.Compatible_API_Call
223                                         (g_api_version,
224 					 p_api_version,
225 					 l_api_name,
226 					 g_pkg_name) THEN
227 
228       RAISE FND_API.G_Exc_Unexpected_Error;
229    END IF;
230 
231 /* Check for required parameters */
232    IF p_file_name IS NULL THEN
233       RAISE EDR_FILES_FILE_NAME_NULL;
234    END IF;
235 
236    IF p_category IS NULL THEN
237       RAISE EDR_FILES_CATEGORY_NULL;
238    END IF;
239 
240    IF p_file_data IS NULL THEN
241       RAISE EDR_FILES_FILE_NULL;
242    END IF;
243 
244    IF p_file_format IS NULL THEN
245       RAISE EDR_FILES_FORMAT_NULL;
246    END IF;
247 
248    IF p_source_lang IS NULL THEN
249       RAISE EDR_FILES_SRC_LANG_NULL;
250    END IF;
251 
252    IF p_file_exists_action IS NULL THEN
253       RAISE EDR_FILES_EXIST_ACT_NULL;
254    END IF;
255 
256 /* Default the internal version in case the document does not already exist */
257    l_version := 0;
258 
259 /* The status is always 'N'(Not Approved)*/
260    l_status := 'N';
261 
262 /* Select the category id */
263    OPEN c_get_category;
264    FETCH c_get_category INTO LocalCatRecord;
265 
266    l_category_id := LocalCatRecord.category_id;
267    CLOSE c_get_category;
268 
269 /* Check to see if file already exists */
270    OPEN c_get_exists;
271    FETCH c_get_exists INTO LocalExistsRecord;
272 
273 /* File already exists and not be overwritten, return error */
274     IF c_get_exists%FOUND THEN
275         l_version := LocalExistsRecord.version_number;
276    	IF p_file_exists_action = 'D' THEN
277    	   RAISE EDR_FILES_ALREADY_EXISTS;
278    	END IF;
279     END IF;
280 
281 /* File exists as approved, pending or approval not required, and not to be versioned, return error */
282     IF c_get_exists%FOUND THEN
283         l_version := LocalExistsRecord.version_number;
284    	IF p_file_exists_action = 'O' AND LocalExistsRecord.status in ('A', 'P', 'S') THEN
285    	   RAISE EDR_FILES_OVERWRITE_ERROR;
286    	END IF;
287     END IF;
288    CLOSE c_get_exists;
289 
290 /* Validate flexfield values */
291    FND_FLEX_DESCVAL.set_context_value(p_category);
292 
293   i := 0;
294   IF p_category IS NOT NULL THEN
295    i := i +1;
296    l_seg_array(i) := p_category;
297   END IF;
298 
299   OPEN c_get_flex1;
300   FETCH c_get_flex1 INTO l_count;
301    IF c_get_flex1%FOUND THEN
302   	IF l_count >= i THEN
303            i := i + 1;
304            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
305            fnd_flex_descval.set_column_value('ATTRIBUTE1', p_attribute1);
306            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
307   	END IF;
308   	IF l_count >= i THEN
309            i := i + 1;
310            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
311            fnd_flex_descval.set_column_value('ATTRIBUTE2', p_attribute2);
312            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
313         END IF;
314   	IF l_count >= i THEN
315            i := i + 1;
316            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
317            fnd_flex_descval.set_column_value('ATTRIBUTE3', p_attribute3);
318            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
319   	END IF;
320   	IF l_count >= i THEN
321            i := i + 1;
322            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
323            fnd_flex_descval.set_column_value('ATTRIBUTE4', p_attribute4);
324            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
325   	END IF;
326   	IF l_count >= i THEN
327            i := i + 1;
328            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
329            fnd_flex_descval.set_column_value('ATTRIBUTE5', p_attribute5);
330            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
331   	END IF;
332   	IF l_count >= i THEN
333            i := i + 1;
334            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
335            fnd_flex_descval.set_column_value('ATTRIBUTE6', p_attribute6);
336            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
337   	END IF;
338   	IF l_count >= i THEN
339            i := i + 1;
340            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
341            fnd_flex_descval.set_column_value('ATTRIBUTE7', p_attribute7);
342            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
343   	END IF;
344   	IF l_count >= i THEN
345            i := i + 1;
346            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
347            fnd_flex_descval.set_column_value('ATTRIBUTE8', p_attribute8);
348            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
349   	END IF;
350   	IF l_count >= i THEN
351            i := i + 1;
352            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
353            fnd_flex_descval.set_column_value('ATTRIBUTE9', p_attribute9);
354            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
355   	END IF;
356   	IF l_count >= i THEN
357            i := i + 1;
358            /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield columns   */
359            fnd_flex_descval.set_column_value('ATTRIBUTE10', p_attribute10);
360            /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
361   	END IF;
362      END IF;
363    CLOSE c_get_flex1;
364 
365    /* 25 Aug 2003 Bug 3103346   Mercy Thomas Added the following code to validate the descriptive flexfield  */
366 
367    IF NOT (FND_FLEX_DESCVAL.validate_desccols('EDR', 'EDR_FILE_ATTRIBUTES',
368                                               'V', SYSDATE)) THEN
369       RAISE EDR_FILES_INV_FLEX_VALUE;
370    END IF;
371    /* 25 Aug 2003 Bug 3103346   Mercy Thomas End of the code changes */
372 
373 
374 /* Increment internal version number */
375    l_version := l_version + 1;
376 
377 /* Locate beginning of the extension in the file name string to use position to
378    split up the file name
379 */
380    l_extension := NULL;
381    l_file_name := p_file_name;
382    l_pos := INSTR(p_file_name, '.',-1,1);
383 
384    IF l_pos <> 0 THEN
385       l_extension := SUBSTR(l_file_name,l_pos,LENGTH(l_file_name));
386       l_file_name := SUBSTR(p_file_name,1,l_pos-1);
387    END IF;
388 
389 /* Set up the display name for the attachment */
390    l_file_name := l_file_name ||'_v_'||p_version_label||l_extension;
391 
392 /* Get the next sequence number for file_id */
393 /* Fixed SKARIMIS */
394    SELECT  edr_files_b_s.nextval INTO l_file_id FROM dual;
395 
396 /* Call private package to insert data into the tables */
397 --cj the whole idea is that instead of inserting one row in edr_files_b/tl tables
398 -- we would have to insert a row in:
399 -- edr_files_b/tl
400 -- fnd_documents
401 --fnd_lobs
402 --fnd_attached_documents (attach the file to a default enity named EDR_FILES_B
403 
404 --CJ look at the new definition of this package
405 --it would not have the BLOB col FILE_DATA
406 --change this call accordingly
407 
408    EDR_FILES_PKG.Insert_Row (
409  	X_ROWID =>l_row_id,
410   	X_FILE_ID =>l_file_id,
411   	X_FILE_NAME =>l_file_name,
412   	X_ORIGINAL_FILE_NAME =>p_file_name,
413   	X_VERSION_LABEL =>p_version_label,
414   	X_CATEGORY_ID =>l_category_id,
415   	X_CONTENT_TYPE =>p_content_type,
416   	X_FILE_FORMAT =>p_file_format,
417   	X_STATUS =>l_status,
418   	X_VERSION_NUMBER =>l_version,
419   	X_FND_DOCUMENT_ID => NULL,
420   	X_ATTRIBUTE_CATEGORY =>p_category,
421   	X_ATTRIBUTE1=>p_attribute1,
422   	X_ATTRIBUTE2=>p_attribute2,
423   	X_ATTRIBUTE3=>p_attribute3,
424   	X_ATTRIBUTE4=>p_attribute4,
425   	X_ATTRIBUTE5 =>p_attribute5,
426   	X_ATTRIBUTE6=>p_attribute6,
427   	X_ATTRIBUTE7=>p_attribute7,
428   	X_ATTRIBUTE8=>p_attribute8,
429   	X_ATTRIBUTE9=>p_attribute9,
430   	X_ATTRIBUTE10=>p_attribute10,
431   	X_ATTRIBUTE11=>NULL,
432   	X_ATTRIBUTE12=>NULL,
433   	X_ATTRIBUTE13=>NULL,
434   	X_ATTRIBUTE14=>NULL,
435   	X_ATTRIBUTE15=>NULL,
436   	X_DESCRIPTION =>p_description,
437   	X_CREATION_DATE=>p_creation_date,
438   	X_CREATED_BY =>p_created_by,
439   	X_LAST_UPDATE_DATE=>p_last_update_date,
440   	X_LAST_UPDATED_BY=>p_last_updated_by,
441   	X_LAST_UPDATE_LOGIN =>p_last_update_login);
442 
443 --CJ now that the row is inserted in edr_files table
444 -- we have insert into fn_documents, fnd_attached_documents
445 -- and fnd_lobs
446 
447 --CJ to insert in fnd_documents and fnd_attached_dcouments
448 --use FND_ATTACHED_DOCUMENTS_PKG.Insert_Row
449 -- i am attaching the java code to help u understand
450 -- the parameters to be passed
451 
452   OPEN c_get_id;
453   FETCH c_get_id INTO l_attached_document_id;
454   CLOSE c_get_id;
455 
456   FND_ATTACHED_DOCUMENTS_PKG.Insert_Row(X_Rowid=>l_row_id,
457                X_attached_document_id=>l_attached_document_id,
458                X_document_id=>x_document_id,
459                X_creation_date=>p_creation_date,
460                X_created_by=>p_created_by,
461                X_last_update_date=>p_last_update_date,
462                X_last_updated_by=>p_last_updated_by,
463                X_last_update_login=>p_last_update_login,
464                X_seq_num=>1,
465                X_entity_name=>'EDR_FILES_B',
466                X_column1=>NULL,
467                X_pk1_value=>NULL,
468                X_pk2_value=>NULL,
469                X_pk3_value=>NULL,
470                X_pk4_value=>NULL,
471                X_pk5_value=>NULL,
472                X_automatically_added_flag=>'N',
473                X_datatype_id=>6,
474                X_category_id=>l_category_id,
475                X_security_type=>1,
476                X_security_id=>-1,
477                X_publish_flag=>'N',
478                X_storage_type=>1,
479                X_usage_type=>'S',
480                X_language=>p_source_lang,
481                X_description=>p_description,
482                X_file_name=>l_file_name,
483                X_media_id=>l_media_id,
484                X_doc_attribute_category=>p_category,
485                X_doc_attribute1=>p_attribute1,
486                X_doc_attribute2=>p_attribute2,
487                X_doc_attribute3=>p_attribute3,
488                X_doc_attribute4=>p_attribute4,
489                X_doc_attribute5=>p_attribute5,
490                X_doc_attribute6=>p_attribute6,
491                X_doc_attribute7=>p_attribute7,
492                X_doc_attribute8=>p_attribute8,
493                X_doc_attribute9=>p_attribute9,
494                X_doc_attribute10=>p_attribute10,
495                X_create_doc=>'N');
496 
497 -- use a direct INSERT statement to insert
498 -- into FND_LOBS
499 -- i am attaching the java code for inserting into this table
500 --just to show u what the values of the parameters should be
501    INSERT into FND_LOBS
502    	(file_id,
503     	 file_name,
504     	 file_data,
505     	 file_content_type,
506     	 file_format)
507     VALUES
508     	(l_media_id,
509     	 l_file_name,
510     	 l_file_data,
511     	 p_content_type,
512     	 p_file_format);
513 
514 --CJ now update the row in the edr_files_b table with the fnd_document_id that you get
515 -- from inserting a row in FND_DOCUMENTS table
516 
517 	UPDATE 	EDR_FILES_B
518 	SET	fnd_document_id = x_document_id
519 	WHERE  	file_id = l_file_id;
520 
521 /* If sending for approval, raise ERES event */
522 
523   IF p_submit_for_approval = 'Y' THEN
524         OPEN c_get_event;
525         FETCH c_get_event INTO LocalEventRecord;
526         l_event_user_key := LocalEventRecord.file_name ||'-'||LocalEventRecord.name;
527         CLOSE c_get_event;
528 
529 	-- cj change this api to edr_raise_event when its available
530 
531         wf_event.raise2(p_event_name => 'oracle.apps.edr.file.approve',
532         		p_event_key => l_file_id,
533                 	p_event_data => null,
534                 	p_parameter_name1 => 'DEFERRED',
535                 	p_parameter_value1 => 'Y',
536                 	p_parameter_name2 => 'POST_OPERATION_API',
537                 	p_parameter_value2 => 'EDR_ATTACHMENTS_GRP.EVENT_POST_OP('||l_file_id||')',
538                 	p_parameter_name3 => 'PSIG_USER_KEY_LABEL',
539                 	p_parameter_value3 => 'File Approval:',
540                 	p_parameter_name4 => 'PSIG_USER_KEY_VALUE',
541                 	p_parameter_value4 => l_event_user_key,
542                 	p_parameter_name5 => 'PSIG_TRANSACTION_AUDIT_ID',
543                 	p_parameter_value5 => '-1',
544                 	p_parameter_name6 => '#WF_SOURCE_APPLICATION_TYPE',
545                 	p_parameter_value6 => 'DB',
546                 	p_parameter_name7 => '#WF_SIGN_REQUESTER',
547                 	p_parameter_value7 => l_user);
548 
549 
550          EDR_STANDARD.PSIG_STATUS
551          ( p_event 	=> 'oracle.apps.edr.file.approve'	,
552            p_event_key 	=> l_file_id				,
553            p_status 	=> l_status
554          );
555 
556          -- If the status of the erecord in the evidence store is COMPLETE
557          -- it means that signature was not required.
558          -- if its PENDING means that the offine notification is sent out
559          -- to the approver and its waiting approval
560          -- in any other case raise an error
561 
562 	if l_status = 'PENDING' then
563          	UPDATE  edr_files_b
564          	SET	status = 'P'
565          	WHERE	file_id = l_file_id
566          	AND 	file_name = LocalEventRecord.file_name;
567 	elsif l_status = 'COMPLETE' then
568          	UPDATE  edr_files_b
569          	SET	status = 'S'
570          	WHERE	file_id = l_file_id
571          	AND 	file_name = LocalEventRecord.file_name;
572 	else
573          	RAISE EDR_FILES_ERES_ERROR;
574         	ROLLBACK;
575         END IF;
576 
577     END IF;
578 
579 /*IF everything is successful and commit is yes, issue a commit*/
580     IF p_commit = 'T' THEN
581     	COMMIT;
582     END IF;
583 
584 EXCEPTION
585 /*
586 **
587 */
588    WHEN EDR_FILES_FILE_NAME_NULL THEN
589 	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_FILE_NAME_NULL');
590         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
591 	FND_MSG_PUB.ADD;
592         APP_EXCEPTION.RAISE_EXCEPTION;
593         x_return_status := FND_API.G_RET_STS_ERROR;
594 
595    WHEN EDR_FILES_APPL_ID_NULL THEN
596 	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_APPL_ID_NULL');
597         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
598 	FND_MSG_PUB.ADD;
599         APP_EXCEPTION.RAISE_EXCEPTION;
600         x_return_status := FND_API.G_RET_STS_ERROR;
601 
602    WHEN EDR_FILES_RESP_ID_NULL THEN
603 	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_RESP_ID_NULL');
604         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
605 	FND_MSG_PUB.ADD;
606         APP_EXCEPTION.RAISE_EXCEPTION;
607         x_return_status := FND_API.G_RET_STS_ERROR;
608 
609    WHEN EDR_FILES_USER_NULL THEN
610 	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_USER_NULL');
611         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
612 	FND_MSG_PUB.ADD;
613         APP_EXCEPTION.RAISE_EXCEPTION;
614         x_return_status := FND_API.G_RET_STS_ERROR;
615 
616    WHEN EDR_FILES_CATEGORY_NULL	THEN
617   	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_CATEGORY_NULL');
618         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
619 	FND_MSG_PUB.ADD;
620         APP_EXCEPTION.RAISE_EXCEPTION;
621         x_return_status := FND_API.G_RET_STS_ERROR;
622 
623    WHEN EDR_FILES_FILE_NULL THEN
624    	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_FILE_NULL');
625         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
626 	FND_MSG_PUB.ADD;
627         APP_EXCEPTION.RAISE_EXCEPTION;
628         x_return_status := FND_API.G_RET_STS_ERROR;
629 
630     WHEN EDR_FILES_FORMAT_NULL THEN
631     	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_FORMAT_NULL');
632         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
633 	FND_MSG_PUB.ADD;
634         APP_EXCEPTION.RAISE_EXCEPTION;
635         x_return_status := FND_API.G_RET_STS_ERROR;
636 
637     WHEN EDR_FILES_SRC_LANG_NULL THEN
638         FND_MESSAGE.SET_NAME('EDR','EDR_FILES_SRC_LANG_NULL');
639         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
640 	FND_MSG_PUB.ADD;
641         APP_EXCEPTION.RAISE_EXCEPTION;
642         x_return_status := FND_API.G_RET_STS_ERROR;
643 
644     WHEN EDR_FILES_EXIST_ACT_NULL THEN
645         FND_MESSAGE.SET_NAME('EDR','EDR_FILES_EXISTS_ACT_NULL');
646         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
647 	FND_MSG_PUB.ADD;
648         APP_EXCEPTION.RAISE_EXCEPTION;
649 	x_return_status := FND_API.G_RET_STS_ERROR;
650 
651     WHEN EDR_FILES_ERES_ERROR THEN
652     	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_ERES_ERROR');
653         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
654 	FND_MSG_PUB.ADD;
655         APP_EXCEPTION.RAISE_EXCEPTION;
656         x_return_status := FND_API.G_RET_STS_ERROR;
657 
658     WHEN EDR_FILES_INSERT_ERROR THEN
659     	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_INSERT_ERROR');
660         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
661 	FND_MSG_PUB.ADD;
662         APP_EXCEPTION.RAISE_EXCEPTION;
663         x_return_status := FND_API.G_RET_STS_ERROR;
664 
665     WHEN EDR_FILES_INV_FLEX_VALUE THEN
666     	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_INV_FLEX_VALUE');
667         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
668 	FND_MSG_PUB.ADD;
669         APP_EXCEPTION.RAISE_EXCEPTION;
670         x_return_status := FND_API.G_RET_STS_ERROR;
671 
672     WHEN EDR_FILES_ALREADY_EXISTS THEN
673     	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_ALREADY_EXISTS');
674         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
675 	FND_MSG_PUB.ADD;
676         APP_EXCEPTION.RAISE_EXCEPTION;
677         x_return_status := FND_API.G_RET_STS_ERROR;
678 
679     WHEN EDR_FILES_OVERWRITE_ERROR THEN
680     	FND_MESSAGE.SET_NAME('EDR','EDR_FILES_OVERWRITE_ERROR');
681         FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
682 	FND_MSG_PUB.ADD;
683         APP_EXCEPTION.RAISE_EXCEPTION;
684         x_return_status := FND_API.G_RET_STS_ERROR;
685 
686     WHEN OTHERS THEN
687         l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
688         l_msg_data :=  'Error = '||SQLERRM;
689 
690 END UPLOAD_FILE;
691 
692 /* Added for Melanie Grosser as a fix for bug# 3280763 */
693 /*===========================================================================
694 --  FUNCTION:
695 --    build_eres_query
696 --
697 --  DESCRIPTION:
698 --    This PL/SQL procedure is used to build an ERES query based upon document
699 --    attachments for a given entity.  It will return the ID of the query that
700 --    was built so that the calling program may execute it.
701 --
702 --  PARAMETERS:
703 --    p_entity_name IN  VARCHAR2     - Entity that attachments are associated with
704 --    p_pk1_value IN  VARCHAR2       - Primary key value 1 ifor entity
705 --    p_pk2_value IN  VARCHAR2       - Primary key value 2 ifor entity (may be null)
706 --    p_pk3_value IN  VARCHAR2       - Primary key value 3 ifor entity (may be null)
707 --    p_pk4_value IN  VARCHAR2       - Primary key value 4 ifor entity (may ne null)
708 --    p_pk5_value IN  VARCHAR2       - Primary key value 5 ifor entity (may be null)
709 --    x_error_message OUT VARCHAR2   - If there is an error, send back the approriate message
710 --    x_return_status OUT VARCHAR2   - 'S'uccess, 'E'rror, 'U'nexpected Error
711 --
712 --  SYNOPSIS:
713 --    l_query_id := GMA_STANDARD.build_eres_query('GR_ITEM_GENERAL',l_item_code,NULL,NULL,NULL,
714 --                            NULL,NULL,l_err_message,l_return_status);
715 --    IF (l_query_id > 0 ) THEN
716 --       GMA_WF_SIGNi.show_trans_query(p_query_id => l_query_id);
717 --    END IF;
718 --
719 --  HISTORY
720 --    M. Grosser 18-Nov-2003    Created
721 --    R. Tardio  25-Nov-2003    Added to GMA_STANDARD.
722 --=========================================================================== */
723 FUNCTION build_eres_query (p_entity_name IN  VARCHAR2,
724                            p_pk1_value IN  VARCHAR2,
725                            p_pk2_value IN  VARCHAR2,
726                            p_pk3_value IN  VARCHAR2,
727                            p_pk4_value IN  VARCHAR2,
728                            p_pk5_value IN  VARCHAR2,
729                            x_error_message OUT NOCOPY VARCHAR2,
730                            x_return_status OUT NOCOPY VARCHAR2
731                            )  RETURN NUMBER IS
732 
733 
734 /*  ------------- LOCAL VARIABLES ------------------- */
735 l_return_status       VARCHAR2(2) := 'S';
736 l_oracle_error        NUMBER;
737 l_query_id            NUMBER;
738 l_event_key           VARCHAR2(240);
739 i 	              NUMBER :=1;
740 x_event_group         GMA_STANDARD.eventQuery;
741 
742 /*  ------------------ CURSORS ---------------------- */
743    CURSOR c_get_event_key IS
744 	SELECT file_id
745 	FROM   fnd_attached_documents f, edr_files_b e
746 	WHERE  entity_name = p_entity_name
747 	AND    pk1_value = p_pk1_value
748 	AND    NVL(pk2_value,' ') = NVL(p_pk2_value,' ')
749 	AND    NVL(pk3_value,' ') = NVL(p_pk3_value,' ')
750 	AND    NVL(pk4_value,' ') = NVL(p_pk4_value,' ')
751 	AND    NVL(pk5_value,' ') = NVL(p_pk5_value,' ')
752 	AND    e.fnd_document_id = f.document_id;
753 
754   BEGIN
755      -- Use cursor to retrieve file_id based upon document attachments
756      OPEN c_get_event_key;
757      FETCH c_get_event_key INTO l_event_key;
758 
759      -- No attachments or not in file upload system
760      IF c_get_event_key%NOTFOUND THEN
761         RETURN (0);
762      ELSE
763         -- Build query group
764         WHILE c_get_event_key%FOUND LOOP
765            x_event_group(i).event_name := 'oracle.apps.edr.file.approve';
766            x_event_group(i).event_key :=  l_event_key;
767            i := i + 1;
768            FETCH c_get_event_key INTO l_event_key;
769         END LOOP;
770 
771         -- Retrieve query id
772         l_query_id := GMA_STANDARD.PSIG_QUERY(x_event_group);
773      END IF;
774      CLOSE c_get_event_key;
775 
776      RETURN(l_query_id);
777 
778   EXCEPTION
779     WHEN OTHERS THEN
780        x_error_message:= SQLERRM;
781        x_return_status := 'U';
782        RETURN(-1);
783 
784   END build_eres_query;
785 
786 /*===========================================================================
787 --  FUNCTION:
788 --    get_erecord_id
789 --
790 --  DESCRIPTION:
791 --    This PL/SQL procedure is used to get erecord_id for a event/key
792 --    combination.
793 --
794 --  PARAMETERS:
795 --    p_event_name IN  VARCHAR2       - Name of the event
796 --    p_event_key  IN  VARCHAR2       - event key
797 --
798 --
799 --  HISTORY
800 --    Thomas Daniel 19-Jul-2005    Added for the erecord enhancement for GME.
801 --                                 Details in bug 4328588
802 --=========================================================================== */
803 FUNCTION GET_ERECORD_ID
804   ( p_event_name IN VARCHAR2
805    ,p_event_key  IN VARCHAR2
806   ) RETURN NUMBER IS
807 BEGIN
808   RETURN EDR_STANDARD_PUB.GET_ERECORD_ID
809            ( p_event_name => p_event_name
810             ,p_event_key  => p_event_key
811            );
812 
813 END  GET_ERECORD_ID;
814 
815 end GMA_STANDARD;