DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_CLOSEOUT_PVT

Source


1 PACKAGE BODY PO_CLOSEOUT_PVT AS
2 --$Header: PO_CLOSEOUT_PVT.plb 120.9.12020000.22 2013/05/09 11:52:04 mabaig noship $
3 
4 d_pkg_name CONSTANT varchar2(50) := PO_LOG.get_package_base('PO_CLOSEOUT_PVT');
5 
6 
7 g_debug_stmt CONSTANT  BOOLEAN := PO_DEBUG.is_debug_stmt_on;
8 --------------------------------------------------------------------------------
9   --Start of Comments
10 
11   --Name: log
12 
13   --Function:
14   --  For logging messages
15 
16   --Parameters:
17 
18   --IN:
19   --p_log_message         VARCHAR2
20 
21   --End of Comments
22 --------------------------------------------------------------------------------
23 
24 PROCEDURE log(
25   p_module_base IN        VARCHAR2,
26   p_position    IN        VARCHAR2,
27   p_log_message IN        VARCHAR2
28 )
29 AS
30 
31 BEGIN
32 
33   IF (PO_LOG.d_stmt) THEN
34     PO_LOG.stmt(p_module_base    => p_module_base,
35                 p_position       => p_position ,
36                 p_message_text   => p_log_message);
37   END IF;
38 
39 END log;
40 --------------------------------------------------------------------------------
41   --Start of Comments
42 
43   --Name: create_contract
44 
45   --Function:
46   --  This will call out the Contract API to create the contract
47 
48   --Parameters:
49 
50   --IN:
51   --  p_doc_id            NUMBER
52   --  p_closeout_type     VARCHAR2
53 
54   --OUT:
55   --  x_contract_id       NUMBER
56   --  x_contract_ver      NUMBER
57   --  x_contract_type     VARCHAR2
58   --  x_return_status     VARCHAR2
59   --  x_return_msg        VARCHAR2
60 
61   --End of Comments
62 --------------------------------------------------------------------------------
63 
64 PROCEDURE create_contract (
65   p_doc_id          IN         NUMBER
66 , p_closeout_type   IN         VARCHAR
67 , x_contract_id     OUT NOCOPY NUMBER
68 , x_contract_ver    OUT NOCOPY NUMBER
69 , x_contract_type   OUT NOCOPY VARCHAR2
70 , x_return_status   OUT NOCOPY VARCHAR2
71 , x_return_msg      OUT NOCOPY VARCHAR2
72 )
73 IS
74   l_progress           NUMBER := 0;
75   l_po_doc_type        VARCHAR2(25);
76   l_contr_type         VARCHAR2(25);
77   l_rev_number         NUMBER;
78   l_doc_num            VARCHAR2(100);
79   l_org_id             NUMBER;
80   l_vendor_id          NUMBER;
81   l_vendor_name        VARCHAR2(100);
82   l_vendor_contact_id  NUMBER;
83   l_vendor_site_id     NUMBER;
84   l_vendor_contact_name  VARCHAR2(100);
85   l_org_name           VARCHAR2(100);
86   l_msg_count          NUMBER;
87   l_document_rec       OKC_IMP_RECORD_TYPES.document_rec_type;
88   l_contract_rec       OKC_IMP_RECORD_TYPES.contract_rec_type;
89   l_party_contacts     OKC_IMP_RECORD_TYPES.party_contacts_tbl_type;
90   l_contract_parties   OKC_IMP_RECORD_TYPES.contract_parties_tbl_type;
91   l_risks_tbl          OKC_IMP_RECORD_TYPES.contract_risks_tbl_type;
92 
93   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'create_contract';
94   d_position NUMBER;
95 
96 BEGIN
97 
98   d_position := 0;
99   IF (PO_LOG.d_proc) THEN
100     PO_LOG.proc_begin(d_module);
101   END IF;
102 
103   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_doc_id '        || p_doc_id);
104   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_closeout_type ' || p_closeout_type);
105 
106   IF g_CLOSEOUT_TYPE_INDIVIDUAL = p_closeout_type THEN
107      SELECT type_lookup_code,revision_num,clm_document_number,org_id,vendor_id, vendor_contact_id,vendor_site_id
108        INTO l_po_doc_type, l_rev_number, l_doc_num,l_org_id,l_vendor_id, l_vendor_contact_id,l_vendor_site_id
109        FROM PO_HEADERS_ALL
110       WHERE po_header_id = p_doc_id;
111 
112      l_progress := 10;
113      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_po_doc_type '       || l_po_doc_type);
114      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_rev_number '        || l_rev_number);
115      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_num '           || l_doc_num);
116      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_org_id '            || l_org_id);
117      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_id '         || l_vendor_id);
118      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_contact_id ' || l_vendor_contact_id);
119      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_site_id ' || l_vendor_site_id);
120 
121 
122      SELECT name
123        INTO l_org_name
124        FROM hr_all_organization_units_tl
125       WHERE organization_id = l_org_id
126         AND language = UserEnv('lang');
127 
128      l_progress := 20;
129      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_org_name '      || l_org_name);
130      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'fnd_global.USER_NAME ' || fnd_global.USER_NAME);
131 
132      l_contr_type := po_conterms_utl_grp.get_po_contract_doctype(l_po_doc_type);
133      l_document_rec.document_number := l_doc_num;
134   ELSE
135      l_contr_type := 'PO_CLOSEOUT_SET';
136      l_org_id   := fnd_global.ORG_ID;
137      l_org_name := PO_MOAC_UTILS_PVT.GET_OU_NAME(l_org_id);
138      l_doc_num  := p_doc_id;
139      l_vendor_contact_id := NULL;
140   END IF;
141 
142   l_progress := 30;
143   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_contr_type '  || l_contr_type);
144 
145   l_document_rec.business_document_type := l_contr_type;
146   l_document_rec.business_document_id := p_doc_id;
147   --l_document_rec.business_document_version := l_rev_number;
148   l_document_rec.source_code := 'INTERNAL';
149   l_document_rec.relationship_id := 10006;
150   l_document_rec.display_in_contract := 'N';
151 
152   l_progress := 40;
153 
154   l_contract_rec.contract_number := l_doc_num;
155   l_contract_rec.contract_name := l_doc_num;
156   l_contract_rec.org_name := l_org_name;
157   l_contract_rec.contract_status_txt := 'Draft';
158   l_contract_rec.contract_effective_date := TO_CHAR(SYSDATE, 'MM/DD/YYYY');
159 	  l_contract_rec.contract_type_txt := 'Contract Closeout';
160   l_contract_rec.contract_version_num := 1 ;
161   l_contract_rec.description := 'Closeout :' || l_doc_num;
162   l_contract_rec.authoring_party_txt := 'Internal' ;
163   l_contract_rec.owner_user_name := fnd_global.USER_NAME ;
164   l_contract_rec.source_code := 'INTERNAL' ;
165 
166   l_progress := 50;
167 
168   l_contract_parties(1).party_role_txt := 'Internal';
169   l_contract_parties(1).party_name_txt := l_org_name;
170   l_contract_parties(1).party_index := 1;
171 
172   IF g_CLOSEOUT_TYPE_INDIVIDUAL = p_closeout_type THEN
173      SELECT  pv.vendor_name
174        INTO  l_vendor_name
175        FROM  po_vendors pv
176       WHERE  pv.vendor_id = l_vendor_id;
177 
178      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_name ' || l_vendor_name);
179      l_progress := 60;
180      l_contract_parties(2).party_role_txt := 'Supplier';
181      l_contract_parties(2).party_name_txt := l_vendor_name;
182      l_contract_parties(2).party_index := 2;
183   END IF;
184 
185   l_progress := 70;
186 
187   IF l_vendor_contact_id IS NOT NULL THEN
188 
189      BEGIN
190        SELECT Nvl(LAST_NAME, '') || ', ' || Nvl(FIRST_NAME, '')
191          INTO l_vendor_contact_name
192          FROM po_vendor_contacts
193         WHERE vendor_contact_id = l_vendor_contact_id
194 	  AND vendor_site_id = l_vendor_site_id;
195 
196      EXCEPTION
197        WHEN No_Data_Found THEN
198          l_vendor_contact_name := '';
199      END;
200 
201      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_contact_name ' || l_vendor_contact_name);
202      --contacts
203      l_party_contacts(1).contact_index :=  1;
204      l_party_contacts(1).party_role_txt :=  'Supplier';
205      l_party_contacts(1).party_name_txt :=   l_vendor_name;
206      l_party_contacts(1).contact_name_txt := l_vendor_contact_name;
207      l_party_contacts(1).contact_role_txt :=  'Contracting Officer';
208      l_party_contacts(1).contact_id :=  l_vendor_contact_id;
209 
210   END IF;
211 
212   l_progress := 80;
213 
214   OKC_REP_CLOSEOUT_PVT.create_contract(p_api_version  => 1.0
215                                           ,p_document_rec => l_document_rec
216                                           ,p_contract_rec => l_contract_rec
217                                           ,p_party_contacts_tbl => l_party_contacts
218                                           ,p_contract_parties_tbl => l_contract_parties
219                                           ,p_risks_tbl    => l_risks_tbl
220                                           ,p_commit       => fnd_api.g_true
221                                           ,x_msg_data     => x_return_msg
222                                           ,x_return_status=> x_return_status
223                                           ,x_msg_count    => l_msg_count);
224 
225   l_progress := 90;
226 
227   x_contract_id   := l_contract_rec.contract_id;
228   x_contract_ver  := l_contract_rec.contract_version_num;
229   x_contract_type := l_contract_rec.contract_type;
230 
231   l_progress := 100;
232 
233   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'x_contract_id '   || x_contract_id);
234   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'x_contract_ver '  || x_contract_ver);
235   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'x_contract_type ' || x_contract_type);
236   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'x_return_status ' || x_return_status);
237 
238   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
239 
240   EXCEPTION
241     WHEN OTHERS THEN
242 
243       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'PO_CLOSEOUT_PVT.create_contract : when others exception at '
244                        || l_progress || ';' || SQLERRM );
245       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
246       x_return_msg := SQLERRM;
247 END create_contract;
248 --------------------------------------------------------------------------------
249   --Start of Comments
250 
251   --Name: check_contract_exists
252 
253   --Function:
254   --  This will call out the Contract API to check contract exists or not
255 
256   --Parameters:
257 
258   --IN:
259   --  p_doc_id            NUMBER
260   --  p_closeout_type     VARCHAR2
261 
262   --OUT:
263   --  x_contract_id       NUMBER
264   --  x_contract_ver      NUMBER
265   --  x_contract_type     VARCHAR2
266   --  x_return_status     VARCHAR2
267   --  x_return_msg        VARCHAR2
268 
269   --End of Comments
270 --------------------------------------------------------------------------------
271 
272 PROCEDURE check_contract_exists(
273   p_doc_id          IN         NUMBER
274 , p_closeout_type   IN         VARCHAR
275 , x_contract_id     OUT NOCOPY NUMBER
276 , x_contract_ver    OUT NOCOPY NUMBER
277 , x_contract_type   OUT NOCOPY VARCHAR2
278 , x_return_status   OUT NOCOPY VARCHAR2
279 , x_return_msg      OUT NOCOPY VARCHAR2
280 )
281 IS
282 
283   l_progress           NUMBER := 0;
284   l_po_doc_type        VARCHAR2(25);
285   l_contr_type         VARCHAR2(25);
286   l_rev_number         NUMBER;
287   l_doc_num            VARCHAR2(100);
288   l_msg_count          NUMBER;
289   l_document_rec       OKC_IMP_RECORD_TYPES.document_rec_type;
290 
291   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'check_contract_exists';
292   d_position NUMBER;
293 
294 BEGIN
295   d_position := 0;
296   IF (PO_LOG.d_proc) THEN
297     PO_LOG.proc_begin(d_module);
298   END IF;
299 
300   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '        || p_doc_id);
301   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_closeout_type ' || p_closeout_type);
302 
303   IF g_CLOSEOUT_TYPE_INDIVIDUAL = p_closeout_type THEN
304     SELECT type_lookup_code,revision_num,clm_document_number
305       INTO l_po_doc_type, l_rev_number, l_doc_num
306       FROM PO_HEADERS_ALL
307      WHERE po_header_id = p_doc_id;
308 
309     l_progress := 10;
310     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_po_doc_type ' || l_po_doc_type);
311     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_rev_number '  || l_rev_number);
312     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_doc_num '     || l_doc_num);
313 
314     IF l_po_doc_type = 'STANDARD' THEN
315        l_contr_type := 'PO_STANDARD';
316     ELSIF l_po_doc_type = 'BLANKET' THEN
317        l_contr_type := 'PA_BLANKET';
318     ELSE
319        l_contr_type := 'PA_CONTRACT';
320     END IF;
321     l_document_rec.document_number := l_doc_num;
322   ELSE
323     l_contr_type := 'PO_CLOSEOUT_SET';
324   END IF;
325 
326   l_progress := 20;
327 
328   l_document_rec.business_document_type := l_contr_type;
329   l_document_rec.business_document_id := p_doc_id;
330   --l_document_rec.business_document_version := l_rev_number;
331   --l_document_rec.source_code := 'INTERNAL';
332   --l_document_rec.relationship_id := 10006;
333   --l_document_rec.display_in_contract := 'N';
334 
335   l_progress := 30;
336 
337   OKC_REP_CLOSEOUT_PVT.check_contract_exists(p_api_version  => 1.0,
338                           p_document_rec          => l_document_rec,
339                           x_contract_type         => x_contract_type,
340                           x_contract_id           => x_contract_id,
341                           x_contract_version_num  => x_contract_ver,
342                           x_msg_data              => x_return_msg,
343                           x_msg_count             => l_msg_count,
344                           x_return_status         => x_return_status);
345   l_progress := 40;
346 
347   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'x_contract_type '  || x_contract_type);
348   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'x_contract_id '    || x_contract_id);
349   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'x_contract_ver '   || x_contract_ver);
350 
351   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
352 
353   EXCEPTION
354     WHEN OTHERS THEN
355 
356       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'PO_CLOSEOUT_PVT.check_contract_exists : when others exception at '
357                        || l_progress || ';' || SQLERRM );
358       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
359       x_return_msg := SQLERRM;
360 
361 END check_contract_exists;
362 
363 --------------------------------------------------------------------------------
364   --Start of Comments
365 
366   --Name: get_contract
367 
368   --Function:
369   --  This will call out the Contract API to check contract exists or not. If
370   --  It contract id not found. It will call the create_contract procedure of
371   --  this package
372 
373   --Parameters:
374 
375   --IN:
376   --  p_doc_id            NUMBER
377   --  p_closeout_type     VARCHAR2
378 
379   --OUT:
380   --  x_contract_id       NUMBER
381   --  x_contract_ver      NUMBER
382   --  x_contract_type     VARCHAR2
383   --  x_return_status     VARCHAR2
384   --  x_return_msg        VARCHAR2
385 
386   --End of Comments
387 --------------------------------------------------------------------------------
388 
389 PROCEDURE get_contract(
390   p_doc_id          IN         NUMBER
391 , p_closeout_type   IN         VARCHAR
392 , x_contract_id     OUT NOCOPY NUMBER
393 , x_contract_ver    OUT NOCOPY NUMBER
394 , x_contract_type   OUT NOCOPY VARCHAR2
395 , x_return_status   OUT NOCOPY VARCHAR2
396 , x_return_msg      OUT NOCOPY VARCHAR2
397 )
398 IS
399 
400   l_progress           NUMBER := 0;
401   l_po_doc_type        VARCHAR2(25);
402   l_contr_type         VARCHAR2(25);
403   l_rev_number         NUMBER;
404   l_doc_num            VARCHAR2(100);
405   l_msg_count          NUMBER;
406   l_document_rec       OKC_IMP_RECORD_TYPES.document_rec_type;
407 
408   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_contract';
409   d_position NUMBER;
410 
411 
412 BEGIN
413   d_position := 0;
414   IF (PO_LOG.d_proc) THEN
415     PO_LOG.proc_begin(d_module);
416   END IF;
417 
418   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '        || p_doc_id);
419   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_closeout_type ' || p_closeout_type);
420 
421   l_progress := 10;
422 
423   PO_CLOSEOUT_PVT.check_contract_exists(p_doc_id  => p_doc_id,
424                           p_closeout_type         => p_closeout_type,
425                           x_contract_type         => x_contract_type,
426                           x_contract_id           => x_contract_id,
427                           x_contract_ver          => x_contract_ver,
428                           x_return_msg            => x_return_msg,
429                           x_return_status         => x_return_status);
430   l_progress := 20;
431 
432   IF x_contract_id IS NULL THEN
433      PO_CLOSEOUT_PVT.Log( d_module, d_position, 'Contract does not exists ');
434      PO_CLOSEOUT_PVT.create_contract(p_doc_id     => p_doc_id,
435                           p_closeout_type         => p_closeout_type,
436                           x_contract_type         => x_contract_type,
437                           x_contract_id           => x_contract_id,
438                           x_contract_ver          => x_contract_ver,
439                           x_return_msg            => x_return_msg,
440                           x_return_status         => x_return_status);
441   END IF;
442 
443 
444   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'x_contract_type '  || x_contract_type);
445   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'x_contract_id '    || x_contract_id);
446   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'x_contract_ver '   || x_contract_ver);
447 
448   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
449 
450   EXCEPTION
451     WHEN OTHERS THEN
452 
453       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.get_contract : when others exception at '
454                        || l_progress || ';' || SQLERRM );
455       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
456       x_return_msg := SQLERRM;
457 
458 END get_contract;
459 
460 --------------------------------------------------------------------------------
461   --Start of Comments
462 
463   --Name: open_mod_exists
464 
465   --Function:
466   --  Checks if there already exists an open modification
467 
468   --Parameters:
469 
470   --IN:
471   --  p_doc_id            NUMBER
472 
473   --OUT:
474   --x_result_type         VARCHAR2
475 
476   --End of Comments
477 --------------------------------------------------------------------------------
478 
479 PROCEDURE open_mod_exists(
480   p_doc_id          IN            NUMBER
481 , x_result_type     OUT    NOCOPY VARCHAR2
482 )
483 IS
484   l_progress       NUMBER := 0;
485   l_count          VARCHAR2(1);
486 
487   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'open_mod_exists';
488   d_position NUMBER;
489 
490 
491 BEGIN
492   d_position := 0;
493   IF (PO_LOG.d_proc) THEN
494     PO_LOG.proc_begin(d_module);
495   END IF;
496 
497  PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '      || p_doc_id);
498 
499   SELECT Count(1)
500     INTO l_count
501     FROM po_drafts dft
502    WHERE dft.document_id = p_doc_id
503      AND dft.draft_type= 'MOD'
504      AND dft.status IN ('DRAFT', 'IN PROCESS', 'REJECTED', 'SUPPLIER SIGN', 'PRE-APPROVED');
505 
506   l_progress := 20;
507 
508   IF l_count > 0 THEN
509      x_result_type := c_result_type_FAILURE;
510   ELSE
511      x_result_type := c_result_type_SUCCESS;
512   END IF;
513 
514   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
515 
516   EXCEPTION
517     WHEN NO_DATA_FOUND THEN
518        x_result_type := c_result_type_SUCCESS;
519 
520 
521 END open_mod_exists;
522 
523 --------------------------------------------------------------------------------
524   --Start of Comments
525 
526   --Name: is_doc_fully_received
527 
528   --Function:
529   --  Checks if the document is fully receieved
530 
531   --Parameters:
532 
533   --IN:
534   --  p_doc_id            NUMBER
535 
536   --OUT:
537   --x_result_type         VARCHAR2
538 
539   --End of Comments
540 --------------------------------------------------------------------------------
541 
542 PROCEDURE is_doc_fully_received (
543   p_doc_id          IN     NUMBER
544 , x_result_type     OUT    NOCOPY VARCHAR2
545 )IS
546   l_progress       NUMBER := 0;
547   l_count          VARCHAR2(1);
548 
549   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'is_doc_fully_received';
550   d_position NUMBER;
551 
552 
553 BEGIN
554   d_position := 0;
555   IF (PO_LOG.d_proc) THEN
556     PO_LOG.proc_begin(d_module);
557   END IF;
558 
559   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '      || p_doc_id);
560 
561   SELECT Count(1)
562     INTO l_count
563     FROM po_line_locations_all poll
564    WHERE poll.po_header_id = p_doc_id
565      AND Nvl(poll.closed_code,'OPEN')  IN ('OPEN')
566      AND Nvl(poll.cancel_flag, 'N') = 'N';
567 
568   l_progress := 20;
569 
570   IF l_count > 0 THEN
571      x_result_type := c_result_type_FAILURE;
572   ELSE
573      x_result_type := c_result_type_SUCCESS;
574   END IF;
575 
576   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
577 
578   EXCEPTION
579 
580     WHEN NO_DATA_FOUND THEN
581        x_result_type := c_result_type_SUCCESS;
582 
583 END is_doc_fully_received;
584 
585 --------------------------------------------------------------------------------
586   --Start of Comments
587 
588   --Name: is_doc_fully_invoiced
589 
590   --Function:
591   --  Checks if the document is fully invoiced
592 
593   --Parameters:
594 
595   --IN:
596   --  p_doc_id            NUMBER
597 
598   --OUT:
599   --x_result_type         VARCHAR2
600 
601   --End of Comments
602 --------------------------------------------------------------------------------
603 
604 PROCEDURE is_doc_fully_invoiced (
605   p_doc_id          IN     NUMBER
606 , x_result_type     OUT    NOCOPY VARCHAR2
607 ) IS
608   l_progress       NUMBER := 0;
609   l_count          VARCHAR2(1);
610 
611   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'is_doc_fully_invoiced';
612   d_position NUMBER;
613 
614 
615 BEGIN
616   d_position := 0;
617   IF (PO_LOG.d_proc) THEN
618     PO_LOG.proc_begin(d_module);
619   END IF;
620 
621   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '      || p_doc_id);
622 
623   SELECT Count(1)
624     INTO l_count
625     FROM po_line_locations_all poll
626    WHERE poll.po_header_id = p_doc_id
627      AND nvl(poll.closed_code,'OPEN') IN ('OPEN','CLOSED FOR RECEIVING',' CLOSED FOR INVOICE');
628 
629   l_progress := 20;
630 
631   IF l_count > 0 THEN
632      x_result_type := c_result_type_FAILURE;
633   ELSE
634      x_result_type := c_result_type_SUCCESS;
635   END IF;
636 
637   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
638 
639   EXCEPTION
640     WHEN NO_DATA_FOUND THEN
641        x_result_type := c_result_type_SUCCESS;
642 
643 END is_doc_fully_invoiced;
644 
645 --------------------------------------------------------------------------------
646   --Start of Comments
647 
648   --Name: is_doc_fully_paid
649 
650   --Function:
651   --  Checks if the document is fully paid
652 
653   --Parameters:
654 
655   --IN:
656   --  p_doc_id            NUMBER
657 
658   --OUT:
659   --x_result_type         VARCHAR2
660 
661   --End of Comments
662 --------------------------------------------------------------------------------
663 
664 PROCEDURE is_doc_fully_paid (
665   p_doc_id          IN     NUMBER
666 , x_result_type     OUT    NOCOPY VARCHAR2
667 ) IS
668   l_progress         NUMBER := 0;
669   l_count            VARCHAR2(1);
670 
671   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'is_doc_fully_paid';
672   d_position NUMBER;
673 
674 
675 BEGIN
676   d_position := 0;
677   IF (PO_LOG.d_proc) THEN
678     PO_LOG.proc_begin(d_module);
679   END IF;
680 
681   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '      || p_doc_id);
682 
683   SELECT Count(1)
684     INTO l_count
685     FROM ap_invoice_distributions_all aid,
686          ap_invoices_all aia,
687          po_distributions_all pod,
688          po_line_locations_all poll
689    WHERE aid.po_distribution_id   = pod.po_distribution_id
690      AND aia.invoice_id           = aid.invoice_id
691      AND pod.po_header_id         = poll.po_header_id
692      AND poll.po_header_id        = p_doc_id;
693 
694   l_progress := 10;
695   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'Fully paid entries count '      || l_count);
696 
697   IF l_count > 0 THEN
698     SELECT Count(1)
699       INTO l_count
700       FROM ap_invoice_distributions_all aid,
701            ap_invoices_all aia,
702            po_distributions_all pod,
703            po_line_locations_all poll
704      WHERE aid.po_distribution_id   = pod.po_distribution_id
705        AND aia.invoice_id           = aid.invoice_id
706        AND pod.po_header_id         = poll.po_header_id
707        AND poll.po_header_id        = p_doc_id
708        AND nvl(poll.closed_code,'OPEN') <> 'CLOSED FOR INVOICE'
709        AND aia.payment_status_flag <> 'Y';
710 
711     l_progress := 20;
712 
713     IF l_count > 0 THEN
714        x_result_type := c_result_type_FAILURE;
715     ELSE
716        x_result_type := c_result_type_SUCCESS;
717     END IF;
718   ELSE
719        x_result_type := c_result_type_FAILURE;
720 
721   END IF;
722 
723   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
724 
725   EXCEPTION
726     WHEN NO_DATA_FOUND THEN
727        x_result_type := c_result_type_FAILURE;
728 
729 END is_doc_fully_paid;
730 
731 --------------------------------------------------------------------------------
732   --Start of Comments
733 
734   --Name: chklist_task_available
735 
736   --Function:
737   --  Check if there are any checklists/tasks are available
738 
739   --Parameters:
740 
741   --IN:
742   --  p_doc_id            NUMBER
743 
744   --OUT:
745   --x_result_type         VARCHAR2
746 
747   --End of Comments
748 --------------------------------------------------------------------------------
749 
750 PROCEDURE chklist_task_available (
751   p_doc_id          IN     NUMBER
752 , x_result_type     OUT    NOCOPY VARCHAR2
753 ) IS
754   l_progress       NUMBER := 0;
755   l_count          VARCHAR2(1);
756   l_po_doc_type    VARCHAR2(25);
757   l_contr_type     VARCHAR2(25);
758   l_rev_number     NUMBER;
759   l_doc_rec        OKC_IMP_RECORD_TYPES.document_rec_type;
760   l_msg_data       VARCHAR2(1000);
761   l_msg_count      NUMBER;
762 
763   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'chklist_task_available';
764   d_position NUMBER;
765 
766 
767 BEGIN
768   d_position := 0;
769   IF (PO_LOG.d_proc) THEN
770     PO_LOG.proc_begin(d_module);
771   END IF;
772 
773   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '      || p_doc_id);
774 
775   SELECT type_lookup_code,revision_num
776     INTO l_po_doc_type, l_rev_number
777     FROM PO_HEADERS_ALL
778    WHERE po_header_id = p_doc_id;
779 
780   l_progress := 10;
781 
782   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_po_doc_type ' || l_po_doc_type);
783   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_rev_number '  || l_rev_number);
784 
785   l_contr_type := po_conterms_utl_grp.get_po_contract_doctype(l_po_doc_type);
786 
787   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_contr_type '   || l_contr_type);
788 
789   l_progress := 20;
790 
791   l_doc_rec.business_document_type := l_contr_type;
792   l_doc_rec.business_document_id := p_doc_id;
793 
794   OKC_REP_CLOSEOUT_PVT.check_tasks_exists(p_api_version      => 1.0,
795                      p_init_msg_list    => 'TRUE',
796                      p_document_rec     => l_doc_rec,
797                      x_del_count        => l_count,
798                      x_msg_data         => l_msg_data,
799                      x_msg_count        => l_msg_count,
800                      x_return_status    => x_result_type);
801 
802   /*SELECT Count(1)
803     INTO l_count
804     FROM okc_rep_contract_usages orcu, okc_deliverables del
805    WHERE orcu.business_document_type  = l_contr_type
806      AND orcu.business_document_id = p_doc_id -- po_header_id
807      --AND orcu.business_document_version = l_rev_number  revision_num
808      AND del.business_document_type = orcu.contract_type
809      AND del.business_document_id = orcu.contract_id
810      AND del.business_document_version = -99; */
811 
812   l_progress := 30;
813 
814   IF l_count > 0 THEN
815      x_result_type := c_result_type_SUCCESS;
816   ELSE
817      x_result_type := c_result_type_FAILURE;
818   END IF;
819 
820   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
821 
822   EXCEPTION
823     WHEN NO_DATA_FOUND THEN
824        x_result_type := c_result_type_FAILURE;
825 
826 END chklist_task_available;
827 
828 
829 --------------------------------------------------------------------------------
830   --Start of Comments
831 
832   --Name: validate_manage_closeout
833 
834   --Function:
835   --  Validate the Manage Closeout action
836 
837   --Parameters:
838 
839   --IN:
840   --  p_doc_id            NUMBER
841   --  p_chk_list_req      VARCHAR2
842 
843   --OUT:
844   --x_result_type         VARCHAR2
845   --x_results             PO_MULTI_MOD_VAL_RESULTS_TYPE
846 
847   --End of Comments
848 --------------------------------------------------------------------------------
849 
850 PROCEDURE validate_manage_closeout (
851   p_doc_id          IN     NUMBER
852 , p_chk_list_req    IN     VARCHAR2
853 , x_result_type     OUT    NOCOPY VARCHAR2
854 , x_results         IN OUT NOCOPY PO_MULTI_MOD_VAL_RESULTS_TYPE
855 ) IS
856   l_progress           NUMBER := 0;
857   l_result             VARCHAR2(50);
858   l_tasklist_result    VARCHAR2(50);
859   l_open_mod_fail_type VARCHAR2(20);
860   l_document_rec       OKC_IMP_RECORD_TYPES.document_rec_type;
861   l_contr_type         VARCHAR2(50);
862   l_type_lookup_code   VARCHAR2(50);
863   x_msg_data           VARCHAR2(1000);
864   x_msg_count          NUMBER;
865   x_return_status      VARCHAR2(20);
866   x_qa_return_status   VARCHAR2(20);
867   x_qa_result_tbl      OKC_TERMS_QA_PVT.qa_result_tbl_type;
868   l_clm_doc_num        VARCHAR2(100);
869 
870   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'validate_manage_closeout';
871 
872 
873 BEGIN
874   IF (PO_LOG.d_proc) THEN
875     PO_LOG.proc_begin(d_module);
876   END IF;
877 
878   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_doc_id '        || p_doc_id);
879   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_chk_list_req '  || p_chk_list_req);
880 
881   x_result_type := c_result_type_SUCCESS;
882 
883   IF p_chk_list_req = 'Y' THEN
884      l_open_mod_fail_type := 'WARNING';
885   ELSE
886      l_open_mod_fail_type := 'ERROR';
887   END IF;
888 
889   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_open_mod_fail_type:' || l_open_mod_fail_type);
890 
891   l_progress := 5;
892 
893   SELECT clm_document_number
894     INTO l_clm_doc_num
895     FROM po_headers_all
896    WHERE po_header_id = p_doc_id;
897 
898   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_clm_doc_num:' || l_clm_doc_num);
899 
900   l_progress := 10;
901 
902   IF (X_RESULTS IS NULL) THEN
903       X_RESULTS := PO_MULTI_MOD_VAL_RESULTS_TYPE.NEW_INSTANCE();
904   END IF;
905 
906   SELECT type_lookup_code
907     INTO l_type_lookup_code
908     FROM PO_HEADERS_ALL
909    WHERE po_header_id = p_doc_id;
910 
911   l_progress := 15;
912 
913   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_type_lookup_code:' || l_type_lookup_code);
914   IF p_chk_list_req = 'Y' THEN
915     PO_CLOSEOUT_PVT.chklist_task_available(p_doc_id      => p_doc_id
916                                           ,x_result_type => l_tasklist_result);
917 
918     l_progress := 20;
919 
920     IF l_tasklist_result = c_result_type_FAILURE THEN
921        x_results.add_result(p_multi_mod_val_result_id => po_multi_mod_val_results_s.nextval
922 			  , p_multi_mod_request_id    => p_doc_id
923 			  , p_validation_type         => 'CHECKLIST'
924                           , p_exception_type          => c_result_type_FAILURE
925 			  , p_document_number         => l_clm_doc_num
926                           , p_message_application     => 'PO'
927 			  , p_message_name            => 'CHKLIST_TASK_NOT_AVAILABLE');
928 
929     ELSE
930 
931        l_contr_type := po_conterms_utl_grp.get_po_contract_doctype(l_type_lookup_code);
932        l_document_rec.business_document_type := l_contr_type;
933        l_document_rec.business_document_id := p_doc_id;
934 
935        OKC_REP_CLOSEOUT_PVT.validate_closeout_tasks(
936                                p_api_version        => 1.0,
937                                p_init_msg_list      => fnd_api.g_false,
938                                p_commit             => fnd_api.g_true,
939                                p_document_rec       => l_document_rec,
940                                x_msg_data           => x_msg_data,
941                                x_msg_count          => x_msg_count,
942                                x_return_status      => x_return_status,
943                                x_qa_return_status   => x_qa_return_status,
944                                x_qa_result_tbl      => x_qa_result_tbl);
945        l_progress := 30;
946 
947        IF x_qa_result_tbl.COUNT > 0 THEN
948          FOR i IN x_qa_result_tbl.FIRST .. x_qa_result_tbl.LAST
949          LOOP
950             IF (x_qa_result_tbl(i).error_severity_name = OKC_REP_CLOSEOUT_PVT.G_QA_STS_WARNING) THEN
951                x_results.add_result(p_multi_mod_val_result_id => po_multi_mod_val_results_s.nextval
952   			, p_multi_mod_request_id    => p_doc_id
953 			, p_validation_type         => 'CONTRACT'
954                         , p_exception_type          => c_result_type_WARNING
955 			, p_document_number         => l_clm_doc_num
956                         , p_message_application     => 'OKC'
957 			, p_message_name            => ''
958                         , p_message_text            => x_qa_result_tbl(i).Problem_details);
959             ELSE
960                l_tasklist_result := c_result_type_FAILURE;
961                x_results.add_result(p_multi_mod_val_result_id => po_multi_mod_val_results_s.nextval
962 			, p_multi_mod_request_id    => p_doc_id
963 			, p_validation_type         => 'CONTRACT'
964                         , p_exception_type          => c_result_type_FAILURE
965 			, p_document_number         => l_clm_doc_num
966                         , p_message_application     => 'OKC'
967 			, p_message_name            => ''
968                         , p_message_text            => x_qa_result_tbl(i).Problem_details);
969             END IF;
970          END LOOP;
971        END IF;
972        l_progress := 35;
973 
974     END IF;
975   ELSE
976     l_tasklist_result := c_result_type_SUCCESS;
977   END IF;
978 
979   IF (l_tasklist_result = c_result_type_FAILURE) THEN
980      x_result_type := c_result_type_FAILURE;
981      RETURN;
982   END IF;
983 
984   PO_CLOSEOUT_PVT.open_mod_exists(p_doc_id      => p_doc_id
985                                  ,x_result_type => l_result);
986 
987   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'open_mod_exists result :' || l_result);
988 
989   l_progress := 40;
990 
991   IF l_result = c_result_type_FAILURE THEN
992      x_results.add_result(p_multi_mod_val_result_id => po_multi_mod_val_results_s.nextval
993 			, p_multi_mod_request_id    => p_doc_id
994 			, p_validation_type         => 'MODIFICATION'
995                         , p_exception_type          => l_open_mod_fail_type
996 			, p_document_number         => l_clm_doc_num
997                         , p_message_application     => 'PO'
998 			, p_message_name            => 'MANAGE_CLOSEOUT_OPEN_MOD');
999 
1000   END IF;
1001 
1002   l_progress := 45;
1003 
1004   IF l_type_lookup_code = 'STANDARD' THEN
1005   IF (l_result = c_result_type_FAILURE AND
1006       l_open_mod_fail_type = c_result_type_FAILURE) THEN
1007      x_result_type := c_result_type_FAILURE;
1008      RETURN;
1009   END IF;
1010 
1011   l_progress := 50;
1012 
1013   PO_CLOSEOUT_PVT.is_doc_fully_received(p_doc_id      => p_doc_id
1014                                        ,x_result_type => l_result);
1015 
1016   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'is_doc_fully_received result :' || l_result);
1017 
1018   l_progress := 55;
1019 
1020   IF l_result = c_result_type_FAILURE THEN
1021      x_results.add_result(p_multi_mod_val_result_id => po_multi_mod_val_results_s.nextval
1022 			, p_multi_mod_request_id    => p_doc_id
1023 			, p_validation_type         => 'RECEIPTS'
1024                         , p_exception_type          => c_result_type_WARNING
1025 			, p_document_number         => l_clm_doc_num
1026                         , p_message_application     => 'PO'
1027 			, p_message_name            => 'MANAGE_CLOSEOUT_FULLY_RECEIVED');
1028 
1029      x_result_type := c_result_type_WARNING;
1030   END IF;
1031 
1032   l_progress := 60;
1033 
1034   PO_CLOSEOUT_PVT.is_doc_fully_invoiced(p_doc_id      => p_doc_id
1035                                        ,x_result_type => l_result);
1036 
1037   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'is_doc_fully_invoiced result :' || l_result);
1038 
1039   l_progress := 70;
1040 
1041   IF l_result = c_result_type_FAILURE THEN
1042      x_results.add_result(p_multi_mod_val_result_id => po_multi_mod_val_results_s.nextval
1043 			, p_multi_mod_request_id    => p_doc_id
1044 			, p_validation_type         => 'INVOICE'
1045                         , p_exception_type          => c_result_type_WARNING
1046 			, p_document_number         => l_clm_doc_num
1047                         , p_message_application     => 'PO'
1048 			, p_message_name            => 'MANAGE_CLOSEOUT_FULLY_INVOICED');
1049 
1050      x_result_type := c_result_type_WARNING;
1051   END IF;
1052 
1053   l_progress := 80;
1054 
1055   PO_CLOSEOUT_PVT.is_doc_fully_paid(p_doc_id      => p_doc_id
1056                                    ,x_result_type => l_result);
1057 
1058   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'is_doc_fully_paid result :' || l_result);
1059 
1060   l_progress := 90;
1061 
1062   IF l_result = c_result_type_FAILURE THEN
1063      x_results.add_result(p_multi_mod_val_result_id => po_multi_mod_val_results_s.nextval
1064 			, p_multi_mod_request_id    => p_doc_id
1065 			, p_validation_type         => 'PAYMENT'
1066                         , p_exception_type          => c_result_type_WARNING
1067 			, p_document_number         => l_clm_doc_num
1068                         , p_message_application     => 'PO'
1069 			, p_message_name            => 'MANAGE_CLOSEOUT_FULLY_PAID');
1070 
1071      x_result_type := c_result_type_WARNING;
1072   END IF;
1073   END IF;
1074 
1075   l_progress := 100;
1076 
1077   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
1078 
1079   EXCEPTION
1080     WHEN OTHERS THEN
1081 
1082       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'validate_manage_closeout : when others exception at '
1083                        || l_progress || ';' || SQLERRM );
1084 
1085 END validate_manage_closeout;
1086 
1087 --------------------------------------------------------------------------------
1088   --Start of Comments
1089 
1090   --Name: check_exceptions
1091 
1092   --Function:
1093   --  Validate the Mass Closeout documents
1094 
1095   --Parameters:
1096 
1097   --IN:
1098   --  p_doc_id            NUMBER
1099 
1100   --OUT:
1101   --x_result_type         VARCHAR2
1102 
1103   --End of Comments
1104 --------------------------------------------------------------------------------
1105 
1106 PROCEDURE check_exceptions (
1107   p_req_id          IN     NUMBER
1108 , p_chk_list_req    IN     VARCHAR2
1109 , x_result_type     OUT    NOCOPY VARCHAR2
1110 )
1111 IS
1112 
1113   d_module            CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'check_exceptions';
1114   l_progress          NUMBER := 0;
1115   l_doc_id            NUMBER;
1116   l_result_type       VARCHAR2(20);
1117   l_results           PO_MULTI_MOD_VAL_RESULTS_TYPE;
1118   l_fail_count        NUMBER := 0;
1119   l_warn_count        NUMBER := 0;
1120   l_validation_status VARCHAR2(20);
1121 
1122   CURSOR closeoutDocs IS
1123   SELECT document_id
1124     FROM po_multi_mod_docs
1125    WHERE MULTI_MOD_REQUEST_ID = p_req_id;
1126 
1127 
1128 BEGIN
1129   IF (PO_LOG.d_proc) THEN PO_LOG.proc_begin(d_module); END IF;
1130   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_req_id '        || p_req_id);
1131   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_chk_list_req '  || p_chk_list_req);
1132 
1133   l_results := PO_MULTI_MOD_VAL_RESULTS_TYPE.NEW_INSTANCE();
1134   l_progress := 10;
1135 
1136   DELETE
1137     FROM  po_multi_mod_val_results
1138     WHERE multi_mod_request_id = p_req_id;
1139 
1140   l_progress := 20;
1141 
1142   OPEN closeoutDocs;
1143   LOOP
1144      FETCH closeoutDocs INTO l_doc_id;
1145      EXIT WHEN closeoutDocs%NOTFOUND;
1146 
1147      l_progress := 30;
1148      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_id ' || l_doc_id);
1149 
1150      PO_CLOSEOUT_PVT.validate_manage_closeout(p_doc_id        => l_doc_id
1151                                             , p_chk_list_req  => p_chk_list_req
1152                                             , x_result_type   => l_result_type
1153                                             , x_results       => l_results);
1154      l_progress := 40;
1155 
1156      IF (l_result_type = c_result_type_FAILURE) THEN
1157         l_fail_count := l_fail_count + 1;
1158      ELSIF (l_result_type = c_result_type_WARNING) THEN
1159         l_warn_count := l_warn_count + 1;
1160      END IF;
1161 
1162      l_progress := 50;
1163 
1164      FOR i IN l_results.MESSAGE_NAME.FIRST .. l_results.MESSAGE_NAME.LAST
1165      LOOP
1166           INSERT INTO po_multi_mod_val_results
1167            ( MULTI_MOD_VAL_RESULT_ID
1168             ,MULTI_MOD_REQUEST_ID
1169             ,MULTI_MOD_DOC_ID
1170             ,VALIDATION_TYPE
1171             ,EXCEPTION_TYPE
1172             ,RESULT_TYPE
1173             ,DOCUMENT_ID
1174             ,DOCUMENT_NUMBER
1175             ,RELATED_DOCUMENT_ID
1176             ,RELATED_DOCUMENT_NUMBER
1177             ,RELATED_DOCUMENT_DATE
1178             ,RELATED_DOCUMENT_AMOUNT
1179             ,MESSAGE_APPLICATION
1180             ,MESSAGE_NAME
1181             ,TOKEN1_NAME
1182             ,TOKEN1_VALUE
1183             ,TOKEN2_NAME
1184             ,TOKEN2_VALUE
1185             ,TOKEN3_NAME
1186             ,TOKEN3_VALUE
1187             ,TOKEN4_NAME
1188             ,TOKEN4_VALUE
1189             ,TOKEN5_NAME
1190             ,TOKEN5_VALUE
1191             ,TOKEN6_NAME
1192             ,TOKEN6_VALUE
1193             ,LAST_UPDATE_DATE
1194             ,LAST_UPDATED_BY
1195             ,LAST_UPDATE_LOGIN
1196             ,CREATION_DATE
1197             ,CREATED_BY
1198             ,REQUEST_ID
1199         )
1200         VALUES
1201             ( po_multi_mod_val_results_s.nextval
1202             , p_req_id
1203             , l_doc_id
1204             , l_results.validation_type(i)
1205             , l_results.exception_type(i)
1206             , l_results.result_type(i)
1207             , l_doc_id
1208             , l_results.document_number(i)
1209             , l_results.related_document_id(i)
1210             , l_results.related_document_number(i)
1211             , l_results.related_document_date(i)
1212             , l_results.related_document_amount(i)
1213             , l_results.message_application(i)
1214             , l_results.message_name(i)
1215             , l_results.token1_name(i)
1216             , l_results.token1_value(i)
1217             , l_results.token2_name(i)
1218             , l_results.token2_value(i)
1219             , l_results.token3_name(i)
1220             , l_results.token3_value(i)
1221             , l_results.token4_name(i)
1222             , l_results.token4_value(i)
1223             , l_results.token5_name(i)
1224             , l_results.token5_value(i)
1225             , l_results.token6_name(i)
1226             , l_results.token6_value(i)
1227             , sysdate
1228             , fnd_global.user_id
1229             , fnd_global.login_id
1230             , sysdate
1231             , fnd_global.user_id
1232             , fnd_global.conc_request_id
1233             );
1234         l_progress := 60;
1235      END LOOP;
1236 
1237   END LOOP;
1238 
1239   IF l_fail_count > 0 THEN
1240     l_validation_status := c_result_type_FAILURE;
1241   ELSIF l_warn_count > 0 THEN
1242     l_validation_status := c_result_type_WARNING;
1243   ELSE
1244     l_validation_status := c_result_type_SUCCESS;
1245   END IF;
1246 
1247   l_progress := 70;
1248   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_validation_status ' || l_validation_status);
1249 
1250   UPDATE po_multi_mod_requests
1251      SET VALIDATION_STATUS = l_validation_status
1252    WHERE MULTI_MOD_REQUEST_ID = p_req_id;
1253 
1254   l_progress := 100;
1255 
1256   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
1257   EXCEPTION
1258     WHEN OTHERS THEN
1259 
1260       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'check_exceptions : when others exception at '
1261                        || l_progress || ';' || SQLERRM );
1262       x_result_type := c_result_type_FAILURE;
1263 END check_exceptions;
1264 
1265 --------------------------------------------------------------------------------
1266   --Start of Comments
1267 
1268   --Name: mass_closeout_submit
1269 
1270   --Function:
1271   --  Process Mass Closeout action.
1272 
1273   --Parameters:
1274 
1275   --IN:
1276   --  p_doc_id            NUMBER
1277 
1278   --OUT:
1279   --  errbuf              VARCHAR2
1280   --  retcode             VARCHAR2
1281 
1282   --End of Comments
1283 --------------------------------------------------------------------------------
1284 
1285 PROCEDURE mass_closeout_submit (
1286   errbuf            OUT NOCOPY VARCHAR2
1287 , retcode           OUT NOCOPY VARCHAR2
1288 , p_req_id          IN         NUMBER
1289 )
1290 IS
1291   d_module              CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'mass_closeout_submit';
1292   l_progress            NUMBER := 0;
1293   l_doc_id              NUMBER;
1294   l_po_doc_type         VARCHAR2(25);
1295   l_contr_type          VARCHAR2(25);
1296   l_rev_number          NUMBER;
1297   l_doc_num             VARCHAR2(100);
1298   l_org_id              NUMBER;
1299   l_vendor_id           NUMBER;
1300   l_vendor_name         VARCHAR2(100);
1301   l_vendor_site_id      NUMBER;
1302   l_vendor_contact_id   NUMBER;
1303   l_vendor_contact_name VARCHAR2(100);
1304   l_org_name            VARCHAR2(100);
1305   l_src_document_rec    OKC_IMP_RECORD_TYPES.document_rec_type;
1306   l_tgt_document_rec    OKC_IMP_RECORD_TYPES.document_rec_type;
1307   l_contract_rec        	OKC_IMP_RECORD_TYPES.contract_rec_type;
1308   l_contract_parties    OKC_IMP_RECORD_TYPES.contract_parties_tbl_type;
1309   l_risks_tbl           OKC_IMP_RECORD_TYPES.contract_risks_tbl_type;
1310   l_party_contacts      OKC_IMP_RECORD_TYPES.party_contacts_tbl_type;
1311   l_return_status       VARCHAR2(25);
1312   l_msg_count           NUMBER;
1313   l_closeout_doc_count  NUMBER;
1314   l_checklist_req       VARCHAR2(25);
1315   l_result_type         VARCHAR2(500);
1316   l_msg_data            VARCHAR2(2000);
1317   l_doc_contr_type      VARCHAR2(50);
1318 
1319   CURSOR closeoutDocs IS
1320   SELECT document_id
1321     FROM po_multi_mod_docs
1322    WHERE MULTI_MOD_REQUEST_ID = p_req_id;
1323 BEGIN
1324   IF (PO_LOG.d_proc) THEN PO_LOG.proc_begin(d_module); END IF;
1325   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_req_id '        || p_req_id);
1326   fnd_file.put_line(FND_FILE.LOG,'Current Concurrent Request Id :  '||FND_GLOBAL.CONC_REQUEST_ID);
1327   fnd_file.put_line(FND_FILE.LOG,'Parameters  ');
1328   fnd_file.put_line(FND_FILE.LOG,'Closeout RequestSet Id: '|| p_req_id);
1329   fnd_file.put_line(FND_FILE.LOG,'--------------------------------------------------------------');
1330 
1331   SELECT check_list_required
1332   INTO l_checklist_req
1333   FROM po_closeout_details
1334   WHERE reference_doc_id = p_req_id
1335   AND closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_MASS;
1336 
1337   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_checklist_req ' || l_checklist_req);
1338   l_progress := 5;
1339 
1340   OPEN closeoutDocs;
1341   LOOP
1342      FETCH closeoutDocs INTO l_doc_id;
1343      EXIT WHEN closeoutDocs%NOTFOUND;
1344 
1345      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_id ' || l_doc_id);
1346 
1347      SELECT type_lookup_code,revision_num,clm_document_number,org_id,vendor_id,vendor_contact_id,vendor_site_id
1348        INTO l_po_doc_type, l_rev_number, l_doc_num,l_org_id,l_vendor_id,l_vendor_contact_id,l_vendor_site_id
1349        FROM PO_HEADERS_ALL
1350       WHERE po_header_id = l_doc_id;
1351 
1352      l_progress := 5;
1353      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_po_doc_type '       || l_po_doc_type);
1354      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_rev_number '        || l_rev_number);
1355      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_num '           || l_doc_num);
1356      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_org_id '            || l_org_id);
1357      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_id '         || l_vendor_id);
1358      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_contact_id ' || l_vendor_contact_id);
1359      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_site_id '    || l_vendor_site_id);
1360 
1361      fnd_file.put_line(FND_FILE.LOG, 'Processing started for the document: ' || l_doc_num);
1362      SELECT Count(reference_doc_id)
1363      INTO l_closeout_doc_count
1364      FROM PO_CLOSEOUT_DETAILS
1365      WHERE reference_doc_id = l_doc_id
1366      AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
1367 
1368      l_progress := 10;
1369      IF l_closeout_doc_count > 0 THEN
1370        retcode := '1';
1371        PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Closeout process has already been initiated for this award: ' || l_doc_id);
1372        fnd_file.put_line(FND_FILE.LOG, 'Closeout process has already been initiated for this award: ' || l_doc_num);
1373 
1374      ELSE
1375        PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'validation is successful for award ' || l_doc_id);
1376        fnd_file.put_line(FND_FILE.LOG, 'Initiating closeout process for this award ');
1377 
1378        BEGIN
1379          INSERT
1380            INTO PO_CLOSEOUT_DETAILS (
1381                 closeout_id,
1382                 closeout_doc_type,
1383                 reference_doc_id,
1384                 check_list_required,
1385                 ccs_required,
1386                 check_list_sign_required,
1387                 ccs_sign_required,
1388                 check_list_signer_id,
1389                 aco_signature_type,
1390                 aco_signer_id,
1391                 pco_signature_type,
1392                 pco_signer_id,
1393                 rentention_period_uom,
1394                 rentention_period,
1395                 staging_period_uom,
1396                 staging_period,
1397                 aco_remarks,
1398                 created_by,
1399                 creation_date,
1400                 last_updated_by,
1401                 last_update_date,
1402                 last_update_login,
1403                 attribute_category,
1404                 attribute1,
1405                 attribute2,
1406                 attribute3,
1407                 attribute4,
1408                 attribute5,
1409                 attribute6,
1410                 attribute7,
1411                 attribute8,
1412                 attribute9,
1413                 attribute10,
1414                 attribute11,
1415                 attribute12,
1416                 attribute13,
1417                 attribute14,
1418                 attribute15,
1419                 incloseout,
1420                 closeout_date,
1421                 pco_remarks,
1422                 aco_signer_name,
1423                 pco_signer_name,
1424                 aco_signed_date,
1425                 pco_signed_date,
1426                 checklist_signed_date,
1427                 is_reopened)
1428         (SELECT PO_CLOSEOUT_DETAILS_S.NEXTVAL,
1429                 PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL,
1430                 l_doc_id,
1431                 check_list_required,
1432                 ccs_required,
1433                 check_list_sign_required,
1434                 ccs_sign_required,
1435                 check_list_signer_id,
1436                 aco_signature_type,
1437                 aco_signer_id,
1438                 pco_signature_type,
1439                 pco_signer_id,
1440                 rentention_period_uom,
1441                 rentention_period,
1442                 staging_period_uom,
1443                 staging_period,
1444                 aco_remarks,
1445                 fnd_global.USER_ID,
1446                 SYSDATE,
1447                 fnd_global.USER_ID,
1448                 SYSDATE,
1449                 fnd_global.LOGIN_ID,
1450                 attribute_category,
1451                 attribute1,
1452                 attribute2,
1453                 attribute3,
1454                 attribute4,
1455                 attribute5,
1456                 attribute6,
1457                 attribute7,
1458                 attribute8,
1459                 attribute9,
1460                 attribute10,
1461                 attribute11,
1462                 attribute12,
1463                 attribute13,
1464                 attribute14,
1465                 attribute15,
1466                 'Y',
1467                 closeout_date,
1468                 pco_remarks,
1469                 aco_signer_name,
1470                 pco_signer_name,
1471                 aco_signed_date,
1472                 pco_signed_date,
1473                 checklist_signed_date,
1474                 is_reopened
1475            FROM PO_CLOSEOUT_DETAILS
1476           WHERE reference_doc_id = p_req_id
1477           AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_MASS);
1478 
1479          l_progress := 20;
1480          fnd_file.put_line(FND_FILE.LOG, 'New record has been added to the PO_CLOSEOUT_DETAILS table for this award.');
1481 
1482 
1483         IF l_checklist_req = 'Y' THEN
1484           fnd_file.put_line(FND_FILE.LOG, 'Contract creation process has been started for the award  ' || l_doc_num);
1485           SELECT name
1486             INTO l_org_name
1487            FROM hr_all_organization_units_tl
1488           WHERE organization_id = l_org_id
1489             AND language = UserEnv('lang');
1490 
1491           l_progress := 30;
1492           PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_org_name '      || l_org_name);
1493 
1494           l_doc_contr_type := po_conterms_utl_grp.get_po_contract_doctype(l_po_doc_type);
1495 
1496           PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_contr_type '   || l_doc_contr_type);
1497 
1498           l_tgt_document_rec.document_number := l_doc_num;
1499           l_tgt_document_rec.business_document_type := l_doc_contr_type;
1500           l_tgt_document_rec.business_document_id := l_doc_id;
1501           l_tgt_document_rec.source_code := 'INTERNAL';
1502           l_tgt_document_rec.relationship_id := 10006;
1503           l_tgt_document_rec.display_in_contract := 'N';
1504 
1505           l_progress := 40;
1506 
1507           --l_contr_type := po_conterms_utl_grp.get_po_contract_doctype(l_po_doc_type);
1508           l_contr_type := 'PO_CLOSEOUT_SET';
1509 	        l_src_document_rec.business_document_type := l_contr_type;
1510           l_src_document_rec.business_document_id := p_req_id;
1511           l_src_document_rec.source_code := 'INTERNAL';
1512           l_src_document_rec.relationship_id := 10006;
1513           l_src_document_rec.display_in_contract := 'N';
1514 
1515           l_progress := 50;
1516 
1517           l_contract_rec.contract_number := l_doc_num;
1518           l_contract_rec.contract_name := l_doc_num;
1519           l_contract_rec.org_name := l_org_name;
1520           l_contract_rec.contract_status_txt := 'Draft';
1521           l_contract_rec.contract_effective_date := TO_CHAR(SYSDATE, 'MM/DD/YYYY');
1522           l_contract_rec.contract_type_txt := 'Contract Closeout';
1523           l_contract_rec.contract_version_num := 1 ;
1524           l_contract_rec.description := 'Closeout :' || l_doc_num;
1525           l_contract_rec.authoring_party_txt := 'Internal' ;
1526           l_contract_rec.owner_user_name := fnd_global.USER_NAME ;
1527           l_contract_rec.source_code := 'INTERNAL' ;
1528 
1529           l_progress := 60;
1530 
1531           SELECT  pv.vendor_name
1532             INTO  l_vendor_name
1533             FROM  po_vendors pv
1534            WHERE  pv.vendor_id = l_vendor_id;
1535 
1536           PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_name ' || l_vendor_name);
1537           l_progress := 65;
1538 
1539           l_contract_parties(1).party_role_txt := 'Internal';
1540           l_contract_parties(1).party_name_txt := l_org_name;
1541           l_contract_parties(1).party_index := 1;
1542 
1543           l_contract_parties(2).party_role_txt := 'Supplier';
1544           l_contract_parties(2).party_name_txt := l_vendor_name;
1545           l_contract_parties(2).party_index := 2;
1546 
1547           l_progress := 70;
1548 
1549           IF l_vendor_contact_id IS NOT NULL THEN
1550 
1551             BEGIN
1552               SELECT Nvl(LAST_NAME, '') || ', ' || Nvl(FIRST_NAME, '')
1553                 INTO l_vendor_contact_name
1554                 FROM po_vendor_contacts
1555                WHERE vendor_contact_id = l_vendor_contact_id
1556 	         AND vendor_site_id= l_vendor_site_id;
1557 
1558             EXCEPTION
1559               WHEN No_Data_Found THEN
1560                  l_vendor_contact_name := '';
1561             END;
1562 
1563             PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_vendor_contact_name ' || l_vendor_contact_name);
1564             --contacts
1565             l_party_contacts(1).contact_index :=  1;
1566             l_party_contacts(1).party_role_txt :=  'Supplier';
1567             l_party_contacts(1).party_name_txt :=   l_vendor_name;
1568             l_party_contacts(1).contact_name_txt := l_vendor_contact_name;
1569             l_party_contacts(1).contact_role_txt :=  'Contracting Officer';
1570             l_party_contacts(1).contact_id :=  l_vendor_contact_id;
1571 
1572          END IF;
1573 
1574           l_progress := 75;
1575        	  OKC_REP_CLOSEOUT_PVT.copy_set_tasks_to_each_po(p_api_version => 1.0
1576                                  , p_init_msg_list         => fnd_api.g_false
1577                                  , p_commit                => fnd_api.g_false
1578                                  , p_src_document_rec      => l_src_document_rec
1579                                  , p_tgt_document_rec      => l_tgt_document_rec
1580                                  , p_contract_rec          => l_contract_rec
1581                                  , p_contract_parties_tbl  => l_contract_parties
1582                                  , p_party_contacts_tbl    => l_party_contacts
1583                                  , p_risks_tbl             => l_risks_tbl
1584                                  , x_msg_data              => l_result_type
1585                                  , x_msg_count             => l_msg_count
1586                                  , x_return_status         => l_return_status);
1587           l_progress := 80;
1588           PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'contract_id '     || l_contract_rec.contract_id);
1589           PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'contract_ver '    || l_contract_rec.contract_version_num);
1590           PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'contract_type '   || l_contract_rec.contract_type_txt);
1591           PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_return_status ' || l_return_status);
1592           IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1593             fnd_file.put_line(FND_FILE.LOG, 'Contract creation is successful. Contract id is ' || l_contract_rec.contract_id);
1594           ELSE
1595             fnd_file.put_line(FND_FILE.LOG, 'There are warnings/Errors while creating the contract.');
1596             fnd_file.put_line(FND_FILE.LOG, 'Message:' || l_result_type);
1597           END IF;
1598         END IF; --Checklist required
1599 
1600         fnd_file.put_line(FND_FILE.LOG, 'Workflow process has been intiated');
1601         PO_CLOSEOUT_PVT.start_closeout_wf_process(p_doc_id         => l_doc_id,
1602                                                   x_return_status  => l_return_status);
1603 
1604         IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1605            fnd_file.put_line(FND_FILE.LOG, 'Workflow is successfully initiated');
1606            COMMIT;
1607         ELSE
1608            fnd_file.put_line(FND_FILE.LOG, 'Error(s) occured while initiating the workflow');
1609         END IF;
1610         EXCEPTION
1611           WHEN OTHERS THEN
1612             PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Exception occured while processing the award '
1613                               || l_doc_id || ' - ' || SQLERRM );
1614             fnd_file.put_line(FND_FILE.LOG, 'Fatal error occurred while processing the award ' || l_doc_num);
1615       END;
1616        l_progress := 90;
1617     END IF;
1618   END LOOP;
1619 
1620   po_multi_mod_pvt.remove_multi_mod_request(p_multi_mod_request_id => p_req_id
1621                                           , x_return_status        => l_return_status);
1622   fnd_file.put_line(FND_FILE.LOG, 'The multimod request ' || p_req_id || ' details have been cleared from the system');
1623   PO_CLOSEOUT_PVT.delete_contract(p_doc_id         => p_req_id,
1624                                   p_closeout_type  => PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_MASS,
1625                                   x_return_status  => l_return_status,
1626                                   x_return_msg     => l_msg_data);
1627   l_progress := 95;
1628   fnd_file.put_line(FND_FILE.LOG, 'Deleting the contract which is created for closeout set ');
1629 	fnd_file.put_line(FND_FILE.LOG, 'Delete contract status ' || l_return_status);
1630   fnd_file.put_line(FND_FILE.LOG, 'return message from Delete contract : ' || l_msg_data);
1631   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Delete contract status ' || l_return_status);
1632   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'return message from Delete contract : ' || l_msg_data);
1633   l_progress := 100;
1634   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
1635   EXCEPTION
1636     WHEN OTHERS THEN
1637       errbuf := sqlerrm;
1638       retcode := '2';
1639       fnd_file.put_line(FND_FILE.LOG, 'Unexpected error occurred during this process');
1640       fnd_file.put_line(FND_FILE.LOG, SQLERRM);
1641       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'mass_closeout_submit : when others exception at '
1642                        || l_progress || ';' || SQLERRM );
1643 END mass_closeout_submit;
1644 
1645 --------------------------------------------------------------------------------
1646   --Start of Comments
1647 
1648   --Name: mass_closeout_validate_set
1649 
1650   --Function:
1651   --  Validates the selected documents.
1652 
1653   --Parameters:
1654 
1655   --IN:
1656   --  p_selected_docs     NUMBER
1657 
1658   --OUT:
1659   --  x_failed_docs       VARCHAR2
1660   --  x_result_type       VARCHAR2
1661 
1662   --End of Comments
1663 --------------------------------------------------------------------------------
1664 
1665 PROCEDURE mass_closeout_validate_set (
1666   p_selected_docs   IN     PO_TBL_NUMBER
1667 , x_failed_docs     OUT    NOCOPY VARCHAR2
1668 , x_result_type     OUT    NOCOPY VARCHAR2
1669 )
1670 AS
1671   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'mass_closeout_validate_set';
1672   l_progress        NUMBER := 0;
1673   l_doc_ids         VARCHAR2(2000);
1674   l_query           VARCHAR2(2000);
1675 
1676 BEGIN
1677   IF (PO_LOG.d_proc) THEN
1678     PO_LOG.proc_begin(d_module);
1679   END IF;
1680   --PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_selected_docs ' || p_selected_docs);
1681 
1682   SELECT listagg(DOCUMENT_ID,',') within GROUP (ORDER BY DOCUMENT_ID)
1683     INTO l_doc_ids
1684     FROM po_multi_mod_docs docs,
1685          po_multi_mod_requests req
1686    WHERE docs.MULTI_MOD_REQUEST_ID = req.MULTI_MOD_REQUEST_ID
1687      AND req.MULTI_MOD_REQUEST_TYPE = 'INITIATE_CLOSEOUT'
1688      AND docs.DOCUMENT_ID IN (SELECT *
1689                                 FROM TABLE (p_selected_docs));
1690 
1691   l_progress := 50;
1692   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_ids ' || l_doc_ids);
1693   IF l_doc_ids IS NULL THEN
1694      x_result_type := c_result_type_SUCCESS;
1695   ELSE
1696      x_result_type := c_result_type_FAILURE;
1697      l_query := 'SELECT listagg(clm_document_number,'','') within GROUP (ORDER BY clm_document_number)
1698                    FROM po_headers_all
1699                   WHERE po_header_id IN (' || l_doc_ids || ')';
1700      EXECUTE IMMEDIATE l_query INTO x_failed_docs;
1701   END IF;
1702 
1703   l_progress := 100;
1704   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
1705   EXCEPTION
1706     WHEN OTHERS THEN
1707 
1708       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'mass_closeout_validate_set : when others exception at '
1709                        || l_progress || ';' || SQLERRM );
1710       x_result_type := c_result_type_FAILURE;
1711 END mass_closeout_validate_set;
1712 
1713 --------------------------------------------------------------------------------
1714   --Start of Comments
1715 
1716   --Name: validate_mass_closeout
1717 
1718   --Function:
1719   --  Validate the Mass Closeout action
1720 
1721   --Parameters:
1722 
1723   --IN:
1724   --  p_req_id            NUMBER
1725   --  p_chk_list_req      VARCHAR2
1726 
1727   --OUT:
1728   --  errbuf              VARCHAR2
1729   --  retcode             VARCHAR2
1730 
1731   --End of Comments
1732 --------------------------------------------------------------------------------
1733 PROCEDURE validate_mass_closeout (
1734   errbuf            OUT NOCOPY VARCHAR2
1735 , retcode           OUT NOCOPY VARCHAR2
1736 , p_req_id          IN         NUMBER
1737 , p_chk_list_req    IN         VARCHAR2
1738 ) IS
1739   l_progress           NUMBER := 0;
1740   l_result             VARCHAR2(50);
1741   l_tasklist_result    VARCHAR2(50);
1742   l_open_mod_fail_type VARCHAR2(20);
1743   l_document_rec       OKC_IMP_RECORD_TYPES.document_rec_type;
1744   l_contr_type         VARCHAR2(50);
1745   l_type_lookup_code   VARCHAR2(50);
1746   x_msg_data           VARCHAR2(1000);
1747   x_msg_count          NUMBER;
1748   x_return_status      VARCHAR2(20);
1749   x_qa_return_status   VARCHAR2(20);
1750   x_qa_result_tbl      OKC_TERMS_QA_PVT.qa_result_tbl_type;
1751   l_clm_doc_num        VARCHAR2(100);
1752   l_document_id_tbl    PO_TBL_NUMBER;
1753   l_document_num_tbl   PO_TBL_VARCHAR100;
1754   l_mod_doc_id_tbl     PO_TBL_NUMBER;
1755   l_doc_id             NUMBER;
1756   l_excep_type         VARCHAR2(50);
1757   l_result_type        VARCHAR2(100);
1758   l_fail_count         NUMBER := 0;
1759   l_warn_count         NUMBER := 0;
1760   l_validation_status  VARCHAR2(20);
1761   l_module_status      VARCHAR2(20);
1762   l_ref_col1           VARCHAR2(100);
1763   l_ref_col2           VARCHAR2(100);
1764   l_ref_col3           VARCHAR2(100);
1765   l_ref_col4           VARCHAR2(100);
1766   l_ref_col5           VARCHAR2(100);
1767 
1768   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'validate_mass_closeout';
1769 
1770 BEGIN
1771   IF (PO_LOG.d_proc) THEN
1772     PO_LOG.proc_begin(d_module);
1773   END IF;
1774 
1775   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_req_id '        || p_req_id);
1776   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_chk_list_req '  || p_chk_list_req);
1777   fnd_file.put_line(FND_FILE.LOG,'Current Concurrent Request Id :  '||FND_GLOBAL.CONC_REQUEST_ID);
1778   fnd_file.put_line(FND_FILE.LOG,'Parameters  ');
1779   fnd_file.put_line(FND_FILE.LOG,'Closeout RequestSet Id: ' || p_req_id);
1780   fnd_file.put_line(FND_FILE.LOG,'Checklist Required:  ' || p_chk_list_req);
1781   fnd_file.put_line(FND_FILE.LOG,'--------------------------------------------------------------');
1782 
1783   DELETE
1784     FROM  po_multi_mod_val_results
1785     WHERE multi_mod_request_id = p_req_id;
1786 
1787   l_progress := 5;
1788   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Num of Records deleted from po_multi_mod_val_results:' || SQL%ROWCOUNT);
1789   fnd_file.put_line(FND_FILE.LOG,'Existing validation records have been cleared');
1790 
1791   IF p_chk_list_req = 'Y' THEN
1792      l_open_mod_fail_type := 'WARNING';
1793   ELSE
1794      l_open_mod_fail_type := 'ERROR';
1795   END IF;
1796 
1797   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_open_mod_fail_type:' || l_open_mod_fail_type);
1798 
1799   l_progress := 10;
1800 
1801   IF p_chk_list_req = 'Y' THEN
1802 
1803     SELECT reference_doc_id,null,null
1804       BULK COLLECT INTO l_document_id_tbl,l_document_num_tbl, l_mod_doc_id_tbl
1805       FROM po_closeout_details
1806       WHERE closeout_doc_type = 'MASS'
1807       AND reference_doc_id = p_req_id
1808       AND NOT EXISTS (SELECT 'Tasks not available'
1809     			FROM okc_rep_contract_usages orcu, okc_deliverables del
1810    		       WHERE orcu.business_document_type  = 'PO_CLOSEOUT_SET'
1811      			 AND orcu.business_document_id = p_req_id
1812      			 AND del.business_document_type = orcu.contract_type
1813      			 AND del.business_document_id = orcu.contract_id
1814      			 AND del.business_document_version = -99
1815      );
1816 
1817     l_progress := 15;
1818 
1819     IF l_document_num_tbl.Count() > 0 THEN
1820       FOR i IN  1..l_document_num_tbl.Count() LOOP
1821          PO_CLOSEOUT_PVT.store_validations(p_doc_id           => l_document_id_tbl(i)
1822       			                 , p_doc_num          => l_document_num_tbl(i)
1823                                          , p_mod_doc_id       => l_mod_doc_id_tbl(i)
1824 			                 , p_req_id           => p_req_id
1825 			                 , p_validation_type  => 'CHECKLIST'
1826                                          , p_exception_type   => c_result_type_FAILURE
1827                                          , p_message_app      => 'PO'
1828 			                 , p_message_name     => 'CHKLIST_TASK_NOT_AVAILABLE');
1829          l_fail_count := l_fail_count + 1;
1830          l_module_status := 'with errors';
1831       END LOOP;
1832     END IF;
1833     fnd_file.put_line(FND_FILE.LOG,'Checklist tasks validation is completed ' || l_module_status);
1834 
1835     IF l_fail_count = 0 THEN
1836 
1837       l_progress := 20;
1838 
1839       l_document_rec.business_document_type := 'PO_CLOSEOUT_SET';
1840       l_document_rec.business_document_id := p_req_id;
1841 
1842       OKC_REP_CLOSEOUT_PVT.validate_closeout_tasks(
1843                                p_api_version        => 1.0,
1844                                p_init_msg_list      => fnd_api.g_false,
1845                                p_commit             => fnd_api.g_true,
1846                                p_document_rec       => l_document_rec,
1847                                x_msg_data           => x_msg_data,
1848                                x_msg_count          => x_msg_count,
1849                                x_return_status      => x_return_status,
1850                                x_qa_return_status   => x_qa_return_status,
1851                                x_qa_result_tbl      => x_qa_result_tbl);
1852       l_progress := 30;
1853 
1854       l_module_status := '';
1855       IF  x_qa_result_tbl.Count() > 0 THEN
1856       FOR i IN x_qa_result_tbl.FIRST .. x_qa_result_tbl.LAST
1857       LOOP
1858          IF (x_qa_result_tbl(i).error_severity_name = OKC_REP_CLOSEOUT_PVT.G_QA_STS_WARNING) THEN
1859 	          l_excep_type := c_result_type_WARNING;
1860             l_warn_count := l_warn_count + 1;
1861             SELECT Decode(l_module_status, 'with errors',
1862                                            'with errors',
1863                                            'with warnings')
1864               INTO l_module_status
1865               FROM dual;
1866 	       ELSE
1867 	          l_excep_type := c_result_type_FAILURE;
1868             l_fail_count := l_fail_count + 1;
1869             l_module_status := 'with errors';
1870          END IF;
1871          l_progress := 32;
1872          begin
1873 	 SELECT clm_document_number
1874            INTO l_clm_doc_num
1875            FROM po_headers_all
1876           WHERE po_header_id = x_qa_result_tbl(i).Document_id;
1877 	 EXCEPTION
1878          WHEN No_Data_Found THEN
1879               l_clm_doc_num := '';
1880          END;
1881 
1882          l_ref_col1 := x_qa_result_tbl(i).Reference_Column1;
1883 	 l_ref_col2 := x_qa_result_tbl(i).Reference_Column2;
1884 	 l_ref_col3 := x_qa_result_tbl(i).Reference_Column3;
1885 	 l_ref_col4 := x_qa_result_tbl(i).Reference_Column4;
1886 	 l_ref_col5 := x_qa_result_tbl(i).Reference_Column5;
1887 	 PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'header id from x_qa_result_tbl:  ' || x_qa_result_tbl(i).Document_id);
1888          PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'clm doc number for above header: ' || l_clm_doc_num);
1889          PO_CLOSEOUT_PVT.store_validations(p_doc_id           => x_qa_result_tbl(i).Document_id
1890 	  			         , p_doc_num          => l_clm_doc_num
1891                                          , p_mod_doc_id       => NULL
1892 	  			         , p_req_id           => p_req_id
1893 	  			         , p_validation_type  => 'CONTRACT'
1894 	                                 , p_exception_type   => l_excep_type
1895 	                                 , p_message_app      => 'OKC'
1896 			                 , p_message_name     => x_qa_result_tbl(i).message_name
1897 					 , p_token_name1      => substr(l_ref_col1,1,INSTR(l_ref_col1,'~')-1)
1898 					 , p_token_value1     => substr(l_ref_col1,INSTR(l_ref_col1,'~')+1,LENGTH(l_ref_col1))
1899 					 , p_token_name2      => substr(l_ref_col2,1,INSTR(l_ref_col2,'~')-1)
1900 					 , p_token_value2     => substr(l_ref_col2,INSTR(l_ref_col2,'~')+1,LENGTH(l_ref_col2))
1901 					 , p_token_name3      => substr(l_ref_col3,1,INSTR(l_ref_col3,'~')-1)
1902 					 , p_token_value3     => substr(l_ref_col3,INSTR(l_ref_col3,'~')+1,LENGTH(l_ref_col3))
1903 					 , p_token_name4      => substr(l_ref_col4,1,INSTR(l_ref_col4,'~')-1)
1904 					 , p_token_value4     => substr(l_ref_col4,INSTR(l_ref_col4,'~')+1,LENGTH(l_ref_col4))
1905 					 , p_token_name5      => substr(l_ref_col5,1,INSTR(l_ref_col5,'~')-1)
1906 					 , p_token_value5     => substr(l_ref_col5,INSTR(l_ref_col5,'~')+1,LENGTH(l_ref_col5)));
1907 
1908       END LOOP;
1909       END IF;
1910 
1911       l_progress := 35;
1912 
1913      END IF;
1914   END IF;
1915   fnd_file.put_line(FND_FILE.LOG,'Contract Deliverables validation is completed  ' || l_module_status);
1916   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Contract Deliverables validation is completed  ' || l_module_status);
1917 
1918 
1919   l_document_id_tbl  := NEW po_tbl_number();
1920   l_document_num_tbl := NEW po_tbl_varchar100();
1921   l_mod_doc_id_tbl   := NEW po_tbl_number();
1922 
1923   SELECT pha.po_header_id,pha.clm_document_number, pmmd.multi_mod_doc_id
1924     BULK COLLECT INTO l_document_id_tbl,l_document_num_tbl,l_mod_doc_id_tbl
1925     FROM po_multi_mod_docs pmmd,
1926          po_headers_all pha
1927    WHERE pmmd.multi_mod_request_id = p_req_id
1928      AND pmmd.document_id = pha.po_header_id
1929      AND EXISTS (SELECT 'Open Mod Exists'
1930                    FROM po_drafts dft
1931                   WHERE dft.document_id = pmmd.document_id
1932                     AND dft.status IN ('DRAFT', 'IN PROCESS', 'REJECTED', 'SUPPLIER SIGN', 'PRE-APPROVED')
1933                     AND dft.draft_type= 'MOD');
1934 
1935   l_progress := 40;
1936 
1937   l_module_status := '';
1938   IF l_document_num_tbl.Count() >0 THEN
1939   FOR i IN  1..l_document_num_tbl.Count() LOOP
1940          PO_CLOSEOUT_PVT.store_validations(p_doc_id           => l_document_id_tbl(i)
1941   			                 , p_doc_num          => l_document_num_tbl(i)
1942                                          , p_mod_doc_id       => l_mod_doc_id_tbl(i)
1943   			                 , p_req_id           => p_req_id
1944   			                 , p_validation_type  => 'MODIFICATION'
1945                                          , p_exception_type   => l_open_mod_fail_type
1946                                          , p_message_app      => 'PO'
1947   			                 , p_message_name     => 'MANAGE_CLOSEOUT_OPEN_MOD');
1948          IF p_chk_list_req = 'Y' THEN
1949             l_warn_count := l_warn_count + 1;
1950             l_module_status := 'with warnings';
1951          ELSE
1952             l_fail_count := l_fail_count + 1;
1953             l_module_status := 'with errors';
1954          END IF;
1955   END LOOP;
1956   END IF;
1957 
1958   fnd_file.put_line(FND_FILE.LOG,'Open modifications validation is completed ' || l_module_status);
1959   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Open modifications validation is completed ' || l_module_status);
1960   l_progress := 45;
1961 
1962   l_document_id_tbl  := NEW po_tbl_number();
1963   l_document_num_tbl := NEW po_tbl_varchar100();
1964   l_mod_doc_id_tbl   := NEW po_tbl_number();
1965 
1966   SELECT DISTINCT pha.po_header_id,pha.clm_document_number,pmmd.multi_mod_doc_id
1967     BULK COLLECT INTO l_document_id_tbl,l_document_num_tbl,l_mod_doc_id_tbl
1968     FROM po_multi_mod_docs pmmd,
1969          po_headers_all pha
1970    WHERE pmmd.multi_mod_request_id = p_req_id
1971      AND pmmd.document_id = pha.po_header_id
1972      AND pha.type_lookup_code = 'STANDARD'
1973      AND EXISTS ( SELECT 1
1974                     FROM po_line_locations_all poll
1975                    WHERE pha.po_header_id = poll.po_header_id
1976                      AND Nvl(poll.closed_code,'OPEN') = 'OPEN'
1977                      AND Nvl(poll.cancel_flag, 'N') = 'N');
1978 
1979   l_progress := 55;
1980 
1981   l_module_status := '';
1982   IF l_document_num_tbl.Count() >0 THEN
1983   FOR i IN  1..l_document_num_tbl.Count() LOOP
1984          PO_CLOSEOUT_PVT.store_validations(p_doc_id           => l_document_id_tbl(i)
1985     			                 , p_doc_num          => l_document_num_tbl(i)
1986                                          , p_mod_doc_id       => l_mod_doc_id_tbl(i)
1987     			                 , p_req_id           => p_req_id
1988     			                 , p_validation_type  => 'RECEIPTS'
1989                                          , p_exception_type   => c_result_type_WARNING
1990                                          , p_message_app      => 'PO'
1991     			                 , p_message_name     => 'MANAGE_CLOSEOUT_FULLY_RECEIVED');
1992          l_warn_count := l_warn_count + 1;
1993          l_module_status := 'with warnings';
1994   END LOOP;
1995   END IF;
1996 
1997   fnd_file.put_line(FND_FILE.LOG,'Fully received validation is completed ' || l_module_status);
1998   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Fully received validation is completed ' || l_module_status);
1999 
2000   l_progress := 60;
2001 
2002   l_document_id_tbl  := NEW po_tbl_number();
2003   l_document_num_tbl := NEW po_tbl_varchar100();
2004   l_mod_doc_id_tbl   := NEW po_tbl_number();
2005 
2006   SELECT DISTINCT pha.po_header_id,pha.clm_document_number,pmmd.multi_mod_doc_id
2007     BULK COLLECT INTO l_document_id_tbl,l_document_num_tbl,l_mod_doc_id_tbl
2008     FROM po_multi_mod_docs pmmd,
2009          po_headers_all pha
2010    WHERE pmmd.multi_mod_request_id = p_req_id
2011      AND pmmd.document_id = pha.po_header_id
2012      AND pha.type_lookup_code = 'STANDARD'
2013      AND EXISTS (SELECT 1
2014                    FROM po_line_locations_all poll
2015                   WHERE pha.po_header_id = poll.po_header_id
2016                     AND nvl(poll.closed_code,'OPEN') IN  ('OPEN','CLOSED FOR RECEIVING',' CLOSED FOR INVOICE')
2017                 );
2018 
2019   l_progress := 70;
2020 
2021   l_module_status := '';
2022   IF l_document_num_tbl.Count() >0 THEN
2023   FOR i IN  1..l_document_num_tbl.Count() LOOP
2024          PO_CLOSEOUT_PVT.store_validations(p_doc_id           => l_document_id_tbl(i)
2025       			                 , p_doc_num          => l_document_num_tbl(i)
2026                                          , p_mod_doc_id       => l_mod_doc_id_tbl(i)
2027       			                 , p_req_id           => p_req_id
2028       			                 , p_validation_type  => 'INVOICE'
2029                                          , p_exception_type   => c_result_type_WARNING
2030                                          , p_message_app      => 'PO'
2031       			                 , p_message_name     => 'MANAGE_CLOSEOUT_FULLY_INVOICED');
2032          l_warn_count := l_warn_count + 1;
2033          l_module_status := 'with warnings';
2034   END LOOP;
2035   END IF;
2036 
2037   fnd_file.put_line(FND_FILE.LOG,'Fully invoiced validation is completed ' || l_module_status);
2038   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Fully invoiced validation is completed ' || l_module_status);
2039   l_progress := 80;
2040 
2041   l_document_id_tbl  := NEW po_tbl_number();
2042   l_document_num_tbl := NEW po_tbl_varchar100();
2043   l_mod_doc_id_tbl   := NEW po_tbl_number();
2044 
2045   l_module_status := '';
2046   SELECT DISTINCT pha.po_header_id,pha.clm_document_number,pmmd.multi_mod_doc_id
2047       BULK COLLECT INTO l_document_id_tbl,l_document_num_tbl,l_mod_doc_id_tbl
2048       FROM po_headers_all pha,
2049            po_multi_mod_docs pmmd
2050       WHERE pmmd.multi_mod_request_id = p_req_id
2051         AND pmmd.document_id = pha.po_header_id
2052 	AND pha.type_lookup_code = 'STANDARD'
2053          AND NOT EXISTS (SELECT 1
2054                            FROM ap_invoice_distributions_all aid,
2055                                 ap_invoices_all aia,
2056                                 po_distributions_all pod,
2057                                 po_line_locations_all poll
2058                           WHERE aid.po_distribution_id = pod.po_distribution_id
2059                             AND aia.invoice_id = aid.invoice_id
2060                             AND pod.po_header_id = poll.po_header_id
2061                             AND pha.po_header_id = poll.po_header_id);
2062 
2063   IF l_document_num_tbl.Count() >0 THEN
2064   FOR i IN  1..l_document_num_tbl.Count() LOOP
2065         PO_CLOSEOUT_PVT.store_validations(p_doc_id           => l_document_id_tbl(i)
2066         			        , p_doc_num          => l_document_num_tbl(i)
2067                                         , p_mod_doc_id       => l_mod_doc_id_tbl(i)
2068         			        , p_req_id           => p_req_id
2069         			        , p_validation_type  => 'PAYMENT'
2070                                         , p_exception_type   => c_result_type_WARNING
2071                                         , p_message_app      => 'PO'
2072         			        , p_message_name     => 'MANAGE_CLOSEOUT_FULLY_PAID');
2073          l_warn_count := l_warn_count + 1;
2074          l_module_status := 'with warnings';
2075   END LOOP;
2076   END IF;
2077 
2078   l_progress := 85;
2079 
2080   l_document_id_tbl  := NEW po_tbl_number();
2081   l_document_num_tbl := NEW po_tbl_varchar100();
2082   l_mod_doc_id_tbl   := NEW po_tbl_number();
2083 
2084   SELECT DISTINCT pha.po_header_id,pha.clm_document_number,pmmd.multi_mod_doc_id
2085     BULK COLLECT INTO l_document_id_tbl,l_document_num_tbl,l_mod_doc_id_tbl
2086     FROM po_headers_all pha,
2087          po_multi_mod_docs pmmd
2088     WHERE pmmd.multi_mod_request_id = p_req_id
2089       AND pmmd.document_id = pha.po_header_id
2090       AND pha.type_lookup_code = 'STANDARD'
2091        AND EXISTS (SELECT 1
2092                      FROM ap_invoice_distributions_all aid,
2093                           ap_invoices_all aia,
2094                           po_distributions_all pod,
2095                           po_line_locations_all poll
2096                     WHERE aid.po_distribution_id = pod.po_distribution_id
2097                       AND aia.invoice_id = aid.invoice_id
2098                       AND pod.po_header_id = poll.po_header_id
2099                       AND pha.po_header_id = poll.po_header_id
2100                       AND nvl(poll.closed_code,'OPEN') <> 'CLOSED FOR INVOICE'
2101                       AND aia.payment_status_flag <> 'Y');
2102 
2103   l_progress := 90;
2104 
2105   IF l_document_num_tbl.Count() >0 THEN
2106   FOR i IN  1..l_document_num_tbl.Count() LOOP
2107      PO_CLOSEOUT_PVT.store_validations(p_doc_id           => l_document_id_tbl(i)
2108                                      , p_doc_num          => l_document_num_tbl(i)
2109                                      , p_mod_doc_id       => l_mod_doc_id_tbl(i)
2110           			     , p_req_id           => p_req_id
2111           			     , p_validation_type  => 'FULLY_PAID'
2112                                      , p_exception_type   => c_result_type_WARNING
2113                                      , p_message_app      => 'PO'
2114           			     , p_message_name     => 'MANAGE_CLOSEOUT_FULLY_PAID');
2115          l_warn_count := l_warn_count + 1;
2116          l_module_status := 'with warnings';
2117   END LOOP;
2118   END IF;
2119   fnd_file.put_line(FND_FILE.LOG,'Fully paid validation is completed ' || l_module_status);
2120   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Fully paid validation is completed ' || l_module_status);
2121 
2122   IF l_fail_count > 0 THEN
2123     l_validation_status := c_result_type_FAILURE;
2124   ELSIF l_warn_count > 0 THEN
2125     l_validation_status := c_result_type_WARNING;
2126   ELSE
2127     l_validation_status := c_result_type_SUCCESS;
2128   END IF;
2129 
2130   l_progress := 95;
2131   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_validation_status ' || l_validation_status);
2132   fnd_file.put_line(FND_FILE.LOG,'Validation Status : ' || l_validation_status);
2133 
2134   UPDATE po_multi_mod_requests
2135      SET VALIDATION_STATUS = l_validation_status
2136    WHERE MULTI_MOD_REQUEST_ID = p_req_id;
2137 
2138   l_progress := 100;
2139 
2140   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
2141 
2142   EXCEPTION
2143     WHEN OTHERS THEN
2144       errbuf := sqlerrm;
2145       retcode := '2';
2146       fnd_file.put_line(FND_FILE.LOG, 'Unexpected error occurred during this process');
2147       fnd_file.put_line(FND_FILE.LOG, SQLERRM);
2148       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'validate_manage_closeout : when others exception at '
2149                        || l_progress || ';' || SQLERRM );
2150 
2151 END validate_mass_closeout;
2152 
2153 --------------------------------------------------------------------------------
2154   --Start of Comments
2155 
2156   --Name: eligible_docs_for_closeout
2157 
2158   --Function:
2159   --  Retrieve the eligible documents for closeout
2160 
2161   --Parameters:
2162 
2163   --OUT:
2164   --  errbuf              VARCHAR2
2165   --  retcode             VARCHAR2
2166 
2167   --End of Comments
2168 --------------------------------------------------------------------------------
2169 
2170 PROCEDURE eligible_docs_for_closeout (
2171   errbuf            OUT NOCOPY VARCHAR2
2172 , retcode           OUT NOCOPY VARCHAR2
2173 )
2174 AS
2175   l_progress           NUMBER := 0;
2176   l_admin_id           NUMBER;
2177   l_doc_num_tbl        PO_TBL_VARCHAR100;
2178   l_comments_tbl       PO_TBL_VARCHAR240;
2179   l_doc_type_tbl       PO_TBL_VARCHAR25;
2180   l_doc_status_tbl     PO_TBL_VARCHAR25;
2181   l_supplier_tbl       PO_TBL_VARCHAR240;
2182   l_tot_amt_tbl        PO_TBL_NUMBER;
2183   l_doc_curr_tbl       PO_TBL_VARCHAR15;
2184   l_messages           VARCHAR2(4000);
2185   p_orig_system        VARCHAR2(100);
2186   l_username           VARCHAR2(240);
2187   l_user_display_name  VARCHAR2(50);
2188   l_notification_id    NUMBER;
2189   l_document           CLOB;
2190 
2191 
2192   CURSOR clmAwardAdmins IS
2193   SELECT DISTINCT clm_award_administrator
2194     FROM po_headers ph,
2195          po_doc_style_headers pdsh
2196    WHERE clm_award_administrator IS NOT NULL
2197      AND authorization_status = 'APPROVED'
2198      AND Nvl(clm_closeout_status, 'OPEN') = 'OPEN'
2199      AND ph.style_id = pdsh.style_id
2200      AND pdsh.clm_flag = 'Y';
2201 
2202   /*CURSOR eligibleDocs (p_admin NUMBER) IS
2203   SELECT clm_document_number
2204     FROM po_headers
2205    WHERE clm_award_administrator = p_admin; */
2206 
2207   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'eligible_docs_for_closeout';
2208 
2209 BEGIN
2210   IF (PO_LOG.d_proc) THEN
2211     PO_LOG.proc_begin(d_module);
2212   END IF;
2213 
2214   fnd_file.put_line(FND_FILE.LOG,'Current Concurrent Request Id :  '||FND_GLOBAL.CONC_REQUEST_ID);
2215   p_orig_system:= 'PER';
2216   OPEN clmAwardAdmins;
2217   LOOP
2218      FETCH clmAwardAdmins INTO l_admin_id;
2219      EXIT WHEN clmAwardAdmins%NOTFOUND;
2220 
2221      l_doc_num_tbl := NEW po_tbl_varchar100();
2222      l_comments_tbl := NEW PO_TBL_VARCHAR240();
2223      l_doc_type_tbl := NEW PO_TBL_VARCHAR25();
2224      l_doc_status_tbl := NEW PO_TBL_VARCHAR25();
2225      l_supplier_tbl := NEW PO_TBL_VARCHAR240();
2226      l_tot_amt_tbl := NEW PO_TBL_NUMBER();
2227      l_doc_curr_tbl := NEW PO_TBL_VARCHAR15();
2228 
2229      l_messages := ' ';
2230      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'processing started for admin ' || l_admin_id);
2231      WF_DIRECTORY.GetUserName(p_orig_system, l_admin_id, l_username, l_user_display_name);
2232      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_username ' || l_username);
2233      fnd_file.put_line(FND_FILE.LOG,'Filtering documents for administrator ' || l_user_display_name);
2234      SELECT clm_document_number, comments,doc_type,status,supplier,totAmt,currency_code
2235      BULK COLLECT INTO l_doc_num_tbl,l_comments_tbl,l_doc_type_tbl,
2236                        l_doc_status_tbl,l_supplier_tbl,l_tot_amt_tbl,
2237                        l_doc_curr_tbl
2238      FROM (SELECT clm_document_number, comments , plc1.DISPLAYED_FIELD doc_type,
2239              PLC2.DISPLAYED_FIELD  status, pv.vendor_name supplier,
2240              PO_DOCUMENT_TOTALS_PVT.getAmountOrdered('HEADER',po_header_id,'TRANSACTION',revision_num,-1) totAmt,
2241              currency_code
2242              FROM po_headers ph,
2243                   po_doc_style_headers pdsh,
2244                   po_lookup_codes plc1,
2245                   po_lookup_codes plc2,
2246                   po_vendors pv
2247             WHERE clm_award_administrator = l_admin_id
2248               AND authorization_status = 'APPROVED'
2249               AND Nvl(clm_closeout_status, 'OPEN') = 'OPEN'
2250               AND ph.style_id = pdsh.style_id
2251               AND pdsh.clm_flag = 'Y'
2252               AND plc1.lookup_code = ph.type_lookup_code
2253               AND plc1.lookup_type = 'PO TYPE'
2254               AND plc2.lookup_type = 'AUTHORIZATION STATUS'
2255               AND PLC2.lookup_code = ph.authorization_status
2256               AND pv.vendor_id = ph.vendor_id
2257               --Award should not contain any open shipments or line associated to the shipment is cancelled
2258 	      AND NOT EXISTS(SELECT 1
2259                                FROM po_line_locations_all pll,
2260                                     po_lines_all pl
2261                               WHERE pll.po_header_id = ph.po_header_id
2262                                 AND pll.po_line_id = pl.po_line_id
2263                                 AND (Nvl(pll.closed_code,'OPEN')  IN ('OPEN')
2264                                      OR pl.user_document_status IS NOT NULL)
2265                              )
2266               --Award should not contain any unexcersized open options
2267 	      AND NOT EXISTS(SELECT 1
2268                                FROM po_lines_all pl
2269                               WHERE pl.po_header_id = ph.po_header_id
2270                                 AND pl.clm_option_indicator = 'O'
2271                                 AND Nvl(pl.CLM_EXERCISED_FLAG,'N') = 'N'
2272                                 AND (SYSDATE BETWEEN pl.start_date AND pl.expiration_date
2273                                     OR user_document_status IS NULL)
2274                              )
2275               --Award should not any draft closeout details
2276 	      AND NOT EXISTS(SELECT 1
2277                               FROM po_closeout_details pcd
2278                               WHERE pcd.reference_doc_id = ph.po_header_id
2279                               AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL
2280                               AND Nvl(pcd.incloseout,'N') = 'Y'
2281                              )
2282              ORDER BY ph.last_update_date)
2283       WHERE ROWNUM<11;
2284 
2285       l_progress := 10;
2286 
2287       IF(l_doc_num_tbl.Count > 0) THEN
2288 
2289         --dbms_lob.createtemporary(l_document, true);
2290         --dbms_lob.open(l_document, dbms_lob.lob_readwrite);
2291         l_messages := l_messages || '<tr><td class="tableHeaderCell" align="left"> '|| fnd_message.get_string('PO','PO_CLSOUT_ELIGIBLE_NOTIF_BODY') ||
2292           '</td></tr><tr><td class="tableHeaderCell" align="left">';
2293 
2294         l_messages := l_messages ||'<TABLE width="100%" border="1" class="gridtable">';
2295         l_messages := l_messages ||'<TR><TH>' || fnd_message.get_string('PO','PO_MUB_MSG_DOC_NUM') || '</TH>';
2296         l_messages := l_messages ||'<TH>' || fnd_message.get_string('PO','PO_WF_NOTIF_DESCRIPTION') || '</TH>';
2297         l_messages := l_messages ||'<TH>' || fnd_message.get_string('PO','PO_MUB_MSG_DOC_TYPE') || '</TH>';
2298         l_messages := l_messages ||'<TH>' || fnd_message.get_string('PO','PO_SOURCING_STATUS') || '</TH>';
2299         l_messages := l_messages ||'<TH>' || fnd_message.get_string('PO','PO_ALL_SUPPLIER') || '</TH>';
2300         l_messages := l_messages ||'<TH>' || fnd_message.get_string('PO','PO_WF_NOTIF_AMOUNT') || '</TH>';
2301         l_messages := l_messages ||'<TH>' || fnd_message.get_string('PO','PO_CURRENCY_CODE') || '</TH></TR>';
2302         l_progress := 20;
2303         --DBMS_LOB.writeappend(l_document,Length(l_messages),l_messages);
2304         FOR i IN l_doc_num_tbl.FIRST .. l_doc_num_tbl.LAST
2305         LOOP
2306             l_messages := l_messages ||'<TR><TD>' || l_doc_num_tbl(i) || '</TD>';
2307             l_messages := l_messages ||'<TD>' || l_comments_tbl(i) || '</TD>';
2308             l_messages := l_messages ||'<TD>' || l_doc_type_tbl(i) || '</TD>';
2309             l_messages := l_messages ||'<TD>' || l_doc_status_tbl(i) || '</TD>';
2310             l_messages := l_messages ||'<TD>' || l_supplier_tbl(i) || '</TD>';
2311             l_messages := l_messages ||'<TD>' || l_tot_amt_tbl(i) || '</TD>';
2312             l_messages := l_messages ||'<TD>' || l_doc_curr_tbl(i) || '</TD></TR>';
2313              --l_messages := l_messages || '<li>' || l_document_num_tbl(i) || '</li>';
2314             --DBMS_LOB.writeappend(l_document,Length(l_messages),l_messages);
2315         END LOOP;
2316         l_progress := 25;
2317         l_messages := l_messages || '</TABLE>';
2318         PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_messages ' || l_messages);
2319         --l_progress := 26;
2320         --DBMS_LOB.writeappend(l_document,Length('/TABLE>'),'/TABLE>');
2321         l_progress := 26;
2322         l_notification_id := wf_notification.Send(ROLE => l_username,
2323                                   msg_type => 'POCLSOUT',
2324                                   msg_name => 'ELIGIBLE_DOCS_FOR_CLSOUT'
2325                                   );
2326 
2327         wf_notification.Setattrtext(nid => l_notification_id,
2328                                     aname =>'MESSAGE_SUBJECT',
2329                                     avalue => fnd_message.get_string('PO','PO_CLSOUT_ELIGIBLE_NOTIF_SUB') || ' <' || po_moac_utils_pvt.GET_OU_NAME(po_moac_utils_pvt.GET_CURRENT_ORG_ID) || '>');
2330 
2331         wf_notification.Setattrtext(nid => l_notification_id,
2332                                   aname    => 'CONTRACT_ADMIN_PAGE',
2333                                   avalue   => 'JSP:/OA_HTML/OA.jsp?OAFunc=PO_MULTI_MOD'||'&'||
2334                                   'poCallingModule=notification' || '&' ||
2335                                   'poCallingNotifId=-&#NID-' || '&' ||
2336                                   'retainAM=Y' || '&' ||
2337                                   'addBreadCrumb=Y'
2338                                  );
2339 
2340         l_progress := 27;
2341         wf_notification.Setattrtext(nid => l_notification_id,
2342                                     aname => 'MESSAGE_BODY',
2343                                     avalue => 'PLSQLCLOB:PO_CLOSEOUT_PVT.get_eligible_doc_notfn_body/'|| l_messages ||'#' );
2344         l_progress := 30;
2345   		      fnd_file.put_line(FND_FILE.LOG,'Notification initiated  for this administrator');
2346         --dbms_lob.close(l_document);
2347       ELSE
2348         PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'There are no valid documents to closeout for this administrator');
2349         fnd_file.put_line(FND_FILE.LOG,'There are no valid documents to closeout for this administrator');
2350       END IF;
2351 
2352   END LOOP;
2353   CLOSE clmAwardAdmins;
2354   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
2355   fnd_file.put_line(FND_FILE.LOG,'Process Completed');
2356   EXCEPTION
2357     WHEN OTHERS THEN
2358       errbuf := sqlerrm;
2359       retcode := '2';
2360       fnd_file.put_line(FND_FILE.LOG, 'Unexpected error occurred during this process');
2361       fnd_file.put_line(FND_FILE.LOG, SQLERRM);
2362       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'when others exception at '
2363                        || l_progress || ';' || SQLERRM );
2364 END eligible_docs_for_closeout;
2365 
2366 --------------------------------------------------------------------------------
2367   --Start of Comments
2368 
2369   --Name: get_eligible_doc_notfn_body
2370 
2371   --Function:
2372   --  Get the notification body for the eligible docs
2373 
2374   --Parameters:
2375 
2376   --IN:
2377     --messages   IN VARCHAR2,
2378     --display_type   IN VARCHAR2,
2379     --document       IN OUT NOCOPY CLOB,
2380     --document_type  IN OUT NOCOPY VARCHAR2
2381 
2382 
2383   -- OUT:
2384 
2385   --End of Comments
2386 --------------------------------------------------------------------------------
2387 PROCEDURE get_eligible_doc_notfn_body
2388 (
2389     messages   IN VARCHAR2,
2390     display_type   IN VARCHAR2,
2391     document       IN OUT NOCOPY CLOB,
2392     document_type  IN OUT NOCOPY VARCHAR2
2393 )
2394 IS
2395 
2396     l_msgbody              VARCHAR2(32000);
2397     l_progress             VARCHAR2(300);
2398 
2399     l_messages         VARCHAR2(32000);
2400     l_firstcolon           NUMBER;
2401     l_secondcolon          NUMBER;
2402 
2403     d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_eligible_doc_notfn_body';
2404     d_position NUMBER;
2405 
2406 
2407 BEGIN
2408 
2409   d_position := 0;
2410   IF (PO_LOG.d_proc) THEN
2411     PO_LOG.proc_begin(d_module);
2412   END IF;
2413 
2414   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_messages '         || messages);
2415   l_firstcolon := instr(messages, '#');
2416   l_secondcolon := instr(messages, '#', 1,2);
2417   l_messages := substr(messages, 1, l_firstcolon - 1);
2418 
2419  l_msgbody := '<html><style> .tableHeaderCell { font-family: Arial; font-size: 10pt;} .tableDataCell { font-family: Arial; font-size: 10pt; font-weight: bold; }
2420   table.gridtable{ font-family: arial; font-size: 10pt; color:#333333; border-width: 1px; border-color: #666666; border-collapse: collapse; }
2421   table.gridtable th{ border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede;}
2422 table.gridtable td{ border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff;}
2423   </style>
2424   <body class="tableHeaderCell"><table>';
2425   l_msgbody := l_msgbody || l_messages || '</td></tr><tr/><tr><td class="tableHeaderCell" align="left">'||fnd_message.get_string('PO','PO_CLSOUT_NOTIF_CHOOSE_ACTION')||'</td></tr></table></body></html>';
2426 
2427   WF_NOTIFICATION.WriteToClob(document, l_msgbody);
2428 
2429   l_progress := 4;
2430 
2431   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
2432 
2433 EXCEPTION
2434   WHEN OTHERS THEN
2435     WF_CORE.context('PO_CLOSEOUT_PVT','get_eligible_doc_notfn_body',l_progress);
2436     RAISE;
2437 
2438 END get_eligible_doc_notfn_body;
2439 
2440 --------------------------------------------------------------------------------
2441   --Start of Comments
2442 
2443   --Name: store_validations
2444 
2445   --Function:
2446   --  Inserts the validation record into po_multi_mod_val_results
2447 
2448   --Parameters:
2449 
2450   --IN:
2451   --  p_doc_id            NUMBER
2452   --  p_doc_num           VARCHAR2
2453   --  p_mod_doc_id        NUMBER
2454   --  p_req_id            VARCHAR2
2455   --  p_exception_type    VARCHAR2
2456   --  p_message_app       VARCHAR2
2457   --  p_message_name      VARCHAR2
2458   --  p_validation_type   VARCHAR2
2459   --  p_token_name1       VARCHAR2
2460   --  p_token_value1      VARCHAR2
2461   --  p_token_name2       VARCHAR2
2462   --  p_token_value2      VARCHAR2
2463   --  p_token_name3       VARCHAR2
2464   --  p_token_value3      VARCHAR2
2465   --  p_token_name4       VARCHAR2
2466   --  p_token_value4      VARCHAR2
2467   --  p_token_name5       VARCHAR2
2468   --  p_token_value5      VARCHAR2
2469 
2470   --End of Comments
2471 --------------------------------------------------------------------------------
2472 PROCEDURE store_validations (
2473   p_doc_id          IN     NUMBER
2474 , p_doc_num         IN     VARCHAR2
2475 , p_mod_doc_id      IN     NUMBER
2476 , p_req_id          IN     NUMBER
2477 , p_exception_type  IN     VARCHAR2
2478 , p_message_app     IN     VARCHAR2
2479 , p_message_name    IN     VARCHAR2
2480 , p_validation_type IN     VARCHAR2
2481 , p_token_name1     IN     VARCHAR2 DEFAULT NULL
2482 , p_token_value1    IN     VARCHAR2 DEFAULT NULL
2483 , p_token_name2     IN     VARCHAR2 DEFAULT NULL
2484 , p_token_value2    IN     VARCHAR2 DEFAULT NULL
2485 , p_token_name3     IN     VARCHAR2 DEFAULT NULL
2486 , p_token_value3    IN     VARCHAR2 DEFAULT NULL
2487 , p_token_name4     IN     VARCHAR2 DEFAULT NULL
2488 , p_token_value4    IN     VARCHAR2 DEFAULT NULL
2489 , p_token_name5     IN     VARCHAR2 DEFAULT NULL
2490 , p_token_value5    IN     VARCHAR2 DEFAULT NULL
2491 )
2492 IS
2493 
2494   d_module            CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'check_exceptions';
2495   l_progress          NUMBER := 0;
2496 
2497 BEGIN
2498   INSERT INTO po_multi_mod_val_results
2499              ( MULTI_MOD_VAL_RESULT_ID
2500               ,MULTI_MOD_REQUEST_ID
2501               ,MULTI_MOD_DOC_ID
2502               ,VALIDATION_TYPE
2503               ,EXCEPTION_TYPE
2504               ,RESULT_TYPE
2505               ,DOCUMENT_ID
2506               ,DOCUMENT_NUMBER
2507               ,RELATED_DOCUMENT_ID
2508               ,RELATED_DOCUMENT_NUMBER
2509               ,RELATED_DOCUMENT_DATE
2510               ,RELATED_DOCUMENT_AMOUNT
2511               ,MESSAGE_APPLICATION
2512               ,MESSAGE_NAME
2513               ,TOKEN1_NAME
2514               ,TOKEN1_VALUE
2515               ,TOKEN2_NAME
2516               ,TOKEN2_VALUE
2517               ,TOKEN3_NAME
2518               ,TOKEN3_VALUE
2519               ,TOKEN4_NAME
2520               ,TOKEN4_VALUE
2521               ,TOKEN5_NAME
2522               ,TOKEN5_VALUE
2523               ,TOKEN6_NAME
2524               ,TOKEN6_VALUE
2525               ,LAST_UPDATE_DATE
2526               ,LAST_UPDATED_BY
2527               ,LAST_UPDATE_LOGIN
2528               ,CREATION_DATE
2529               ,CREATED_BY
2530               ,REQUEST_ID
2531           )
2532           VALUES
2533               ( po_multi_mod_val_results_s.nextval
2534               , p_req_id
2535               , p_mod_doc_id
2536               , p_validation_type
2537               , p_exception_type
2538               , null
2539               , p_doc_id
2540               , p_doc_num
2541               , null
2542               , null
2543               , null
2544               , null
2545               , p_message_app
2546               , p_message_name
2547               , p_token_name1
2548               , p_token_value1
2549               , p_token_name2
2550               , p_token_value2
2551               , p_token_name3
2552               , p_token_value3
2553               , p_token_name4
2554               , p_token_value4
2555               , p_token_name5
2556               , p_token_value5
2557               , null
2558               , null
2559               , sysdate
2560               , fnd_global.user_id
2561               , fnd_global.login_id
2562               , sysdate
2563               , fnd_global.user_id
2564               , fnd_global.conc_request_id
2565             );
2566 
2567 END store_validations;
2568 
2569 --------------------------------------------------------------------------------
2570   --Start of Comments
2571 
2572   --Name: delete_contract
2573 
2574   --Function:
2575   -- Deletes the contract if exist
2576 
2577   --Parameters:
2578 
2579   --IN:
2580   --  p_doc_id            NUMBER
2581   --  p_closeout_type     VARCHAR2
2582 
2583   --OUT:
2584   --  x_return_status     VARCHAR2
2585   --  x_return_msg        VARCHAR2
2586 
2587   --End of Comments
2588 --------------------------------------------------------------------------------
2589 procedure delete_contract (
2590   p_doc_id          IN         NUMBER
2591 , p_closeout_type   IN         VARCHAR
2592 , x_return_status   OUT NOCOPY VARCHAR2
2593 , x_return_msg      OUT NOCOPY VARCHAR2
2594 )
2595 IS
2596   l_progress         NUMBER := 0;
2597   l_document_rec     OKC_IMP_RECORD_TYPES.document_rec_type;
2598   l_contract_type    VARCHAR2(50);
2599   l_contract_id      NUMBER;
2600   l_contract_ver     NUMBER;
2601   l_msg_count        NUMBER;
2602   l_po_doc_type      VARCHAR2(50);
2603   l_doc_num          VARCHAR2(60);
2604 
2605   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'delete_contract';
2606 
2607 BEGIN
2608   IF (PO_LOG.d_proc) THEN
2609     PO_LOG.proc_begin(d_module);
2610   END IF;
2611 
2612   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_doc_id '         || p_doc_id);
2613   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'p_closeout_type '  || p_closeout_type);
2614 
2615   PO_CLOSEOUT_PVT.check_contract_exists(p_doc_id  => p_doc_id,
2616                           p_closeout_type         => p_closeout_type,
2617                           x_contract_type         => l_contract_type,
2618                           x_contract_id           => l_contract_id,
2619                           x_contract_ver          => l_contract_ver,
2620                           x_return_msg            => x_return_msg,
2621                           x_return_status         => x_return_status);
2622 
2623   l_progress := 20;
2624 
2625   IF l_contract_id IS NOT NULL THEN
2626      PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Contract exists ');
2627      IF g_CLOSEOUT_TYPE_INDIVIDUAL = p_closeout_type THEN
2628        SELECT type_lookup_code, clm_document_number
2629          INTO l_po_doc_type, l_doc_num
2630          FROM PO_HEADERS_ALL
2631         WHERE po_header_id = p_doc_id;
2632 
2633        l_progress := 30;
2634        PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_po_doc_type ' || l_po_doc_type);
2635        PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_num '     || l_doc_num);
2636 
2637        IF l_po_doc_type = 'STANDARD' THEN
2638           l_contract_type := 'PO_STANDARD';
2639        ELSIF l_po_doc_type = 'BLANKET' THEN
2640           l_contract_type := 'PA_BLANKET';
2641        ELSE
2642           l_contract_type := 'PA_CONTRACT';
2643        END IF;
2644        l_document_rec.document_number := l_doc_num;
2645      ELSE
2646        l_contract_type := 'PO_CLOSEOUT_SET';
2647      END IF;
2648 
2649      l_progress := 40;
2650      l_document_rec.business_document_type := l_contract_type;
2651      l_document_rec.business_document_id := p_doc_id;
2652      l_document_rec.source_code := 'INTERNAL';
2653      l_document_rec.relationship_id := 10006;
2654      l_document_rec.display_in_contract := 'N';
2655 
2656      okc_rep_closeout_pvt.delete_contract(p_api_version     => 1.0,
2657                           p_document_rec          => l_document_rec,
2658                           p_contract_type         => l_contract_type,
2659                           p_contract_id           => l_contract_id,
2660                           p_commit                => fnd_api.g_true,
2661                           x_msg_data              => x_return_msg,
2662                           x_msg_count             => l_msg_count,
2663                           x_return_status         => x_return_status);
2664   ELSE
2665      x_return_msg := 'Contract does not exits for this document';
2666      x_return_status := FND_API.G_RET_STS_SUCCESS;
2667   END IF;
2668 
2669   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'x_return_msg '    || x_return_msg);
2670   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_msg_count  '    || l_msg_count);
2671   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'x_return_status ' || x_return_status);
2672 
2673   l_progress := 50;
2674 
2675   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
2676 
2677   EXCEPTION
2678     WHEN OTHERS THEN
2679 
2680       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'when others exception at '
2681                        || l_progress || ';' || SQLERRM );
2682 END delete_contract;
2683 
2684 --------------------------------------------------------------------------------
2685   --Start of Comments
2686 
2687   --Name: set_closeout_status
2688 
2689   --Function:
2690   --  Set the closeout status. This will get called from Closeout workflow.
2691   --  Reads the status value from WF attribute.
2692 
2693   --End of Comments
2694 --------------------------------------------------------------------------------
2695 
2696 PROCEDURE set_closeout_status (
2697  itemtype        IN  VARCHAR2
2698 ,itemkey         IN  VARCHAR2
2699 ,actid           IN  NUMBER
2700 ,funcmode        IN  VARCHAR2
2701 ,resultout          OUT NOCOPY VARCHAR2
2702 )
2703 IS
2704   l_progress         NUMBER := 0;
2705   l_document_id      NUMBER;
2706   l_closeout_status  VARCHAR2(50);
2707   l_po_doc_type      VARCHAR2(25);
2708   l_rev_number       NUMBER;
2709   l_seq_num          NUMBER;
2710   l_agent_id         NUMBER;
2711   l_closeout_dtate   DATE;
2712 
2713   l_aco_signed_date   DATE;
2714   l_pco_signed_date   DATE;
2715 
2716   l_aco_singer_name  VARCHAR2(50);
2717   l_pco_singer_name  VARCHAR2(50);
2718 
2719   l_aco_remarks      VARCHAR2(4000);
2720   l_pco_remarks      VARCHAR2(4000);
2721   l_doc_num          VARCHAR2(100);
2722   l_return_status    VARCHAR2(1);
2723   l_doc_subtype      VARCHAR2(50);
2724   l_doc_type         VARCHAR2(25);
2725   l_return_code      VARCHAR2(25);
2726   l_exc_msg 	     VARCHAR2(2000);
2727 
2728   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'set_closeout_status';
2729 
2730 BEGIN
2731   IF (PO_LOG.d_proc) THEN
2732     PO_LOG.proc_begin(d_module);
2733   END IF;
2734 
2735   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'itemkey '            || itemkey);
2736   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'itemtype '           || itemtype);
2737 
2738   l_document_id := wf_engine.GetItemAttrNumber
2739                                         (itemtype   => itemtype,
2740                                          itemkey    => itemkey,
2741                                          aname      => 'DOCUMENT_ID');
2742   l_closeout_dtate := wf_engine.GetItemAttrDate
2743                                     (itemtype   => itemtype,
2744                                       itemkey    => itemkey,
2745                                       aname      => 'CLOSEOUT_DATE');
2746 
2747   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_document_id '      || l_document_id);
2748   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_closeout_dtate '      || l_closeout_dtate);
2749 
2750   l_progress := 10;
2751   l_closeout_status := wf_engine.GetActivityAttrText
2752                                         (itemtype   => itemtype,
2753                                          itemkey    => itemkey,
2754                                          actid      => actid,
2755                                          aname      => 'CLOSEOUT_STATUS');
2756 
2757   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_closeout_status '  || l_closeout_status);
2758 
2759   UPDATE po_headers_all
2760   SET clm_closeout_status = l_closeout_status
2761   WHERE po_header_id = l_document_id;
2762 
2763   l_progress := 11;
2764 
2765   IF (l_closeout_status = 'ADMIN_COMPLETE') THEN
2766 
2767       l_aco_signed_date := wf_engine.GetItemAttrDate
2768                                         (itemtype   => itemtype,
2769                                           itemkey    => itemkey,
2770                                           aname      => 'ACO_SIGNED_DATE');
2771       l_aco_singer_name := wf_engine.GetItemAttrText
2772                                             (itemtype   => itemtype,
2773                                             itemkey    => itemkey,
2774                                             aname      => 'ACO_SIGNER_NAME');
2775 
2776       l_aco_remarks := wf_engine.GetItemAttrText
2777                                             (itemtype   => itemtype,
2778                                             itemkey    => itemkey,
2779                                             aname      => 'ACO_REMARKS');
2780 
2781       l_progress := 12;
2782       UPDATE po_closeout_details
2783       SET aco_signer_name = l_aco_singer_name,
2784           aco_signed_date = Nvl(l_aco_signed_date, sysdate),
2785           aco_remarks =  l_aco_remarks
2786       WHERE reference_doc_id = l_document_id
2787       AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
2788 
2789       l_progress := 13;
2790 
2791   ELSIF (l_closeout_status = 'CLOSED_OUT') THEN
2792 
2793       l_pco_signed_date := wf_engine.GetItemAttrDate
2794                                         (itemtype   => itemtype,
2795                                           itemkey    => itemkey,
2796                                           aname      => 'PCO_SIGNED_DATE');
2797       l_pco_singer_name := wf_engine.GetItemAttrText
2798                                             (itemtype   => itemtype,
2799                                             itemkey    => itemkey,
2800                                             aname      => 'PCO_SIGNER_NAME');
2801 
2802       l_pco_remarks := wf_engine.GetItemAttrText
2803                                             (itemtype   => itemtype,
2804                                             itemkey    => itemkey,
2805                                             aname      => 'PCO_REMARKS');
2806 
2807       l_progress := 14;
2808 
2809       UPDATE po_closeout_details
2810       SET closeout_date = nvl(Nvl(l_pco_signed_date,aco_signed_date), sysdate),
2811           pco_signer_name = l_pco_singer_name,
2812           pco_signed_date = Nvl(l_pco_signed_date, sysdate),
2813           pco_remarks =  l_pco_remarks,
2814           incloseout = 'C' -- Completed
2815       WHERE reference_doc_id = l_document_id
2816       AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
2817 
2818       l_progress := 15;
2819 
2820       select clm_document_number,type_lookup_code, Decode(type_lookup_code, 'STANDARD', 'PO', 'PA')
2821         into l_doc_num,l_doc_subtype,l_doc_type
2822 	from po_headers_all
2823        where po_header_id = l_document_id;
2824 
2825       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_num '         || l_doc_num);
2826       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_subtype '     || l_doc_subtype);
2827       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_doc_type '        || l_doc_type);
2828       l_progress := 16;
2829 
2830       PO_DOCUMENT_ACTION_PVT.do_freeze
2831       (
2832         p_document_id       => l_document_id,
2833         p_document_type     => l_doc_type,
2834         p_document_subtype  => l_doc_subtype,
2835         p_reason            => 'Document ' || l_doc_subtype || ' status is moving to CLOSED_OUT',
2836         x_return_status     => l_return_status,
2837         x_return_code       => l_return_code,
2838         x_exception_msg     => l_exc_msg
2839       );
2840       l_progress := 17;
2841 
2842       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_return_status '    || l_return_status);
2843       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_return_code '      || l_return_code);
2844       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_exc_msg '            || l_exc_msg);
2845   END IF;
2846     --closeout_date       pco_remarks        aco_signer_name     pco_signer_name    aco_signed_date   pco_signed_date
2847 
2848 
2849   l_progress := 20;
2850   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'update query count ' || SQL%ROWCOUNT);
2851 
2852   SELECT type_lookup_code,revision_num, agent_id
2853     INTO l_po_doc_type, l_rev_number , l_agent_id
2854     FROM PO_HEADERS_ALL
2855    WHERE po_header_id = l_document_id;
2856   l_progress := 30;
2857 
2858   SELECT Max(sequence_num)
2859     INTO l_seq_num
2860     FROM po_action_history;
2861 
2862   l_progress := 40;
2863 
2864   INSERT INTO po_action_history(
2865            object_id
2866         ,  object_type_code
2867         ,  object_sub_type_code
2868         ,  sequence_num
2869         ,  last_update_date
2870         ,  last_updated_by
2871         ,  creation_date
2872         ,  created_by
2873         ,  action_code
2874         ,  action_date
2875         ,  employee_id
2876         ,  note
2877         ,  object_revision_num
2878         ,  last_update_login
2879         ,  request_id
2880         ,  program_application_id
2881         ,  program_id
2882         ,  program_update_date
2883         ,  approval_path_id
2884         ,  offline_code
2885         ) VALUES (
2886            l_document_id
2887         ,  'PO'
2888         ,  l_po_doc_type
2889         ,  l_seq_num+1
2890         ,  SYSDATE
2891         ,  fnd_global.USER_ID
2892         ,  SYSDATE
2893         ,  fnd_global.USER_ID
2894         ,  l_closeout_status --ActionCode
2895         ,  SYSDATE
2896         ,  l_agent_id
2897         ,  null
2898         ,  l_rev_number
2899         ,  fnd_global.LOGIN_ID
2900         ,  0
2901         ,  0
2902         ,  0
2903         ,  ''
2904         ,  0
2905         ,  ''
2906         );
2907 
2908   l_progress := 50;
2909   PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'insert query count ' || SQL%ROWCOUNT);
2910 
2911   resultout := wf_engine.eng_completed || ':' || 'ACTIVITY_PERFORMED' ;
2912 
2913   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
2914 
2915   EXCEPTION
2916     WHEN OTHERS THEN
2917 
2918       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'PO_CLOSEOUT_PVT.set_closeout_status : when others exception at '
2919                        || l_progress || ';' || SQLERRM );
2920       RAISE;
2921 END set_closeout_status;
2922 
2923 
2924  --------------------------------------------------------------------------------
2925   --Start of Comments
2926 
2927   --Name: get_val_notfn_body
2928 
2929   --Function:
2930   --  Get the notification body for the task list activation error and PDF generation error.
2931 
2932   --Parameters:
2933 
2934   --IN:
2935     --messages   IN VARCHAR2,
2936     --display_type   IN VARCHAR2,
2937     --document       IN OUT NOCOPY CLOB,
2938     --document_type  IN OUT NOCOPY VARCHAR2
2939 
2940 
2941   -- OUT:
2942 
2943   --End of Comments
2944 --------------------------------------------------------------------------------
2945 
2946 PROCEDURE get_clsout_err_msg_body
2947 (
2948     message_type   IN VARCHAR2,
2949     display_type   IN VARCHAR2,
2950     document       IN OUT NOCOPY CLOB,
2951     document_type  IN OUT NOCOPY VARCHAR2
2952 )
2953 IS
2954 
2955     l_msgbody              VARCHAR2(32000);
2956     l_progress             VARCHAR2(300);
2957 
2958     l_doc_sub_type VARCHAR2(240);
2959     l_clm_document_number VARCHAR2(50);
2960     l_pdf_type VARCHAR2(50);
2961 
2962     l_message_type         VARCHAR2(300);
2963     l_firstcolon           NUMBER;
2964     l_secondcolon          NUMBER;
2965     l_itemtype             WF_ITEMS.item_type%TYPE;
2966     l_itemkey              WF_ITEMS.item_key%TYPE;
2967 
2968     d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_clsout_err_msg_body';
2969     d_position NUMBER;
2970 
2971 BEGIN
2972 
2973   d_position := 0;
2974   IF (PO_LOG.d_proc) THEN
2975     PO_LOG.proc_begin(d_module);
2976   END IF;
2977 
2978   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.get_clsout_err_msg_body: 01');
2979   l_firstcolon := instr(message_type, ':');
2980   l_secondcolon := instr(message_type, ':', 1,2);
2981   l_message_type := substr(message_type, 1, l_firstcolon - 1);
2982   l_itemtype := substr(message_type, l_firstcolon + 1, l_secondcolon - l_firstcolon - 1);
2983   l_itemkey := substr(message_type, l_secondcolon+1,length(message_type) - l_secondcolon);
2984 
2985   l_clm_document_number := wf_engine.GetItemAttrText (itemtype => l_itemtype, itemkey => l_itemkey, aname => 'CLM_DOCUMENT_NUMBER');
2986   l_doc_sub_type := wf_engine.GetItemAttrText (itemtype => l_itemtype, itemkey => l_itemkey, aname => 'DOCUMENT_TYPE_DISP');
2987   l_pdf_type := wf_engine.GetItemAttrText (itemtype => l_itemtype, itemkey => l_itemkey, aname => 'PDF_TYPE');
2988 
2989   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_message_type '         || l_message_type);
2990   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_clm_document_number '         || l_clm_document_number);
2991   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_doc_sub_type '         || l_doc_sub_type);
2992 
2993 
2994   IF ( l_message_type = 'CLSOUT_TASK_ACT_ERR') THEN
2995 
2996         fnd_message.set_name('PO','PO_CLSOUT_TASK_ACT_ERR_BODY');
2997 
2998   ELSIF (l_message_type = 'CLSOUT_PDF_GEN_ERR') THEN
2999 
3000         fnd_message.set_name('PO','PO_CLSOUT_PDF_GEN_ERR_BODY');
3001         fnd_message.set_token('PDF_TYPE',l_pdf_type);
3002 
3003   END IF;
3004 
3005   fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
3006   fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
3007 
3008   l_msgbody := fnd_message.get;
3009 
3010   WF_NOTIFICATION.WriteToClob(document, l_msgbody);
3011 
3012   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.get_clsout_err_msg_body: 03');
3013 
3014   l_progress := 1;
3015 
3016   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3017 
3018 EXCEPTION
3019   WHEN OTHERS THEN
3020     --l_doc_string := PO_REQAPPROVAL_INIT1.get_error_doc(l_item_type, l_item_key);
3021     --l_preparer_user_name := PO_REQAPPROVAL_INIT1.get_preparer_user_name(l_item_type, l_item_key);
3022     WF_CORE.context('PO_CLOSEOUT_PVT','get_clsout_err_msg_body',l_progress);
3023     --PO_REQAPPROVAL_INIT1.send_error_notif(l_item_type, l_item_key, l_preparer_user_name, l_doc_string, sqlerrm, 'PO_SIGNATURE_PVT.GET_SIGNATURE_NOTFN_BODY');
3024     RAISE;
3025 
3026 END get_clsout_err_msg_body;
3027 
3028 
3029 --------------------------------------------------------------------------------
3030   --Start of Comments
3031 
3032   --Name: get_val_notfn_body
3033 
3034   --Function:
3035   --  Get the notification body for the validations error/warning message.
3036 
3037   --Parameters:
3038 
3039   --IN:
3040     --messages   IN VARCHAR2,
3041     --display_type   IN VARCHAR2,
3042     --document       IN OUT NOCOPY CLOB,
3043     --document_type  IN OUT NOCOPY VARCHAR2
3044 
3045 
3046   -- OUT:
3047 
3048   --End of Comments
3049 --------------------------------------------------------------------------------
3050 PROCEDURE get_val_notfn_body
3051 (
3052     messages   IN VARCHAR2,
3053     display_type   IN VARCHAR2,
3054     document       IN OUT NOCOPY CLOB,
3055     document_type  IN OUT NOCOPY VARCHAR2
3056 )
3057 IS
3058 
3059     l_msgbody              VARCHAR2(32000);
3060     l_progress             VARCHAR2(300);
3061 
3062     l_messages         VARCHAR2(32000);
3063     l_firstcolon           NUMBER;
3064     l_secondcolon          NUMBER;
3065     l_itemtype             WF_ITEMS.item_type%TYPE;
3066     l_itemkey              WF_ITEMS.item_key%TYPE;
3067 
3068     d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_val_notfn_body';
3069     d_position NUMBER;
3070 
3071 
3072 BEGIN
3073 
3074   d_position := 0;
3075   IF (PO_LOG.d_proc) THEN
3076     PO_LOG.proc_begin(d_module);
3077   END IF;
3078 
3079   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_messages '         || messages);
3080   l_firstcolon := instr(messages, '#');
3081   l_secondcolon := instr(messages, '#', 1,2);
3082   l_messages := substr(messages, 1, l_firstcolon - 1);
3083   l_itemtype := substr(messages, l_firstcolon + 1, l_secondcolon - l_firstcolon - 1);
3084   l_itemkey := substr(messages, l_secondcolon+1,length(messages) - l_secondcolon);
3085 
3086   l_msgbody := '<html><style> .tableHeaderCell { font-family: Arial; font-size: 10pt;} .tableDataCell { font-family: Arial; font-size: 10pt; font-weight: bold; }</style>
3087   <body class="tableHeaderCell"><table>';
3088     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.get_val_notfn_body: 07');
3089   l_msgbody := l_msgbody || l_messages || '</ol></td></tr><tr/><tr><td class="tableHeaderCell" align="left">'||fnd_message.get_string('PO','PO_CONTROL_CHOOSE_ACTION')||'</td></tr></table></body></html>';
3090 
3091   WF_NOTIFICATION.WriteToClob(document, l_msgbody);
3092 
3093   l_progress := 4;
3094 
3095   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3096 
3097 EXCEPTION
3098   WHEN OTHERS THEN
3099     --l_doc_string := PO_REQAPPROVAL_INIT1.get_error_doc(l_item_type, l_item_key);
3100     --l_preparer_user_name := PO_REQAPPROVAL_INIT1.get_preparer_user_name(l_item_type, l_item_key);
3101     WF_CORE.context('PO_CLOSEOUT_PVT','get_val_notfn_body',l_progress);
3102     --PO_REQAPPROVAL_INIT1.send_error_notif(l_item_type, l_item_key, l_preparer_user_name, l_doc_string, sqlerrm, 'PO_SIGNATURE_PVT.GET_SIGNATURE_NOTFN_BODY');
3103     RAISE;
3104 
3105 END get_val_notfn_body;
3106 
3107 
3108 --------------------------------------------------------------------------------
3109   --Start of Comments
3110 
3111   --Name: Validate_Document
3112 
3113   --Function:
3114   --  Validate the Manage Closeout from WF. It is wrapper for the procedure
3115   --  "validate_manage_closeout"
3116 
3117   --Parameters:
3118 
3119   --IN:
3120   --  itemtype            NUMBER
3121   --  itemkey             VARCHAR2
3122   --  actid               NUMBER
3123   --  funcmode            VARCHAR2
3124 
3125   --OUT:
3126   --resultout                VARCHAR2
3127 
3128   --End of Comments
3129 --------------------------------------------------------------------------------
3130 
3131 PROCEDURE Validate_Document (
3132   itemtype        IN  VARCHAR2
3133 , itemkey         IN  VARCHAR2
3134 , actid           IN  NUMBER
3135 , funcmode        IN  VARCHAR2
3136 , resultout          OUT NOCOPY VARCHAR2
3137 )
3138 IS
3139   l_progress         NUMBER := 0;
3140   l_document_id      NUMBER;
3141   l_closeout_status  VARCHAR2(50);
3142   l_results          PO_MULTI_MOD_VAL_RESULTS_TYPE;
3143   l_result_type      VARCHAR2(50) := 'SUCCESS';
3144   l_msg              VARCHAR2(254);
3145   l_message_subject  VARCHAR2(254);
3146   l_messages         VARCHAR2(32000);
3147   l_doc_sub_type VARCHAR2(240);
3148   l_clm_document_number VARCHAR2(50);
3149 
3150   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'Validate_Document';
3151   d_position NUMBER;
3152 
3153 BEGIN
3154   d_position := 0;
3155   IF (PO_LOG.d_proc) THEN
3156     PO_LOG.proc_begin(d_module);
3157   END IF;
3158 
3159   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemkey '            || itemkey);
3160   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemtype '           || itemtype);
3161 
3162   l_document_id := wf_engine.GetItemAttrNumber
3163                                         (itemtype   => itemtype,
3164                                          itemkey    => itemkey,
3165                                          aname      => 'DOCUMENT_ID');
3166   l_clm_document_number := wf_engine.GetItemAttrText (itemtype => itemtype, itemkey => itemkey, aname => 'CLM_DOCUMENT_NUMBER');
3167   l_doc_sub_type := wf_engine.GetItemAttrText (itemtype => itemtype, itemkey => itemkey, aname => 'DOCUMENT_TYPE_DISP');
3168 
3169   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id '      || l_document_id);
3170 
3171   l_progress := 10;
3172 
3173   l_results := PO_MULTI_MOD_VAL_RESULTS_TYPE.NEW_INSTANCE();
3174 
3175   PO_CLOSEOUT_PVT.validate_manage_closeout (p_doc_id        => l_document_id
3176                                           , p_chk_list_req  => 'N' -- CheckList Error and Open Mod error are mutual exc, so the checklist added error not req for wf val.
3177                                           , x_result_type   => l_result_type
3178                                           , x_results       => l_results);
3179   l_progress := 30;
3180 
3181   IF (l_result_type = c_result_type_FAILURE) THEN
3182       resultout := wf_engine.eng_completed || ':' || 'ERROR' ;
3183       fnd_message.set_name('PO','PO_CLSOUT_VALIDATION_ERR_SUB');
3184       fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
3185       fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
3186 
3187       l_message_subject := fnd_message.get;
3188 
3189       fnd_message.set_name('PO','PO_CLSOUT_VALIDATION_ERR_BODY');
3190       fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
3191       fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
3192 
3193       l_messages := l_messages || '<tr><td class="tableHeaderCell" align="left"> '||fnd_message.get||
3194       '</td></tr><tr><td class="tableHeaderCell" align="left"><ol>';
3195 
3196   ELSIF (l_result_type = c_result_type_WARNING) THEN
3197       resultout := wf_engine.eng_completed || ':' || 'WARNING' ;
3198       fnd_message.set_name('PO','PO_CLSOUT_VAL_WARNING_SUB');
3199       fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
3200       fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
3201 
3202       l_message_subject := fnd_message.get;
3203 
3204       fnd_message.set_name('PO','PO_CLSOUT_VAL_WARNING_BODY');
3205       fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
3206       fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
3207 
3208       l_messages := l_messages || '<tr><td class="tableHeaderCell" align="left"> '||fnd_message.get||
3209       '</td></tr><tr><td class="tableHeaderCell" align="left"><ol>';
3210 
3211   ELSIF (l_result_type = c_result_type_SUCCESS) THEN
3212 
3213       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_result_type ' || l_result_type);
3214       resultout := wf_engine.eng_completed || ':' || 'SUCCESS' ;
3215       RETURN;
3216   END IF;
3217 
3218  -- PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_message_subject'||l_message_subject);
3219 
3220   wf_engine.setitemattrtext(itemtype   => itemtype,
3221                   itemkey    => itemkey,
3222                   aname      => 'MESSAGE_SUBJECT',
3223                   avalue     => l_message_subject);
3224 
3225   FOR i IN l_results.MESSAGE_NAME.FIRST .. l_results.MESSAGE_NAME.LAST
3226   LOOP
3227        l_msg := fnd_message.get_string('PO', l_results.MESSAGE_NAME(i));
3228        l_messages := l_messages || '<li>' || l_msg || '</li>';
3229   END LOOP;
3230 
3231   wf_engine.setitemattrtext(itemtype => itemtype,
3232                                   itemkey  => itemkey,
3233                                   aname    => 'MESSAGE_BODY',
3234                                   avalue   => 'PLSQLCLOB:PO_CLOSEOUT_PVT.get_val_notfn_body/'|| l_messages ||'#'||itemtype||'#'||itemkey);
3235 
3236 
3237   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'wf_validate_closeout result ' || resultout);
3238   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_result_type ' || l_result_type);
3239 
3240   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3241 
3242 EXCEPTION
3243     WHEN OTHERS THEN
3244 
3245       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.Validate_Document : when others exception at '
3246                        || l_progress || ';' || SQLERRM );
3247       resultout := wf_engine.eng_completed || ':' || 'ERROR' ;
3248 
3249       RAISE;
3250 END Validate_Document;
3251 
3252 --------------------------------------------------------------------------------
3253   --Start of Comments
3254 
3255   --Name: Activate_task_list
3256 
3257   --Function:
3258   --  Activating the Contract's Task list
3259 
3260   --Parameters:
3261 
3262   --IN:
3263   --  itemtype            NUMBER
3264   --  itemkey             VARCHAR2
3265   --  actid               NUMBER
3266   --  funcmode            VARCHAR2
3267 
3268   --OUT:
3269   --resultout                VARCHAR2
3270 
3271   --End of Comments
3272 --------------------------------------------------------------------------------
3273 
3274 PROCEDURE Activate_tasks_list (
3275   itemtype        IN  VARCHAR2
3276 , itemkey         IN  VARCHAR2
3277 , actid           IN  NUMBER
3278 , funcmode        IN  VARCHAR2
3279 , resultout          OUT NOCOPY VARCHAR2
3280 ) IS
3281   l_progress         NUMBER := 0;
3282   l_document_id      NUMBER;
3283 
3284   l_document_rec OKC_IMP_RECORD_TYPES.document_rec_type;
3285   l_msg_data   VARCHAR2(1000);
3286   l_msg_count  NUMBER;
3287   l_return_status VARCHAR2(100);
3288   l_task_status VARCHAR2(30);
3289   l_po_doc_type        VARCHAR2(25);
3290   l_contr_type         VARCHAR2(25);
3291   l_rev_number         NUMBER;
3292   l_doc_num            VARCHAR2(100);
3293 
3294   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'Activate_tasks_list';
3295   d_position NUMBER;
3296 
3297 BEGIN
3298   d_position := 0;
3299   IF (PO_LOG.d_proc) THEN
3300     PO_LOG.proc_begin(d_module);
3301   END IF;
3302 
3303   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemkey '            || itemkey);
3304   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemtype '           || itemtype);
3305 
3306   l_document_id := wf_engine.GetItemAttrNumber
3307                                         (itemtype   => itemtype,
3308                                          itemkey    => itemkey,
3309                                          aname      => 'DOCUMENT_ID');
3310 
3311   SELECT type_lookup_code,revision_num,clm_document_number
3312   INTO l_po_doc_type, l_rev_number, l_doc_num
3313   FROM PO_HEADERS_ALL
3314   WHERE po_header_id = l_document_id;
3315 
3316   IF l_po_doc_type = 'STANDARD' THEN
3317      l_contr_type := 'PO_STANDARD';
3318   ELSIF l_po_doc_type = 'BLANKET' THEN
3319      l_contr_type := 'PA_BLANKET';
3320   ELSE
3321      l_contr_type := 'PA_CONTRACT';
3322   END IF;
3323 
3324   l_document_rec.business_document_type := l_contr_type;
3325   l_document_rec.business_document_id := l_document_id;
3326   l_document_rec.business_document_version := l_rev_number;
3327   l_document_rec.document_number := l_doc_num;
3328   l_document_rec.source_code := 'INTERNAL';
3329   l_document_rec.display_in_contract := 'N';
3330 
3331   OKC_REP_CLOSEOUT_PVT.Activate_tasks_closeout( p_api_version              => 1.0,
3332                                                     p_document_rec             => l_document_rec,
3333                                                     p_physical_completion_date => sysdate,
3334                                                     p_init_msg_list            => fnd_api.g_false ,
3335                                                     p_commit                   => fnd_api.g_true,
3336                                                     x_task_status              => l_task_status,
3337                                                     x_msg_data                 => l_msg_data,
3338                                                     x_msg_count                => l_msg_count,
3339                                                     x_return_status            => l_return_status);
3340 
3341   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_msg_data:'||l_msg_data);
3342   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_task_status: '||l_task_status);
3343   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_return_status: '||l_return_status);
3344   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id: '||l_document_id);
3345   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_po_doc_type: '||l_po_doc_type);
3346   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_rev_number: '||l_rev_number);
3347   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_doc_num: '||l_doc_num);
3348 
3349 
3350   IF (l_return_status = fnd_api.g_ret_sts_success AND l_task_status = 'COMPLETED') THEN
3351      resultout := wf_engine.eng_completed || ':' || 'COMPLETED' ;
3352      --When a document is reopened and If the tasks are already completed, workflow will directly initiates the signing process
3353      update PO_CLOSEOUT_DETAILS
3354         set incloseout = 'W'
3355       where reference_doc_id  = l_document_id
3356         and closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
3357   ELSIF (l_return_status = fnd_api.g_ret_sts_success AND l_task_status = 'INITIATED') THEN
3358      resultout := wf_engine.eng_completed || ':' || 'ACTIVATED' ;
3359   ELSIF (l_return_status = fnd_api.g_ret_sts_error OR l_return_status = fnd_api.g_ret_sts_unexp_error) THEN
3360      resultout := wf_engine.eng_completed || ':' || 'ERROR' ;
3361   END IF;
3362 
3363   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3364 
3365   EXCEPTION
3366     WHEN OTHERS THEN
3367 
3368       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.Activate_tasks_list : when others exception at '
3369                        || l_progress || ';' || SQLERRM );
3370 
3371       resultout := wf_engine.eng_completed || ':' || 'ERROR' ;
3372       RAISE;
3373 
3374 END Activate_tasks_list;
3375 
3376 
3377 
3378 
3379 --------------------------------------------------------------------------------
3380   --Start of Comments
3381 
3382   --Name: Set_Doc_TO_Prev_State
3383 
3384   --Function:
3385   --  Set the document to the previuous state as its error while activating the Contract's Task list
3386 
3387   --Parameters:
3388 
3389   --IN:
3390   --  itemtype            NUMBER
3391   --  itemkey             VARCHAR2
3392   --  actid               NUMBER
3393   --  funcmode            VARCHAR2
3394 
3395   --OUT:
3396   --resultout                VARCHAR2
3397 
3398   --End of Comments
3399 --------------------------------------------------------------------------------
3400 
3401 PROCEDURE Set_Doc_TO_Prev_State  (
3402   itemtype        IN  VARCHAR2
3403 , itemkey         IN  VARCHAR2
3404 , actid           IN  NUMBER
3405 , funcmode        IN  VARCHAR2
3406 , resultout          OUT NOCOPY VARCHAR2
3407 ) IS
3408 
3409   l_progress         NUMBER := 0;
3410   l_document_id      NUMBER;
3411   l_closeout_status  VARCHAR2(50);
3412   l_results          PO_MULTI_MOD_VAL_RESULTS_TYPE;
3413   l_msg              VARCHAR2(30);
3414 
3415   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'Set_Doc_TO_Prev_State';
3416   d_position NUMBER;
3417 
3418 BEGIN
3419   d_position := 0;
3420   IF (PO_LOG.d_proc) THEN
3421     PO_LOG.proc_begin(d_module);
3422   END IF;
3423 
3424   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemkey '            || itemkey);
3425   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemtype '           || itemtype);
3426 
3427   resultout := wf_engine.eng_completed || ':' || 'ACTIVITY_PERFORMED' ;
3428 
3429   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3430 
3431   EXCEPTION
3432     WHEN OTHERS THEN
3433 
3434       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.Set_Doc_TO_Prev_State  : when others exception at '
3435                        || l_progress || ';' || SQLERRM );
3436       resultout := c_result_type_FAILURE;
3437 
3438       resultout := wf_engine.eng_completed || ':' || 'ACTIVATED' ;
3439 
3440 
3441                  RAISE;
3442 END Set_Doc_TO_Prev_State ;
3443 
3444 
3445 --------------------------------------------------------------------------------
3446   --Start of Comments
3447 
3448   --Name: IS_STATUS_PHYSICAL_COMPLETE
3449 
3450   --Function:
3451   --  Activating the Contract's Task list
3452 
3453   --Parameters:
3454 
3455   --IN:
3456   --  itemtype            NUMBER
3457   --  itemkey             VARCHAR2
3458   --  actid               NUMBER
3459   --  funcmode            VARCHAR2
3460 
3461   --OUT:
3462   --resultout                VARCHAR2
3463 
3464   --End of Comments
3465 --------------------------------------------------------------------------------
3466 
3467 PROCEDURE IS_STATUS_PHYSICAL_COMPLETE (
3468   itemtype        IN  VARCHAR2
3469 , itemkey         IN  VARCHAR2
3470 , actid           IN  NUMBER
3471 , funcmode        IN  VARCHAR2
3472 , resultout          OUT NOCOPY VARCHAR2
3473 ) IS
3474 
3475   l_progress         NUMBER := 0;
3476   l_document_id      NUMBER;
3477   l_is_physical_complete  VARCHAR2(1) := 'N';
3478   l_results          PO_MULTI_MOD_VAL_RESULTS_TYPE;
3479   l_msg              VARCHAR2(30);
3480 
3481   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'IS_STATUS_PHYSICAL_COMPLETE';
3482   d_position NUMBER;
3483 
3484 BEGIN
3485   d_position := 0;
3486   IF (PO_LOG.d_proc) THEN
3487     PO_LOG.proc_begin(d_module);
3488   END IF;
3489 
3490   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemkey '            || itemkey);
3491   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemtype '           || itemtype);
3492 
3493 
3494 
3495   l_document_id := wf_engine.GetItemAttrNumber
3496                                         (itemtype   => itemtype,
3497                                          itemkey    => itemkey,
3498                                          aname      => 'DOCUMENT_ID');
3499 
3500   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id '      || l_document_id);
3501 
3502   l_progress := 10;
3503 
3504   BEGIN
3505 
3506   SELECT 'Y'
3507   INTO l_is_physical_complete
3508   FROM po_headers_all ph
3509   WHERE ph.po_header_id = l_document_id
3510   AND ph.clm_closeout_status = 'PHYSICAL_COMPLETE';
3511 
3512   EXCEPTION WHEN No_Data_Found THEN
3513      l_is_physical_complete := 'N';
3514   END;
3515 
3516   resultout := wf_engine.eng_completed || ':' || l_is_physical_complete;
3517 
3518   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3519 
3520   EXCEPTION
3521     WHEN OTHERS THEN
3522 
3523       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.IS_STATUS_PHYSICAL_COMPLETE : when others exception at '
3524                        || l_progress || ';' || SQLERRM );
3525       resultout := wf_engine.eng_completed || ':' || 'N';
3526       RAISE;
3527 
3528 END IS_STATUS_PHYSICAL_COMPLETE;
3529 
3530 
3531 
3532 --------------------------------------------------------------------------------
3533   --Start of Comments
3534 
3535   --Name: get_user_name
3536 
3537   --Function:
3538   --  Get the user name.
3539 
3540   --Parameters:
3541 
3542   --IN:
3543     --p_employee_id  NUMBER,
3544     --x_username  NOCOPY          VARCHAR2,
3545     --x_user_display_name NOCOPY VARCHAR2
3546 
3547   --OUT:
3548 
3549   --End of Comments
3550 --------------------------------------------------------------------------------
3551 
3552 PROCEDURE get_user_name
3553   (
3554     p_employee_id IN NUMBER,
3555     x_username OUT NOCOPY          VARCHAR2,
3556     x_user_display_name OUT NOCOPY VARCHAR2)
3557 IS
3558   p_orig_system VARCHAR2(20);
3559 
3560   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_user_name';
3561   d_position NUMBER;
3562 
3563 
3564 BEGIN
3565   d_position := 0;
3566   IF (PO_LOG.d_proc) THEN
3567     PO_LOG.proc_begin(d_module);
3568   END IF;
3569 
3570   p_orig_system:= 'PER';
3571   WF_DIRECTORY.GetUserName(p_orig_system, p_employee_id, x_username, x_user_display_name);
3572 
3573   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3574 
3575 EXCEPTION
3576 WHEN OTHERS THEN
3577   wf_core.context('PO_CLOSEOUTOUT_PVT','get_user_name',TO_CHAR(p_employee_id));
3578   raise;
3579 END get_user_name;
3580 
3581 
3582 
3583    --------------------------------------------------------------------------------
3584   --Start of Comments
3585 
3586   --Name: get_administrator_user_name
3587 
3588   --Function:
3589   --  Get the admin user name.
3590 
3591   --Parameters:
3592 
3593   --IN:
3594   --  itemtype            VARCHAR2
3595   --  itemkey             VARCHAR2
3596 
3597   --OUT:
3598   --resultout                VARCHAR2
3599 
3600   --End of Comments
3601 --------------------------------------------------------------------------------
3602 
3603 FUNCTION get_administrator_user_name
3604   (
3605     itemtype IN VARCHAR2,
3606     itemkey  IN VARCHAR2)
3607   RETURN VARCHAR2
3608 IS
3609   l_name        VARCHAR2(100);
3610   l_administrator_id NUMBER;
3611   l_disp        VARCHAR2(240);
3612 
3613   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_administrator_user_name';
3614   d_position NUMBER;
3615 
3616 BEGIN
3617   d_position := 0;
3618   IF (PO_LOG.d_proc) THEN
3619     PO_LOG.proc_begin(d_module);
3620   END IF;
3621 
3622   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemkey '            || itemkey);
3623   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'itemtype '           || itemtype);
3624 
3625   l_administrator_id := wf_engine.GetItemAttrNumber (itemtype => itemtype, itemkey => itemkey, aname => 'ADMINISTRATOR_ID');
3626   get_user_name(l_administrator_id, l_name, l_disp);
3627 
3628   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_name '           || l_name);
3629   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3630 
3631   RETURN(l_name);
3632 END;
3633 
3634 
3635 
3636   --------------------------------------------------------------------------------
3637   --Start of Comments
3638 
3639   --Name: get_sign_notfn_body
3640 
3641   --Function:
3642   --  Get the signer name based on the input p_signer_type.
3643 
3644   --Parameters:
3645 
3646   --IN:
3647   --  itemtype            VARCHAR2
3648   --  itemkey             VARCHAR2
3649   --  p_signer_type       VARCHAR2
3650 
3651   --OUT:
3652   --resultout                VARCHAR2
3653 
3654   --End of Comments
3655 --------------------------------------------------------------------------------
3656 FUNCTION get_signer
3657   (
3658     p_itemtype IN VARCHAR2,
3659     p_itemkey  IN VARCHAR2,
3660     p_signer_type VARCHAR2)
3661   RETURN VARCHAR2
3662 IS
3663   l_name        VARCHAR2(100);
3664   l_signer_id   NUMBER;
3665   l_disp_name   VARCHAR2(240);
3666 
3667   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_signer';
3668   d_position NUMBER;
3669 
3670 BEGIN
3671 
3672   d_position := 0;
3673   IF (PO_LOG.d_proc) THEN
3674     PO_LOG.proc_begin(d_module);
3675   END IF;
3676 
3677   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_itemtype '            || p_itemtype);
3678   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_itemkey '           || p_itemkey);
3679   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_signer_type '       || p_signer_type);
3680 
3681   IF ( p_signer_type = 'CHECKLIST') THEN
3682     l_signer_id := wf_engine.GetItemAttrNumber (itemtype => p_itemtype, itemkey => p_itemkey, aname => 'CHECK_LIST_SIGNER_ID');
3683   ELSIF ( p_signer_type = 'ADMIN_OFFICER') THEN
3684     l_signer_id := wf_engine.GetItemAttrNumber (itemtype => p_itemtype, itemkey => p_itemkey, aname => 'ADMIN_OFFICE_SIGNER_ID');
3685   ELSIF ( p_signer_type = 'CONTRACTING_OFFICER') THEN
3686     l_signer_id := wf_engine.GetItemAttrNumber (itemtype => p_itemtype, itemkey => p_itemkey, aname => 'CONTRACTING_OFFICE_SIGNER_ID');
3687   END IF;
3688 
3689   get_user_name(l_signer_id, l_name, l_disp_name);
3690 
3691   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_name '           || l_name);
3692   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3693 
3694   RETURN(l_name);
3695 END get_signer;
3696 
3697   --------------------------------------------------------------------------------
3698   --Start of Comments
3699 
3700   --Name: get_sign_notfn_body
3701 
3702   --Function:
3703   --  Get the notification body for the Signature type message. This is same for Checklist and CCS Signatures.
3704 
3705   --Parameters:
3706 
3707   --IN:
3708   --  itemtype            NUMBER
3709   --  itemkey             VARCHAR2
3710   --  actid               NUMBER
3711   --  funcmode            VARCHAR2
3712 
3713   -- OUT:
3714 
3715   --End of Comments
3716 --------------------------------------------------------------------------------
3717 
3718 PROCEDURE get_sign_notfn_body
3719 (
3720     document_id    IN VARCHAR2,
3721     display_type   IN VARCHAR2,
3722     document       IN OUT NOCOPY CLOB,
3723     document_type  IN OUT NOCOPY VARCHAR2
3724 )
3725 IS
3726     l_doc_type_disp         VARCHAR2(30);
3727     l_revision_num          VARCHAR2(30);
3728     l_clm_document_number   VARCHAR2(30);
3729     l_vendor_name           VARCHAR2(30);
3730     l_comments              VARCHAR2(254);
3731     l_buyer_id              NUMBER;
3732     l_admin_id              NUMBER;
3733     l_buyer_name            VARCHAR2(30);
3734     l_buyer_dsp_name        VARCHAR2(30);
3735 
3736     l_msgbody              VARCHAR2(32000);
3737     l_progress             VARCHAR2(300);
3738 
3739     l_document_id          PO_HEADERS_ALL.po_header_id%TYPE;
3740     l_item_type            WF_ITEMS.item_type%TYPE;
3741     l_item_key             WF_ITEMS.item_key%TYPE;
3742     l_firstcolon           NUMBER;
3743     l_secondcolon          NUMBER;
3744     l_itemtype             WF_ITEMS.item_type%TYPE;
3745     l_itemkey              WF_ITEMS.item_key%TYPE;
3746 
3747     d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_sign_notfn_body';
3748     d_position NUMBER;
3749 BEGIN
3750 
3751   d_position := 0;
3752   IF (PO_LOG.d_proc) THEN
3753     PO_LOG.proc_begin(d_module);
3754   END IF;
3755 
3756   l_firstcolon := instr(document_id, ':');
3757   l_secondcolon := instr(document_id, ':', 1,2);
3758   l_document_id := to_number(substr(document_id, 1, l_firstcolon - 1));
3759   l_itemtype := substr(document_id, l_firstcolon + 1, l_secondcolon - l_firstcolon - 1);
3760   l_itemkey := substr(document_id, l_secondcolon+1,length(document_id) - l_secondcolon);
3761 
3762 
3763   SELECT PHA.clm_document_number,
3764        PHA.revision_num,
3765        PHA.comments,
3766        VO.vendor_name,
3767        PHA.agent_id,
3768        Nvl(PHA.clm_award_administrator, PHA.agent_id)
3769   INTO
3770       l_clm_document_number,
3771       l_revision_num,
3772       l_comments,
3773       l_vendor_name,
3774       l_buyer_id,
3775       l_admin_id
3776 
3777   FROM PO_HEADERS_ALL   PHA,
3778        PO_VENDORS     VO
3779   WHERE PHA.po_header_id =  l_document_id
3780   AND PHA.vendor_id    =  VO.vendor_id;
3781 
3782   l_doc_type_disp:= PO_DOC_STYLE_PVT.get_style_display_name(l_document_id);
3783 
3784   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_admin_id '         || l_admin_id);
3785   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_clm_document_number '         || l_clm_document_number);
3786   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_revision_num '         || l_revision_num);
3787   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_comments '         || l_comments);
3788   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_vendor_name '         || l_vendor_name);
3789   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_buyer_id '         || l_buyer_id);
3790 
3791   get_user_name(l_buyer_id, l_buyer_name,l_buyer_dsp_name);
3792 
3793   l_msgbody := '<html><style> .tableHeaderCell { font-family: Arial; font-size: 10pt;} .tableDataCell { font-family: Arial; font-size: 10pt; font-weight: bold; }</style>
3794   <body class="tableHeaderCell"><table><tr><td class="tableHeaderCell" align="right"> '||fnd_message.get_string('PO', 'PO_WF_SIGN_NOTIF_DOCTYPE')||' : </td>
3795   <td  class="tableDataCell"> ' || l_doc_type_disp || ' </td>
3796   <td class="tableHeaderCell" align="right"> '||fnd_message.get_string('PO', 'PO_WF_SIGN_NOTIF_PO_NUMBER') ||': </td>
3797   <td class="tableDataCell"> ' ||l_clm_document_number||','|| l_revision_num || ' </td></tr>
3798   <tr><td class="tableHeaderCell" align="right"> '||fnd_message.get_string('PO', 'PO_WF_SIGN_NOTIF_SUPPLIER')||' : </td>';
3799 
3800   l_msgbody := l_msgbody || '<td  class="tableDataCell"> ' || l_vendor_name || ' </td><td class="tableHeaderCell" align="right">
3801   '||fnd_message.get_string('PO', 'PO_WF_SIGN_NOTIF_BUYER') ||': </td>
3802   <td class="tableDataCell"> ' || l_buyer_dsp_name || ' </td> </tr> <tr>';
3803 
3804   l_msgbody := l_msgbody || '</tr> <tr>
3805   <td class="tableHeaderCell" align="right"> '||fnd_message.get_string('PO', 'PO_WF_SIGN_NOTIF_DESC')||' :</td>
3806   <td COLSPAN="3" class="tableDataCell">' || l_comments || ' </td></tr> </table>';
3807 
3808   l_msgbody := l_msgbody || '</body></html>';
3809 
3810   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.get_sign_notfn_body: 02');
3811 
3812   WF_NOTIFICATION.WriteToClob(document, l_msgbody);
3813 
3814   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.get_sign_notfn_body: 03');
3815 
3816   l_progress := 1;
3817 
3818   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
3819 
3820 EXCEPTION
3821   WHEN OTHERS THEN
3822     --l_doc_string := PO_REQAPPROVAL_INIT1.get_error_doc(l_item_type, l_item_key);
3823     --l_preparer_user_name := PO_REQAPPROVAL_INIT1.get_preparer_user_name(l_item_type, l_item_key);
3824     WF_CORE.context('PO_CLOSEOUT_PVT','get_sign_notfn_body',l_progress);
3825     --PO_REQAPPROVAL_INIT1.send_error_notif(l_item_type, l_item_key, l_preparer_user_name, l_doc_string, sqlerrm, 'PO_SIGNATURE_PVT.GET_SIGNATURE_NOTFN_BODY');
3826     RAISE;
3827 
3828 END get_sign_notfn_body;
3829 
3830 
3831 
3832 
3833 --------------------------------------------------------------------------------
3834   --Start of Comments
3835 
3836   --Name: start_closeout_wf_process
3837 
3838   --Function:
3839   --  Starts the Closeout WF process and the sets the attributes
3840 
3841   --End of Comments
3842 --------------------------------------------------------------------------------
3843 
3844 PROCEDURE start_closeout_wf_process (
3845   p_doc_id        IN  NUMBER,
3846   x_return_status OUT NOCOPY VARCHAR2
3847 )IS
3848   l_progress         NUMBER := 0;
3849   l_document_id      NUMBER;
3850   l_chklist_req      VARCHAR2(1);
3851   l_ccs_req          VARCHAR2(1);
3852   l_chklist_sign_req VARCHAR2(1);
3853   l_ccs_sign_req     VARCHAR2(1);
3854   l_aco_sign_type    VARCHAR2(25);
3855   l_pco_sign_type    VARCHAR2(25);
3856   l_chklist_signer   NUMBER;
3857   l_admin_signer     NUMBER;
3858   l_cntr_signer      NUMBER;
3859   l_admin_id         NUMBER;
3860   l_itemkey          VARCHAR2(50);
3861   l_itemtype         VARCHAR2(50);
3862   l_process          VARCHAR2(50);
3863   l_aco_remarks      VARCHAR2(4000);
3864   l_pco_remarks      VARCHAR2(4000);
3865   l_comments         VARCHAR2(4000);
3866   l_msg_data         VARCHAR2(2000);
3867 
3868   l_user_id      NUMBER;
3869   l_resp_id      NUMBER;
3870   l_appl_id      NUMBER;
3871 
3872   l_clm_document_number PO_HEADERS_ALL.clm_document_number%TYPE;
3873   l_doc_type_disp VARCHAR2(50);
3874   l_clm_closeout_status PO_HEADERS_ALL.clm_closeout_status%type;
3875 
3876   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'start_closeout_wf_process';
3877   d_position NUMBER;
3878 
3879 BEGIN
3880   d_position := 0;
3881   IF (PO_LOG.d_proc) THEN
3882     PO_LOG.proc_begin(d_module);
3883   END IF;
3884 
3885   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'p_doc_id '           || p_doc_id);
3886 
3887   BEGIN
3888 
3889   SELECT reference_doc_id, check_list_required, ccs_required, check_list_sign_required,
3890          ccs_sign_required, aco_signature_type, pco_signature_type,
3891          check_list_signer_id, aco_signer_id, pco_signer_id, aco_remarks, pco_remarks
3892   INTO l_document_id, l_chklist_req, l_ccs_req, l_chklist_sign_req, l_ccs_sign_req,
3893          l_aco_sign_type, l_pco_sign_type, l_chklist_signer, l_admin_signer,
3894          l_cntr_signer,l_aco_remarks, l_pco_remarks
3895   FROM PO_CLOSEOUT_DETAILS
3896   WHERE reference_doc_id  = p_doc_id
3897   AND incloseout = 'Y'
3898   AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL
3899   FOR UPDATE ;
3900 
3901   EXCEPTION
3902     WHEN No_Data_Found THEN
3903        PO_CLOSEOUT_PVT.Log( d_module, d_position, 'No records found to start workflow. Exited ');
3904        x_return_status := FND_API.G_RET_STS_SUCCESS;
3905        RETURN;
3906 
3907   END;
3908   l_progress := 10;
3909 
3910   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id '      || l_document_id);
3911   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_chklist_req '      || l_chklist_req);
3912   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_ccs_req '          || l_ccs_req);
3913   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_chklist_sign_req ' || l_chklist_sign_req);
3914   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_ccs_sign_req '     || l_ccs_sign_req);
3915   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_aco_sign_type '    || l_aco_sign_type);
3916   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_pco_sign_type '    || l_pco_sign_type);
3917   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_chklist_signer '   || l_chklist_signer);
3918   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_admin_signer '     || l_admin_signer);
3919   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_cntr_signer '      || l_cntr_signer);
3920   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_aco_remarks '      || l_aco_remarks);
3921   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_pco_remarks '      || l_pco_remarks);
3922 
3923   l_progress := 20;
3924 
3925   SELECT PHA.clm_document_number,
3926        Nvl(PHA.clm_award_administrator, PHA.agent_id),
3927        PHA.clm_closeout_status
3928   INTO
3929       l_clm_document_number,
3930       l_admin_id,
3931       l_clm_closeout_status
3932 
3933   FROM PO_HEADERS_ALL   PHA
3934   WHERE PHA.po_header_id =  p_doc_id;
3935 
3936   l_doc_type_disp:= PO_DOC_STYLE_PVT.get_style_display_name(p_doc_id);
3937 
3938   l_process   := 'PO_INIT_CLOSEOUT';
3939   l_itemtype := 'POCLSOUT';
3940   l_itemkey  := l_itemtype || '_KEY_' || TO_CHAR(SYSDATE, 'MMDDYYYY_HH24MISS')
3941                    || '_' || p_doc_id;
3942 
3943   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_clm_document_number '      || l_clm_document_number);
3944   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_admin_id '      || l_admin_id);
3945   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_clm_closeout_status '      || l_clm_closeout_status);
3946   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_itemkey '      || l_itemkey);
3947 
3948   -- create workflow process
3949   wf_engine.createprocess (itemtype => l_itemtype,
3950                            itemkey  => l_itemkey,
3951                            process  => l_process);
3952 
3953   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3954                             itemkey    => l_itemkey,
3955                             aname      => 'DOCUMENT_ID',
3956                             avalue     => l_document_id);
3957 
3958   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3959                             itemkey    => l_itemkey,
3960                             aname      => 'IS_CHECK_LIST_REQUIRED',
3961                             avalue     => l_chklist_req);
3962 
3963   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3964                             itemkey    => l_itemkey,
3965                             aname      => 'IS_CCS_REQUIRED',
3966                             avalue     => l_ccs_req);
3967 
3968   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3969                             itemkey    => l_itemkey,
3970                             aname      => 'IS_CHECK_LIST_SIGN_REQUIRED',
3971                             avalue     => l_chklist_sign_req);
3972 
3973   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3974                             itemkey    => l_itemkey,
3975                             aname      => 'IS_CCS_SIGN_REQUIRED',
3976                             avalue     => l_ccs_sign_req);
3977 
3978   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3979                             itemkey    => l_itemkey,
3980                             aname      => 'ACO_SIGNATURE_TYPE',
3981                             avalue     => l_aco_sign_type);
3982 
3983   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3984                             itemkey    => l_itemkey,
3985                             aname      => 'PCO_SIGNATURE_TYPE',
3986                             avalue     => l_pco_sign_type);
3987 
3988   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3989                             itemkey    => l_itemkey,
3990                             aname      => 'CHECK_LIST_SIGNER_ID',
3991                             avalue     => l_chklist_signer);
3992 
3993   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3994                             itemkey    => l_itemkey,
3995                             aname      => 'ADMIN_OFFICE_SIGNER_ID',
3996                             avalue     => l_admin_signer);
3997 
3998   wf_engine.setitemattrtext(itemtype   => l_itemtype,
3999                             itemkey    => l_itemkey,
4000                             aname      => 'CONTRACTING_OFFICE_SIGNER_ID',
4001                             avalue     => l_cntr_signer);
4002 
4003   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4004                             itemkey    => l_itemkey,
4005                             aname      => 'ADMINISTRATOR_ID',
4006                             avalue     => l_admin_id);
4007 
4008 
4009   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4010                             itemkey    => l_itemkey,
4011                             aname      => 'ADMINISTRATOR_NAME',
4012                             avalue     => get_administrator_user_name(l_itemtype, l_itemkey));
4013 
4014   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4015                             itemkey    => l_itemkey,
4016                             aname      => 'CHECK_LIST_SIGNER',
4017                             avalue     => get_signer(l_itemtype, l_itemkey,'CHECKLIST'));
4018 
4019 
4020   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4021                             itemkey    => l_itemkey,
4022                             aname      => 'ADMIN_OFFICE_SIGNER',
4023                             avalue     => get_signer(l_itemtype, l_itemkey,'ADMIN_OFFICER'));
4024 
4025   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4026                             itemkey    => l_itemkey,
4027                             aname      => 'CONTRACTING_OFFICE_SIGNER',
4028                             avalue     => get_signer(l_itemtype, l_itemkey, 'CONTRACTING_OFFICER'));
4029 
4030   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4031                             itemkey    => l_itemkey,
4032                             aname      => 'CLM_DOCUMENT_NUMBER',
4033                             avalue     => l_clm_document_number);
4034 
4035   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4036                             itemkey    => l_itemkey,
4037                             aname      => 'DOCUMENT_TYPE_DISP',
4038                             avalue     => l_doc_type_disp);
4039 
4040 
4041   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4042                             itemkey    => l_itemkey,
4043                             aname      => 'SIGNATURE_COMMENTS',
4044                             avalue     => l_comments);
4045 
4046   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4047                             itemkey    => l_itemkey,
4048                             aname      => 'ACO_REMARKS',
4049                             avalue     => l_aco_remarks);
4050 
4051   wf_engine.setitemattrtext(itemtype   => l_itemtype,
4052                             itemkey    => l_itemkey,
4053                             aname      => 'PCO_REMARKS',
4054                             avalue     => l_pco_remarks);
4055 
4056                             -- Testing Hard coded
4057 
4058 --  wf_engine.setitemattrtext(itemtype   => l_itemtype,
4059 --                            itemkey    => l_itemkey,
4060 --                            aname      => 'REVALIDATE_DOCUMENT',
4061 --                            avalue     => 'Y');
4062 
4063 
4064   wf_engine.setitemattrtext(itemtype => l_itemtype,
4065                                   itemkey  => l_itemkey,
4066                                   aname    => 'PO_CLSOUT_SIGNATURE_BODY',
4067                                   avalue   =>
4068                                   'PLSQLCLOB:PO_CLOSEOUT_PVT.get_sign_notfn_body/'|| l_document_id ||':'||l_itemtype||':'||l_itemkey);
4069 
4070 
4071   wf_engine.setitemattrtext(itemtype => l_itemtype,
4072                                   itemkey  => l_itemkey,
4073                                   aname    => 'PDF_CHECKLIST_ATTACHMENT',
4074                                   avalue   =>
4075                                   'PLSQLBLOB:PO_CLOSEOUT_PVT.get_closeout_pdf/'|| l_document_id ||':'||l_itemtype||':'||'CT');
4076 
4077 
4078   wf_engine.setitemattrtext(itemtype => l_itemtype,
4079                                   itemkey  => l_itemkey,
4080                                   aname    => 'PDF_CCS_ATTACHMENT',
4081                                   avalue   =>
4082                                   'PLSQLBLOB:PO_CLOSEOUT_PVT.get_closeout_pdf/'|| l_document_id ||':'||l_itemtype||':'||'CCS');
4083 
4084   wf_engine.setitemattrtext(itemtype => l_itemtype,
4085                                   itemkey  => l_itemkey,
4086                                   aname    => 'VIEW_DOC_CLOSEOUT_URL',
4087                                   avalue   => 'JSP:/OA_HTML/OA.jsp?OAFunc=MANAGE_CLOSEOUT'||'&'||
4088                                   'documentHeaderId='||l_document_id||'&'||
4089                                   'documentNumber='||l_clm_document_number||'&'||
4090                                   'poDocumentSubtype='||l_doc_type_disp||
4091                                   'poCallingModule=notification' || '&' ||
4092                                   'poCallingNotifId=-&#NID-' || '&' ||
4093                                   'retainAM=Y' || '&' ||
4094                                   'addBreadCrumb=Y'
4095                                   );
4096 
4097   l_progress := 30 ;
4098 
4099   WF_ENGINE.STARTPROCESS(ITEMTYPE => L_ITEMTYPE,
4100                          ITEMKEY  => L_ITEMKEY );
4101 
4102   l_progress := 40;
4103 
4104   IF l_chklist_req <> 'Y' THEN
4105     PO_CLOSEOUT_PVT.delete_contract(p_doc_id          => p_doc_id,
4106                                     p_closeout_type   => PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL,
4107                                     x_return_status   => x_return_status,
4108                                     x_return_msg      => l_msg_data);
4109     l_progress := 45;
4110     PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'Delete contract status ' || x_return_status);
4111     PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'return message from Delete contract : ' || l_msg_data);
4112   END IF;
4113 
4114   -- If the workflow is launced again for this document. This is the case when its launched after completing all the tasks from business event
4115   IF ('PHYSICAL_COMPLETE' = l_clm_closeout_status) THEN
4116 
4117       UPDATE po_closeout_details
4118       SET incloseout = 'W' -- Workflow
4119       WHERE reference_doc_id  = p_doc_id
4120       AND incloseout = 'Y'
4121       AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
4122 
4123       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'Updated incloseout to W '||SQL%ROWCOUNT);
4124 
4125       -- Set the REVALIDATE_DOCUMENT to Y, as this is invoked from business event after all tasks has been completed and it needs revalidation.
4126       wf_engine.setitemattrtext(itemtype   => l_itemtype,
4127                                 itemkey    => l_itemkey,
4128                                 aname      => 'REVALIDATE_DOCUMENT',
4129                                 avalue     => 'Y');
4130 
4131       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'Set REVALIDATE_DOCUMENT to Y ');
4132   ELSE
4133 
4134       l_user_id := fnd_global.user_id;
4135       l_resp_id := fnd_global.resp_id;
4136       l_appl_id := fnd_global.resp_appl_id;
4137 
4138       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_user_id ' || l_user_id);
4139       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_resp_id ' || l_resp_id);
4140       PO_CLOSEOUT_PVT.Log( d_module, l_progress, 'l_appl_id ' || l_appl_id);
4141 
4142       UPDATE po_closeout_details
4143       SET attribute15 = l_user_id||':'||l_resp_id||':'||l_appl_id
4144       WHERE reference_doc_id  = p_doc_id
4145       AND incloseout = 'Y'
4146       AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
4147 
4148   END IF;
4149 
4150   x_return_status := FND_API.G_RET_STS_SUCCESS;
4151 
4152   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
4153 
4154   EXCEPTION
4155     WHEN OTHERS THEN
4156       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4157 
4158       PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.start_closeout_wf_process : when others exception at '
4159                        || l_progress || ';' || SQLERRM );
4160       RAISE;
4161 END start_closeout_wf_process;
4162 
4163 
4164 --------------------------------------------------------------------------------
4165   --Start of Comments
4166 
4167   --Name: Generate_Closeout_PDF
4168 
4169   --Function:
4170   --  Generate Closeout PDFs CCS and CheckList"
4171 
4172   --Parameters:
4173 
4174   --IN:
4175   --  itemtype            NUMBER
4176   --  itemkey             VARCHAR2
4177   --  actid               NUMBER
4178   --  funcmode            VARCHAR2
4179 
4180   --OUT:
4181   --resultout                VARCHAR2
4182 
4183   --End of Comments
4184 --------------------------------------------------------------------------------
4185 
4186 
4187 PROCEDURE Generate_Closeout_PDF (
4188   itemtype        IN  VARCHAR2
4189 , itemkey         IN  VARCHAR2
4190 , actid           IN  NUMBER
4191 , funcmode        IN  VARCHAR2
4192 , resultout          OUT NOCOPY VARCHAR2
4193 )
4194 IS
4195 
4196   l_document_id      NUMBER;
4197   l_clm_document_number   VARCHAR2(50);
4198   l_pdf_generation_type   VARCHAR2(50);
4199   l_request_id NUMBER;
4200 
4201   l_session_user_id     NUMBER;
4202   l_session_resp_id     NUMBER;
4203   l_user_id_to_set      NUMBER;
4204   l_resp_id_to_set      NUMBER;
4205   l_appl_id_to_set      NUMBER;
4206   l_counter             NUMBER;
4207   l_context_ids         VARCHAR2(30);
4208 
4209   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'Generate_Closeout_PDF';
4210   d_position NUMBER;
4211 
4212 
4213 BEGIN
4214 
4215     d_position := 0;
4216   IF (PO_LOG.d_proc) THEN
4217     PO_LOG.proc_begin(d_module);
4218   END IF;
4219 
4220     l_document_id := wf_engine.GetItemAttrNumber (itemtype => itemtype, itemkey => itemkey, aname => 'DOCUMENT_ID');
4221     l_clm_document_number := wf_engine.GetItemAttrText (itemtype => itemtype, itemkey => itemkey, aname => 'CLM_DOCUMENT_NUMBER');
4222     l_pdf_generation_type := wf_engine.GetActivityAttrText (itemtype => itemtype, itemkey => itemkey, actid => actid, aname => 'PDF_GENERATION_TYPE');
4223 
4224     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id: '||l_document_id);
4225     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_clm_document_number: '||l_clm_document_number);
4226     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_pdf_generation_type: '||l_pdf_generation_type);
4227 
4228     l_session_user_id := fnd_global.user_id;
4229 
4230     l_session_resp_id := fnd_global.resp_id;
4231 
4232     IF ( l_session_user_id = -1 ) THEN
4233       l_session_user_id := NULL;
4234     END IF;
4235 
4236     IF ( l_session_resp_id = -1 ) THEN
4237       l_session_resp_id := NULL;
4238     END IF;
4239 
4240     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_session_user_id: '||l_session_user_id);
4241     PO_CLOSEOUT_PVT.Log( d_module, d_position, ' l_session_resp_id: '|| l_session_resp_id);
4242     -- This context values will actually be taken care by the callback procedure poclsout_selector of this workflow .
4243     -- But this piece of code is written again to initiliase context, as the callback(TEST_CTX) is not been called in few scenerios
4244     -- while the multiple notifications are been opened in same browser session by the same user.
4245     -- Just to make sure, we are setting the context again only in case no context exists.
4246     IF ( l_session_resp_id IS NULL OR l_session_user_id IS NULL ) THEN
4247 
4248       SELECT ATTRIBUTE15
4249       INTO l_context_ids
4250       FROM po_closeout_details
4251       WHERE reference_doc_id = l_document_id
4252       AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
4253 
4254       l_counter := 0;
4255 
4256       FOR context_cur IN
4257       (
4258           SELECT regexp_substr(l_context_ids,'[^:]+', 1, LEVEL) internal_id FROM dual
4259           CONNECT BY regexp_substr(l_context_ids, '[^:]+', 1, LEVEL) IS NOT NULL
4260 
4261       ) LOOP
4262                l_counter := l_counter +1;
4263                IF(l_counter = 1 ) THEN
4264                  l_user_id_to_set := To_Number(context_cur.internal_id);
4265                ELSIF(l_counter = 2 ) THEN
4266                  l_resp_id_to_set := To_Number(context_cur.internal_id);
4267                ELSIF(l_counter = 3 ) THEN
4268                  l_appl_id_to_set := To_Number(context_cur.internal_id);
4269                END IF;
4270 
4271       END LOOP;
4272 
4273 
4274       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' l_user_id_to_set'||l_user_id_to_set);
4275       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' l_resp_id_to_set'||l_resp_id_to_set);
4276       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' l_appl_id_to_set'||l_appl_id_to_set);
4277 
4278       fnd_global.Apps_initialize
4279       (
4280          l_user_id_to_set,
4281          l_resp_id_to_set,
4282          l_appl_id_to_set
4283       );
4284 
4285     END IF;
4286 
4287 
4288     --Submitting concurrent program 'Generate Closeout PDF'
4289     l_request_id := fnd_request.submit_request(application =>'PO',
4290                                                program =>'POCLSOUTPDF',
4291                                                description => NULL ,
4292                                                start_time => SYSDATE,
4293                                                sub_request => FALSE,
4294                                                argument1 => l_document_id,
4295                                                argument2 => l_pdf_generation_type,
4296                                                argument3 => l_clm_document_number);
4297 
4298    PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.Generate_Closeout_PDF: : Request id is - '|| l_request_id);
4299 
4300    wf_engine.SetItemAttrNumber (  itemtype   => itemtype,
4301                                     itemkey    => itemkey,
4302                                     aname      => 'REQUEST_ID',
4303                                     avalue     => l_request_id);
4304    wf_engine.SetItemAttrText  (  itemtype   => itemtype,
4305                                     itemkey    => itemkey,
4306                                     aname      => 'PDF_TYPE',
4307                                     avalue     => l_pdf_generation_type);
4308 
4309 
4310    resultout := wf_engine.eng_completed || ':' || 'ACTIVITY_PERFORMED';
4311    IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
4312 
4313   EXCEPTION
4314     WHEN OTHERS THEN
4315         PO_CLOSEOUT_PVT.Log( d_module, d_position, 'PO_CLOSEOUT_PVT.Generate_Closeout_PDF: Error: '||SQLERRM);
4316         resultout := wf_engine.eng_completed || ':' ||  '';
4317 
4318 END  Generate_Closeout_PDF;
4319 
4320 
4321 
4322 --------------------------------------------------------------------------------
4323   --Start of Comments
4324 
4325   --Name: Set_Notification_Message
4326 
4327   --Function:
4328   --  Set the subject and the body for the notification based on the MessageType attribute.
4329 
4330   --Parameters:
4331 
4332   --IN:
4333   --  itemtype            NUMBER
4334   --  itemkey             VARCHAR2
4335   --  actid               NUMBER
4336   --  funcmode            VARCHAR2
4337 
4338   --OUT:
4339   --resultout                VARCHAR2
4340 
4341   --End of Comments
4342 --------------------------------------------------------------------------------
4343 
4344 PROCEDURE Set_Notification_Message (
4345   itemtype        IN  VARCHAR2
4346 , itemkey         IN  VARCHAR2
4347 , actid           IN  NUMBER
4348 , funcmode        IN  VARCHAR2
4349 , resultout          OUT NOCOPY VARCHAR2
4350 )
4351 IS
4352   l_message_type VARCHAR2(50);
4353   l_doc_sub_type VARCHAR2(240);
4354   l_clm_document_number VARCHAR2(50);
4355   l_message_subject VARCHAR2(240);
4356   l_pdf_type VARCHAR2(240);
4357   l_document_id NUMBER;
4358 
4359   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'Set_Notification_Message';
4360   d_position NUMBER;
4361 
4362 BEGIN
4363         d_position := 0;
4364   IF (PO_LOG.d_proc) THEN
4365     PO_LOG.proc_begin(d_module);
4366   END IF;
4367 
4368     l_message_type := wf_engine.GetActivityAttrText (itemtype => itemtype, itemkey => itemkey, actid => actid, aname => 'MESSAGE_TYPE');
4369     l_clm_document_number := wf_engine.GetItemAttrText (itemtype => itemtype, itemkey => itemkey, aname => 'CLM_DOCUMENT_NUMBER');
4370     l_doc_sub_type := wf_engine.GetItemAttrText (itemtype => itemtype, itemkey => itemkey, aname => 'DOCUMENT_TYPE_DISP');
4371     l_pdf_type := wf_engine.GetItemAttrText (itemtype => itemtype, itemkey => itemkey, aname => 'PDF_TYPE');
4372     l_document_id := wf_engine.GetItemAttrNumber (itemtype => itemtype, itemkey => itemkey, aname => 'DOCUMENT_ID');
4373 
4374     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_message_type'||l_message_type);
4375     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_clm_document_number'||l_clm_document_number);
4376     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_doc_sub_type'||l_doc_sub_type);
4377     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id'||l_document_id);
4378     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_pdf_type'||l_pdf_type);
4379 
4380 
4381     IF ( l_message_type = 'CLSOUT_TASK_ACT_ERR') THEN
4382 
4383         fnd_message.set_name('PO','PO_CLSOUT_TASK_ACT_ERR_SUB');
4384         fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
4385         fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
4386 
4387         l_message_subject := fnd_message.get;
4388 
4389         wf_engine.setitemattrtext(itemtype => itemtype,
4390                               itemkey  => itemkey,
4391                               aname    => 'MESSAGE_BODY',
4392                               avalue   => 'PLSQLCLOB:PO_CLOSEOUT_PVT.get_clsout_err_msg_body/'|| l_message_type ||':'||itemtype||':'||itemkey);
4393 
4394     ELSIF ( l_message_type = 'CLSOUT_PDF_GEN_ERR') THEN
4395 
4396         fnd_message.set_name('PO','PO_CLSOUT_PDF_GEN_ERR_SUB');
4397         fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
4398         fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
4399         fnd_message.set_token('PDF_GENERATION_TYPE',l_pdf_type);
4400 
4401         l_message_subject := fnd_message.get;
4402 
4403         wf_engine.setitemattrtext(itemtype => itemtype,
4404                               itemkey  => itemkey,
4405                               aname    => 'MESSAGE_BODY',
4406                               avalue   => 'PLSQLCLOB:PO_CLOSEOUT_PVT.get_clsout_err_msg_body/'|| l_message_type ||':'||itemtype||':'||itemkey);
4407 
4408     ELSIF ( l_message_type = 'CLSOUT_CHECKLIST_SIGN') THEN
4409 
4410         fnd_message.set_name('PO','PO_CLSOUT_CHECKLIST_SIGN_SUB');
4411         fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
4412         fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
4413 
4414         l_message_subject := fnd_message.get;
4415 
4416     ELSIF ( l_message_type = 'CLSOUT_CCS_SELF_SIGN') THEN
4417 
4418         fnd_message.set_name('PO','PO_CLSOUT_CCS_SELF_SIGN_SUB');
4419         fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
4420         fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
4421 
4422         l_message_subject := fnd_message.get;
4423 
4424     ELSIF ( l_message_type = 'CLSOUT_CCS_ACK_SIGN') THEN
4425 
4426         fnd_message.set_name('PO','PO_CLSOUT_CCS_ACK_SIGN_SUB');
4427         fnd_message.set_token('DOC_SUB_TYPE',l_doc_sub_type);
4428         fnd_message.set_token('CLM_DOCUMENT_NUMBER',l_clm_document_number);
4429 
4430         l_message_subject := fnd_message.get;
4431 
4432     END IF;
4433 
4434     PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_message_subject'||l_message_subject);
4435 
4436     wf_engine.setitemattrtext(itemtype   => itemtype,
4437                     itemkey    => itemkey,
4438                     aname      => 'MESSAGE_SUBJECT',
4439                     avalue     => l_message_subject);
4440 
4441 
4442     resultout := wf_engine.eng_completed || ':' || 'ACTIVITY_PERFORMED' ;
4443     PO_CLOSEOUT_PVT.Log(d_module, d_position, 'End ::: PO_CLOSEOUT_PVT.Set_Notification_Message ');
4444 END  Set_Notification_Message;
4445 
4446 
4447 
4448 --------------------------------------------------------------------------------
4449   --Start of Comments
4450 
4451   --Name: get_checklist_pdf
4452 
4453   --Function:
4454   --  Get the pdf blob and write to the clob
4455 
4456   --Parameters:
4457 
4458   --IN:
4459     --messages   IN VARCHAR2,
4460     --display_type   IN VARCHAR2,
4461     --document       IN OUT NOCOPY CLOB,
4462     --document_type  IN OUT NOCOPY VARCHAR2
4463 
4464 
4465   -- OUT:
4466 
4467   --End of Comments
4468 --------------------------------------------------------------------------------
4469 PROCEDURE get_closeout_pdf
4470 (
4471     document_id    IN VARCHAR2,
4472     display_type   IN VARCHAR2,
4473     document       IN OUT NOCOPY BLOB,
4474     document_type  IN OUT NOCOPY VARCHAR2
4475 )
4476 IS
4477 
4478     l_progress             VARCHAR2(300);
4479     l_document_id         NUMBER;
4480     l_firstcolon           NUMBER;
4481     l_secondcolon          NUMBER;
4482     l_itemtype             WF_ITEMS.item_type%TYPE;
4483     l_pdf_type             VARCHAR2(50);
4484 
4485     d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'get_closeout_pdf';
4486     d_position NUMBER;
4487 
4488 l_document_length  NUMBER;
4489 l_filename         fnd_lobs.file_name%TYPE;
4490 l_filecontent_type fnd_lobs.file_content_type%TYPE;
4491 l_document         fnd_lobs.file_data%TYPE;
4492 
4493 
4494 BEGIN
4495 
4496   d_position := 0;
4497   IF (PO_LOG.d_proc) THEN
4498     PO_LOG.proc_begin(d_module);
4499   END IF;
4500 
4501   l_firstcolon := instr(document_id, ':');
4502   l_secondcolon := instr(document_id, ':', 1,2);
4503   l_document_id := to_number(substr(document_id, 1, l_firstcolon - 1));
4504   l_itemtype := substr(document_id, l_firstcolon + 1, l_secondcolon - l_firstcolon - 1);
4505   l_pdf_type := substr(document_id, l_secondcolon+1,length(document_id) - l_secondcolon);
4506 
4507   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id ' || l_document_id);
4508   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_pdf_type '    || l_pdf_type);
4509 
4510 
4511 -- Obtain the BLOB version of the document
4512   SELECT l.FILE_NAME, l.FILE_CONTENT_TYPE, l.FILE_DATA
4513   INTO l_filename, l_filecontent_type, l_document
4514   FROM
4515   FND_LOBS L,
4516   FND_DOCUMENTS D,
4517   FND_ATTACHED_DOCUMENTS A
4518   WHERE D.DOCUMENT_ID = A.DOCUMENT_ID
4519   AND  A.ENTITY_NAME = 'PO_CLOSEOUT_DETAILS'
4520   AND D.MEDIA_ID = L.FILE_ID
4521   AND D.FILE_NAME LIKE '%'||l_pdf_type||'.pdf'
4522   AND A.PK1_VALUE =l_document_id ;
4523 
4524   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'filename '     || l_filename);
4525   PO_CLOSEOUT_PVT.Log( d_module, d_position, 'content_type ' || l_filecontent_type);
4526 
4527   l_document_length := dbms_lob.GetLength(l_document);
4528 
4529   dbms_lob.Copy(document, l_document, l_document_length, 1, 1);
4530 
4531   document_type := l_filecontent_type ||'; name=' || l_filename;
4532 
4533   IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
4534 
4535 EXCEPTION
4536     WHEN  OTHERS  THEN
4537        wf_core.context('PO_CLOSEOUT_PVT', 'get_closeout_pdf', l_progress);
4538       RAISE;
4539 
4540 END get_closeout_pdf;
4541 
4542 
4543 
4544 -------------------------------------------------------------------------------
4545 --Start of Comments
4546 --Name: POCLSOUT_SELECTOR
4547 --Pre-reqs:
4548 --  None.
4549 --Modifies:
4550 -- Application user id
4551 -- Application responsibility id
4552 -- Application application id
4553 --Locks:
4554 --  None.
4555 --Function:
4556 --  This procedure sets the correct application context when a process is
4557 --  picked up by the workflow background engine. When called in
4558 --  TEST_CTX mode it compares workflow attribute org id with the current
4559 --  org id and workflow attributes user id, responsibility id and
4560 --  application id with their corresponding profile values. It returns TRUE
4561 --  if these values match and FALSE otherwise. When called in SET_CTX mode
4562 --  it sets the correct apps context based on workflow parameters.
4563 --Parameters:
4564 --IN:
4565 --p_itemtype
4566 --  Specifies the itemtype of the workflow process
4567 --p_itemkey
4568 --  Specifies the itemkey of the workflow process
4569 --p_actid
4570 --  activity id passed by the workflow
4571 --p_funcmode
4572 --  Input values can be TEST_CTX or SET_CTX (RUN not implemented)
4573 --  TEST_CTX to test if current context is correct
4574 --  SET_CTX to set the correct context if current context is wrong
4575 --IN OUT:
4576 --p_x_result
4577 --  For TEST_CTX a TRUE value means that the context is correct and
4578 --  SET_CTX need not be called. A FALSE value means that current context
4579 --  is incorrect and SET_CTX need to set correct context
4580 --Testing:
4581 --  There is not script to test this procedure but the correct functioning
4582 --  may be tested by verifying from the debug_message in table po_wf_debug
4583 --  that if at any time the workflow process gets started with a wrong
4584 --  context then the selector is called in TEST_CTX and SET_CTX modes and
4585 --  correct context is set.
4586 --End of Comments
4587 -------------------------------------------------------------------------------
4588 PROCEDURE Poclsout_selector (p_itemtype IN VARCHAR2,
4589                              p_itemkey  IN VARCHAR2,
4590                              p_actid    IN NUMBER,
4591                              p_funcmode IN VARCHAR2,
4592                              p_x_result IN OUT nocopy VARCHAR2)
4593 IS
4594   -- Context setting revamp <declare variables start>
4595   l_session_user_id     NUMBER;
4596   l_session_resp_id     NUMBER;
4597   l_responder_id        NUMBER;
4598   l_user_id_to_set      NUMBER;
4599   l_resp_id_to_set      NUMBER;
4600   l_appl_id_to_set      NUMBER;
4601   l_progress            VARCHAR2(1000);
4602   l_preserved_ctx       VARCHAR2(5) := 'TRUE';
4603   l_document_id         NUMBER;
4604   l_context_ids         VARCHAR2(30);
4605   l_counter             NUMBER;
4606 
4607   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'Poclsout_selector';
4608   d_position NUMBER;
4609 
4610 
4611 -- Context setting revamp <declare variables end>
4612 BEGIN
4613 
4614     d_position := 0;
4615     IF (PO_LOG.d_proc) THEN
4616       PO_LOG.proc_begin(d_module);
4617     END IF;
4618 
4619     --Context setting revamp <start>
4620     -- <debug start>
4621     IF ( g_po_wf_debug = 'Y' ) THEN
4622       po_wf_debug_pkg.Insert_debug (itemtype => p_itemtype, itemkey => p_itemkey
4623       ,
4624       x_progress => 'POCLSOUT_SELECTOR called with mode: '
4625       ||p_funcmode
4626       ||' itemtype: '
4627       ||p_itemtype
4628       ||' itemkey: '
4629       ||p_itemkey);
4630     END IF;
4631 
4632     -- <debug end>
4633     l_session_user_id := fnd_global.user_id;
4634 
4635     l_session_resp_id := fnd_global.resp_id;
4636 
4637     IF ( l_session_user_id = -1 ) THEN
4638       l_session_user_id := NULL;
4639     END IF;
4640 
4641     IF ( l_session_resp_id = -1 ) THEN
4642       l_session_resp_id := NULL;
4643     END IF;
4644 
4645     --<debug start>
4646     l_progress := '010 selector fn - sess_user_id:'
4647                   ||l_session_user_id
4648                   ||' ses_resp_id '
4649                   ||l_session_resp_id;
4650 
4651     IF ( g_po_wf_debug = 'Y' ) THEN
4652       po_wf_debug_pkg.Insert_debug(p_itemtype, p_itemkey, l_progress);
4653     END IF;
4654 
4655     --<debug end>
4656     IF ( p_funcmode = 'TEST_CTX' ) THEN
4657 
4658       IF ( g_po_wf_debug = 'Y' ) THEN
4659         po_wf_debug_pkg.Insert_debug(itemtype => p_itemtype,
4660         itemkey => p_itemkey,
4661         x_progress => 'POCLSOUT_SELECTOR: inside Test Ctx ');
4662       END IF;
4663       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' inside TEST_CTX');
4664 
4665       --<Bug 6144768 End>
4666       -- we cannot afford to run the wf without the session user, hence
4667       -- always set the ctx if session user id is null.
4668       IF ( l_session_user_id IS NULL OR l_session_resp_id IS NULL ) THEN
4669         p_x_result := 'NOTSET';
4670         RETURN;
4671 
4672       ELSE
4673         p_x_result := 'TRUE';
4674         RETURN;
4675 
4676       END IF; -- l_session_user_id is null
4677     ELSIF ( p_funcmode = 'SET_CTX' ) THEN
4678 
4679       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' inside SET_CTX');
4680 
4681       l_document_id := wf_engine.GetItemAttrNumber (itemtype => p_itemtype, itemkey => p_itemkey, aname => 'DOCUMENT_ID');
4682 
4683       SELECT ATTRIBUTE15
4684       INTO l_context_ids
4685       FROM po_closeout_details
4686       WHERE reference_doc_id = l_document_id
4687       AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
4688 
4689       l_counter := 0;
4690 
4691       FOR cont_cur IN
4692       (
4693           SELECT regexp_substr(l_context_ids,'[^:]+', 1, LEVEL) internal_id FROM dual
4694           CONNECT BY regexp_substr(l_context_ids, '[^:]+', 1, LEVEL) IS NOT NULL
4695 
4696       ) LOOP
4697                l_counter := l_counter +1;
4698                IF(l_counter = 1 ) THEN
4699                  l_user_id_to_set := To_Number(cont_cur.internal_id);
4700                ELSIF(l_counter = 2 ) THEN
4701                  l_resp_id_to_set := To_Number(cont_cur.internal_id);
4702                ELSIF(l_counter = 3 ) THEN
4703                  l_appl_id_to_set := To_Number(cont_cur.internal_id);
4704                END IF;
4705 
4706       END LOOP;
4707 
4708       IF( l_counter > 3) THEN
4709           IF (g_po_wf_debug = 'Y') THEN
4710             PO_WF_DEBUG_PKG.insert_debug(itemtype   => p_itemtype,
4711                                         itemkey    => p_itemkey,
4712                                         x_progress => 'Exception in Selector');
4713           END IF;
4714       END IF;
4715 
4716       --<debug start>
4717       l_progress := '050 selector fn : set user '
4718                     ||l_user_id_to_set
4719                     ||' resp id '
4720                     ||l_resp_id_to_set
4721                     ||' appl id '
4722                     ||l_appl_id_to_set;
4723 
4724       IF ( g_po_wf_debug = 'Y' ) THEN
4725       /* DEBUG */
4726         po_wf_debug_pkg.Insert_debug(p_itemtype, p_itemkey, l_progress);
4727       END IF;
4728 
4729       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' l_user_id_to_set'||l_user_id_to_set);
4730       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' l_resp_id_to_set'||l_resp_id_to_set);
4731       PO_CLOSEOUT_PVT.Log( d_module, d_position, ' l_appl_id_to_set'||l_appl_id_to_set);
4732 
4733       fnd_global.Apps_initialize
4734       (
4735          l_user_id_to_set,
4736          l_resp_id_to_set,
4737          l_appl_id_to_set
4738       );
4739 
4740     END IF;
4741 
4742     IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
4743 
4744 -- Context setting revamp <end>
4745 EXCEPTION
4746   WHEN OTHERS THEN
4747              IF ( g_po_wf_debug = 'Y' ) THEN
4748                po_wf_debug_pkg.Insert_debug(itemtype => p_itemtype,
4749                itemkey => p_itemkey,
4750                x_progress => 'Exception in Selector');
4751              END IF;
4752 
4753              wf_core.Context('PO_CLOSEOUT_PVT', 'POCLSOUT_SELECTOR',
4754              p_itemtype,
4755              p_itemkey, p_actid, p_funcmode);
4756 
4757              RAISE;
4758 END poclsout_selector;
4759 
4760 
4761 --------------------------------------------------------------------------------
4762   --Start of Comments
4763 
4764   --Name: set_checklist_signed_date
4765 
4766   --Function:
4767   --  Set the checklist signed date
4768 
4769   --Parameters:
4770 
4771   --IN:
4772   --  itemtype            NUMBER
4773   --  itemkey             VARCHAR2
4774   --  actid               NUMBER
4775   --  funcmode            VARCHAR2
4776 
4777   --OUT:
4778   --resultout                VARCHAR2
4779 
4780   --End of Comments
4781 --------------------------------------------------------------------------------
4782 PROCEDURE set_checklist_signed_date (
4783   itemtype        IN  VARCHAR2
4784 , itemkey         IN  VARCHAR2
4785 , actid           IN  NUMBER
4786 , funcmode        IN  VARCHAR2
4787 , resultout          OUT NOCOPY VARCHAR2
4788 )
4789 IS
4790   l_document_id         NUMBER;
4791 
4792   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || '.' || 'set_checklist_signed_date';
4793   d_position NUMBER;
4794 
4795 BEGIN
4796   d_position := 0;
4797   IF (PO_LOG.d_proc) THEN
4798     PO_LOG.proc_begin(d_module);
4799   END IF;
4800 
4801   IF (funcmode = 'RUN') THEN
4802 
4803      l_document_id := wf_engine.GetItemAttrNumber (itemtype => itemtype, itemkey => itemkey, aname => 'DOCUMENT_ID');
4804 
4805      PO_CLOSEOUT_PVT.Log( d_module, d_position, 'l_document_id '     || l_document_id);
4806 
4807      UPDATE po_closeout_details
4808      SET  checklist_signed_date  = SYSDATE
4809      WHERE reference_doc_id = l_document_id
4810      AND  closeout_doc_type = PO_CLOSEOUT_PVT.g_CLOSEOUT_TYPE_INDIVIDUAL;
4811 
4812   END IF;
4813 
4814  IF (PO_LOG.d_proc) THEN PO_LOG.proc_end(d_module); END IF;
4815 
4816 EXCEPTION
4817     WHEN  OTHERS  THEN
4818        wf_core.context('PO_CLOSEOUT_PVT', 'get_closeout_pdf', d_position);
4819       RAISE;
4820 
4821 END set_checklist_signed_date;
4822 
4823 END PO_CLOSEOUT_PVT;