DBA Data[Home] [Help]

PACKAGE BODY: APPS.EDR_PSIG_MSCA_PAGE_FLOW

Source


1 PACKAGE BODY EDR_PSIG_MSCA_PAGE_FLOW AS
2 /* $Header: EDRVMPFB.pls 120.1.12000000.1 2007/01/18 05:56:26 appldev ship $ */
3 
4 
5 --Process the signature response
6 
7 PROCEDURE PROCESS_RESPONSE( p_event_id                IN NUMBER,
8                             p_erecord_id              IN NUMBER,
9                             p_user_name               IN VARCHAR2,
10                             p_action_code             IN VARCHAR2,
11                             p_action_meaning          IN VARCHAR2,
12                             p_sign_sequence           IN NUMBER,
13                             p_signature_param_names   IN FND_TABLE_OF_VARCHAR2_255,
14                             p_signature_param_values  IN FND_TABLE_OF_VARCHAR2_255,
15                             p_sig_param_display_names IN FND_TABLE_OF_VARCHAR2_255,
16                             x_error_code              OUT NOCOPY NUMBER,
17                             x_error_msg               OUT NOCOPY VARCHAR2)
18 IS
19        l_signer_code            VARCHAR2(30) ;
20        l_signing_reason_code    VARCHAR2(32) ;
21        l_signer_comment         VARCHAR2(4000);
22        l_sign_sequence          NUMBER;
23        l_count                  NUMBER;
24        l_error_num              NUMBER;
25        l_error_msg              VARCHAR2(1000);
26        l_sig_id                 NUMBER;
27        l_param_table            EDR_PSIG.params_table;
28        POST_SIGNATURE_ERROR     EXCEPTION;
29        EDR_PSIG_DOC_ERR         EXCEPTION;
30        EDR_PSIG_OUT_OF_SEQUENCE EXCEPTION;
31        l_status VARCHAR2(20);
32 
33        pragma AUTONOMOUS_TRANSACTION;
34 
35 BEGIN
36 
37   --Validate the signature sequence
38   SELECT min(signature_sequence) into l_sign_sequence
39   FROM   edr_esignatures
40   WHERE  EVENT_ID = p_event_id
41   and    SIGNATURE_STATUS = 'PENDING';
42 
43   --If the sequence is out of order, then raise an error.
44   IF l_sign_sequence <> p_sign_sequence THEN
45     raise EDR_PSIG_OUT_OF_SEQUENCE;
46   END IF;
47 
48   --Loop through each signature parameter.
49   FOR i IN p_signature_param_names.first..p_signature_param_names.last LOOP
50     l_param_table(i).param_name := p_signature_param_names(i);
51     l_param_table(i).param_value := p_signature_param_values(i);
52 
53     IF l_param_table(i).param_name = 'WF_SIGNER_TYPE' THEN
54       --We need both the signer code and meaning
55       --Code is required for Workflow action history region.
56       --Meaning is required for evidence store.
57       l_signer_code := l_param_table(i).param_value;
58       EDR_STANDARD.GET_MEANING('EDR_SIGNATURE_TYPES', l_signer_code,  l_param_table(i).param_value);
59 
60     ELSIF  l_param_table(i).param_name = 'REASON_CODE' THEN
61       --We need both signing reason code and meaning.
62       --Code is required for workflow action history region.
63       --Meaning is required for evidence store.
64       l_signing_reason_code := l_param_table(i).param_value;
65       EDR_STANDARD.GET_MEANING('EDR_SIGNING_REASONS', l_signing_reason_code,  l_param_table(i).param_value);
66 
67     ELSIF  l_param_table(i).param_name = 'SIGNERS_COMMENT' THEN
68       l_signer_comment := l_param_table(i).param_value;
69     END IF;
70 
71     l_param_table(i).Param_displayname := p_sig_param_display_names(i);
72   END LOOP;
73 
74   --Update EDR_ESIGNATURES table with the signature details.
75   --As this table is associated with workflow, the signer code and signer reason
76   --code is passed.
77   UPDATE EDR_ESIGNATURES
78     SET SIGNATURE_STATUS      = p_action_code ,
79         SIGNATURE_TYPE        = l_SIGNER_code,
80         SIGNATURE_REASON_CODE = l_signing_reason_code,
81         SIGNATURE_TIMESTAMP   = SYSDATE,
82         SIGNER_COMMENTS       = l_signer_comment
83    WHERE         EVENT_ID = p_event_id
84    AND          user_name = p_user_name
85    AND SIGNATURE_SEQUENCE = p_sign_sequence;
86 
87 
88   --Post the signature details into the evidence store for the e-record.
89   -- Bug 4190358 : Start
90   -- The Evidence store id should be passed as Null as this is not the document id we maintain.
91 
92   EDR_PSIG.postSignature(P_DOCUMENT_ID =>p_erecord_id,
93                          P_EVIDENCE_STORE_ID => null,
94                          P_USER_NAME => p_user_name,
95                          P_USER_RESPONSE => p_action_meaning,
96                          P_SIGNATURE_ID => l_sig_id,
97                          P_ERROR => l_error_num,
98                          P_ERROR_MSG => l_error_msg);
99 
100 
101   -- Bug 4190358 : End
102   --Raise an error based on the value of l_error_num
103   if l_error_num is not null then
104     raise POST_SIGNATURE_ERROR;
105   end if;
106 
107   --Post the signature parameters to the evidence store.
108   --The signature parameters would contain the signer meaning
109   --and the signining reason meaning.
110   EDR_PSIG.postSignatureParameter(P_SIGNATURE_ID => l_sig_id,
111                           				P_PARAMETERS   => l_param_table,
112        				                    P_ERROR        => l_error_num,
113                            			  P_ERROR_MSG    => l_error_msg);
114 
115   if l_error_num is not null then
116     raise POST_SIGNATURE_ERROR;
117   end if;
118 
119   --Update the document status in evidence store based on the action code.
120   IF (p_erecord_id IS NOT NULL AND p_action_code = 'REJECTED')  THEN
121     EDR_PSIG.changeDocumentStatus(P_DOCUMENT_ID       => p_erecord_id,
122                                   P_STATUS            => p_action_code,
123                                   P_ERROR             => l_error_num,
124                                   P_ERROR_MSG         => l_error_msg);
125     IF l_ERROR_NUM IS NOT NULL THEN
126       RAISE EDR_PSIG_DOC_ERR;
127     END IF;
128 
129   END IF;
130 
131   COMMIT;
132 
133   EXCEPTION
134     WHEN EDR_PSIG_OUT_OF_SEQUENCE THEN
135       ROLLBACK;
136       x_error_code := SQLCODE;
137       FND_MESSAGE.SET_NAME('EDR','EDR_MSCA_SIG_OUT_OF_SEQUENCE');
138       x_error_msg := FND_MESSAGE.get;
139     WHEN OTHERS THEN
140        ROLLBACK;
141        x_error_msg := l_error_msg;
142        x_error_code := l_error_num;
143        APP_EXCEPTION.RAISE_EXCEPTION;
144   END PROCESS_RESPONSE;
145 
146 
147 
148 --This procedure is used to process the cancel response in pageflow.
149 PROCEDURE PROCESS_CANCEL(p_erecord_id IN NUMBER,
150                          p_itemtype   IN VARCHAR2,
151                          p_itemkey    IN VARCHAR2,
152                          x_error_code OUT NOCOPY NUMBER,
153                          x_error_msg OUT NOCOPY VARCHAR2)
154 IS
155 
156 pragma AUTONOMOUS_TRANSACTION;
157 
158 BEGIN
159 
160   --Update the document status in evidence store for the e-record.
161   EDR_PSIG.changeDocumentStatus( P_DOCUMENT_ID => p_erecord_id,
162 	                               P_STATUS      => 'CANCEL' ,
163 	                               P_ERROR       => x_error_code,
164 	                               P_ERROR_MSG   => x_error_msg);
165 
166   --Complete the pageflow block activity.
167   PROCESS_MSCA_BLOCKED_ACTIVITY(p_itemtype => p_itemtype,
168                                 p_itemkey => p_itemkey,
169                                 p_action => 'DONE',
170                                 x_error_code => x_error_code ,
171                                 x_error_msg => x_error_msg);
172 
173   COMMIT;
174   EXCEPTION
175     WHEN OTHERS THEN
176       ROLLBACK;
177       x_error_code := SQLCODE;
178       x_error_msg := SQLERRM;
179       APP_EXCEPTION.RAISE_EXCEPTION;
180 END PROCESS_CANCEL;
181 
182 
183 --This procedure is used to process the 'DEFER' response in pageflow.
184 PROCEDURE PROCESS_DEFER(p_erecord_id IN NUMBER,
185                         p_itemtype   IN VARCHAR2,
186                         p_itemkey    IN VARCHAR2,
187                         x_error_code OUT NOCOPY NUMBER,
188                         x_error_msg OUT NOCOPY VARCHAR2)
189 is
190 
191 pragma AUTONOMOUS_TRANSACTION;
192 
193 BEGIN
194 
195   --Update the evidence store document status to 'PENDING'
196   EDR_PSIG.changeDocumentStatus( P_DOCUMENT_ID => p_erecord_id,
197 	                               P_STATUS      => 'PENDING' ,
198                                  P_ERROR       => x_error_code,
199                                  P_ERROR_MSG   => x_error_msg);
200 
201   --Process the MSCA Block activity for "DEFER" response.
202   PROCESS_MSCA_BLOCKED_ACTIVITY(p_itemtype   => p_itemtype,
203                                 p_itemkey    => p_itemkey,
204                                 p_action     => 'DEFER',
205                                 x_error_code => x_error_code ,
206                                 x_error_msg  => x_error_msg);
207 
208   COMMIT;
209 
210   EXCEPTION
211     WHEN OTHERS THEN
212       ROLLBACK;
213       x_error_code := SQLCODE;
214       x_error_msg := SQLERRM;
215     APP_EXCEPTION.RAISE_EXCEPTION;
216 END PROCESS_DEFER;
217 
218 
219 --This procedure is used to process the pageflow block activity defined for MSCA.
220 PROCEDURE PROCESS_MSCA_BLOCKED_ACTIVITY(p_itemtype   IN VARCHAR2,
221                                         p_itemkey    IN VARCHAR2,
222                                         p_action     IN VARCHAR2,
223                                         x_error_code OUT NOCOPY NUMBER,
224                                         x_error_msg  OUT NOCOPY VARCHAR2)
225 
226 IS
227 
228 BEGIN
229 
230   --Move pageflow to MSCA Block activity.
231   FND_WF_ENGINE.COMPLETEACTIVITY(p_itemtype, p_itemkey, 'MSCA', p_action);
232 
233   EXCEPTION
234     WHEN OTHERS THEN
235       x_error_code := SQLCODE;
236       x_error_msg := SQLERRM;
237     APP_EXCEPTION.RAISE_EXCEPTION;
238 
239 END PROCESS_MSCA_BLOCKED_ACTIVITY;
240 
241 
242 --Wrapper procedure over EDR_PSIG.CLOSEDOCUMENT
243 PROCEDURE CLOSE_DOCUMENT(P_DOCUMENT_ID          IN  NUMBER,
244                          X_ERROR                OUT NOCOPY NUMBER,
245                          X_ERROR_MSG            OUT NOCOPY VARCHAR2
246                         )
247 
248 is
249 
250   pragma AUTONOMOUS_TRANSACTION;
251 
252 BEGIN
253 
254   EDR_PSIG.ClOSEDOCUMENT(P_DOCUMENT_ID          => P_DOCUMENT_ID,
255                          P_ERROR                => X_ERROR,
256                          P_ERROR_MSG            => X_ERROR_MSG
257                         );
258   COMMIT;
259 
260 EXCEPTION WHEN OTHERS THEN
261   ROLLBACK;
262   x_error := SQLCODE;
263   x_error_msg := SQLERRM;
264 
265 APP_EXCEPTION.RAISE_EXCEPTION;
266 
267 END CLOSE_DOCUMENT;
268 
269 END EDR_PSIG_MSCA_PAGE_FLOW;