DBA Data[Home] [Help]

PACKAGE BODY: APPS.POS_REVISION_DIFFERENCES

Source


1 PACKAGE BODY pos_revision_differences AS
2 /* $Header: POSPORVB.pls 120.2 2011/12/19 10:38:51 ramkandu ship $ */
3 
4 /*********************************************************************
5  * NAME
6  * compare_po_to_all
7  *
8  * PURPOSE
9  * Call the procedure COMPARE_PO with ALL as comparison flag.
10  *
11  * ARGUMENTS
12  * p_header_id		Unique identified for the current PO in
13  *			PO_HEADERS_ARCHIVE_ALL table
14  * p_release_id		Unique identifier for the PO release in
15  *			PO_RELEASES_ARCHIVE_ALL table
16  * p_revision_num	Current PO revision number
17  * p_dummy_in4		Not required
18  * p_dummy_in5		Not required
19  * p_dummy_in6		Not required
20  * p_dummy_in7		Not required
21  * p_dummy_in8		Not required
22  * p_dummy_in9		Not required
23  * p_dummy_in10		Not required
24  * p_sequence_num	Sequence number to identify the comparison
25  *			results for a specific record in
26  *			ICX_PO_REVISIONS_TEMP table.
27  * p_dummy_out2		Not required
28  * p_dummy_out3		Not required
29  * p_dummy_out4		Not required
30  * p_dummy_out5		Not required
31  * p_dummy_out6		Not required
32  * p_dummy_out7		Not required
33  * p_dummy_out8		Not required
34  * p_dummy_out9		Not required
35  * p_dummy_out10	Not required
36  *
37  * NOTES
38  * This procedures serves the purpose of a link from WAD to call the
39  * procedure COMPARE_PO.  There is no way to store the comparison flag
40  * in the link.  Therefore, the link calls this procedure, which calls
41  * COMPARE_PO with the appropriate flag.
42  *
43  * Normally, you do not want to call this procedure directly.  You can
44  * simply call COMPARE_PO with the appropriate parameters.
45  *
46  * HISTORY
47  * 20-NOV-1997	Rami Haddad	Created
48  ********************************************************************/
49 PROCEDURE compare_po_to_all(
50 	p_header_id IN NUMBER,
51 	p_release_id IN NUMBER,
52 	p_revision_num IN NUMBER,
53 	p_dummy_in4 IN NUMBER DEFAULT NULL,
54 	p_dummy_in5 IN NUMBER DEFAULT NULL,
55 	p_dummy_in6 IN NUMBER DEFAULT NULL,
56 	p_dummy_in7 IN NUMBER DEFAULT NULL,
57 	p_dummy_in8 IN NUMBER DEFAULT NULL,
58 	p_dummy_in9 IN NUMBER DEFAULT NULL,
59 	p_dummy_in10 IN NUMBER DEFAULT NULL,
60 	p_sequence_num OUT NOCOPY NUMBER,
61 	p_dummy_out2 OUT NOCOPY NUMBER,
62 	p_dummy_out3 OUT NOCOPY NUMBER,
63 	p_dummy_out4 OUT NOCOPY NUMBER,
64 	p_dummy_out5 OUT NOCOPY NUMBER,
65 	p_dummy_out6 OUT NOCOPY NUMBER,
66 	p_dummy_out7 OUT NOCOPY NUMBER,
67 	p_dummy_out8 OUT NOCOPY NUMBER,
68 	p_dummy_out9 OUT NOCOPY NUMBER,
69 	p_dummy_out10 OUT NOCOPY NUMBER
70 	) AS
71 
72 v_sequence_num	NUMBER := NULL;
73 v_progress	VARCHAR2(3);
74 
75 BEGIN
76 
77 v_progress := '010';
78 compare_po(
79 	p_header_id,
80 	p_release_id,
81 	p_revision_num,
82 	'ALL',
83 	v_sequence_num );
84 
85 p_sequence_num := v_sequence_num;
86 
87 EXCEPTION
88 WHEN others THEN
89 	PO_MESSAGE_S.SQL_ERROR(
90 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_ALL',
91 		v_progress,
92 		sqlcode );
93 	RAISE;
94 
95 END compare_po_to_all;
96 
97 
98 
99 /*********************************************************************
100  * NAME
101  * compare_po_to_original
102  *
103  * PURPOSE
104  * Call the procedure COMPARE_PO with the ORIGINAL as comparison flag.
105  *
106  * ARGUMENTS
107  * p_header_id		Unique identified for the current PO in
108  *			PO_HEADERS_ARCHIVE_ALL table
109  * p_release_id		Unique identifier for the PO release in
110  *			PO_RELEASES_ARCHIVE_ALL table
111  * p_revision_num	Current PO revision number
112  * p_dummy_in4		Not required
113  * p_dummy_in5		Not required
114  * p_dummy_in6		Not required
115  * p_dummy_in7		Not required
116  * p_dummy_in8		Not required
117  * p_dummy_in9		Not required
118  * p_dummy_in10		Not required
119  * p_sequence_num	Sequence number to identify the comparison
120  *			results for a specific record in
121  *			ICX_PO_REVISIONS_TEMP table.
122  * p_dummy_out2		Not required
123  * p_dummy_out3		Not required
124  * p_dummy_out4		Not required
125  * p_dummy_out5		Not required
126  * p_dummy_out6		Not required
127  * p_dummy_out7		Not required
128  * p_dummy_out8		Not required
129  * p_dummy_out9		Not required
130  * p_dummy_out10	Not required
131  *
132  * NOTES
133  * This procedures serves the purpose of a link from WAD to call the
134  * procedure COMPARE_PO.  There is no way to store the comparison flag
135  * in the link.  Therefore, the link calls this procedure, which calls
136  * COMPARE_PO with the appropriate flag.
137  *
138  * Normally, you do not want to call this procedure directly.  You can
139  * simply call COMPARE_PO with the appropriate parameters.
140  *
141  * HISTORY
142  * 01-SEP-1997	Rami Haddad	Created
143  * 05-SEP-1997	Matt Denton	Debugged
144  ********************************************************************/
145 PROCEDURE compare_po_to_original(
146 	p_header_id IN NUMBER,
147 	p_release_id IN NUMBER,
148 	p_revision_num IN NUMBER,
149 	p_dummy_in4 IN NUMBER DEFAULT NULL,
150 	p_dummy_in5 IN NUMBER DEFAULT NULL,
151 	p_dummy_in6 IN NUMBER DEFAULT NULL,
152 	p_dummy_in7 IN NUMBER DEFAULT NULL,
153 	p_dummy_in8 IN NUMBER DEFAULT NULL,
154 	p_dummy_in9 IN NUMBER DEFAULT NULL,
155 	p_dummy_in10 IN NUMBER DEFAULT NULL,
156 	p_sequence_num OUT NOCOPY NUMBER,
157 	p_dummy_out2 OUT NOCOPY NUMBER,
158 	p_dummy_out3 OUT NOCOPY NUMBER,
159 	p_dummy_out4 OUT NOCOPY NUMBER,
160 	p_dummy_out5 OUT NOCOPY NUMBER,
161 	p_dummy_out6 OUT NOCOPY NUMBER,
162 	p_dummy_out7 OUT NOCOPY NUMBER,
163 	p_dummy_out8 OUT NOCOPY NUMBER,
164 	p_dummy_out9 OUT NOCOPY NUMBER,
165 	p_dummy_out10 OUT NOCOPY NUMBER
166 	) AS
167 
168 v_sequence_num	NUMBER := NULL;
169 v_progress	VARCHAR2(3);
170 
171 BEGIN
172 
173 v_progress := '020';
174 
175 compare_po(
176 	p_header_id,
177 	p_release_id,
178 	p_revision_num,
179 	'ORIGINAL',
180 	v_sequence_num );
181 
182 p_sequence_num := v_sequence_num;
183 
184 EXCEPTION
185 WHEN others THEN
186 	PO_MESSAGE_S.SQL_ERROR(
187 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_ORIGINAL',
188 		v_progress,
189 		sqlcode );
190 	RAISE;
191 
192 END compare_po_to_original;
193 
194 
195 
196 /*********************************************************************
197  * NAME
198  * compare_po_to_previous
199  *
200  * PURPOSE
201  * Call the procedure COMPARE_PO with the PREVIOUS as comparison flag.
202  *
203  * ARGUMENTS
204  * p_header_id		Unique identified for the current PO in
205  *			PO_HEADERS_ARCHIVE_ALL table
206  * p_release_id		Unique identifier for the PO release in
207  *			PO_RELEASES_ARCHIVE_ALL table
208  * p_revision_num	Current PO revision number
209  * p_dummy_in4		Not required
210  * p_dummy_in5		Not required
211  * p_dummy_in6		Not required
212  * p_dummy_in7		Not required
213  * p_dummy_in8		Not required
214  * p_dummy_in9		Not required
215  * p_dummy_in10		Not required
216  * p_sequence_num	Sequence number to identify the comparison
217  *			results for a specific record in
218  *			ICX_PO_REVISIONS_TEMP table.
219  * p_dummy_out2		Not required
220  * p_dummy_out3		Not required
221  * p_dummy_out4		Not required
222  * p_dummy_out5		Not required
223  * p_dummy_out6		Not required
224  * p_dummy_out7		Not required
225  * p_dummy_out8		Not required
226  * p_dummy_out9		Not required
227  * p_dummy_out10	Not required
228  *
229  * NOTES
230  * This procedures serves the purpose of a link from WAD to call the
231  * procedure COMPARE_PO.  There is no way to store the comparison flag
232  * in the link.  Therefore, the link calls this procedure, which calls
233  * COMPARE_PO with the appropriate flag.
234  *
235  * Normally, you do not want to call this procedure directly.  You can
236  * simply call COMPARE_PO with the appropriate parameters.
237  *
238  * HISTORY
239  * 01-SEP-1997	Rami Haddad	Created
240  * 05-SEP-1997	Matt Denton	Debugged
241  ********************************************************************/
242 PROCEDURE compare_po_to_previous(
243 	p_header_id IN NUMBER,
244 	p_release_id IN NUMBER,
245 	p_revision_num IN NUMBER,
246 	p_dummy_in4 IN NUMBER DEFAULT NULL,
247 	p_dummy_in5 IN NUMBER DEFAULT NULL,
248 	p_dummy_in6 IN NUMBER DEFAULT NULL,
249 	p_dummy_in7 IN NUMBER DEFAULT NULL,
250 	p_dummy_in8 IN NUMBER DEFAULT NULL,
251 	p_dummy_in9 IN NUMBER DEFAULT NULL,
252 	p_dummy_in10 IN NUMBER DEFAULT NULL,
253 	p_sequence_num OUT NOCOPY NUMBER,
254 	p_dummy_out2 OUT NOCOPY NUMBER,
255 	p_dummy_out3 OUT NOCOPY NUMBER,
256 	p_dummy_out4 OUT NOCOPY NUMBER,
257 	p_dummy_out5 OUT NOCOPY NUMBER,
258 	p_dummy_out6 OUT NOCOPY NUMBER,
259 	p_dummy_out7 OUT NOCOPY NUMBER,
260 	p_dummy_out8 OUT NOCOPY NUMBER,
261 	p_dummy_out9 OUT NOCOPY NUMBER,
262 	p_dummy_out10 OUT NOCOPY NUMBER
263 	) AS
264 
265 v_sequence_num	NUMBER := NULL;
266 v_progress	VARCHAR2(3);
267 
268 BEGIN
269 
270 v_progress := '030';
271 
272 compare_po(
273 	p_header_id,
274 	p_release_id,
275 	p_revision_num,
276 	'PREVIOUS',
277 	v_sequence_num );
278 
279 p_sequence_num := v_sequence_num;
280 
281 EXCEPTION
282 WHEN others THEN
283 	PO_MESSAGE_S.SQL_ERROR(
284 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_PREVIOUS',
285 		v_progress,
286 		sqlcode );
287 	RAISE;
288 
289 END compare_po_to_previous;
290 
291 
292 /*********************************************************************
293  * NAME
294  * compare_po_to_lastsign
295  *
296  * PURPOSE
297  * Call the procedure COMPARE_PO with the LASTSIGN as comparison flag.
298  *
299  * ARGUMENTS
300  * p_header_id		Unique identified for the current PO in
301  *			PO_HEADERS_ARCHIVE_ALL table
302  * p_release_id		Unique identifier for the PO release in
303  *			PO_RELEASES_ARCHIVE_ALL table
304  * p_revision_num	Current PO revision number
305  * p_dummy_in4		Not required
306  * p_dummy_in5		Not required
307  * p_dummy_in6		Not required
308  * p_dummy_in7		Not required
309  * p_dummy_in8		Not required
310  * p_dummy_in9		Not required
311  * p_dummy_in10		Not required
312  * p_sequence_num	Sequence number to identify the comparison
313  *			results for a specific record in
314  *			ICX_PO_REVISIONS_TEMP table.
315  * p_dummy_out2		Not required
316  * p_dummy_out3		Not required
317  * p_dummy_out4		Not required
318  * p_dummy_out5		Not required
319  * p_dummy_out6		Not required
320  * p_dummy_out7		Not required
321  * p_dummy_out8		Not required
322  * p_dummy_out9		Not required
323  * p_dummy_out10	Not required
324  *
325  * NOTES
326  * This procedures serves the purpose of a link from WAD to call the
327  * procedure COMPARE_PO.  There is no way to store the comparison flag
328  * in the link.  Therefore, the link calls this procedure, which calls
329  * COMPARE_PO with the appropriate flag.
330  *
331  * Normally, you do not want to call this procedure directly.  You can
332  * simply call COMPARE_PO with the appropriate parameters.
333  *
334  * HISTORY
335  * 12-SEP-2003	ammitra   created
336  ********************************************************************/
337 PROCEDURE compare_po_to_lastsign(
338 	p_header_id IN NUMBER,
339 	p_release_id IN NUMBER,
340 	p_revision_num IN NUMBER,
341 	p_dummy_in4 IN NUMBER DEFAULT NULL,
342 	p_dummy_in5 IN NUMBER DEFAULT NULL,
343 	p_dummy_in6 IN NUMBER DEFAULT NULL,
344 	p_dummy_in7 IN NUMBER DEFAULT NULL,
345 	p_dummy_in8 IN NUMBER DEFAULT NULL,
346 	p_dummy_in9 IN NUMBER DEFAULT NULL,
347 	p_dummy_in10 IN NUMBER DEFAULT NULL,
348 	p_sequence_num OUT NOCOPY NUMBER,
349 	p_dummy_out2 OUT NOCOPY NUMBER,
350 	p_dummy_out3 OUT NOCOPY NUMBER,
351 	p_dummy_out4 OUT NOCOPY NUMBER,
352 	p_dummy_out5 OUT NOCOPY NUMBER,
353 	p_dummy_out6 OUT NOCOPY NUMBER,
354 	p_dummy_out7 OUT NOCOPY NUMBER,
355 	p_dummy_out8 OUT NOCOPY NUMBER,
356 	p_dummy_out9 OUT NOCOPY NUMBER,
357 	p_dummy_out10 OUT NOCOPY NUMBER
358 	) AS
359 
360 v_sequence_num	NUMBER := NULL;
361 v_progress	VARCHAR2(3);
362 
363 BEGIN
364 
365 v_progress := '030';
366 
367 compare_po(
368 	p_header_id,
369 	p_release_id,
370 	p_revision_num,
371 	'LASTSIGN',
372 	v_sequence_num );
373 
374 p_sequence_num := v_sequence_num;
375 
376 EXCEPTION
377 WHEN others THEN
378 	PO_MESSAGE_S.SQL_ERROR(
379 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_PREVIOUS',
380 		v_progress,
381 		sqlcode );
382 	RAISE;
383 
384 END compare_po_to_lastsign;
385 
386 
387 /*********************************************************************
388  * NAME
389  * compare_po
390  *
391  * PURPOSE
392  * Compare the a PO with the previous or the original
393  * revision---including all lines, shipments, and distributions.
394  *
395  * ARGUMENTS
396  * p_header_id		Unique identified for the current PO in
397  *			PO_HEADERS_ARCHIVE_ALL table
398  * p_release_id		Unique identifier for the PO release in
399  *			PO_RELEASES_ARCHIVE_ALL table
400  * p_revision_num	Current PO revision number
401  * p_comparison_flag	Indicator to compare the PO with the previous
402  *			or original revision
403  * p_sequence_num	Sequence number to identify the comparison
404  *			results for a specific record in
405  *			ICX_PO_REVISIONS_TEMP table.
406  *
407  * NOTES
408  *
409  * HISTORY
410  * 01-SEP-1997	Rami Haddad	Created
411  * 05-SEP-1997	Matt Denton	Debugged
412  * 25-NOV-1997	Rami Haddad	Handle comparison flag 'ALL,' which
413  *				loops through and compare all
414  *				revisions.
415  ********************************************************************/
416 PROCEDURE compare_po(
417 	p_header_id IN NUMBER,
418 	p_release_id IN NUMBER,
419 	p_revision_num IN NUMBER,
420 	p_comparison_flag IN VARCHAR2,
421 	p_sequence_num OUT NOCOPY NUMBER
422 	) AS
423 
424 v_sequence_num		NUMBER;
425 v_revision_counter	NUMBER := p_revision_num;
426 v_comparison_flag	VARCHAR2( 80 ) := p_comparison_flag;
427 v_progress		VARCHAR2(3);
428 l_last_sign_revision    NUMBER;
429 x_base_revision         NUMBER;
430 x_global_agree_flag     varchar2(1);
431 
432 BEGIN
433 
434 v_progress := '040';
435 
436 SELECT	icx_po_history_details_s.nextval
437 INTO	v_sequence_num
438 FROM	DUAL;
439 p_sequence_num := v_sequence_num;
440 
441 
442 select nvl(global_agreement_flag,'N')
443 into   x_global_agree_flag
444 from   po_headers_all
445 where  po_header_id = p_header_id;
446 
447 IF v_comparison_flag = 'ALL'  then
448 	v_comparison_flag := 'PREVIOUS';
449 	x_base_revision := 1;
450 END IF;
451 
452 LOOP
453 	v_progress := '050';
454 	compare_headers(
455 		p_header_id,
456 		p_release_id,
457 		v_revision_counter,
458 		v_comparison_flag,
459 		v_sequence_num ,
460 		p_comparison_flag);
461 
462 	if (x_global_agree_flag = 'Y')  then
463 		compare_ga_assignments(
464 			p_header_id,
465 			v_revision_counter,
466 			v_comparison_flag,
467 			v_sequence_num );
468 	end if;
469 
470 	v_progress := '060';
471 
472 -- Bug# 1761302. Added the IF THEN condition as there is
473 -- no change in lines for revisions against Releases.
474 
475         IF (p_release_id is NULL) THEN
476 	compare_lines(
477 		p_header_id,
478 		v_revision_counter,
479 		v_comparison_flag,
480 		v_sequence_num);
481          END IF;
482 
483 
484 	compare_pdiffs_line(
485 		p_header_id,
486 		v_revision_counter,
487 		v_comparison_flag,
488 		v_sequence_num);
489 
490 
491 	compare_pdiffs_ship(
492 		p_header_id,
493 		v_revision_counter,
494 		v_comparison_flag,
495 		v_sequence_num);
496 
497 
498 
499 	v_progress := '070';
500 	compare_locations(
501 		p_header_id,
502 		p_release_id,
503 		v_revision_counter,
504 		v_comparison_flag,
505 		v_sequence_num);
506 
507 	v_progress := '080';
508 
509 	-- forward port 5392285 - comparing distributions
510 	--bug # 366756 not comparing distribututions
511 
512 	compare_distributions(
513 		p_header_id,
514 		p_release_id,
515 		v_revision_counter,
516 		v_comparison_flag,
517 		v_sequence_num);
518 
519 
520 
521 	v_revision_counter := v_revision_counter - 1;
522 
523 	IF (v_revision_counter < x_base_revision) OR
524            (p_comparison_flag  <> 'ALL')
525 
526 	THEN
527 		EXIT;
528 	END IF;
529 
530 END LOOP;
531 
532 v_progress := '090';
533 pos_compare_revisions.verify_no_differences( v_sequence_num );
534 
535 EXCEPTION
536 WHEN others THEN
537 	PO_MESSAGE_S.SQL_ERROR(
538 		'PO_REVISION_DIFFERENCES.COMPARE_PO',
539 		v_progress,
540 		sqlcode );
541 	RAISE;
542 
543 END compare_po;
544 
545 
546 
547 /*********************************************************************
548  * NAME
549  * compare_headers
550  *
551  * PURPOSE
552  * Compare two headers, the first is according to the passed in
553  * parameters, P_HEADER_ID and P_REVISION_NUM.  The second depends on
554  * the comparison flag, either the original PO (revision 0), or the
555  * previous revision (P_REVISION_NUM - 1 ).
556  *
557  * ARGUMENTS
558  * p_header_id		Unique identified for the PO in
559  *			PO_HEADERS_ARCHIVE_ALL table
560  * p_release_id		Unique identifier for the PO release in
561  *			PO_RELEASES_ARCHIVE_ALL table
562  * p_revision_num	Current PO revision number
563  * p_comparison_flag	Indicator to compare the PO with the previous
564  *			or original revision
565  * p_sequence_num	Sequence number to identify the comparison
566  *			results for a specific record in
567  *			ICX_PO_REVISIONS_TEMP table.
568  *
569  * NOTES
570  *
571  * HISTORY
572  * 01-SEP-1997	Rami Haddad	Created
573  * 05-SEP-1997	Matt Denton	Debugged
574  ********************************************************************/
575 PROCEDURE compare_headers(
576 	p_header_id IN NUMBER,
577 	p_release_id IN NUMBER,
578 	p_revision_num IN NUMBER,
579 	p_comparison_flag IN VARCHAR2,
580 	p_sequence_num IN NUMBER,
581 	p_comparison_flag_org IN VARCHAR2
582 	) AS
583 
584 v_header_from		po_headers_archive_all%ROWTYPE;
585 v_header_to		po_headers_archive_all%ROWTYPE;
586 
587 v_release_from		po_releases_archive_all%ROWTYPE;
588 v_release_to		po_releases_archive_all%ROWTYPE;
589 
590 v_previous_revision_num	NUMBER;
591 v_progress		VARCHAR2(3);
592 l_msg_data              varchar2(2000);
593 l_msg_count             number;
594 l_revision_num          number;
595 l_signed_records        varchar2(20);
596 l_return_status         varchar2(20);
597 get_lastsign_rev_failed exception;
598 
599 BEGIN
600 
601 v_progress := '100';
602 
603 IF p_revision_num <= 0
604 THEN
605 	RETURN;
606 END IF;
607 
608 /* What is the revision number we will compare against? */
609 IF p_comparison_flag = 'ORIGINAL'
610 THEN
611 	v_previous_revision_num := 0;
612 ELSIF p_comparison_flag = 'LASTSIGN' then
613 
614   PO_CONTERMS_UTL_GRP.get_last_signed_revision(
615   p_api_version         =>   1.0,
616   p_init_msg_list       =>   FND_API.G_FALSE,
617   p_header_id           =>   p_header_id,
618   p_revision_num        =>   p_revision_num,
619   x_signed_revision_num =>   l_revision_num,
620   x_signed_records      =>   l_signed_records,
621   x_return_status       =>   l_return_status,
622   x_msg_data            =>   l_msg_data,
623   x_msg_count           =>   l_msg_count);
624 
625  if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
626   v_previous_revision_num := l_revision_num;
627  else
628    raise get_lastsign_rev_failed;
629  end if;
630 
631 ELSE
632 	v_previous_revision_num :=  p_revision_num - 1;
633 END IF;
634 
635 IF p_release_id IS NULL THEN
636 
637 	BEGIN
638 
639 		v_progress := '110';
640 		SELECT	*
641 		INTO	v_header_to
642 		FROM	po_headers_archive_all
643 		WHERE
644 			po_header_id = p_header_id
645 		AND	revision_num = p_revision_num;
646 
647 		EXCEPTION
648 		WHEN no_data_found THEN
649 			v_header_to := NULL;
650 
651 	END;
652 
653 	BEGIN
654 
655 		v_progress := '120';
656 		SELECT	*
657 		INTO	v_header_from
658 		FROM	po_headers_archive_all
659 		WHERE
660 			po_header_id = p_header_id
661 		AND	revision_num = v_previous_revision_num;
662 
663 		EXCEPTION
664 		WHEN no_data_found THEN
665 			v_header_from := NULL;
666 
667 	END;
668 
669 	v_progress := '130';
670 	pos_compare_revisions.compare_headers(
671 		v_header_from,
672 		v_header_to,
673 		p_sequence_num,
674 		p_comparison_flag_org );
675 
676 ELSE
677 
678 	BEGIN
679 
680 		v_progress := '140';
681 		SELECT	*
682 		INTO	v_release_to
683 		FROM	po_releases_archive_all
684 		WHERE
685 			po_release_id = p_release_id
686 		AND	revision_num = p_revision_num;
687 
688 		EXCEPTION
689 		WHEN no_data_found THEN
690 			v_release_to := NULL;
691 
692 	END;
693 
694 	BEGIN
695 
696 		v_progress := '150';
697 		SELECT	*
698 		INTO	v_release_from
699 		FROM	po_releases_archive_all
700 		WHERE
701 			po_release_id = p_release_id
702 		AND	revision_num = v_previous_revision_num;
703 
704 		EXCEPTION
705 		WHEN no_data_found THEN
706 			v_release_from := NULL;
707 
708 	END;
709 
710 	v_progress := '160';
711 	pos_compare_revisions.compare_releases(
712 		v_release_from,
713 		v_release_to,
714 		p_sequence_num );
715 
716 END IF;
717 
718 EXCEPTION
719  WHEN get_lastsign_rev_failed THEN
720         PO_MESSAGE_S.SQL_ERROR(
721                 'PO_REVISION_DIFFERENCES.COMPARE_HEADERS',
722                 l_msg_data,
723                 sqlcode );
724 WHEN others THEN
725 	PO_MESSAGE_S.SQL_ERROR(
726 		'PO_REVISION_DIFFERENCES.COMPARE_HEADERS',
727 		v_progress,
728 		sqlcode );
729 	RAISE;
730 
731 END compare_headers;
732 
733 
734 
735 /********************************************************************
736 * NAME
737 * compare_ga_assignments
738 * PURPOSE
739 * Compare Global Agreement Org Assignments for a Global Agreement
740 * ARGUMENTS
741 * p_header_id		Unique identified for the PO in
742 *			PO_HEADERS_ARCHIVE_ALL table
743 * p_release_id		Unique identifier for the PO release in
744 *			PO_RELEASES_ARCHIVE_ALL table
745 * p_revision_num	Current PO revision number
746 * p_comparison_flag	Indicator to compare the PO with the previous
747 *			or original revision
748 * p_sequence_num	Sequence number to identify the comparison
749 *			results for a specific record in
750 *			ICX_PO_REVISIONS_TEMP table.
751 *
752 * NOTES
753 *
754 * HISTORY
755 * 19-SEP-2003	Amitabh Mitra	Added
756 ********************************************************************/
757 
758 PROCEDURE compare_ga_assignments(
759 	p_header_id IN NUMBER,
760 	p_revision_num IN NUMBER,
761 	p_comparison_flag IN VARCHAR2,
762 	p_sequence_num IN NUMBER
763 	) AS
764 
765 CURSOR	current_ga_assign_cursor(
766 	current_header_id NUMBER,
767 	current_revision_num NUMBER ) IS
768 SELECT 	*
769 FROM 	po_ga_org_assignments_archive pga1
770 WHERE
771 	po_header_id = current_header_id AND
772 	revision_num = (SELECT	MAX( revision_num )
773 	FROM	po_ga_org_assignments_archive pga2
774 	WHERE
775 		revision_num <= current_revision_num
776 	AND     pga2.organization_id = pga1.organization_id
777 	AND     pga2.po_header_id = pga1.po_header_id
778 	);
779 
780 
781 v_ga_ass_to	po_ga_org_assignments_archive%ROWTYPE;
782 v_ga_ass_from	po_ga_org_assignments_archive%ROWTYPE;
783 
784 v_previous_revision_num	NUMBER;
785 v_progress		VARCHAR2(3);
786 
787 BEGIN
788 
789 v_progress := '270';
790 
791 IF p_revision_num <= 0 THEN
792 	RETURN;
793 END IF;
794 
795 IF p_comparison_flag = 'ORIGINAL'
796 THEN
797 	v_previous_revision_num := 0;
798 ELSE
799 	v_previous_revision_num :=  p_revision_num - 1;
800 END IF;
801 
802 FOR v_ga_ass_to IN current_ga_assign_cursor(
803 	p_header_id,
804 	p_revision_num
805 	) LOOP
806 	IF v_ga_ass_to.revision_num > v_previous_revision_num
807 	THEN
808 
809 		BEGIN
810 		v_progress := '180';
811 
812 
813 		SELECT	*
814 		INTO	v_ga_ass_from
815 		FROM	po_ga_org_assignments_archive
816 		WHERE
817 			revision_num = (
818 			SELECT	MAX( revision_num )
819 			FROM   po_ga_org_assignments_archive
820 			WHERE
821 				revision_num <= v_previous_revision_num
822 			AND	organization_id = v_ga_ass_to.organization_id
823 			AND     po_header_id    = v_ga_ass_to.po_header_id
824 			)
825 		AND	organization_id = v_ga_ass_to.organization_id
826 		AND     po_header_id = v_ga_ass_to.po_header_id;
827 
828 		EXCEPTION
829 		WHEN no_data_found THEN
830 			v_ga_ass_from := NULL;
831 		END;
832 
833 		v_progress := '290';
834 		pos_compare_revisions.compare_ga_assignments(
835 			v_ga_ass_from,
836 			v_ga_ass_to,
837 			p_sequence_num);
838 	END IF;
839    END LOOP;
840 EXCEPTION
841 WHEN others THEN
842 	PO_MESSAGE_S.SQL_ERROR(
843 		'PO_REVISION_DIFFERENCES.COMPARE_GA_ASSIGNMENTS',
844 		v_progress,
845 		sqlcode );
846 	RAISE;
847 
848 END compare_ga_assignments;
849 
850 
851 
852 /*********************************************************************
853  * NAME
854  * compare_lines
855  *
856  * PURPOSE
857  * Compare lines for two POs, the first is according to the passed in
858  * parameters, P_HEADER_ID and P_REVISION_NUM.  The second depends on
859  * the comparison flag, either the original PO (revision 0), or the
860  * previous revision (P_REVISION_NUM - 1 ).
861  *
862  * ARGUMENTS
863  * p_header_id		Unique identified for the PO in
864  *			PO_HEADERS_ARCHIVE_ALL table
865  * p_release_id		Unique identifier for the PO release in
866  *			PO_RELEASES_ARCHIVE_ALL table
867  * p_revision_num	Current PO revision number
868  * p_comparison_flag	Indicator to compare the PO with the previous
869  *			or original revision
870  * p_sequence_num	Sequence number to identify the comparison
871  *			results for a specific record in
872  *			ICX_PO_REVISIONS_TEMP table.
873  *
874  * NOTES
875  *
876  * HISTORY
877  * 01-SEP-1997	Rami Haddad	Created
878  * 05-SEP-1997	Matt Denton	Debugged
879  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
880  *				revision of lines for the PO, given
881  *				its revision number, p_revision_num.
882  ********************************************************************/
883 PROCEDURE compare_lines(
884 	p_header_id IN NUMBER,
885 	p_revision_num IN NUMBER,
886 	p_comparison_flag IN VARCHAR2,
887 	p_sequence_num IN NUMBER
888 	) AS
889 
890 CURSOR	current_lines_cursor(
891 	current_header_id NUMBER,
892 	current_revision_num NUMBER ) IS
893 SELECT 	*
894 FROM 	po_lines_archive_all pla1
895 WHERE
896 	po_header_id = current_header_id
897 AND	revision_num = (
898 	SELECT	MAX( revision_num )
899 	FROM	po_lines_archive_all pla2
900 	WHERE
901 		revision_num <= current_revision_num
902 	AND	pla2.po_line_id = pla1.po_line_id
903 	);
904 
905 v_line_to	po_lines_archive_all%ROWTYPE;
906 v_line_from	po_lines_archive_all%ROWTYPE;
907 
908 v_previous_revision_num	NUMBER;
909 v_progress		VARCHAR2(3);
910 
911 BEGIN
912 
913 v_progress := '170';
914 
915 IF p_revision_num <= 0 THEN
916 	RETURN;
917 END IF;
918 
919 IF p_comparison_flag = 'ORIGINAL'
920 THEN
921 	v_previous_revision_num := 0;
922 ELSE
923 	v_previous_revision_num :=  p_revision_num - 1;
924 END IF;
925 
926 FOR v_line_to IN current_lines_cursor(
927 	p_header_id,
928 	p_revision_num
929 	) LOOP
930 
931 	/* Compare the lines only if the current line has a revision
932 	 * greater than the calculated revision number of previous
933 	 * line.
934 	 */
935 	IF v_line_to.revision_num > v_previous_revision_num
936 	THEN
937 
938 		BEGIN
939 
940 		v_progress := '180';
941 		SELECT	*
942 		INTO	v_line_from
943 		FROM	po_lines_archive_all
944 		WHERE
945 			revision_num = (
946 			SELECT	MAX( revision_num )
947 			FROM	po_lines_archive_all
948 			WHERE
949 				revision_num <=
950 					v_previous_revision_num
951 			AND	po_line_id = v_line_to.po_line_id
952 			)
953 		AND	po_line_id = v_line_to.po_line_id;
954 
955 		EXCEPTION
956 		WHEN no_data_found THEN
957 			v_line_from := NULL;
958 
959 		END;
960 
961 		v_progress := '190';
962 		pos_compare_revisions.compare_lines(
963 			v_line_from,
964 			v_line_to,
965 			p_sequence_num);
966 	END IF;
967 
968 END LOOP;
969 
970 EXCEPTION
971 WHEN others THEN
972 	PO_MESSAGE_S.SQL_ERROR(
973 		'PO_REVISION_DIFFERENCES.COMPARE_LINES',
974 		v_progress,
975 		sqlcode );
976 	RAISE;
977 
978 END compare_lines;
979 
980 
981 
982 PROCEDURE compare_pdiffs_line(
983 	p_header_id IN NUMBER,
984 	p_revision_num IN NUMBER,
985 	p_comparison_flag IN VARCHAR2,
986 	p_sequence_num IN NUMBER
987 	) AS
988 
989 CURSOR	current_pdiffs_cursor(
990 	current_header_id NUMBER,
991 	current_revision_num NUMBER ) IS
992 
993 SELECT 	PDIFF1.PRICE_DIFFERENTIAL_ID,
994 	PDIFF1.PRICE_DIFFERENTIAL_NUM,
995 	PDIFF1.ENTITY_ID           ,
996 	PDIFF1.ENTITY_TYPE         ,
997 	PDIFF1.PRICE_TYPE          ,
998 	PDIFF1.REVISION_NUM        ,
999 	PDIFF1.ENABLED_FLAG        ,
1000 	PDIFF1.MIN_MULTIPLIER      ,
1001 	PDIFF1.LATEST_EXTERNAL_FLAG,
1002 	PDIFF1.MAX_MULTIPLIER      ,
1003 	PDIFF1.MULTIPLIER          ,
1004 	PDIFF1.CREATED_BY          ,
1005 	PDIFF1.CREATION_DATE       ,
1006 	PDIFF1.LAST_UPDATED_BY     ,
1007 	PDIFF1.LAST_UPDATE_DATE    ,
1008 	PDIFF1.LAST_UPDATE_LOGIN
1009 FROM 	po_price_differentials_archive pdiff1,po_lines_all pol
1010 WHERE
1011 	pol.po_header_id = current_header_id and
1012 	pol.po_line_id = pdiff1.entity_id and
1013  	pol.revision_num = (
1014 	SELECT	MAX( pdiff2.revision_num )
1015 	FROM	po_price_differentials_archive pdiff2,
1016 		po_lines_all  pol2
1017 	WHERE
1018 		pol2.po_header_id = current_header_id and
1019 		pol2.po_line_id = pdiff2.entity_id and
1020 		pdiff2.entity_type in ('PO LINE','BLANKET LINE') and
1021 		pdiff2.revision_num <= current_revision_num
1022 	AND	pdiff1.price_differential_id = pdiff2.price_differential_id
1023 	);
1024 
1025 
1026 v_pdiff_from	po_price_differentials_archive%ROWTYPE;
1027 v_pdiff_to	po_price_differentials_archive%ROWTYPE;
1028 
1029 
1030 v_previous_revision_num	NUMBER;
1031 v_progress		VARCHAR2(3);
1032 
1033 BEGIN
1034 
1035 v_progress := '170';
1036 
1037 IF p_revision_num <= 0 THEN
1038 	RETURN;
1039 END IF;
1040 
1041 IF p_comparison_flag = 'ORIGINAL'
1042 THEN
1043 	v_previous_revision_num := 0;
1044 ELSE
1045 	v_previous_revision_num :=  p_revision_num - 1;
1046 END IF;
1047 
1048 
1049 FOR v_pdiff_to IN current_pdiffs_cursor(
1050 	p_header_id,
1051 	p_revision_num
1052 	) LOOP
1053 
1054 	IF v_pdiff_to.revision_num > v_previous_revision_num
1055 	THEN
1056 		BEGIN
1057 
1058 		v_progress := '180';
1059 
1060 		SELECT	*
1061 		INTO	v_pdiff_from
1062 		FROM	po_price_differentials_archive
1063 		WHERE
1064 			revision_num = (
1065 			SELECT	MAX( revision_num )
1066 			FROM	po_price_differentials_archive
1067 			WHERE
1068 				revision_num <= v_previous_revision_num
1069 			AND	price_differential_id = v_pdiff_to.price_differential_id
1070 			)
1071 		AND	price_differential_id = v_pdiff_to.price_differential_id;
1072 
1073 		EXCEPTION
1074 		WHEN no_data_found THEN
1075 			v_pdiff_from := NULL;
1076 
1077 		END;
1078 
1079 		v_progress := '190';
1080 		pos_compare_revisions.compare_price_diffs(
1081 			v_pdiff_from,
1082 			v_pdiff_to,
1083 			p_sequence_num);
1084 	END IF;
1085 
1086 
1087 END LOOP;
1088 EXCEPTION
1089 WHEN others THEN
1090 	PO_MESSAGE_S.SQL_ERROR(
1091 		'PO_REVISION_DIFFERENCES.COMPARE_LINES',
1092 		v_progress,
1093 		sqlcode );
1094 	RAISE;
1095 
1096 END compare_pdiffs_line;
1097 
1098 
1099 
1100 PROCEDURE compare_pdiffs_ship(
1101 	p_header_id IN NUMBER,
1102 	p_revision_num IN NUMBER,
1103 	p_comparison_flag IN VARCHAR2,
1104 	p_sequence_num IN NUMBER
1105 	) AS
1106 
1107 CURSOR	current_pdiffs_cursor(
1108 	current_header_id NUMBER,
1109 	current_revision_num NUMBER ) IS
1110 
1111 SELECT 	PDIFF1.PRICE_DIFFERENTIAL_ID,
1112 	PDIFF1.PRICE_DIFFERENTIAL_NUM,
1113 	PDIFF1.ENTITY_ID           ,
1114 	PDIFF1.ENTITY_TYPE         ,
1115 	PDIFF1.PRICE_TYPE          ,
1116 	PDIFF1.REVISION_NUM        ,
1117 	PDIFF1.ENABLED_FLAG        ,
1118 	PDIFF1.MIN_MULTIPLIER      ,
1119 	PDIFF1.LATEST_EXTERNAL_FLAG,
1120 	PDIFF1.MAX_MULTIPLIER      ,
1121 	PDIFF1.MULTIPLIER          ,
1122 	PDIFF1.CREATED_BY          ,
1123 	PDIFF1.CREATION_DATE       ,
1124 	PDIFF1.LAST_UPDATED_BY     ,
1125 	PDIFF1.LAST_UPDATE_DATE    ,
1126 	PDIFF1.LAST_UPDATE_LOGIN
1127 FROM 	po_price_differentials_archive pdiff1,po_line_locations_all pll
1128 WHERE
1129 	pll.po_header_id = current_header_id and
1130 	pll.line_location_id = pdiff1.entity_id  and
1131  	pll.revision_num = (
1132 	SELECT	MAX( pdiff2.revision_num )
1133 	FROM	po_price_differentials_archive pdiff2,
1134 		po_line_locations_all  pll2
1135 	WHERE
1136 		pll2.po_header_id = current_header_id and
1137 		pll2.line_location_id = pdiff2.entity_id and
1138 		pdiff2.entity_type in ('PRICE BREAK') and
1139 		pdiff2.revision_num <= current_revision_num  and
1140 		pdiff1.price_differential_id = pdiff2.price_differential_id
1141 	);
1142 
1143 
1144 v_pdiff_from	po_price_differentials_archive%ROWTYPE;
1145 v_pdiff_to	po_price_differentials_archive%ROWTYPE;
1146 
1147 
1148 v_previous_revision_num	NUMBER;
1149 v_progress		VARCHAR2(3);
1150 
1151 BEGIN
1152 
1153 v_progress := '170';
1154 
1155 IF p_revision_num <= 0 THEN
1156 	RETURN;
1157 END IF;
1158 
1159 IF p_comparison_flag = 'ORIGINAL'
1160 THEN
1161 	v_previous_revision_num := 0;
1162 ELSE
1163 	v_previous_revision_num :=  p_revision_num - 1;
1164 END IF;
1165 
1166 FOR v_pdiff_to IN current_pdiffs_cursor(
1167 	p_header_id,
1168 	p_revision_num
1169 	) LOOP
1170 
1171 	IF v_pdiff_to.revision_num > v_previous_revision_num
1172 	THEN
1173 		BEGIN
1174 
1175 		v_progress := '180';
1176 
1177 		SELECT	*
1178 		INTO	v_pdiff_from
1179 		FROM	po_price_differentials_archive
1180 		WHERE
1181 			revision_num = (
1182 			SELECT	MAX( revision_num )
1183 			FROM	po_price_differentials_archive
1184 			WHERE
1185 				revision_num <= v_previous_revision_num
1186 			AND	price_differential_id = v_pdiff_to.price_differential_id
1187 			)
1188 		AND	price_differential_id = v_pdiff_to.price_differential_id;
1189 
1190 		EXCEPTION
1191 		WHEN no_data_found THEN
1192 			v_pdiff_from := NULL;
1193 
1194 		END;
1195 
1196 		pos_compare_revisions.compare_price_diffs(
1197 			v_pdiff_from,
1198 			v_pdiff_to,
1199 			p_sequence_num);
1200 	END IF;
1201 
1202 
1203 
1204 END LOOP;
1205 
1206 EXCEPTION
1207 WHEN others THEN
1208 	PO_MESSAGE_S.SQL_ERROR(
1209 		'PO_REVISION_DIFFERENCES.COMPARE_LINES',
1210 		v_progress,
1211 		sqlcode );
1212 	RAISE;
1213 
1214 END compare_pdiffs_ship;
1215 
1216 
1217 
1218 
1219 /*********************************************************************
1220  * NAME
1221  * compare_locations
1222  *
1223  * PURPOSE
1224  * Compare shipments for two POs, the first is according to the passed
1225  * in parameters, P_HEADER_ID and P_REVISION_NUM.  The second depends
1226  * on the comparison flag, either the original PO (revision 0), or the
1227  * previous revision (P_REVISION_NUM - 1 ).
1228  *
1229  * ARGUMENTS
1230  * p_header_id		Unique identified for the PO in
1231  *			PO_HEADERS_ARCHIVE_ALL table
1232  * p_release_id		Unique identifier for the PO release in
1233  *			PO_RELEASES_ARCHIVE_ALL table
1234  * p_revision_num	Current PO revision number
1235  * p_comparison_flag	Indicator to compare the PO with the previous
1236  *			or original revision
1237  * p_sequence_num	Sequence number to identify the comparison
1238  *			results for a specific record in
1239  *			ICX_PO_REVISIONS_TEMP table.
1240  *
1241  * NOTES
1242  *
1243  * HISTORY
1244  * 01-SEP-1997	Rami Haddad	Created
1245  * 05-SEP-1997	Matt Denton	Debugged
1246  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
1247  *				revision of shipments for the PO,
1248  *				given its revision number,
1249  *				p_revision_num.
1250  ********************************************************************/
1251 PROCEDURE compare_locations(
1252 	p_header_id IN NUMBER,
1253 	p_release_id IN NUMBER,
1254 	p_revision_num IN NUMBER,
1255 	p_comparison_flag IN VARCHAR2,
1256 	p_sequence_num IN NUMBER
1257 	) AS
1258 
1259 CURSOR	current_locations_cursor(
1260 		current_header_id NUMBER,
1261 		current_release_id NUMBER,
1262 		current_revision_num NUMBER ) IS
1263 SELECT	*
1264 FROM	po_line_locations_archive_all plla1
1265 WHERE	po_header_id = current_header_id
1266 AND	NVL( po_release_id, -99 ) = current_release_id
1267 AND	revision_num = (
1268 	SELECT	MAX( revision_num )
1269 	FROM	po_line_locations_archive_all plla2
1270 	WHERE
1271 		revision_num <= current_revision_num
1272 	AND	plla2.line_location_id = plla1.line_location_id
1273 	);
1274 
1275 v_loc_from		po_line_locations_archive_all%ROWTYPE;
1276 v_loc_to		po_line_locations_archive_all%ROWTYPE;
1277 
1278 v_previous_revision_num	NUMBER;
1279 v_progress		VARCHAR2(3);
1280 
1281 BEGIN
1282 
1283 v_progress := '200';
1284 
1285 IF p_revision_num <= 0 THEN
1286 	RETURN;
1287 END IF;
1288 
1289 IF p_comparison_flag = 'ORIGINAL'
1290 THEN
1291 	v_previous_revision_num := 0;
1292 ELSE
1293 	v_previous_revision_num :=  p_revision_num - 1;
1294 END IF;
1295 
1296 FOR v_loc_to in current_locations_cursor(
1297 	p_header_id,
1298 	NVL( p_release_id, -99 ),
1299 	p_revision_num
1300 	) LOOP
1301 
1302 	/* Compare the lines only if the current line has a revision
1303  	 * greater than the calculated revision number of previous
1304 	 * line.
1305 	 */
1306 	IF v_loc_to.revision_num > v_previous_revision_num THEN
1307 
1308 		BEGIN
1309 
1310 		v_progress := '210';
1311 		SELECT	*
1312 		INTO	v_loc_from
1313 		FROM	po_line_locations_archive_all
1314 		WHERE
1315 			revision_num = (
1316 			SELECT	MAX( revision_num )
1317 			FROM	po_line_locations_archive_all
1318 			WHERE
1319 				revision_num <=
1320 					v_previous_revision_num
1321 			AND	line_location_id =
1322 					v_loc_to.line_location_id
1323 			)
1324 		AND	line_location_id = v_loc_to.line_location_id;
1325 
1326 		EXCEPTION
1327 		WHEN no_data_found THEN
1328 			v_loc_from := NULL;
1329 
1330 		END;
1331 
1332 		v_progress := '220';
1333 		pos_compare_revisions.compare_locations(
1334 			v_loc_from,
1335 			v_loc_to,
1336 			p_sequence_num );
1337 		END IF;
1338 
1339 END LOOP;
1340 
1341 EXCEPTION
1342 WHEN others THEN
1343 	PO_MESSAGE_S.SQL_ERROR(
1344 		'PO_REVISION_DIFFERENCES.COMPARE_LINES',
1345 		v_progress,
1346 		sqlcode );
1347 	RAISE;
1348 
1349 END compare_locations;
1350 
1351 
1352 
1353 /*********************************************************************
1354  * NAME
1355  * compare_distributions
1356  *
1357  * PURPOSE
1358  * Compare distributions for two POs, the first is according to the
1359  * passed in parameters, P_HEADER_ID and P_REVISION_NUM.  The second
1360  * depends on the comparison flag, either the original PO (revision
1361  * 0), or the previous revision (P_REVISION_NUM - 1 ).
1362  *
1363  * ARGUMENTS
1364  * p_header_id		Unique identified for the PO in
1365  *			PO_HEADERS_ARCHIVE_ALL table
1366  * p_release_id		Unique identifier for the PO release in
1367  *			PO_RELEASES_ARCHIVE_ALL table
1368  * p_revision_num	Current PO revision number
1369  * p_comparison_flag	Indicator to compare the PO with the previous
1370  *			or original revision
1371  * p_sequence_num	Sequence number to identify the comparison
1372  *			results for a specific record in
1373  *			ICX_PO_REVISIONS_TEMP table.
1374  *
1375  * NOTES
1376  *
1377  * HISTORY
1378  * 01-SEP-1997	Rami Haddad	Created
1379  * 05-SEP-1997	Matt Denton	Debugged
1380  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
1381  *				revision of distributions for the PO,
1382  *				given its revision number,
1383  *				p_revision_num.
1384  ********************************************************************/
1385 PROCEDURE compare_distributions(
1386 	p_header_id IN NUMBER,
1387 	p_release_id IN NUMBER,
1388 	p_revision_num IN NUMBER,
1389 	p_comparison_flag IN VARCHAR2,
1390 	p_sequence_num IN NUMBER
1391 	) AS
1392 
1393 CURSOR	current_distributions_cursor(
1394 	current_header_id NUMBER,
1395 	current_release_id NUMBER,
1396 	current_revision_num NUMBER
1397 	) IS
1398 SELECT	*
1399 FROM	po_distributions_archive_all pda1
1400 WHERE
1401 	po_header_id = current_header_id
1402 AND	NVL( po_release_id, -99 ) = current_release_id
1403 AND	revision_num = (
1404 	SELECT	MAX( revision_num )
1405 	FROM	po_distributions_archive_all pda2
1406 	WHERE
1407 		revision_num <= current_revision_num
1408 	AND	pda2.po_distribution_id = pda1.po_distribution_id
1409 	);
1410 
1411 v_dist_from		po_distributions_archive_all%ROWTYPE;
1412 v_dist_to		po_distributions_archive_all%ROWTYPE;
1413 
1414 v_previous_revision_num	NUMBER;
1415 v_progress		VARCHAR2(3);
1416 
1417 BEGIN
1418 
1419 v_progress := '230';
1420 
1421 IF p_revision_num <= 0 THEN
1422 	RETURN;
1423 END IF;
1424 
1425 IF p_comparison_flag = 'ORIGINAL' THEN
1426 	v_previous_revision_num := 0;
1427 ELSE
1428 	v_previous_revision_num :=  p_revision_num - 1;
1429 END IF;
1430 
1431 FOR v_dist_to in current_distributions_cursor(
1432 	p_header_id,
1433 	NVL( p_release_id, -99 ),
1434 	p_revision_num
1435 	) LOOP
1436 
1437 	/* Compare the lines only if the current line has a revision
1438 	 * greater than the calculated revision number of previous
1439 	 * line.
1440 	 */
1441 	IF v_dist_to.revision_num > v_previous_revision_num
1442 	THEN
1443 
1444 		BEGIN
1445 
1446 		v_progress := '240';
1447 		SELECT	*
1448 		INTO	v_dist_from
1449 		FROM	po_distributions_archive_all
1450 		WHERE
1451 			revision_num = (
1452 			SELECT	MAX( revision_num )
1453 			FROM	po_distributions_archive_all
1454 			WHERE	revision_num <=
1455 				v_previous_revision_num
1456 			AND	po_distribution_id =
1457 				v_dist_to.po_distribution_id
1458 			)
1459 		AND	po_distribution_id =
1460 			v_dist_to.po_distribution_id;
1461 
1462 		EXCEPTION
1463 		WHEN no_data_found THEN
1464 			v_dist_from := NULL;
1465 
1466 		END;
1467 
1468 		v_progress := '250';
1469 		pos_compare_revisions.compare_distributions(
1470 			v_dist_from,
1471 			v_dist_to,
1472 			p_sequence_num );
1473 	END IF;
1474 
1475 END LOOP;
1476 
1477 EXCEPTION
1478 WHEN others THEN
1479 	PO_MESSAGE_S.SQL_ERROR(
1480 		'PO_REVISION_DIFFERENCES.COMPARE_DISTRIBUTIONS',
1481 		v_progress,
1482 		sqlcode );
1483 	RAISE;
1484 
1485 END compare_distributions;
1486 
1487 
1488 
1489 /*********************************************************************
1490  * NAME
1491  * compare_line_to_all
1492  *
1493  * PURPOSE
1494  * Call the procedure COMPARE_PO_LINE with ALL as comparison flag.
1495  *
1496  * ARGUMENTS
1497  * p_line_id		Unique identified for the current PO line in
1498  *			PO_LINES_ARCHIVE_ALL table
1499  * p_release_id		Unique identifier for the PO release in
1500  *			PO_RELEASES_ARCHIVE_ALL table
1501  * p_revision_num	Current PO line revision number
1502  * p_dummy_in4		Not required
1503  * p_dummy_in5		Not required
1504  * p_dummy_in6		Not required
1505  * p_dummy_in7		Not required
1506  * p_dummy_in8		Not required
1507  * p_dummy_in9		Not required
1508  * p_dummy_in10		Not required
1509  * p_sequence_num	Sequence number to identify the comparison
1510  *			results for a specific record in
1511  *			ICX_PO_REVISIONS_TEMP table.
1512  * p_dummy_out2		Not required
1513  * p_dummy_out3		Not required
1514  * p_dummy_out4		Not required
1515  * p_dummy_out5		Not required
1516  * p_dummy_out6		Not required
1517  * p_dummy_out7		Not required
1518  * p_dummy_out8		Not required
1519  * p_dummy_out9		Not required
1520  * p_dummy_out10	Not required
1521  *
1522  * NOTES
1523  * This procedures serves the purpose of a link from WAD to call the
1524  * procedure COMPARE_PO_LINE.  There is no way to store the comparison
1525  * flag in the link.  Therefore, the link calls this procedure, which
1526  * calls COMPARE_PO_LINE with the appropriate flag.
1527  *
1528  * Normally, you do not want to call this procedure directly.  You can
1529  * simply call COMPARE_PO_LINE with the appropriate parameters.
1530  *
1531  * HISTORY
1532  * 01-SEP-1997	Rami Haddad	Created
1533  * 05-SEP-1997	Matt Denton	Debugged
1534  ********************************************************************/
1535 PROCEDURE compare_line_to_all(
1536 	p_line_id IN NUMBER,
1537 	p_release_id IN NUMBER,
1538 	p_revision_num IN NUMBER,
1539 	p_dummy_in4 IN NUMBER DEFAULT NULL,
1540 	p_dummy_in5 IN NUMBER DEFAULT NULL,
1541 	p_dummy_in6 IN NUMBER DEFAULT NULL,
1542 	p_dummy_in7 IN NUMBER DEFAULT NULL,
1543 	p_dummy_in8 IN NUMBER DEFAULT NULL,
1544 	p_dummy_in9 IN NUMBER DEFAULT NULL,
1545 	p_dummy_in10 IN NUMBER DEFAULT NULL,
1546 	p_sequence_num OUT NOCOPY NUMBER,
1547 	p_dummy_out2 OUT NOCOPY NUMBER,
1548 	p_dummy_out3 OUT NOCOPY NUMBER,
1549 	p_dummy_out4 OUT NOCOPY NUMBER,
1550 	p_dummy_out5 OUT NOCOPY NUMBER,
1551 	p_dummy_out6 OUT NOCOPY NUMBER,
1552 	p_dummy_out7 OUT NOCOPY NUMBER,
1553 	p_dummy_out8 OUT NOCOPY NUMBER,
1554 	p_dummy_out9 OUT NOCOPY NUMBER,
1555 	p_dummy_out10 OUT NOCOPY NUMBER
1556 	) AS
1557 
1558 v_sequence_num	NUMBER := NULL;
1559 v_progress	VARCHAR2(3);
1560 
1561 BEGIN
1562 
1563 v_progress := '260';
1564 
1565 compare_po_line(
1566 	p_line_id,
1567 	p_release_id,
1568 	p_revision_num,
1569 	'ALL',
1570 	v_sequence_num );
1571 
1572 p_sequence_num := v_sequence_num;
1573 
1574 EXCEPTION
1575 WHEN others THEN
1576 	PO_MESSAGE_S.SQL_ERROR(
1577 		'PO_REVISION_DIFFERENCES.COMPARE_LINE_TO_ALL',
1578 		v_progress,
1579 		sqlcode );
1580 	RAISE;
1581 
1582 END compare_line_to_all;
1583 
1584 
1585 
1586 /*********************************************************************
1587  * NAME
1588  * compare_line_to_original
1589  *
1590  * PURPOSE
1591  * Call the procedure COMPARE_PO_LINE with the ORIGINAL as comparison
1592  * flag.
1593  *
1594  * ARGUMENTS
1595  * p_line_id		Unique identified for the current PO line in
1596  *			PO_LINES_ARCHIVE_ALL table
1597  * p_release_id		Unique identifier for the PO release in
1598  *			PO_RELEASES_ARCHIVE_ALL table
1599  * p_revision_num	Current PO line revision number
1600  * p_dummy_in4		Not required
1601  * p_dummy_in5		Not required
1602  * p_dummy_in6		Not required
1603  * p_dummy_in7		Not required
1604  * p_dummy_in8		Not required
1605  * p_dummy_in9		Not required
1606  * p_dummy_in10		Not required
1607  * p_sequence_num	Sequence number to identify the comparison
1608  *			results for a specific record in
1609  *			ICX_PO_REVISIONS_TEMP table.
1610  * p_dummy_out2		Not required
1611  * p_dummy_out3		Not required
1612  * p_dummy_out4		Not required
1613  * p_dummy_out5		Not required
1614  * p_dummy_out6		Not required
1615  * p_dummy_out7		Not required
1616  * p_dummy_out8		Not required
1617  * p_dummy_out9		Not required
1618  * p_dummy_out10	Not required
1619  *
1620  * NOTES
1621  * This procedures serves the purpose of a link from WAD to call the
1622  * procedure COMPARE_PO_LINE.  There is no way to store the comparison
1623  * flag in the link.  Therefore, the link calls this procedure, which
1624  * calls COMPARE_PO_LINE with the appropriate flag.
1625  *
1626  * Normally, you do not want to call this procedure directly.  You can
1627  * simply call COMPARE_PO_LINE with the appropriate parameters.
1628  *
1629  * HISTORY
1630  * 01-SEP-1997	Rami Haddad	Created
1631  * 05-SEP-1997	Matt Denton	Debugged
1632  ********************************************************************/
1633 PROCEDURE compare_line_to_original(
1634 	p_line_id IN NUMBER,
1635 	p_release_id IN NUMBER,
1636 	p_revision_num IN NUMBER,
1637 	p_dummy_in4 IN NUMBER DEFAULT NULL,
1638 	p_dummy_in5 IN NUMBER DEFAULT NULL,
1639 	p_dummy_in6 IN NUMBER DEFAULT NULL,
1640 	p_dummy_in7 IN NUMBER DEFAULT NULL,
1641 	p_dummy_in8 IN NUMBER DEFAULT NULL,
1642 	p_dummy_in9 IN NUMBER DEFAULT NULL,
1643 	p_dummy_in10 IN NUMBER DEFAULT NULL,
1644 	p_sequence_num OUT NOCOPY NUMBER,
1645 	p_dummy_out2 OUT NOCOPY NUMBER,
1646 	p_dummy_out3 OUT NOCOPY NUMBER,
1647 	p_dummy_out4 OUT NOCOPY NUMBER,
1648 	p_dummy_out5 OUT NOCOPY NUMBER,
1649 	p_dummy_out6 OUT NOCOPY NUMBER,
1650 	p_dummy_out7 OUT NOCOPY NUMBER,
1651 	p_dummy_out8 OUT NOCOPY NUMBER,
1652 	p_dummy_out9 OUT NOCOPY NUMBER,
1653 	p_dummy_out10 OUT NOCOPY NUMBER
1654 	) AS
1655 
1656 v_sequence_num	NUMBER := NULL;
1657 v_progress	VARCHAR2(3);
1658 
1659 BEGIN
1660 
1661 v_progress := '270';
1662 
1663 compare_po_line(
1664 	p_line_id,
1665 	p_release_id,
1666 	p_revision_num,
1667 	'ORIGINAL',
1668 	v_sequence_num );
1669 
1670 p_sequence_num := v_sequence_num;
1671 
1672 EXCEPTION
1673 WHEN others THEN
1674 	PO_MESSAGE_S.SQL_ERROR(
1675 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_ORIGINAL',
1676 		v_progress,
1677 		sqlcode );
1678 	RAISE;
1679 
1680 END compare_line_to_original;
1681 
1682 
1683 
1684 /*********************************************************************
1685  * NAME
1686  * compare_line_to_previous
1687  *
1688  * PURPOSE
1689  * Call the procedure COMPARE_PO_LINE with the PREVIOUS as comparison
1690  * flag.
1691  *
1692  * ARGUMENTS
1693  * p_line_id		Unique identified for the current PO line in
1694  *			PO_LINES_ARCHIVE_ALL table
1695  * p_release_id		Unique identifier for the PO release in
1696  *			PO_RELEASES_ARCHIVE_ALL table
1697  * p_revision_num	Current PO line revision number
1698  * p_dummy_in4		Not required
1699  * p_dummy_in5		Not required
1700  * p_dummy_in6		Not required
1701  * p_dummy_in7		Not required
1702  * p_dummy_in8		Not required
1703  * p_dummy_in9		Not required
1704  * p_dummy_in10		Not required
1705  * p_sequence_num	Sequence number to identify the comparison
1706  *			results for a specific record in
1707  *			ICX_PO_REVISIONS_TEMP table.
1708  * p_dummy_out2		Not required
1709  * p_dummy_out3		Not required
1710  * p_dummy_out4		Not required
1711  * p_dummy_out5		Not required
1712  * p_dummy_out6		Not required
1713  * p_dummy_out7		Not required
1714  * p_dummy_out8		Not required
1715  * p_dummy_out9		Not required
1716  * p_dummy_out10	Not required
1717  *
1718  * NOTES
1719  * This procedures serves the purpose of a link from WAD to call the
1720  * procedure COMPARE_PO_LINE.  We need to have two links in the flow
1721  * to compare the PO line with the original or with the previous.
1722  * There is no way to store the comparison flag in the link.
1723  * Therefore, the link calls this procedure, which calls
1724  * COMPARE_PO_LINE with ORIGINAL flag.
1725  *
1726  * Normally, you do not want to call this procedure directly.  You can
1727  * simply call COMPARE_PO_LINE with the appropriate parameters.
1728  *
1729  * HISTORY
1730  * 01-SEP-1997	Rami Haddad	Created
1731  * 05-SEP-1997	Matt Denton	Debugged
1732  ********************************************************************/
1733 PROCEDURE compare_line_to_previous(
1734 	p_line_id IN NUMBER,
1735 	p_release_id IN NUMBER,
1736 	p_revision_num IN NUMBER,
1737 	p_dummy_in4 IN NUMBER DEFAULT NULL,
1738 	p_dummy_in5 IN NUMBER DEFAULT NULL,
1739 	p_dummy_in6 IN NUMBER DEFAULT NULL,
1740 	p_dummy_in7 IN NUMBER DEFAULT NULL,
1741 	p_dummy_in8 IN NUMBER DEFAULT NULL,
1742 	p_dummy_in9 IN NUMBER DEFAULT NULL,
1743 	p_dummy_in10 IN NUMBER DEFAULT NULL,
1744 	p_sequence_num OUT NOCOPY NUMBER,
1745 	p_dummy_out2 OUT NOCOPY NUMBER,
1746 	p_dummy_out3 OUT NOCOPY NUMBER,
1747 	p_dummy_out4 OUT NOCOPY NUMBER,
1748 	p_dummy_out5 OUT NOCOPY NUMBER,
1749 	p_dummy_out6 OUT NOCOPY NUMBER,
1750 	p_dummy_out7 OUT NOCOPY NUMBER,
1751 	p_dummy_out8 OUT NOCOPY NUMBER,
1752 	p_dummy_out9 OUT NOCOPY NUMBER,
1753 	p_dummy_out10 OUT NOCOPY NUMBER
1754 	) AS
1755 
1756 v_sequence_num	NUMBER := NULL;
1757 v_progress	VARCHAR2(3);
1758 
1759 BEGIN
1760 
1761 v_progress := '280';
1762 
1763 compare_po_line(
1764 	p_line_id,
1765 	p_release_id,
1766 	p_revision_num,
1767 	'PREVIOUS',
1768 	v_sequence_num);
1769 
1770 p_sequence_num := v_sequence_num;
1771 
1772 EXCEPTION
1773 WHEN others THEN
1774 	PO_MESSAGE_S.SQL_ERROR(
1775 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_PREVIOUS',
1776 		v_progress,
1777 		sqlcode );
1778 	RAISE;
1779 
1780 END compare_line_to_previous;
1781 
1782 
1783 
1784 /*********************************************************************
1785  * NAME
1786  * compare_po_line
1787  *
1788  * PURPOSE
1789  * Compare a PO line with the previous or the original
1790  * revision---including all shipments, and distributions.
1791  *
1792  * ARGUMENTS
1793  * p_line_id		Unique identified for the current PO line in
1794  *			PO_LINES_ARCHIVE_ALL table
1795  * p_release_id		Unique identifier for the PO release in
1796  *			PO_RELEASES_ARCHIVE_ALL table
1797  * p_revision_num	Current PO line revision number
1798  * p_comparison_flag	Indicator to compare the PO with the previous
1799  *			or original revision
1800  * p_sequence_num	Sequence number to identify the comparison
1801  *			results for a specific record in
1802  *			ICX_PO_REVISIONS_TEMP table.
1803  *
1804  * NOTES
1805  *
1806  * HISTORY
1807  * 01-SEP-1997	Rami Haddad	Created
1808  * 05-SEP-1997	Matt Denton	Debugged
1809  * 26-NOV-1997	Rami Haddad	Handle comparison flag 'ALL.'
1810  ********************************************************************/
1811 PROCEDURE compare_po_line(
1812 	p_line_id IN NUMBER,
1813 	p_release_id IN NUMBER,
1814 	p_revision_num IN NUMBER,
1815 	p_comparison_flag IN VARCHAR2,
1816 	p_sequence_num OUT NOCOPY NUMBER
1817 	) AS
1818 
1819 v_sequence_num	NUMBER := NULL;
1820 v_revision_counter	NUMBER := p_revision_num;
1821 v_comparison_flag	VARCHAR2( 80 ) := p_comparison_flag;
1822 v_progress		VARCHAR2(3);
1823 
1824 BEGIN
1825 
1826 v_progress := '290';
1827 SELECT	icx_po_history_details_s.nextval
1828 INTO	v_sequence_num
1829 FROM	DUAL;
1830 p_sequence_num := v_sequence_num;
1831 
1832 v_progress := '300';
1833 IF v_comparison_flag = 'ALL' THEN
1834 	v_comparison_flag := 'PREVIOUS';
1835 END IF;
1836 
1837 LOOP
1838 	v_progress := '310';
1839 
1840 --Bug# 1788753.Adding the IF THEN condition.
1841       IF (p_release_id is NULL) THEN
1842 	compare_line(
1843 		p_line_id,
1844 		v_revision_counter,
1845 		v_comparison_flag,
1846 		v_sequence_num );
1847        END IF;
1848 
1849 	v_progress := '320';
1850 	compare_line_locs(
1851 		p_line_id,
1852 		p_release_id,
1853 		v_revision_counter,
1854 		v_comparison_flag,
1855 		v_sequence_num );
1856 
1857 	v_progress := '330';
1858 	compare_line_dists(
1859 		p_line_id,
1860 		p_release_id,
1861 		v_revision_counter,
1862 		v_comparison_flag,
1863 		v_sequence_num );
1864 
1865 	v_revision_counter := v_revision_counter - 1;
1866 
1867 	IF v_revision_counter < 1 OR
1868 		p_comparison_flag <>  'ALL'
1869 	THEN
1870 		EXIT;
1871 	END IF;
1872 
1873 END LOOP;
1874 
1875 v_progress := '340';
1876 pos_compare_revisions.verify_no_differences( v_sequence_num );
1877 
1878 EXCEPTION
1879 WHEN others THEN
1880 	PO_MESSAGE_S.SQL_ERROR(
1881 		'PO_REVISION_DIFFERENCES.COMPARE_PO_LINE',
1882 		v_progress,
1883 		sqlcode );
1884 	RAISE;
1885 
1886 END compare_po_line;
1887 
1888 
1889 
1890 /*********************************************************************
1891  * NAME
1892  * compare_line
1893  *
1894  * PURPOSE
1895  * Compare a PO line with the previous or the original
1896  * revision---including all shipments, and distributions.
1897  *
1898  * ARGUMENTS
1899  * p_line_id		Unique identified for the current PO line in
1900  *			PO_LINES_ARCHIVE_ALL table
1901  * p_revision_num	Current PO line revision number
1902  * p_comparison_flag	Indicator to compare the PO with the previous
1903  *			or original revision
1904  * p_sequence_num	Sequence number to identify the comparison
1905  *			results for a specific record in
1906  *			ICX_PO_REVISIONS_TEMP table.
1907  *
1908  * NOTES
1909  * The original revision of a line is not necessarily 0.  When
1910  * comparing with the original, obtain the PO line with the lowest
1911  * revision.
1912  *
1913  * HISTORY
1914  * 01-SEP-1997	Rami Haddad	Created
1915  * 05-SEP-1997	Matt Denton	Debugged
1916  * 24-NOV-1997	Rami Haddad	Select PO line with minimum revision
1917  *				as the original PO line, instead of
1918  *				the one with revision 0.
1919  ********************************************************************/
1920 PROCEDURE compare_line(
1921 	p_line_id IN NUMBER,
1922 	p_revision_num IN NUMBER,
1923 	p_comparison_flag IN VARCHAR2,
1924 	p_sequence_num IN NUMBER
1925 	) AS
1926 
1927 v_line_to		po_lines_archive_all%ROWTYPE;
1928 v_line_from		po_lines_archive_all%ROWTYPE;
1929 
1930 v_previous_revision_num	NUMBER;
1931 v_progress		VARCHAR2(3);
1932 
1933 BEGIN
1934 
1935 v_progress := '350';
1936 IF p_revision_num <= 0
1937 THEN
1938 	RETURN;
1939 END IF;
1940 
1941 IF p_comparison_flag = 'ORIGINAL' THEN
1942 	SELECT	MIN( revision_num )
1943 	INTO	v_previous_revision_num
1944 	FROM	po_lines_archive_all
1945 	WHERE	po_line_id = p_line_id;
1946 ELSE
1947 	v_previous_revision_num :=  p_revision_num - 1;
1948 END IF;
1949 
1950 BEGIN
1951 
1952 	v_progress := '360';
1953 	SELECT	*
1954 	INTO	v_line_to
1955 	FROM	po_lines_archive_all pla1
1956 	WHERE
1957 		po_line_id = p_line_id
1958 	AND	revision_num = p_revision_num;
1959 
1960 	EXCEPTION
1961 	WHEN no_data_found THEN
1962 		v_line_to := NULL;
1963 
1964 END;
1965 
1966 BEGIN
1967 
1968 	v_progress := '370';
1969 	SELECT	*
1970 	INTO	v_line_from
1971 	FROM	po_lines_archive_all
1972 	WHERE
1973 		po_line_id = p_line_id
1974 	AND	revision_num = (
1975 		SELECT	MAX( revision_num )
1976 		FROM	po_lines_archive_all
1977 		WHERE
1978 			revision_num <=  v_previous_revision_num
1979 		AND	po_line_id = p_line_id
1980 		);
1981 
1982 	EXCEPTION
1983 	WHEN no_data_found THEN
1984 		v_line_from := NULL;
1985 
1986 END;
1987 
1988 v_progress := '380';
1989 pos_compare_revisions.compare_lines(
1990 	v_line_from,
1991 	v_line_to,
1992 	p_sequence_num );
1993 
1994 EXCEPTION
1995 WHEN others THEN
1996 	PO_MESSAGE_S.SQL_ERROR(
1997 		'PO_REVISION_DIFFERENCES.COMPARE_LINE',
1998 		v_progress,
1999 		sqlcode );
2000 	RAISE;
2001 
2002 END compare_line;
2003 
2004 
2005 
2006 /*********************************************************************
2007  * NAME
2008  * compare_line_locs
2009  *
2010  * PURPOSE
2011  * Compare a PO line shipments with the previous or the original
2012  * revision---including all shipments, and distributions.
2013  *
2014  * ARGUMENTS
2015  * p_line_id		Unique identified for the current PO line in
2016  *			PO_LINES_ARCHIVE_ALL table
2017  * p_release_id		Unique identified for the current PO release
2018  *			in PO_RELEASES_ARCHIVE_ALL table
2019  * p_revision_num	Current PO line revision number
2020  * p_comparison_flag	Indicator to compare the PO with the previous
2021  *			or original revision
2022  * p_sequence_num	Sequence number to identify the comparison
2023  *			results for a specific record in
2024  *			ICX_PO_REVISIONS_TEMP table.
2025  *
2026  * NOTES
2027  *
2028  * HISTORY
2029  * 01-SEP-1997	Rami Haddad	Created
2030  * 05-SEP-1997	Matt Denton	Debugged
2031  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
2032  *				revision of shipments for the line,
2033  *				given its revision number,
2034  *				p_revision_num.
2035  ********************************************************************/
2036 PROCEDURE compare_line_locs(
2037 	p_line_id IN NUMBER,
2038 	p_release_id IN NUMBER,
2039 	p_revision_num IN NUMBER,
2040 	p_comparison_flag IN VARCHAR2,
2041 	p_sequence_num IN NUMBER
2042 	) AS
2043 
2044 CURSOR current_locations(
2045 	current_line_id NUMBER,
2046 	current_release_id NUMBER
2047 	) IS
2048 SELECT	*
2049 FROM	po_line_locations_archive_all plla1
2050 WHERE
2051 	po_line_id = current_line_id
2052 AND	NVL( po_release_id, -99 ) = current_release_id
2053 AND	revision_num = (
2054 	SELECT	MAX( revision_num )
2055 	FROM	po_line_locations_archive_all plla2
2056 	WHERE
2057 		revision_num <= p_revision_num
2058 	AND	plla2.line_location_id = plla1.line_location_id
2059 	);
2060 
2061 v_loc_from		po_line_locations_archive_all%ROWTYPE;
2062 v_loc_to		po_line_locations_archive_all%ROWTYPE;
2063 
2064 v_previous_revision_num	NUMBER;
2065 v_progress		VARCHAR2(3);
2066 
2067 BEGIN
2068 
2069 v_progress := '390';
2070 IF p_revision_num <= 0 THEN
2071 	RETURN;
2072 END IF;
2073 
2074 IF p_comparison_flag = 'ORIGINAL' THEN
2075 	SELECT	MIN( revision_num )
2076 	INTO	v_previous_revision_num
2077 	FROM	po_lines_archive_all
2078 	WHERE	po_line_id = p_line_id;
2079 ELSE
2080 	v_previous_revision_num :=  p_revision_num - 1;
2081 END IF;
2082 
2083 v_progress := '400';
2084 FOR v_loc_to IN current_locations(
2085 	p_line_id,
2086 	NVL( p_release_id, -99 )
2087 	) loop
2088 
2089 	/* Compare the lines only if the current line has a revision
2090 	 * greater than the calculated revision number of previous
2091 	 * line.
2092 	 */
2093 	IF v_loc_to.revision_num > v_previous_revision_num THEN
2094 
2095 		BEGIN
2096 
2097 		v_progress := '410';
2098 		SELECT	*
2099 		INTO	v_loc_from
2100 		FROM	po_line_locations_archive_all
2101 		WHERE
2102 			line_location_id = v_loc_to.line_location_id
2103 		AND	revision_num =
2104 			(
2105 			SELECT	MAX(revision_num)
2106 			FROM	po_line_locations_archive_all
2107 			WHERE
2108 				revision_num <=
2109 				v_previous_revision_num
2110 			AND	line_location_id =
2111 				v_loc_to.line_location_id
2112 			);
2113 
2114 			EXCEPTION
2115 			WHEN no_data_found THEN
2116 				v_loc_from := NULL;
2117 
2118 		END;
2119 
2120 		v_progress := '420';
2121 		pos_compare_revisions.compare_locations(
2122 			v_loc_from,
2123 			v_loc_to,
2124 			p_sequence_num );
2125 	END IF;
2126 
2127 END loop;
2128 
2129 EXCEPTION
2130 WHEN others THEN
2131 	PO_MESSAGE_S.SQL_ERROR(
2132 		'PO_REVISION_DIFFERENCES.COMPARE_LINE_LOCS',
2133 		v_progress,
2134 		sqlcode );
2135 	RAISE;
2136 
2137 END compare_line_locs;
2138 
2139 
2140 
2141 /*********************************************************************
2142  * NAME
2143  * compare_line_dists
2144  *
2145  * PURPOSE
2146  * Compare a PO line distributions with the previous or the original
2147  * revision.
2148  *
2149  * ARGUMENTS
2150  * p_line_id		Unique identified for the current PO line in
2151  *			PO_LINES_ARCHIVE_ALL table
2152  * p_release_id		Unique identified for the current PO release
2153  *			in PO_RELEASES_ARCHIVE_ALL table
2154  * p_revision_num	Current PO line revision number
2155  * p_comparison_flag	Indicator to compare the PO with the previous
2156  *			or original revision
2157  * p_sequence_num	Sequence number to identify the comparison
2158  *			results for a specific record in
2159  *			ICX_PO_REVISIONS_TEMP table.
2160  *
2161  * NOTES
2162  *
2163  * HISTORY
2164  * 01-SEP-1997	Rami Haddad	Created
2165  * 05-SEP-1997	Matt Denton	Debugged
2166  * 20-NOV-1997	Rami Haddad	Documented
2167  *				Changed cursor to select latest
2168  *				revision of distributions for the
2169  *				line, given its revision number,
2170  *				p_revision_num.
2171  ********************************************************************/
2172 PROCEDURE compare_line_dists(
2173 	p_line_id IN NUMBER,
2174 	p_release_id IN NUMBER,
2175 	p_revision_num IN NUMBER,
2176 	p_comparison_flag IN VARCHAR2,
2177 	p_sequence_num IN NUMBER
2178 	) AS
2179 
2180 CURSOR current_distributions(
2181 	current_line_id number,
2182 	current_release_id number
2183 	) IS
2184 SELECT	*
2185 FROM	po_distributions_archive_all pda1
2186 WHERE
2187 	po_line_id = current_line_id
2188 AND	NVL( po_release_id, -99 ) = current_release_id
2189 AND	revision_num = (
2190 	SELECT	MAX( revision_num )
2191 	FROM	po_distributions_archive_all pda2
2192 	WHERE
2193 		revision_num <= p_revision_num
2194 	AND	pda2.po_distribution_id = pda1.po_distribution_id
2195 	);
2196 
2197 v_dist_from		po_distributions_archive_all%ROWTYPE;
2198 v_dist_to		po_distributions_archive_all%ROWTYPE;
2199 
2200 v_previous_revision_num	NUMBER;
2201 v_progress		VARCHAR2(3);
2202 
2203 BEGIN
2204 
2205 v_progress := '430';
2206 IF p_revision_num <= 0 THEN
2207 	RETURN;
2208 END IF;
2209 
2210 IF p_comparison_flag = 'ORIGINAL' THEN
2211 	SELECT	MIN( revision_num )
2212 	INTO	v_previous_revision_num
2213 	FROM	po_lines_archive_all
2214 	WHERE	po_line_id = p_line_id;
2215 ELSE
2216 	v_previous_revision_num :=  p_revision_num - 1;
2217 END IF;
2218 
2219 FOR v_dist_to in current_distributions(
2220 	p_line_id,
2221 	NVL( p_release_id, -99 )
2222 	) LOOP
2223 
2224 	/* Compare the lines only if the current line has a revision
2225 	 * greater than the calculated revision number of previous
2226 	 * line.
2227 	 */
2228 	IF v_dist_to.revision_num > v_previous_revision_num
2229 	THEN
2230 
2231 		BEGIN
2232 
2233 		v_progress := '440';
2234 		SELECT	*
2235 		INTO	v_dist_from
2236 		FROM	po_distributions_archive_all
2237 		WHERE
2238 			po_distribution_id =
2239 				v_dist_to.po_distribution_id
2240 		AND	revision_num = (
2241 			SELECT	MAX( revision_num )
2242 			FROM	po_distributions_archive_all
2243 			WHERE	revision_num <=
2244 				v_previous_revision_num
2245 			AND	po_distribution_id =
2246 				v_dist_to.po_distribution_id
2247 			);
2248 
2249 			EXCEPTION
2250 			WHEN no_data_found THEN
2251 				v_dist_from := NULL;
2252 
2253 		END;
2254 
2255 		v_progress := '450';
2256 		pos_compare_revisions.compare_distributions(
2257 			v_dist_from,
2258 			v_dist_to,
2259 			p_sequence_num );
2260 		END IF;
2261 
2262 END LOOP;
2263 
2264 EXCEPTION
2265 WHEN others THEN
2266 	PO_MESSAGE_S.SQL_ERROR(
2267 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_ALL',
2268 		v_progress,
2269 		sqlcode );
2270 	RAISE;
2271 
2272 END compare_line_dists;
2273 
2274 END pos_revision_differences;