[Home] [Help]
PACKAGE BODY: APPS.PO_CLM_CAR_WF_UTIL
Source
1 PACKAGE BODY PO_CLM_CAR_WF_UTIL AS
2 /* $Header: POCARWFB.pls 120.7.12020000.3 2013/04/04 06:02:04 vpeddi ship $ */
3 PROCEDURE get_car_logs(document_id in varchar2,
4 display_type in varchar2,
5 document in out NOCOPY varchar2,
6 document_type in out NOCOPY varchar2) IS
7
8 l_document VARCHAR2(32000) := '';
9 l_item_type wf_items.item_type%TYPE;
10 l_item_key wf_items.item_key%TYPE;
11 l_document_id NUMBER;
12 l_draft_id NUMBER;
13 NL VARCHAR2(1) := fnd_global.newline;
14
15 TYPE car_num_tbl_type IS TABLE OF PO_CLM_CARS.CAR_NUMBER%TYPE;
16 TYPE err_code_tbl_type IS TABLE OF PO_CLM_CAR_LOGS.MESSAGE_CODE%TYPE;
17 TYPE err_level_tbl_type IS TABLE OF VARCHAR2(60);
18 TYPE err_text_tbl_type IS TABLE OF PO_CLM_CAR_LOGS.MESSAGE_TEXT%TYPE;
19
20 l_car_num_tbl car_num_tbl_type;
21 l_err_code_tbl err_code_tbl_type;
22 l_err_level_tbl err_level_tbl_type;
23 l_err_text_tbl err_text_tbl_type;
24
25 CURSOR car_logs_csr(v_document_id NUMBER, v_draft_id NUMBER) IS
26 SELECT
27 po_clm_car_util.get_car_number(PO_HEADER_ID, PO_DRAFT_ID) CAR_NUMBER,
28 MESSAGE_CODE,
29 NVL(PLC.DISPLAYED_FIELD, MESSAGE_LEVEL) MESSAGE_LEVEL_MEANING,
30 MESSAGE_TEXT
31 FROM
32 PO_CLM_CAR_LOGS LOG, po_lookup_codes PLC
33 WHERE
34 LOG.PO_HEADER_ID = v_document_id AND
35 LOG.PO_DRAFT_ID = v_draft_id AND
36 PLC.LOOKUP_TYPE(+) = 'PO_CLM_CAR_MESSAGE_LEVELS' AND
37 LOG.MESSAGE_LEVEL = PLC.LOOKUP_CODE (+);
38
39 l_count NUMBER := 0;
40 curr_len NUMBER := 0;
41 prior_len NUMBER := 0;
42 BEGIN
43 l_item_type := substr(document_id, 1, instr(document_id, ':') - 1);
44 l_item_key := substr(document_id, instr(document_id, ':') + 1);
45 l_document_id := po_wf_util_pkg.GetItemAttrNumber( itemtype => l_item_type,
46 itemkey => l_item_key,
47 aname => 'DOCUMENT_ID');
48 l_draft_id := po_wf_util_pkg.GetItemAttrNumber( itemtype => l_item_type,
49 itemkey => l_item_key,
50 aname => 'DRAFT_ID');
51
52 OPEN car_logs_csr(l_document_id, l_draft_id);
53 FETCH car_logs_csr BULK COLLECT INTO l_car_num_tbl
54 , l_err_code_tbl
55 , l_err_level_tbl
56 , l_err_text_tbl;
57 l_count := car_logs_csr%ROWCOUNT;
58 CLOSE car_logs_csr;
59
60 IF (display_type = 'text/html') THEN
61 l_document := '<TABLE border=1 cellpadding=2 cellspacing=1 summary="' || fnd_message.get_string('PO', 'PO_CLM_CAR_LOGS_TBL_SUM') || '">' || NL;
62
63 l_document := l_document || '<TR>';
64
65 l_document := l_document || '<TH id="carNum_1">' ||
66 fnd_message.get_string('PO', 'PO_CLM_CAR_NUM') || '</TH>' || NL;
67
68 l_document := l_document || '<TH id="errCode_1">' ||
69 fnd_message.get_string('PO', 'PO_CLM_CAR_ERR_CODE') || '</TH>' || NL;
70
71 l_document := l_document || '<TH id="errLevel_1">' ||
72 fnd_message.get_string('PO', 'PO_CLM_CAR_ERR_LEVEL') || '</TH>' || NL;
73
74 l_document := l_document || '<TH id="errText_1">' ||
75 fnd_message.get_string('PO', 'PO_CLM_CAR_ERR_TEXT') || '</TH>' || NL;
76
77 l_document := l_document || '</TR>' || NL;
78
79 curr_len := lengthb(l_document);
80 prior_len := curr_len;
81
82 FOR i IN 1..l_count LOOP
83 /* Exit the cursor if the current document length and 2 times the
84 ** length added in prior line exceeds 32000 char */
85 if (curr_len + (2 * (curr_len - prior_len))) >= 32000 then
86 exit;
87 end if;
88
89 prior_len := curr_len;
90
91 l_document := l_document || '<TR>' || NL;
92
93 l_document := l_document || '<TD nowrap align=center headers="carNum_1">' ||
94 nvl(to_char(l_car_num_tbl(i)), ' ') || '</TD>' || NL;
95 l_document := l_document || '<TD nowrap align=center headers="errCode_1">' ||
96 nvl(to_char(l_err_code_tbl(i)), ' ') || '</TD>' || NL;
97 l_document := l_document || '<TD nowrap align=center headers="errLevel_1">' ||
98 nvl(to_char(l_err_level_tbl(i)), ' ') || '</TD>' || NL;
99 l_document := l_document || '<TD nowrap align=center headers="errText_1">' ||
100 nvl(to_char(l_err_text_tbl(i)), ' ') || '</TD>' || NL;
101
102 l_document := l_document || '</TR>' || NL;
103 curr_len := lengthb(l_document);
104 END LOOP;
105
106 l_document := l_document || '</TABLE></P>' || NL;
107 document := l_document;
108
109 ELSIF (display_type = 'text/plain') THEN
110
111 FOR i IN 1..l_count LOOP
112 /* Exit the cursor if the current document length and 2 times the
113 ** length added in prior line exceeds 32000 char */
114 if (curr_len + (2 * (curr_len - prior_len))) >= 32000 then
115 exit;
116 end if;
117
118 prior_len := curr_len;
119
120 l_document := l_document || NL;
121
122 l_document := l_document || fnd_message.get_string('PO', 'PO_CLM_CAR_NUM') || ':' || l_car_num_tbl(i) || NL;
123 l_document := l_document || fnd_message.get_string('PO', 'PO_CLM_CAR_ERR_CODE') || ':' || l_err_code_tbl(i) || NL;
124 l_document := l_document || fnd_message.get_string('PO', 'PO_CLM_CAR_ERR_LEVEL') || ':' || l_err_level_tbl(i) || NL;
125 l_document := l_document || fnd_message.get_string('PO', 'PO_CLM_CAR_ERR_TEXT') || ':' || l_err_text_tbl(i) || NL;
126
127 l_document := l_document || NL;
128 curr_len := lengthb(l_document);
129 END LOOP;
130
131 document := l_document;
132
133 END IF;
134
135 END;
136
137 PROCEDURE get_service_attr(itemtype in varchar2,
138 itemkey in varchar2,
139 actid in number,
140 funcmode in varchar2,
141 resultout out NOCOPY varchar2) IS
142 l_document_id NUMBER;
143 l_draft_id NUMBER;
144 l_car_id NUMBER;
145 l_reporting_method VARCHAR2(60);
146 l_car_status VARCHAR2(60);
147
148 BEGIN
149
150 IF (funcmode <> wf_engine.eng_run) THEN
151 resultout := wf_engine.eng_null;
152 RETURN;
153 END IF;
154
155 l_document_id := po_wf_util_pkg.GetItemAttrNumber( itemtype => itemtype,
156 itemkey => itemkey,
157 aname => 'DOCUMENT_ID');
158 l_draft_id := po_wf_util_pkg.GetItemAttrNumber( itemtype => itemtype,
159 itemkey => itemkey,
160 aname => 'DRAFT_ID');
161
162 IF l_draft_id IS NULL THEN
163 l_draft_id := -1;
164 END IF;
165
166 SELECT CAR_ID, REPORTING_METHOD, CAR_STATUS
167 INTO l_car_id , l_reporting_method, l_car_status
168 FROM PO_CLM_CARS
169 WHERE PO_HEADER_ID = l_document_id
170 AND PO_DRAFT_ID = l_draft_id;
171
172 PO_WF_UTIL_PKG.SetItemAttrNumber(itemtype=>itemtype,
173 itemkey => itemkey,
174 aname => 'CAR_ID',
175 avalue => l_car_id);
176 PO_WF_UTIL_PKG.SetItemAttrText(itemtype=>itemtype,
177 itemkey => itemkey,
178 aname => 'INVOKER_KEY',
179 avalue => itemkey);
180
181 IF (l_reporting_method = 'NONE' OR
182 (l_reporting_method = 'SINGLE_CAR' AND l_car_status = 'NOT_REPORTED')) THEN
183 resultout := 'COMPLETE' || ':' || 'FAILURE';
184 ELSE
185 resultout := 'COMPLETE' || ':' || 'SUCCESS';
186 END IF;
187 EXCEPTION
188 WHEN OTHERS THEN
189 resultout := 'COMPLETE' || ':' || 'FAILURE';
190 END;
191
192 PROCEDURE get_fpds_notif_attr(itemtype in varchar2,
193 itemkey in varchar2,
194 actid in number,
195 funcmode in varchar2,
196 resultout out NOCOPY varchar2) IS
197 l_document_id NUMBER;
198 l_draft_id NUMBER;
199 l_document_subtype VARCHAR2(25);
200 l_doc_type_disp VARCHAR2(25);
201 l_performer_user_name VARCHAR2(25);
202 l_buyer_user_name VARCHAR2(25);
203 l_approver_user_name VARCHAR2(25);
204 l_notif_type VARCHAR2(25) := null;
205 l_update_fpds_info VARCHAR2(200);
206 l_fnd_org_id NUMBER;
207 l_mo_org_id NUMBER;
208 BEGIN
209
210 IF (funcmode <> wf_engine.eng_run) THEN
211 resultout := wf_engine.eng_null;
212 RETURN;
213 END IF;
214
215 l_document_id := po_wf_util_pkg.GetItemAttrNumber( itemtype => itemtype,
216 itemkey => itemkey,
217 aname => 'DOCUMENT_ID');
218 l_draft_id := po_wf_util_pkg.GetItemAttrNumber( itemtype => itemtype,
219 itemkey => itemkey,
220 aname => 'DRAFT_ID');
221 l_document_subtype := po_wf_util_pkg.GetItemAttrText( itemtype => itemtype,
222 itemkey => itemkey,
223 aname => 'DOCUMENT_SUBTYPE');
224 l_buyer_user_name := po_wf_util_pkg.GetItemAttrText( itemtype => itemtype,
225 itemkey => itemkey,
226 aname => 'BUYER_USER_NAME');
227 l_approver_user_name := po_wf_util_pkg.GetItemAttrText( itemtype => itemtype,
228 itemkey => itemkey,
229 aname => 'APPROVER_USER_NAME');
230
231 l_update_fpds_info := 'JSP:/OA_HTML/OA.jsp?OAFunc=PO_UPDATE_FPDSNG_INFO&poHeaderId=' || To_Char(l_document_id)
232 || '&DraftId=' || To_Char(l_draft_id) || '&DOCUMENT_MODE=update&addBreadCrumb=Y';
233
234 IF l_draft_id IS NOT NULL AND l_draft_id <> -1 THEN
235 l_doc_type_disp := 'Modification';
236 ELSIF l_document_subtype = 'STANDARD' THEN
237 l_doc_type_disp := 'Award';
238 ELSE
239 l_doc_type_disp := 'IDV';
240 END IF;
241
242 -- Bug 11890961 Changes
243 l_fnd_org_id := fnd_global.org_id;
244 l_mo_org_id := MO_GLOBAL.GET_CURRENT_ORG_ID();
245
246 IF (l_fnd_org_id <> l_mo_org_id) then
247 fnd_global.initialize('ORG_ID',l_mo_org_id);
248 END IF;
249
250 l_notif_type := fnd_profile.value('PO_CLM_FPDS_APPROV_NOTIF_TYPE');
251
252 IF (l_fnd_org_id <> l_mo_org_id) then
253 fnd_global.initialize('ORG_ID',l_fnd_org_id);
254 END IF;
255
256 IF l_notif_type IS NULL OR l_notif_type = 'BUYER' THEN
257 l_performer_user_name := l_buyer_user_name;
258 ELSE
259 l_performer_user_name := l_approver_user_name;
260 END IF;
261
262 PO_WF_UTIL_PKG.SetItemAttrText(itemtype=>itemtype,
263 itemkey => itemkey,
264 aname => 'DOCUMENT_TYPE_DISP',
265 avalue => l_doc_type_disp);
266 PO_WF_UTIL_PKG.SetItemAttrText(itemtype=>itemtype,
267 itemkey => itemkey,
268 aname => 'PERFORMER_USER_NAME',
269 avalue => l_performer_user_name);
270 PO_WF_UTIL_PKG.SetItemAttrText(itemtype=>itemtype,
271 itemkey => itemkey,
272 aname => 'CAR_LOGS',
273 avalue => 'PLSQL:PO_CLM_CAR_WF_UTIL.GET_CAR_LOGS/' || itemtype || ':' || itemkey);
274
275 PO_WF_UTIL_PKG.SetItemAttrText(itemtype=>itemtype,
276 itemkey => itemkey,
277 aname => 'UPDATE_FPDS_INFO',
278 avalue => l_update_fpds_info);
279
280 resultout := 'COMPLETE';
281
282 END;
283
284 PROCEDURE get_service_result(itemtype in varchar2,
285 itemkey in varchar2,
286 actid in number,
287 funcmode in varchar2,
288 resultout out NOCOPY varchar2) IS
289 l_evt wf_event_t;
290 l_ret VARCHAR(25);
291 BEGIN
292
293 if (funcmode <> wf_engine.eng_run) then
294 resultout := wf_engine.eng_null;
295 return;
296 end if;
297
298 l_evt := wf_engine.GetItemAttrEvent(itemtype, itemkey, 'RECEIVER_DATA');
299 l_ret := l_evt.GetEventData;
300
301 IF l_ret = 'S' THEN
302 resultout := 'COMPLETE' || ':' || 'SUCCESS';
303 ELSE
304 resultout := 'COMPLETE' || ':' || 'FAILURE';
305 END IF;
306
307 END;
308
309 PROCEDURE is_fpds_rep_needed(itemtype in varchar2,
310 itemkey in varchar2,
311 actid in number,
312 funcmode in varchar2,
313 resultout out NOCOPY varchar2) IS
314
315 l_fpds_reporting VARCHAR2(1);
316 l_document_id NUMBER;
317 l_draft_id NUMBER;
318 l_reporting_method VARCHAR2(60);
319 l_approved_without_reporting VARCHAR2(1);
320 l_org_id NUMBER; --CLM Controls Project Changes
321
322 BEGIN
323
324 IF (funcmode <> wf_engine.eng_run) THEN
325 resultout := wf_engine.eng_null;
326 RETURN;
327 END IF;
328
329 --CLM Controls Project changes
330 l_org_id := po_wf_util_pkg.GetItemAttrNumber( itemtype =>
331 itemtype,
332 itemkey =>
333 itemkey,
334 aname =>
335 'ORG_ID');
336 SELECT PO_CORE_S.retrieveOptionValue(p_org_id => l_org_id,
337 p_option_column => PO_CORE_S.g_FPDS_REPORTING_COL)
338 into l_fpds_reporting
339 FROM dual;
340
341 IF l_fpds_reporting is null OR l_fpds_reporting = 'N' THEN
342 resultout := wf_engine.eng_completed || ':' || 'N';
343 RETURN;
344 END IF;
345
346 l_document_id := po_wf_util_pkg.GetItemAttrNumber( itemtype =>
347 itemtype,
348 itemkey =>
349 itemkey,
350 aname
351 =>
352 'DOCUMENT_ID');
353 l_draft_id := po_wf_util_pkg.GetItemAttrNumber( itemtype =>
354 itemtype,
355 itemkey =>
356 itemkey,
357 aname
358 =>
359 'DRAFT_ID');
360
361 IF l_draft_id IS NULL THEN
362 l_draft_id := -1;
363 END IF;
364
365 BEGIN
366 SELECT REPORTING_METHOD, APPROVED_WITHOUT_REPORTING
367 INTO l_reporting_method, l_approved_without_reporting
368 FROM PO_CLM_CARS
369 WHERE PO_HEADER_ID = l_document_id
370 AND PO_DRAFT_ID = l_draft_id;
371 EXCEPTION
372 WHEN no_data_found THEN
373 resultout := wf_engine.eng_completed || ':' || 'Y';
374 RETURN;
375 END;
376
377 IF (l_reporting_method <> 'EXEMPT' AND nvl(l_approved_without_reporting, '2') <> '1') THEN
378 resultout := wf_engine.eng_completed || ':' || 'Y';
379 ELSE
380 resultout := wf_engine.eng_completed || ':' || 'N';
381 END IF;
382
383 END;
384
385 PROCEDURE IS_CAR_AUTHENTICATED( itemtype in varchar2,
386 itemkey in varchar2,
387 actid in number,
388 funcmode in varchar2,
389 resultout out NOCOPY varchar2) IS
390 l_document_id NUMBER;
391 l_draft_id NUMBER;
392 l_car_authenticated VARCHAR2(5);
393
394 BEGIN
395
396 IF (funcmode <> wf_engine.eng_run) THEN
397 resultout := wf_engine.eng_null;
398 RETURN;
399 END IF;
400
401 l_document_id := po_wf_util_pkg.GetItemAttrNumber( itemtype =>
402 itemtype,
403 itemkey =>
404 itemkey,
405 aname
406 =>
407 'DOCUMENT_ID');
408 l_draft_id := po_wf_util_pkg.GetItemAttrNumber( itemtype =>
409 itemtype,
410 itemkey =>
411 itemkey,
412 aname
413 =>
414 'DRAFT_ID');
415
416 IF l_draft_id IS NULL THEN
417 l_draft_id := -1;
418 END IF;
419
420 BEGIN
421 SELECT 'Y'
422 INTO l_car_authenticated
423 FROM PO_CLM_CARS
424 WHERE PO_HEADER_ID = l_document_id
425 AND PO_DRAFT_ID = l_draft_id
426 AND CAR_STATUS in ('AUTHENTICATED', 'APPROVED')
427 AND REPORTING_METHOD = 'SINGLE_CAR';
428 EXCEPTION
429 WHEN no_data_found THEN
430 resultout := wf_engine.eng_completed || ':' || 'N';
431 RETURN;
432 END;
433
434 resultout := wf_engine.eng_completed || ':' || 'Y';
435
436 END;
437
438 END;
439