DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_REVISION_DIFFERENCES

Source


1 PACKAGE BODY po_revision_differences AS
2 /* $Header: POXPORVB.pls 115.4 2002/11/26 23:35:58 sbull 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 /*********************************************************************
294  * NAME
295  * compare_po
296  *
297  * PURPOSE
298  * Compare the a PO with the previous or the original
299  * revision---including all lines, shipments, and distributions.
300  *
301  * ARGUMENTS
302  * p_header_id		Unique identified for the current PO in
303  *			PO_HEADERS_ARCHIVE_ALL table
304  * p_release_id		Unique identifier for the PO release in
305  *			PO_RELEASES_ARCHIVE_ALL table
306  * p_revision_num	Current PO revision number
307  * p_comparison_flag	Indicator to compare the PO with the previous
308  *			or original revision
309  * p_sequence_num	Sequence number to identify the comparison
310  *			results for a specific record in
311  *			ICX_PO_REVISIONS_TEMP table.
312  *
313  * NOTES
314  *
315  * HISTORY
316  * 01-SEP-1997	Rami Haddad	Created
317  * 05-SEP-1997	Matt Denton	Debugged
318  * 25-NOV-1997	Rami Haddad	Handle comparison flag 'ALL,' which
319  *				loops through and compare all
320  *				revisions.
321  ********************************************************************/
322 PROCEDURE compare_po(
323 	p_header_id IN NUMBER,
324 	p_release_id IN NUMBER,
325 	p_revision_num IN NUMBER,
326 	p_comparison_flag IN VARCHAR2,
327 	p_sequence_num OUT NOCOPY NUMBER
328 	) AS
329 
330 v_sequence_num		NUMBER;
331 v_revision_counter	NUMBER := p_revision_num;
332 v_comparison_flag	VARCHAR2( 80 ) := p_comparison_flag;
333 v_progress		VARCHAR2(3);
334 
335 BEGIN
336 
337 v_progress := '040';
338 
339 SELECT	icx_po_history_details_s.nextval
340 INTO	v_sequence_num
341 FROM	DUAL;
342 p_sequence_num := v_sequence_num;
343 
344 IF v_comparison_flag = 'ALL' THEN
345 	v_comparison_flag := 'PREVIOUS';
346 END IF;
347 
348 LOOP
349 	v_progress := '050';
350 	compare_headers(
351 		p_header_id,
352 		p_release_id,
353 		v_revision_counter,
354 		v_comparison_flag,
355 		v_sequence_num );
356 
357 	v_progress := '060';
358 
359 -- Bug# 1761302. Added the IF THEN condition as there is
360 -- no change in lines for revisions against Releases.
361 
362         IF (p_release_id is NULL) THEN
363 	compare_lines(
364 		p_header_id,
365 		v_revision_counter,
366 		v_comparison_flag,
367 		v_sequence_num);
368          END IF;
369 
370 	v_progress := '070';
371 	compare_locations(
372 		p_header_id,
373 		p_release_id,
374 		v_revision_counter,
375 		v_comparison_flag,
376 		v_sequence_num);
377 
378 	v_progress := '080';
379 	compare_distributions(
380 		p_header_id,
381 		p_release_id,
382 		v_revision_counter,
383 		v_comparison_flag,
384 		v_sequence_num);
385 
386 	v_revision_counter := v_revision_counter - 1;
387 
388 	IF v_revision_counter < 1 OR
389 		p_comparison_flag  <> 'ALL'
390 	THEN
391 		EXIT;
392 	END IF;
393 
394 END LOOP;
395 
396 v_progress := '090';
397 po_compare_revisions.verify_no_differences( v_sequence_num );
398 
399 EXCEPTION
400 WHEN others THEN
401 	PO_MESSAGE_S.SQL_ERROR(
402 		'PO_REVISION_DIFFERENCES.COMPARE_PO',
403 		v_progress,
404 		sqlcode );
405 	RAISE;
406 
407 END compare_po;
408 
409 
410 
411 /*********************************************************************
412  * NAME
413  * compare_headers
414  *
415  * PURPOSE
416  * Compare two headers, the first is according to the passed in
417  * parameters, P_HEADER_ID and P_REVISION_NUM.  The second depends on
418  * the comparison flag, either the original PO (revision 0), or the
419  * previous revision (P_REVISION_NUM - 1 ).
420  *
421  * ARGUMENTS
422  * p_header_id		Unique identified for the PO in
423  *			PO_HEADERS_ARCHIVE_ALL table
424  * p_release_id		Unique identifier for the PO release in
425  *			PO_RELEASES_ARCHIVE_ALL table
426  * p_revision_num	Current PO revision number
427  * p_comparison_flag	Indicator to compare the PO with the previous
428  *			or original revision
429  * p_sequence_num	Sequence number to identify the comparison
430  *			results for a specific record in
431  *			ICX_PO_REVISIONS_TEMP table.
432  *
433  * NOTES
434  *
435  * HISTORY
436  * 01-SEP-1997	Rami Haddad	Created
437  * 05-SEP-1997	Matt Denton	Debugged
438  ********************************************************************/
439 PROCEDURE compare_headers(
440 	p_header_id IN NUMBER,
441 	p_release_id IN NUMBER,
442 	p_revision_num IN NUMBER,
443 	p_comparison_flag IN VARCHAR2,
444 	p_sequence_num IN NUMBER
445 	) AS
446 
447 v_header_from		po_headers_archive%ROWTYPE;
448 v_header_to		po_headers_archive%ROWTYPE;
449 
450 v_release_from		po_releases_archive%ROWTYPE;
451 v_release_to		po_releases_archive%ROWTYPE;
452 
453 v_previous_revision_num	NUMBER;
454 v_progress		VARCHAR2(3);
455 
456 BEGIN
457 
458 v_progress := '100';
459 
460 IF p_revision_num <= 0
461 THEN
462 	RETURN;
463 END IF;
464 
465 /* What is the revision number we will compare against? */
466 IF p_comparison_flag = 'ORIGINAL'
467 THEN
468 	v_previous_revision_num := 0;
469 ELSE
470 	v_previous_revision_num :=  p_revision_num - 1;
471 END IF;
472 
473 IF p_release_id IS NULL THEN
474 
475 	BEGIN
476 
477 		v_progress := '110';
478 		SELECT	*
479 		INTO	v_header_to
480 		FROM	po_headers_archive
481 		WHERE
482 			po_header_id = p_header_id
483 		AND	revision_num = p_revision_num;
484 
485 		EXCEPTION
486 		WHEN no_data_found THEN
487 			v_header_to := NULL;
488 
489 	END;
490 
491 	BEGIN
492 
493 		v_progress := '120';
494 		SELECT	*
495 		INTO	v_header_from
496 		FROM	po_headers_archive
497 		WHERE
498 			po_header_id = p_header_id
499 		AND	revision_num = v_previous_revision_num;
500 
501 		EXCEPTION
502 		WHEN no_data_found THEN
503 			v_header_from := NULL;
504 
505 	END;
506 
507 	v_progress := '130';
508 	po_compare_revisions.compare_headers(
509 		v_header_from,
510 		v_header_to,
511 		p_sequence_num );
512 
513 ELSE
514 
515 	BEGIN
516 
517 		v_progress := '140';
518 		SELECT	*
519 		INTO	v_release_to
523 		AND	revision_num = p_revision_num;
520 		FROM	po_releases_archive
521 		WHERE
522 			po_release_id = p_release_id
524 
525 		EXCEPTION
526 		WHEN no_data_found THEN
527 			v_release_to := NULL;
528 
529 	END;
530 
531 	BEGIN
532 
533 		v_progress := '150';
534 		SELECT	*
535 		INTO	v_release_from
536 		FROM	po_releases_archive
537 		WHERE
538 			po_release_id = p_release_id
539 		AND	revision_num = v_previous_revision_num;
540 
541 		EXCEPTION
542 		WHEN no_data_found THEN
543 			v_release_from := NULL;
544 
545 	END;
546 
547 	v_progress := '160';
548 	po_compare_revisions.compare_releases(
549 		v_release_from,
550 		v_release_to,
551 		p_sequence_num );
552 
553 END IF;
554 
555 EXCEPTION
556 WHEN others THEN
557 	PO_MESSAGE_S.SQL_ERROR(
558 		'PO_REVISION_DIFFERENCES.COMPARE_HEADERS',
559 		v_progress,
560 		sqlcode );
561 	RAISE;
562 
563 END compare_headers;
564 
565 
566 
567 /*********************************************************************
568  * NAME
569  * compare_lines
570  *
571  * PURPOSE
572  * Compare lines for two POs, the first is according to the passed in
573  * parameters, P_HEADER_ID and P_REVISION_NUM.  The second depends on
574  * the comparison flag, either the original PO (revision 0), or the
575  * previous revision (P_REVISION_NUM - 1 ).
576  *
577  * ARGUMENTS
578  * p_header_id		Unique identified for the PO in
579  *			PO_HEADERS_ARCHIVE_ALL table
580  * p_release_id		Unique identifier for the PO release in
581  *			PO_RELEASES_ARCHIVE_ALL table
582  * p_revision_num	Current PO revision number
583  * p_comparison_flag	Indicator to compare the PO with the previous
584  *			or original revision
585  * p_sequence_num	Sequence number to identify the comparison
586  *			results for a specific record in
587  *			ICX_PO_REVISIONS_TEMP table.
588  *
589  * NOTES
590  *
591  * HISTORY
592  * 01-SEP-1997	Rami Haddad	Created
593  * 05-SEP-1997	Matt Denton	Debugged
594  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
595  *				revision of lines for the PO, given
596  *				its revision number, p_revision_num.
597  ********************************************************************/
598 PROCEDURE compare_lines(
599 	p_header_id IN NUMBER,
600 	p_revision_num IN NUMBER,
601 	p_comparison_flag IN VARCHAR2,
602 	p_sequence_num IN NUMBER
603 	) AS
604 
605 CURSOR	current_lines_cursor(
606 	current_header_id NUMBER,
607 	current_revision_num NUMBER ) IS
608 SELECT 	*
609 FROM 	po_lines_archive pla1
610 WHERE
611 	po_header_id = current_header_id
612 AND	revision_num = (
613 	SELECT	MAX( revision_num )
614 	FROM	po_lines_archive pla2
615 	WHERE
616 		revision_num <= current_revision_num
617 	AND	pla2.po_line_id = pla1.po_line_id
618 	);
619 
620 v_line_to	po_lines_archive%ROWTYPE;
621 v_line_from	po_lines_archive%ROWTYPE;
622 
623 v_previous_revision_num	NUMBER;
624 v_progress		VARCHAR2(3);
625 
626 BEGIN
627 
628 v_progress := '170';
629 
630 IF p_revision_num <= 0 THEN
631 	RETURN;
632 END IF;
633 
634 IF p_comparison_flag = 'ORIGINAL'
635 THEN
636 	v_previous_revision_num := 0;
637 ELSE
638 	v_previous_revision_num :=  p_revision_num - 1;
639 END IF;
640 
641 FOR v_line_to IN current_lines_cursor(
642 	p_header_id,
643 	p_revision_num
644 	) LOOP
645 
646 	/* Compare the lines only if the current line has a revision
647 	 * greater than the calculated revision number of previous
648 	 * line.
649 	 */
650 	IF v_line_to.revision_num > v_previous_revision_num
651 	THEN
652 
653 		BEGIN
654 
655 		v_progress := '180';
656 		SELECT	*
657 		INTO	v_line_from
658 		FROM	po_lines_archive
659 		WHERE
660 			revision_num = (
661 			SELECT	MAX( revision_num )
662 			FROM	po_lines_archive
663 			WHERE
664 				revision_num <=
665 					v_previous_revision_num
666 			AND	po_line_id = v_line_to.po_line_id
667 			)
668 		AND	po_line_id = v_line_to.po_line_id;
669 
670 		EXCEPTION
671 		WHEN no_data_found THEN
672 			v_line_from := NULL;
673 
674 		END;
675 
676 		v_progress := '190';
677 		po_compare_revisions.compare_lines(
678 			v_line_from,
679 			v_line_to,
680 			p_sequence_num);
681 	END IF;
682 
683 END LOOP;
684 
685 EXCEPTION
686 WHEN others THEN
687 	PO_MESSAGE_S.SQL_ERROR(
688 		'PO_REVISION_DIFFERENCES.COMPARE_LINES',
689 		v_progress,
690 		sqlcode );
691 	RAISE;
692 
693 END compare_lines;
694 
695 
696 
697 /*********************************************************************
698  * NAME
699  * compare_locations
700  *
701  * PURPOSE
702  * Compare shipments for two POs, the first is according to the passed
703  * in parameters, P_HEADER_ID and P_REVISION_NUM.  The second depends
704  * on the comparison flag, either the original PO (revision 0), or the
705  * previous revision (P_REVISION_NUM - 1 ).
706  *
707  * ARGUMENTS
708  * p_header_id		Unique identified for the PO in
709  *			PO_HEADERS_ARCHIVE_ALL table
710  * p_release_id		Unique identifier for the PO release in
711  *			PO_RELEASES_ARCHIVE_ALL table
712  * p_revision_num	Current PO revision number
713  * p_comparison_flag	Indicator to compare the PO with the previous
714  *			or original revision
718  *
715  * p_sequence_num	Sequence number to identify the comparison
716  *			results for a specific record in
717  *			ICX_PO_REVISIONS_TEMP table.
719  * NOTES
720  *
721  * HISTORY
722  * 01-SEP-1997	Rami Haddad	Created
723  * 05-SEP-1997	Matt Denton	Debugged
724  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
725  *				revision of shipments for the PO,
726  *				given its revision number,
727  *				p_revision_num.
728  ********************************************************************/
729 PROCEDURE compare_locations(
730 	p_header_id IN NUMBER,
731 	p_release_id IN NUMBER,
732 	p_revision_num IN NUMBER,
733 	p_comparison_flag IN VARCHAR2,
734 	p_sequence_num IN NUMBER
735 	) AS
736 
737 CURSOR	current_locations_cursor(
738 		current_header_id NUMBER,
739 		current_release_id NUMBER,
740 		current_revision_num NUMBER ) IS
741 SELECT	*
742 FROM	po_line_locations_archive plla1
743 WHERE	po_header_id = current_header_id
744 AND	NVL( po_release_id, -99 ) = current_release_id
745 AND	revision_num = (
746 	SELECT	MAX( revision_num )
747 	FROM	po_line_locations_archive plla2
748 	WHERE
749 		revision_num <= current_revision_num
750 	AND	plla2.line_location_id = plla1.line_location_id
751 	);
752 
753 v_loc_from		po_line_locations_archive%ROWTYPE;
754 v_loc_to		po_line_locations_archive%ROWTYPE;
755 
756 v_previous_revision_num	NUMBER;
757 v_progress		VARCHAR2(3);
758 
759 BEGIN
760 
761 v_progress := '200';
762 
763 IF p_revision_num <= 0 THEN
764 	RETURN;
765 END IF;
766 
767 IF p_comparison_flag = 'ORIGINAL'
768 THEN
769 	v_previous_revision_num := 0;
770 ELSE
771 	v_previous_revision_num :=  p_revision_num - 1;
772 END IF;
773 
774 FOR v_loc_to in current_locations_cursor(
775 	p_header_id,
776 	NVL( p_release_id, -99 ),
777 	p_revision_num
778 	) LOOP
779 
780 	/* Compare the lines only if the current line has a revision
781  	 * greater than the calculated revision number of previous
782 	 * line.
783 	 */
784 	IF v_loc_to.revision_num > v_previous_revision_num THEN
785 
786 		BEGIN
787 
788 		v_progress := '210';
789 		SELECT	*
790 		INTO	v_loc_from
791 		FROM	po_line_locations_archive
792 		WHERE
793 			revision_num = (
794 			SELECT	MAX( revision_num )
795 			FROM	po_line_locations_archive
796 			WHERE
797 				revision_num <=
798 					v_previous_revision_num
799 			AND	line_location_id =
800 					v_loc_to.line_location_id
801 			)
802 		AND	line_location_id = v_loc_to.line_location_id;
803 
804 		EXCEPTION
805 		WHEN no_data_found THEN
806 			v_loc_from := NULL;
807 
808 		END;
809 
810 		v_progress := '220';
811 		po_compare_revisions.compare_locations(
812 			v_loc_from,
813 			v_loc_to,
814 			p_sequence_num );
815 		END IF;
816 
817 END LOOP;
818 
819 EXCEPTION
820 WHEN others THEN
821 	PO_MESSAGE_S.SQL_ERROR(
822 		'PO_REVISION_DIFFERENCES.COMPARE_LINES',
823 		v_progress,
824 		sqlcode );
825 	RAISE;
826 
827 END compare_locations;
828 
829 
830 
831 /*********************************************************************
832  * NAME
833  * compare_distributions
834  *
835  * PURPOSE
836  * Compare distributions for two POs, the first is according to the
837  * passed in parameters, P_HEADER_ID and P_REVISION_NUM.  The second
838  * depends on the comparison flag, either the original PO (revision
839  * 0), or the previous revision (P_REVISION_NUM - 1 ).
840  *
841  * ARGUMENTS
842  * p_header_id		Unique identified for the PO in
843  *			PO_HEADERS_ARCHIVE_ALL table
844  * p_release_id		Unique identifier for the PO release in
845  *			PO_RELEASES_ARCHIVE_ALL table
846  * p_revision_num	Current PO revision number
847  * p_comparison_flag	Indicator to compare the PO with the previous
848  *			or original revision
849  * p_sequence_num	Sequence number to identify the comparison
850  *			results for a specific record in
851  *			ICX_PO_REVISIONS_TEMP table.
852  *
853  * NOTES
854  *
855  * HISTORY
856  * 01-SEP-1997	Rami Haddad	Created
857  * 05-SEP-1997	Matt Denton	Debugged
858  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
859  *				revision of distributions for the PO,
860  *				given its revision number,
861  *				p_revision_num.
862  ********************************************************************/
863 PROCEDURE compare_distributions(
864 	p_header_id IN NUMBER,
865 	p_release_id IN NUMBER,
866 	p_revision_num IN NUMBER,
867 	p_comparison_flag IN VARCHAR2,
868 	p_sequence_num IN NUMBER
869 	) AS
870 
871 CURSOR	current_distributions_cursor(
872 	current_header_id NUMBER,
873 	current_release_id NUMBER,
874 	current_revision_num NUMBER
875 	) IS
876 SELECT	*
877 FROM	po_distributions_archive pda1
878 WHERE
879 	po_header_id = current_header_id
880 AND	NVL( po_release_id, -99 ) = current_release_id
881 AND	revision_num = (
882 	SELECT	MAX( revision_num )
883 	FROM	po_distributions_archive pda2
884 	WHERE
885 		revision_num <= current_revision_num
886 	AND	pda2.po_distribution_id = pda1.po_distribution_id
887 	);
888 
889 v_dist_from		po_distributions_archive%ROWTYPE;
890 v_dist_to		po_distributions_archive%ROWTYPE;
891 
892 v_previous_revision_num	NUMBER;
893 v_progress		VARCHAR2(3);
894 
895 BEGIN
896 
897 v_progress := '230';
898 
899 IF p_revision_num <= 0 THEN
900 	RETURN;
901 END IF;
905 ELSE
902 
903 IF p_comparison_flag = 'ORIGINAL' THEN
904 	v_previous_revision_num := 0;
906 	v_previous_revision_num :=  p_revision_num - 1;
907 END IF;
908 
909 FOR v_dist_to in current_distributions_cursor(
910 	p_header_id,
911 	NVL( p_release_id, -99 ),
912 	p_revision_num
913 	) LOOP
914 
915 	/* Compare the lines only if the current line has a revision
916 	 * greater than the calculated revision number of previous
917 	 * line.
918 	 */
919 	IF v_dist_to.revision_num > v_previous_revision_num
920 	THEN
921 
922 		BEGIN
923 
924 		v_progress := '240';
925 		SELECT	*
926 		INTO	v_dist_from
927 		FROM	po_distributions_archive
928 		WHERE
929 			revision_num = (
930 			SELECT	MAX( revision_num )
931 			FROM	po_distributions_archive
932 			WHERE	revision_num <=
933 				v_previous_revision_num
934 			AND	po_distribution_id =
935 				v_dist_to.po_distribution_id
936 			)
937 		AND	po_distribution_id =
938 			v_dist_to.po_distribution_id;
939 
940 		EXCEPTION
941 		WHEN no_data_found THEN
942 			v_dist_from := NULL;
943 
944 		END;
945 
946 		v_progress := '250';
947 		po_compare_revisions.compare_distributions(
948 			v_dist_from,
949 			v_dist_to,
950 			p_sequence_num );
951 	END IF;
952 
953 END LOOP;
954 
955 EXCEPTION
956 WHEN others THEN
957 	PO_MESSAGE_S.SQL_ERROR(
958 		'PO_REVISION_DIFFERENCES.COMPARE_DISTRIBUTIONS',
959 		v_progress,
960 		sqlcode );
961 	RAISE;
962 
963 END compare_distributions;
964 
965 
966 
967 /*********************************************************************
968  * NAME
969  * compare_line_to_all
970  *
971  * PURPOSE
972  * Call the procedure COMPARE_PO_LINE with ALL as comparison flag.
973  *
974  * ARGUMENTS
975  * p_line_id		Unique identified for the current PO line in
976  *			PO_LINES_ARCHIVE_ALL table
977  * p_release_id		Unique identifier for the PO release in
978  *			PO_RELEASES_ARCHIVE_ALL table
979  * p_revision_num	Current PO line revision number
980  * p_dummy_in4		Not required
981  * p_dummy_in5		Not required
982  * p_dummy_in6		Not required
983  * p_dummy_in7		Not required
984  * p_dummy_in8		Not required
985  * p_dummy_in9		Not required
986  * p_dummy_in10		Not required
987  * p_sequence_num	Sequence number to identify the comparison
988  *			results for a specific record in
989  *			ICX_PO_REVISIONS_TEMP table.
990  * p_dummy_out2		Not required
991  * p_dummy_out3		Not required
992  * p_dummy_out4		Not required
993  * p_dummy_out5		Not required
994  * p_dummy_out6		Not required
995  * p_dummy_out7		Not required
996  * p_dummy_out8		Not required
997  * p_dummy_out9		Not required
998  * p_dummy_out10	Not required
999  *
1000  * NOTES
1001  * This procedures serves the purpose of a link from WAD to call the
1002  * procedure COMPARE_PO_LINE.  There is no way to store the comparison
1003  * flag in the link.  Therefore, the link calls this procedure, which
1004  * calls COMPARE_PO_LINE with the appropriate flag.
1005  *
1006  * Normally, you do not want to call this procedure directly.  You can
1007  * simply call COMPARE_PO_LINE with the appropriate parameters.
1008  *
1009  * HISTORY
1010  * 01-SEP-1997	Rami Haddad	Created
1011  * 05-SEP-1997	Matt Denton	Debugged
1012  ********************************************************************/
1013 PROCEDURE compare_line_to_all(
1014 	p_line_id IN NUMBER,
1015 	p_release_id IN NUMBER,
1016 	p_revision_num IN NUMBER,
1017 	p_dummy_in4 IN NUMBER DEFAULT NULL,
1018 	p_dummy_in5 IN NUMBER DEFAULT NULL,
1019 	p_dummy_in6 IN NUMBER DEFAULT NULL,
1020 	p_dummy_in7 IN NUMBER DEFAULT NULL,
1021 	p_dummy_in8 IN NUMBER DEFAULT NULL,
1022 	p_dummy_in9 IN NUMBER DEFAULT NULL,
1023 	p_dummy_in10 IN NUMBER DEFAULT NULL,
1024 	p_sequence_num OUT NOCOPY NUMBER,
1025 	p_dummy_out2 OUT NOCOPY NUMBER,
1026 	p_dummy_out3 OUT NOCOPY NUMBER,
1027 	p_dummy_out4 OUT NOCOPY NUMBER,
1028 	p_dummy_out5 OUT NOCOPY NUMBER,
1029 	p_dummy_out6 OUT NOCOPY NUMBER,
1030 	p_dummy_out7 OUT NOCOPY NUMBER,
1031 	p_dummy_out8 OUT NOCOPY NUMBER,
1032 	p_dummy_out9 OUT NOCOPY NUMBER,
1033 	p_dummy_out10 OUT NOCOPY NUMBER
1034 	) AS
1035 
1036 v_sequence_num	NUMBER := NULL;
1037 v_progress	VARCHAR2(3);
1038 
1039 BEGIN
1040 
1041 v_progress := '260';
1042 
1043 compare_po_line(
1044 	p_line_id,
1045 	p_release_id,
1046 	p_revision_num,
1047 	'ALL',
1048 	v_sequence_num );
1049 
1050 p_sequence_num := v_sequence_num;
1051 
1052 EXCEPTION
1053 WHEN others THEN
1054 	PO_MESSAGE_S.SQL_ERROR(
1055 		'PO_REVISION_DIFFERENCES.COMPARE_LINE_TO_ALL',
1056 		v_progress,
1057 		sqlcode );
1058 	RAISE;
1059 
1060 END compare_line_to_all;
1061 
1062 
1063 
1064 /*********************************************************************
1065  * NAME
1066  * compare_line_to_original
1067  *
1068  * PURPOSE
1069  * Call the procedure COMPARE_PO_LINE with the ORIGINAL as comparison
1070  * flag.
1071  *
1072  * ARGUMENTS
1073  * p_line_id		Unique identified for the current PO line in
1074  *			PO_LINES_ARCHIVE_ALL table
1075  * p_release_id		Unique identifier for the PO release in
1076  *			PO_RELEASES_ARCHIVE_ALL table
1077  * p_revision_num	Current PO line revision number
1078  * p_dummy_in4		Not required
1079  * p_dummy_in5		Not required
1080  * p_dummy_in6		Not required
1081  * p_dummy_in7		Not required
1082  * p_dummy_in8		Not required
1083  * p_dummy_in9		Not required
1084  * p_dummy_in10		Not required
1088  * p_dummy_out2		Not required
1085  * p_sequence_num	Sequence number to identify the comparison
1086  *			results for a specific record in
1087  *			ICX_PO_REVISIONS_TEMP table.
1089  * p_dummy_out3		Not required
1090  * p_dummy_out4		Not required
1091  * p_dummy_out5		Not required
1092  * p_dummy_out6		Not required
1093  * p_dummy_out7		Not required
1094  * p_dummy_out8		Not required
1095  * p_dummy_out9		Not required
1096  * p_dummy_out10	Not required
1097  *
1098  * NOTES
1099  * This procedures serves the purpose of a link from WAD to call the
1100  * procedure COMPARE_PO_LINE.  There is no way to store the comparison
1101  * flag in the link.  Therefore, the link calls this procedure, which
1102  * calls COMPARE_PO_LINE with the appropriate flag.
1103  *
1104  * Normally, you do not want to call this procedure directly.  You can
1105  * simply call COMPARE_PO_LINE with the appropriate parameters.
1106  *
1107  * HISTORY
1108  * 01-SEP-1997	Rami Haddad	Created
1109  * 05-SEP-1997	Matt Denton	Debugged
1110  ********************************************************************/
1111 PROCEDURE compare_line_to_original(
1112 	p_line_id IN NUMBER,
1113 	p_release_id IN NUMBER,
1114 	p_revision_num IN NUMBER,
1115 	p_dummy_in4 IN NUMBER DEFAULT NULL,
1116 	p_dummy_in5 IN NUMBER DEFAULT NULL,
1117 	p_dummy_in6 IN NUMBER DEFAULT NULL,
1118 	p_dummy_in7 IN NUMBER DEFAULT NULL,
1119 	p_dummy_in8 IN NUMBER DEFAULT NULL,
1120 	p_dummy_in9 IN NUMBER DEFAULT NULL,
1121 	p_dummy_in10 IN NUMBER DEFAULT NULL,
1122 	p_sequence_num OUT NOCOPY NUMBER,
1123 	p_dummy_out2 OUT NOCOPY NUMBER,
1124 	p_dummy_out3 OUT NOCOPY NUMBER,
1125 	p_dummy_out4 OUT NOCOPY NUMBER,
1126 	p_dummy_out5 OUT NOCOPY NUMBER,
1127 	p_dummy_out6 OUT NOCOPY NUMBER,
1128 	p_dummy_out7 OUT NOCOPY NUMBER,
1129 	p_dummy_out8 OUT NOCOPY NUMBER,
1130 	p_dummy_out9 OUT NOCOPY NUMBER,
1131 	p_dummy_out10 OUT NOCOPY NUMBER
1132 	) AS
1133 
1134 v_sequence_num	NUMBER := NULL;
1135 v_progress	VARCHAR2(3);
1136 
1137 BEGIN
1138 
1139 v_progress := '270';
1140 
1141 compare_po_line(
1142 	p_line_id,
1143 	p_release_id,
1144 	p_revision_num,
1145 	'ORIGINAL',
1146 	v_sequence_num );
1147 
1148 p_sequence_num := v_sequence_num;
1149 
1150 EXCEPTION
1151 WHEN others THEN
1152 	PO_MESSAGE_S.SQL_ERROR(
1153 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_ORIGINAL',
1154 		v_progress,
1155 		sqlcode );
1156 	RAISE;
1157 
1158 END compare_line_to_original;
1159 
1160 
1161 
1162 /*********************************************************************
1163  * NAME
1164  * compare_line_to_previous
1165  *
1166  * PURPOSE
1167  * Call the procedure COMPARE_PO_LINE with the PREVIOUS as comparison
1168  * flag.
1169  *
1170  * ARGUMENTS
1171  * p_line_id		Unique identified for the current PO line in
1172  *			PO_LINES_ARCHIVE_ALL table
1173  * p_release_id		Unique identifier for the PO release in
1174  *			PO_RELEASES_ARCHIVE_ALL table
1175  * p_revision_num	Current PO line revision number
1176  * p_dummy_in4		Not required
1177  * p_dummy_in5		Not required
1178  * p_dummy_in6		Not required
1179  * p_dummy_in7		Not required
1180  * p_dummy_in8		Not required
1181  * p_dummy_in9		Not required
1182  * p_dummy_in10		Not required
1183  * p_sequence_num	Sequence number to identify the comparison
1184  *			results for a specific record in
1185  *			ICX_PO_REVISIONS_TEMP table.
1186  * p_dummy_out2		Not required
1187  * p_dummy_out3		Not required
1188  * p_dummy_out4		Not required
1189  * p_dummy_out5		Not required
1190  * p_dummy_out6		Not required
1191  * p_dummy_out7		Not required
1192  * p_dummy_out8		Not required
1193  * p_dummy_out9		Not required
1194  * p_dummy_out10	Not required
1195  *
1196  * NOTES
1197  * This procedures serves the purpose of a link from WAD to call the
1198  * procedure COMPARE_PO_LINE.  We need to have two links in the flow
1199  * to compare the PO line with the original or with the previous.
1200  * There is no way to store the comparison flag in the link.
1201  * Therefore, the link calls this procedure, which calls
1202  * COMPARE_PO_LINE with ORIGINAL flag.
1203  *
1204  * Normally, you do not want to call this procedure directly.  You can
1205  * simply call COMPARE_PO_LINE with the appropriate parameters.
1206  *
1207  * HISTORY
1208  * 01-SEP-1997	Rami Haddad	Created
1209  * 05-SEP-1997	Matt Denton	Debugged
1210  ********************************************************************/
1211 PROCEDURE compare_line_to_previous(
1212 	p_line_id IN NUMBER,
1213 	p_release_id IN NUMBER,
1214 	p_revision_num IN NUMBER,
1215 	p_dummy_in4 IN NUMBER DEFAULT NULL,
1216 	p_dummy_in5 IN NUMBER DEFAULT NULL,
1217 	p_dummy_in6 IN NUMBER DEFAULT NULL,
1218 	p_dummy_in7 IN NUMBER DEFAULT NULL,
1219 	p_dummy_in8 IN NUMBER DEFAULT NULL,
1220 	p_dummy_in9 IN NUMBER DEFAULT NULL,
1221 	p_dummy_in10 IN NUMBER DEFAULT NULL,
1222 	p_sequence_num OUT NOCOPY NUMBER,
1223 	p_dummy_out2 OUT NOCOPY NUMBER,
1224 	p_dummy_out3 OUT NOCOPY NUMBER,
1225 	p_dummy_out4 OUT NOCOPY NUMBER,
1226 	p_dummy_out5 OUT NOCOPY NUMBER,
1227 	p_dummy_out6 OUT NOCOPY NUMBER,
1228 	p_dummy_out7 OUT NOCOPY NUMBER,
1229 	p_dummy_out8 OUT NOCOPY NUMBER,
1230 	p_dummy_out9 OUT NOCOPY NUMBER,
1231 	p_dummy_out10 OUT NOCOPY NUMBER
1232 	) AS
1233 
1234 v_sequence_num	NUMBER := NULL;
1235 v_progress	VARCHAR2(3);
1236 
1237 BEGIN
1238 
1239 v_progress := '280';
1240 
1241 compare_po_line(
1242 	p_line_id,
1243 	p_release_id,
1244 	p_revision_num,
1245 	'PREVIOUS',
1246 	v_sequence_num);
1247 
1248 p_sequence_num := v_sequence_num;
1249 
1250 EXCEPTION
1251 WHEN others THEN
1252 	PO_MESSAGE_S.SQL_ERROR(
1256 	RAISE;
1253 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_PREVIOUS',
1254 		v_progress,
1255 		sqlcode );
1257 
1258 END compare_line_to_previous;
1259 
1260 
1261 
1262 /*********************************************************************
1263  * NAME
1264  * compare_po_line
1265  *
1266  * PURPOSE
1267  * Compare a PO line with the previous or the original
1268  * revision---including all shipments, and distributions.
1269  *
1270  * ARGUMENTS
1271  * p_line_id		Unique identified for the current PO line in
1272  *			PO_LINES_ARCHIVE_ALL table
1273  * p_release_id		Unique identifier for the PO release in
1274  *			PO_RELEASES_ARCHIVE_ALL table
1275  * p_revision_num	Current PO line revision number
1276  * p_comparison_flag	Indicator to compare the PO with the previous
1277  *			or original revision
1278  * p_sequence_num	Sequence number to identify the comparison
1279  *			results for a specific record in
1280  *			ICX_PO_REVISIONS_TEMP table.
1281  *
1282  * NOTES
1283  *
1284  * HISTORY
1285  * 01-SEP-1997	Rami Haddad	Created
1286  * 05-SEP-1997	Matt Denton	Debugged
1287  * 26-NOV-1997	Rami Haddad	Handle comparison flag 'ALL.'
1288  ********************************************************************/
1289 PROCEDURE compare_po_line(
1290 	p_line_id IN NUMBER,
1291 	p_release_id IN NUMBER,
1292 	p_revision_num IN NUMBER,
1293 	p_comparison_flag IN VARCHAR2,
1294 	p_sequence_num OUT NOCOPY NUMBER
1295 	) AS
1296 
1297 v_sequence_num	NUMBER := NULL;
1298 v_revision_counter	NUMBER := p_revision_num;
1299 v_comparison_flag	VARCHAR2( 80 ) := p_comparison_flag;
1300 v_progress		VARCHAR2(3);
1301 
1302 BEGIN
1303 
1304 v_progress := '290';
1305 SELECT	icx_po_history_details_s.nextval
1306 INTO	v_sequence_num
1307 FROM	DUAL;
1308 p_sequence_num := v_sequence_num;
1309 
1310 v_progress := '300';
1311 IF v_comparison_flag = 'ALL' THEN
1312 	v_comparison_flag := 'PREVIOUS';
1313 END IF;
1314 
1315 LOOP
1316 	v_progress := '310';
1317 
1318 --Bug# 1788753.Adding the IF THEN condition.
1319       IF (p_release_id is NULL) THEN
1320 	compare_line(
1321 		p_line_id,
1322 		v_revision_counter,
1323 		v_comparison_flag,
1324 		v_sequence_num );
1325        END IF;
1326 
1327 	v_progress := '320';
1328 	compare_line_locs(
1329 		p_line_id,
1330 		p_release_id,
1331 		v_revision_counter,
1332 		v_comparison_flag,
1333 		v_sequence_num );
1334 
1335 	v_progress := '330';
1336 	compare_line_dists(
1337 		p_line_id,
1338 		p_release_id,
1339 		v_revision_counter,
1340 		v_comparison_flag,
1341 		v_sequence_num );
1342 
1343 	v_revision_counter := v_revision_counter - 1;
1344 
1345 	IF v_revision_counter < 1 OR
1346 		p_comparison_flag <>  'ALL'
1347 	THEN
1348 		EXIT;
1349 	END IF;
1350 
1351 END LOOP;
1352 
1353 v_progress := '340';
1354 po_compare_revisions.verify_no_differences( v_sequence_num );
1355 
1356 EXCEPTION
1357 WHEN others THEN
1358 	PO_MESSAGE_S.SQL_ERROR(
1359 		'PO_REVISION_DIFFERENCES.COMPARE_PO_LINE',
1360 		v_progress,
1361 		sqlcode );
1362 	RAISE;
1363 
1364 END compare_po_line;
1365 
1366 
1367 
1368 /*********************************************************************
1369  * NAME
1370  * compare_line
1371  *
1372  * PURPOSE
1373  * Compare a PO line with the previous or the original
1374  * revision---including all shipments, and distributions.
1375  *
1376  * ARGUMENTS
1377  * p_line_id		Unique identified for the current PO line in
1378  *			PO_LINES_ARCHIVE_ALL table
1379  * p_revision_num	Current PO line revision number
1380  * p_comparison_flag	Indicator to compare the PO with the previous
1381  *			or original revision
1382  * p_sequence_num	Sequence number to identify the comparison
1383  *			results for a specific record in
1384  *			ICX_PO_REVISIONS_TEMP table.
1385  *
1386  * NOTES
1387  * The original revision of a line is not necessarily 0.  When
1388  * comparing with the original, obtain the PO line with the lowest
1389  * revision.
1390  *
1391  * HISTORY
1392  * 01-SEP-1997	Rami Haddad	Created
1393  * 05-SEP-1997	Matt Denton	Debugged
1394  * 24-NOV-1997	Rami Haddad	Select PO line with minimum revision
1395  *				as the original PO line, instead of
1396  *				the one with revision 0.
1397  ********************************************************************/
1398 PROCEDURE compare_line(
1399 	p_line_id IN NUMBER,
1400 	p_revision_num IN NUMBER,
1401 	p_comparison_flag IN VARCHAR2,
1402 	p_sequence_num IN NUMBER
1403 	) AS
1404 
1405 v_line_to		po_lines_archive%ROWTYPE;
1406 v_line_from		po_lines_archive%ROWTYPE;
1407 
1408 v_previous_revision_num	NUMBER;
1409 v_progress		VARCHAR2(3);
1410 
1411 BEGIN
1412 
1413 v_progress := '350';
1414 IF p_revision_num <= 0
1415 THEN
1416 	RETURN;
1417 END IF;
1418 
1419 IF p_comparison_flag = 'ORIGINAL' THEN
1420 	SELECT	MIN( revision_num )
1421 	INTO	v_previous_revision_num
1422 	FROM	po_lines_archive
1423 	WHERE	po_line_id = p_line_id;
1424 ELSE
1425 	v_previous_revision_num :=  p_revision_num - 1;
1426 END IF;
1427 
1428 BEGIN
1429 
1430 	v_progress := '360';
1431 	SELECT	*
1432 	INTO	v_line_to
1433 	FROM	po_lines_archive pla1
1434 	WHERE
1435 		po_line_id = p_line_id
1436 	AND	revision_num = p_revision_num;
1437 
1438 	EXCEPTION
1439 	WHEN no_data_found THEN
1440 		v_line_to := NULL;
1441 
1442 END;
1443 
1444 BEGIN
1445 
1446 	v_progress := '370';
1447 	SELECT	*
1448 	INTO	v_line_from
1449 	FROM	po_lines_archive
1450 	WHERE
1451 		po_line_id = p_line_id
1452 	AND	revision_num = (
1453 		SELECT	MAX( revision_num )
1454 		FROM	po_lines_archive
1455 		WHERE
1456 			revision_num <=  v_previous_revision_num
1457 		AND	po_line_id = p_line_id
1458 		);
1459 
1460 	EXCEPTION
1461 	WHEN no_data_found THEN
1462 		v_line_from := NULL;
1463 
1464 END;
1465 
1466 v_progress := '380';
1467 po_compare_revisions.compare_lines(
1468 	v_line_from,
1469 	v_line_to,
1470 	p_sequence_num );
1471 
1472 EXCEPTION
1473 WHEN others THEN
1474 	PO_MESSAGE_S.SQL_ERROR(
1475 		'PO_REVISION_DIFFERENCES.COMPARE_LINE',
1476 		v_progress,
1477 		sqlcode );
1478 	RAISE;
1479 
1480 END compare_line;
1481 
1482 
1483 
1484 /*********************************************************************
1485  * NAME
1486  * compare_line_locs
1487  *
1488  * PURPOSE
1489  * Compare a PO line shipments with the previous or the original
1490  * revision---including all shipments, and distributions.
1491  *
1492  * ARGUMENTS
1493  * p_line_id		Unique identified for the current PO line in
1494  *			PO_LINES_ARCHIVE_ALL table
1495  * p_release_id		Unique identified for the current PO release
1496  *			in PO_RELEASES_ARCHIVE_ALL table
1497  * p_revision_num	Current PO line revision number
1498  * p_comparison_flag	Indicator to compare the PO with the previous
1499  *			or original revision
1500  * p_sequence_num	Sequence number to identify the comparison
1501  *			results for a specific record in
1502  *			ICX_PO_REVISIONS_TEMP table.
1503  *
1504  * NOTES
1505  *
1506  * HISTORY
1507  * 01-SEP-1997	Rami Haddad	Created
1508  * 05-SEP-1997	Matt Denton	Debugged
1509  * 20-NOV-1997	Rami Haddad	Changed cursor to select latest
1510  *				revision of shipments for the line,
1511  *				given its revision number,
1512  *				p_revision_num.
1513  ********************************************************************/
1514 PROCEDURE compare_line_locs(
1515 	p_line_id IN NUMBER,
1516 	p_release_id IN NUMBER,
1517 	p_revision_num IN NUMBER,
1518 	p_comparison_flag IN VARCHAR2,
1519 	p_sequence_num IN NUMBER
1520 	) AS
1521 
1522 CURSOR current_locations(
1523 	current_line_id NUMBER,
1524 	current_release_id NUMBER
1525 	) IS
1526 SELECT	*
1527 FROM	po_line_locations_archive plla1
1528 WHERE
1529 	po_line_id = current_line_id
1530 AND	NVL( po_release_id, -99 ) = current_release_id
1531 AND	revision_num = (
1532 	SELECT	MAX( revision_num )
1533 	FROM	po_line_locations_archive plla2
1534 	WHERE
1535 		revision_num <= p_revision_num
1536 	AND	plla2.line_location_id = plla1.line_location_id
1537 	);
1538 
1539 v_loc_from		po_line_locations_archive%ROWTYPE;
1540 v_loc_to		po_line_locations_archive%ROWTYPE;
1541 
1542 v_previous_revision_num	NUMBER;
1543 v_progress		VARCHAR2(3);
1544 
1545 BEGIN
1546 
1547 v_progress := '390';
1548 IF p_revision_num <= 0 THEN
1549 	RETURN;
1550 END IF;
1551 
1552 IF p_comparison_flag = 'ORIGINAL' THEN
1553 	SELECT	MIN( revision_num )
1554 	INTO	v_previous_revision_num
1555 	FROM	po_lines_archive
1556 	WHERE	po_line_id = p_line_id;
1557 ELSE
1558 	v_previous_revision_num :=  p_revision_num - 1;
1559 END IF;
1560 
1561 v_progress := '400';
1562 FOR v_loc_to IN current_locations(
1563 	p_line_id,
1564 	NVL( p_release_id, -99 )
1565 	) loop
1566 
1567 	/* Compare the lines only if the current line has a revision
1568 	 * greater than the calculated revision number of previous
1569 	 * line.
1570 	 */
1571 	IF v_loc_to.revision_num > v_previous_revision_num THEN
1572 
1573 		BEGIN
1574 
1575 		v_progress := '410';
1576 		SELECT	*
1577 		INTO	v_loc_from
1578 		FROM	po_line_locations_archive
1579 		WHERE
1580 			line_location_id = v_loc_to.line_location_id
1581 		AND	revision_num =
1582 			(
1583 			SELECT	MAX(revision_num)
1584 			FROM	po_line_locations_archive
1585 			WHERE
1586 				revision_num <=
1587 				v_previous_revision_num
1588 			AND	line_location_id =
1589 				v_loc_to.line_location_id
1590 			);
1591 
1592 			EXCEPTION
1593 			WHEN no_data_found THEN
1594 				v_loc_from := NULL;
1595 
1596 		END;
1597 
1598 		v_progress := '420';
1599 		po_compare_revisions.compare_locations(
1600 			v_loc_from,
1601 			v_loc_to,
1602 			p_sequence_num );
1603 	END IF;
1604 
1605 END loop;
1606 
1607 EXCEPTION
1608 WHEN others THEN
1609 	PO_MESSAGE_S.SQL_ERROR(
1610 		'PO_REVISION_DIFFERENCES.COMPARE_LINE_LOCS',
1611 		v_progress,
1612 		sqlcode );
1613 	RAISE;
1614 
1615 END compare_line_locs;
1616 
1617 
1618 
1619 /*********************************************************************
1620  * NAME
1621  * compare_line_dists
1622  *
1623  * PURPOSE
1624  * Compare a PO line distributions with the previous or the original
1625  * revision.
1626  *
1627  * ARGUMENTS
1628  * p_line_id		Unique identified for the current PO line in
1629  *			PO_LINES_ARCHIVE_ALL table
1630  * p_release_id		Unique identified for the current PO release
1631  *			in PO_RELEASES_ARCHIVE_ALL table
1632  * p_revision_num	Current PO line revision number
1633  * p_comparison_flag	Indicator to compare the PO with the previous
1634  *			or original revision
1635  * p_sequence_num	Sequence number to identify the comparison
1636  *			results for a specific record in
1637  *			ICX_PO_REVISIONS_TEMP table.
1638  *
1639  * NOTES
1640  *
1641  * HISTORY
1645  *				Changed cursor to select latest
1642  * 01-SEP-1997	Rami Haddad	Created
1643  * 05-SEP-1997	Matt Denton	Debugged
1644  * 20-NOV-1997	Rami Haddad	Documented
1646  *				revision of distributions for the
1647  *				line, given its revision number,
1648  *				p_revision_num.
1649  ********************************************************************/
1650 PROCEDURE compare_line_dists(
1651 	p_line_id IN NUMBER,
1652 	p_release_id IN NUMBER,
1653 	p_revision_num IN NUMBER,
1654 	p_comparison_flag IN VARCHAR2,
1655 	p_sequence_num IN NUMBER
1656 	) AS
1657 
1658 CURSOR current_distributions(
1659 	current_line_id number,
1660 	current_release_id number
1661 	) IS
1662 SELECT	*
1663 FROM	po_distributions_archive pda1
1664 WHERE
1665 	po_line_id = current_line_id
1666 AND	NVL( po_release_id, -99 ) = current_release_id
1667 AND	revision_num = (
1668 	SELECT	MAX( revision_num )
1669 	FROM	po_distributions_archive pda2
1670 	WHERE
1671 		revision_num <= p_revision_num
1672 	AND	pda2.po_distribution_id = pda1.po_distribution_id
1673 	);
1674 
1675 v_dist_from		po_distributions_archive%ROWTYPE;
1676 v_dist_to		po_distributions_archive%ROWTYPE;
1677 
1678 v_previous_revision_num	NUMBER;
1679 v_progress		VARCHAR2(3);
1680 
1681 BEGIN
1682 
1683 v_progress := '430';
1684 IF p_revision_num <= 0 THEN
1685 	RETURN;
1686 END IF;
1687 
1688 IF p_comparison_flag = 'ORIGINAL' THEN
1689 	SELECT	MIN( revision_num )
1690 	INTO	v_previous_revision_num
1691 	FROM	po_lines_archive
1692 	WHERE	po_line_id = p_line_id;
1693 ELSE
1694 	v_previous_revision_num :=  p_revision_num - 1;
1695 END IF;
1696 
1697 FOR v_dist_to in current_distributions(
1698 	p_line_id,
1699 	NVL( p_release_id, -99 )
1700 	) LOOP
1701 
1702 	/* Compare the lines only if the current line has a revision
1703 	 * greater than the calculated revision number of previous
1704 	 * line.
1705 	 */
1706 	IF v_dist_to.revision_num > v_previous_revision_num
1707 	THEN
1708 
1709 		BEGIN
1710 
1711 		v_progress := '440';
1712 		SELECT	*
1713 		INTO	v_dist_from
1714 		FROM	po_distributions_archive
1715 		WHERE
1716 			po_distribution_id =
1717 				v_dist_to.po_distribution_id
1718 		AND	revision_num = (
1719 			SELECT	MAX( revision_num )
1720 			FROM	po_distributions_archive
1721 			WHERE	revision_num <=
1722 				v_previous_revision_num
1723 			AND	po_distribution_id =
1724 				v_dist_to.po_distribution_id
1725 			);
1726 
1727 			EXCEPTION
1728 			WHEN no_data_found THEN
1729 				v_dist_from := NULL;
1730 
1731 		END;
1732 
1733 		v_progress := '450';
1734 		po_compare_revisions.compare_distributions(
1735 			v_dist_from,
1736 			v_dist_to,
1737 			p_sequence_num );
1738 		END IF;
1739 
1740 END LOOP;
1741 
1742 EXCEPTION
1743 WHEN others THEN
1744 	PO_MESSAGE_S.SQL_ERROR(
1745 		'PO_REVISION_DIFFERENCES.COMPARE_PO_TO_ALL',
1746 		v_progress,
1747 		sqlcode );
1748 	RAISE;
1749 
1750 END compare_line_dists;
1751 
1752 END po_revision_differences;