1 PACKAGE BODY AP_CREATE_PAY_DISTS_PKG AS
2 /* $Header: appdistb.pls 120.4 2004/10/28 23:26:25 pjena noship $ */
3
4
5 -----------------------------------------------------------------------
6 -- Procedure overlay_segments performs either ACCOUNT or BALANCING
7 -- segment overlay of the two input segments and returns the validated
8 -- ccid of the resulting overlay segments or the reason it could not
9 -- be flexbuilt.
10 --
11 -- Case 1: Account Segment Overlay
12 --
13 -- Result B B [A] B ...
14 -- Primary A A [A] A ...
15 -- Overlay B B [B] B ...
16 --
17 -- Case 2: Balancing Segment Overlay
18 --
19 -- Result [B] A A A ...
20 -- Primary [A] A A A ...
21 -- Overlay [B] B B B ...
22 --
23 PROCEDURE overlay_segments
24 (P_primary_segments IN FND_FLEX_EXT.SEGMENTARRAY
25 ,P_overlay_segments IN FND_FLEX_EXT.SEGMENTARRAY
26 ,P_num_segments IN NUMBER
27 ,P_chart_of_accounts_id IN NUMBER
28 ,P_flex_segment_num IN NUMBER
29 ,P_flex_qualifier_name IN VARCHAR2
30 ,P_segment_delimiter IN VARCHAR2
31 ,P_ccid OUT NOCOPY NUMBER
32 ,P_unbuilt_flex OUT NOCOPY VARCHAR2
33 ,P_reason_unbuilt_flex OUT NOCOPY VARCHAR2
34 ,P_calling_sequence IN VARCHAR2
35 )
36 IS
37 l_segments FND_FLEX_EXT.SEGMENTARRAY;
38 l_result BOOLEAN;
39 l_debug_info VARCHAR2(240);
40 l_curr_calling_sequence VARCHAR2(2000);
41 BEGIN
42 l_curr_calling_sequence := 'AP_CREATE_PAY_DISTS_PKG.OVERLAY_SEGMENTS<-' ||
43 P_calling_sequence;
44
45 -------------------------------------------------------------------
46 -- Overlay segments
47 --
48 FOR i IN 1..P_num_segments LOOP
49
50 l_debug_info := 'Overlaying segment number ' || TO_CHAR(i);
51
52 IF (P_flex_qualifier_name = 'GL_ACCOUNT') THEN
53 --
54 -- Case 1: Account segment overlay
55 --
56 IF (i = P_flex_segment_num) THEN
57 l_segments(i) := P_primary_segments(i);
58 ELSE
59 l_segments(i) := P_overlay_segments(i);
60 END IF;
61
62 ELSIF (P_flex_qualifier_name = 'GL_BALANCING') THEN
63 --
64 -- Case 2: Balancing segment overlay
65 --
66 IF (i = P_flex_segment_num) THEN
67 l_segments(i) := P_overlay_segments(i);
68 ELSE
69 l_segments(i) := P_primary_segments(i);
70 END IF;
71
72 END IF;
73
74 END LOOP;
75
76 -------------------------------------------------------------------
77 -- Get ccid for overlayed segments
78 --
79 l_result := FND_FLEX_EXT.GET_COMBINATION_ID(
80 'SQLGL',
81 'GL#',
82 P_chart_of_accounts_id,
83 SYSDATE,
84 P_num_segments,
85 l_segments,
86 P_ccid);
87
88 IF (NOT l_result) THEN
89 --
90 -- Store unbuild flex reason and unbuilt flex if error
91 --
92 P_ccid := -1;
93 P_reason_unbuilt_flex := FND_MESSAGE.GET;
94 P_unbuilt_flex := FND_FLEX_EXT.CONCATENATE_SEGMENTS(
95 P_num_segments,
96 l_segments,
97 P_segment_delimiter);
98 ELSE
99 P_reason_unbuilt_flex := NULL;
100 P_unbuilt_flex := NULL;
101 END IF;
102
103 EXCEPTION
104 WHEN OTHERS THEN
105 IF (SQLCODE <> -20001) THEN
106 FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
107 FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
108 FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
109 FND_MESSAGE.SET_TOKEN('PARAMETERS',
110 ' FLEX_QUALIFIER_NAME = '|| P_flex_qualifier_name
111 ||', FLEX_SEGMENT_NUM = ' || TO_CHAR(P_flex_segment_num));
112 FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
113 END IF;
114 APP_EXCEPTION.RAISE_EXCEPTION;
115
116 END overlay_segments;
117
118 END AP_CREATE_PAY_DISTS_PKG;