DBA Data[Home] [Help]

PACKAGE BODY: APPS.PSP_ROLLBACK_EFF_REPORTS

Source


1 PACKAGE BODY PSP_ROLLBACK_EFF_REPORTS AS
2 /*$Header: PSPERRBB.pls 120.1.12010000.1 2008/07/28 08:06:20 appldev ship $*/
3 
4 PROCEDURE DELETE_EFF_REPORTS(
5 			errBuf          	OUT NOCOPY VARCHAR2,
6  			retCode 	    	OUT NOCOPY VARCHAR2,
7 		        p_request_id		IN	NUMBER,
8 		        p_person_id		IN	NUMBER
9 ) IS
10 
11 	TYPE t_varchar2_240_type is TABLE of VARCHAR2(240) INDEX BY BINARY_INTEGER;
12 	l_itemkey t_varchar2_240_type ;
13 	l_parent_itemkey t_varchar2_240_type ;
14 
15 	CURSOR effort_master_csr IS
16 	select effort_report_id,  person_id
17 	from psp_eff_reports
18 	WHERE   request_id   = p_request_id
19 	AND   nvl(p_person_id, person_id) = person_id ;
20 
21 	CURSOR c_get_item_key (p_request_id NUMBER) is
22 	select nvl(PARENT_ITEM_KEY,ITEM_KEY), ITEM_KEY from wf_items_v
23 	where ITEM_TYPE = 'PSPERAVL'
24 	and ITEM_KEY in (
25 	select pera.WF_ITEM_KEY --into l_itemkey
26 	from psp_eff_Report_approvals pera,
27 	psp_eff_report_details perd,
28 	psp_eff_reports per
29 	where pera.EFFORT_REPORT_DETAIL_ID = perd.EFFORT_REPORT_DETAIL_ID
30 	and perd.EFFORT_REPORT_ID = per.EFFORT_REPORT_ID
31 	and per.request_id = p_request_id );
32 
33     CURSOR c_get_approved_eff_rep(p_request_id NUMBER,P_PERSON_ID NUMBER) is
34     SELECT 1
35     FROM PSP_EFF_REPORTS per ,
36     PSP_REPORT_TEMPLATES_H PRTH
37     WHERE per.STATUS_CODE ='A'
38     AND per.request_id= p_request_id
39     and nvl(P_PERSON_ID ,per.person_id)= per.PERSON_ID
40     AND PER.REQUEST_ID = PRTH.REQUEST_ID
41     AND PRTH.APPROVAL_TYPE <>'PRE'
42     and rownum=1;
43 
44 	l_period_name			VARCHAR2(80);
45 	l_deleted			BOOLEAN := TRUE;
46         l_appr_exists                   NUMBER;
47 	cnt				NUMBER := 0;
48     l_eff_report_approved Exception;
49     l_approved_eff_rep_exist Number:= 0;
50 
51 BEGIN
52 --	fnd_msg_pub.initialize;
53 
54       fnd_file.put_line (FND_FILE.LOG, 'p_person_id= '||p_person_id );
55 
56       OPEN c_get_approved_eff_rep(p_request_id,P_PERSON_ID);
57         FETCH c_get_approved_eff_rep INTO l_approved_eff_rep_exist;
58       CLOSE  c_get_approved_eff_rep;
59 
60       if l_approved_eff_rep_exist = 1 then
61  -- One or more effort reports in Approved status already exists for the person
62 	raise   l_eff_report_approved;
63       end if;
64 
65 /*
66       SELECT 1 INTO l_appr_exists FROM PSP_EFF_REPORTS per WHERE per.STATUS_CODE ='A'
67          AND per.request_id= p_request_id and nvl(P_PERSON_ID ,per.person_id)= per.PERSON_ID
68       and rownum=1;
69 
70 
71 
72     EXCEPTION WHEN NO_DATA_FOUND THEN
73        l_appr_exists := 0;
74 
75     END;
76 
77    IF (l_appr_exists =1)  then
78     raise l_eff_report_approved;
79        fnd_message.set_name('PSP', 'PSP_EFF_REP_APPR_STATUS');
80 
81   -- One or more effort reports in Approved status already exists for the person
82 
83    ELSE
84 */
85 
86 /* Cancel outstanding notifications*/
87 	OPEN c_get_item_key(p_request_id);
88 	    FETCH c_get_item_key BULK COLLECT INTO l_parent_itemkey, l_itemkey;
89 	CLOSE c_get_item_key;
90 	FOR i in 1..l_parent_itemkey.count
91 	LOOP
92 		BEGIN
93 			WF_ENGINE.AbortProcess(itemtype		=>'PSPERAVL',
94 					itemkey			=> l_parent_itemkey(i) ,
95 					process			=> null,
96 					result			=>'eng_force',
97 				        verify_lock		=> true,
98 				       cascade			=>true);
99 		EXCEPTION
100 		WHEN others THEN
101 			null;
102 		END;
103 	/*Delete recodrs  for all the initiator thread */
104 
105 		DELETE fnd_lobs fl
106 		WHERE EXISTS  (SELECT 1
107 		FROM fnd_attached_documents fad,
108 		fnd_documents_vl  fdl
109 		WHERE fad.pk1_value = l_itemkey(i)
110 		AND fdl.document_id = fad.document_id
111 		AND fdl.media_id = fl.file_id
112 		AND fad.entity_name = 'ERDETAILS');
113 
114 	/*Delete recodrs  for all the Approver thread */
115 		DELETE fnd_lobs fl
116 		WHERE EXISTS  (SELECT 1
117 		FROM fnd_attached_documents fad,
118 		fnd_documents_vl  fdl
119 		WHERE fad.pk1_value = l_itemkey(i)
120 		AND fdl.document_id = fad.document_id
121 		AND fdl.media_id = fl.file_id
122 		AND fad.entity_name = 'ERDETAILS');
123 
124 	END LOOP;
125 
126 
127 
128 
129        OPEN effort_master_csr;
130 
131        FETCH effort_master_csr BULK COLLECT into  eff_report_master_rec.effort_report_id, eff_report_master_rec.person_id;
132 
133 /*
134 
135        FORALL i in 1..eff_report_master_rec.effort_report_id.count
136            select effort_report_detail_id BULK COLLECT into eff_report_details_rec.effort_report_detail_id
137            from psp_eff_report_details where
138            effort_report_id =eff_report_master_rec.effort_report_id(i) ;
139 
140     Implementation Restriction forall, BULK COLLECT and SELECT do not work together
141 */
142 
143 
144             FORALL i in 1.. eff_report_master_rec.effort_report_id.count
145                delete from psp_eff_report_approvals where effort_report_detail_id in (
146        select effort_report_detail_id from psp_eff_report_details where effort_report_id
147         = eff_report_master_rec.effort_report_id(i));
148 
149             FORALL i in 1.. eff_report_master_rec.effort_report_id.count
150                delete from psp_eff_report_details where effort_report_detail_id in (
151        select effort_report_detail_id from psp_eff_report_details where effort_report_id
152         = eff_report_master_rec.effort_report_id(i));
153 
154 
155            FORALL i in 1..eff_report_master_rec.effort_report_id.count
156                 Delete from psp_eff_reports where effort_report_id = eff_report_master_rec.effort_report_id(i);
157 
158 /*
159 
160             FORALL i in 1.. eff_report_details_rec.effort_report_detail_id.count
161                delete from psp_eff_report_details where effort_report_detail_id = eff_report_details_rec.effort_report_detail_id(i);
162 
163 */
164 		Delete from psp_report_errors where request_id = p_request_id;
165 
166                 psp_message_s.print_success;
167 
168 --END IF;
169 	EXCEPTION
170         WHEN l_eff_report_approved THEN
171 		ROLLBACK;
172 		fnd_message.set_name('PSP', 'PSP_EFF_REP_APPR_STATUS');
173 		fnd_msg_pub.add;
174 		retCode :=2;
175 
176 	WHEN OTHERS
177 	THEN
178 		ROLLBACK;
179 		fnd_message.set_name('PSP','PSP_SQL_ERROR');
180 		fnd_message.set_token('SQLERROR',sqlerrm);
181 		fnd_msg_pub.add;
182                	psp_message_s.print_error(p_mode => FND_FILE.LOG,
183                 p_print_header => FND_API.G_TRUE);
184 		retCode :=2;
185 
186 END delete_eff_reports;
187 END psp_rollback_eff_reports;