DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_DATES_S

Source


1 PACKAGE BODY PO_DATES_S AS
2 /* $Header: POXCODAB.pls 115.9 2004/05/26 00:34:59 spangulu ship $*/
3 /*===========================================================================
4 
5   FUNCTION NAME:	val_open_period()
6 
7 ===========================================================================*/
8 
9 FUNCTION val_open_period(x_trx_date IN DATE,
10 			 x_sob_id   IN NUMBER,
11 			 x_app_name IN VARCHAR2,
12 			 x_org_id   IN NUMBER) RETURN BOOLEAN IS
13 
14 /*
15 **  Function checks if inventory or purchasing is installed.  If not, returns
16 **  'TRUE'.  If so,  checks if date is in an open inventory or purchasing
17 **  period by calling get_closing_status.  For GL, always calls
18 **  get_closing_status to check if date is in an open GL period.  Returns
19 **  TRUE if the period is open, FALSE otherwise.
20 */
21 
22 x_progress VARCHAR2(3) := NULL;
23 
24 BEGIN
25    x_progress := '000';
26 
27 /* bao - cache values to reduce the number of select statements */
28 /* Bug 3647086: forward port fix; removed caching logic of the closed
29  * status for po, inv, and gl; caching for these values
30  * is  not working correctly in some cases.
31  * Kept caching for install status and app id, which are working fine.
32  */
33 
34    IF (x_app_name = 'PO') THEN
35 
36      IF (PO_DATES_S.x_po_install_status is NULL) THEN
37        /* derive and cache po_install_status */
38        PO_DATES_S.x_po_install_status := PO_CORE_S.get_product_install_status(x_app_name);
39      END IF;
40 
41      IF (PO_DATES_S.x_po_install_status = 'I') THEN
42 
43        IF (PO_DATES_S.x_po_app_id IS NULL) THEN
44            /* derive and cache app_id */
45            PO_DATES_S.x_po_app_id := get_app_id(x_app_name);
46        END IF;
47 
48        -- Bug 3647806: Remove caching of po_closed_status
49        IF (PO_DATES_S.get_closing_status( x_trx_date => x_trx_date
50                                         , x_sob_id   => x_sob_id
51                                         , x_app_id   => PO_DATES_S.x_po_app_id
52                                         )
53                      NOT IN ('O', 'F'))
54        THEN
55            RETURN(FALSE);
56        END IF;
57 
58     END IF; /* x_po_install_status = 'I' */
59 
60    ELSIF (x_app_name = 'INV') THEN
61 
62      IF (PO_DATES_S.x_inv_install_status is NULL) THEN
63        /* derive and cache inv_install_status */
64        PO_DATES_S.x_inv_install_status := PO_CORE_S.get_product_install_status(x_app_name);
65      END IF;
66 
67      IF (PO_DATES_S.x_inv_install_status = 'I') THEN
68 
69        -- Bug 3647806: Store inv_app_id in x_inv_app_id
70        -- Also, changed get_app_id('SQLGL') to get_app_id('INV'), which is correct for inv
71        IF (PO_DATES_S.x_inv_app_id is NULL) THEN
72            PO_DATES_S.x_inv_app_id := get_app_id('INV');
73        END IF;
74 
75        -- Bug 3647806: Remove caching of inv_closed_status
76        IF (PO_DATES_S.get_acct_period_status( x_trx_date => x_trx_date
77                                             , x_sob_id   => x_sob_id
78                                             , x_app_id   => PO_DATES_S.x_inv_app_id
79                                             , x_org_id   => x_org_id
80                                             )
81                      NOT IN ('O', 'F'))
82        THEN
83            RETURN(FALSE);
84        END IF;
85 
86      END IF; /* x_inv_install_status = 'I' */
87 
88    ELSE
89 
90 
91      /* Bug 3647806: Also cached gl install status. */
92      IF (x_app_name = 'SQLGL') THEN
93 
94        IF (PO_DATES_S.x_sqlgl_install_status is NULL) THEN
95          /* derive and cache gl_install_status */
96          PO_DATES_S.x_sqlgl_install_status := PO_CORE_S.get_product_install_status(x_app_name);
97        END IF;
98 
99      END IF;
100 
101      IF ((PO_DATES_S.x_sqlgl_install_status = 'I') OR
102         (PO_CORE_S.get_product_install_status(x_app_name) = 'I')) THEN
103 
104        IF (PO_DATES_S.x_sqlgl_app_id is NULL) THEN
105            /* derive and cache gl_app_id in x_sqlgl_app_id */
106            PO_DATES_S.x_sqlgl_app_id := get_app_id('SQLGL');
107        END IF;
108 
109        -- Bug 3647806: Remove caching of gl_closed_status
110        IF (PO_DATES_S.get_closing_status( x_trx_date => x_trx_date
111                                         , x_sob_id   => x_sob_id
112                                         , x_app_id   => PO_DATES_S.x_sqlgl_app_id
113                                         )
114                      NOT IN ('O', 'F'))
115        THEN
116            RETURN(FALSE);
117        END IF;
118 
119      END IF; /* get_product_install_status = 'I' */
120 
121    END IF;
122 
123    RETURN(TRUE);
124 
125 EXCEPTION
126 
127    WHEN OTHERS THEN
128       po_message_s.sql_error('val_open_period', x_progress, sqlcode);
129       RAISE;
130 
131 END val_open_period;
132 
133 /*===========================================================================
134 
135   FUNCTION NAME:	get_app_id()
136 
137 ===========================================================================*/
138 
139 FUNCTION get_app_id(x_app_name IN VARCHAR2) RETURN NUMBER IS
140 
141 /*
142 **  Function determines the application id using the application short name
143 **  passed in.
144 */
145 
146 x_progress VARCHAR2(3) := NULL;
147 x_app_id NUMBER := NULL;
148 
149 BEGIN
150    x_progress := '010';
151 
152    SELECT application_id
153    INTO   x_app_id
154    FROM   fnd_application
155    WHERE  application_short_name = x_app_name ;
156 
157    RETURN(x_app_id);
158 
159    EXCEPTION
160    WHEN OTHERS THEN
161       po_message_s.sql_error('get_app_id', x_progress, sqlcode);
162    RAISE;
163 
164 END get_app_id;
165 /*===========================================================================
166 
167   FUNCTION NAME:	get_closing_status()
168 
169 ===========================================================================*/
170 
171 FUNCTION get_closing_status(x_trx_date IN DATE,
172 		       	    x_sob_id   IN NUMBER,
173 		    	    x_app_id   IN NUMBER) RETURN VARCHAR2 IS
174 
175 /*
176 **  Function determines the application id using the application short name
177 **  passed in.  It returns period closing status.
178 */
179 
180 x_progress VARCHAR2(3) := NULL;
181 x_closing_status VARCHAR2(1) := NULL;
182 
183 BEGIN
184 
185    x_progress := '010';
186 
187    SELECT ps.closing_status
188    INTO   x_closing_status
189    FROM   gl_period_statuses ps
190    WHERE  ps.application_id = x_app_id
191    AND	  ps.adjustment_period_flag = 'N'
192    AND    ps.set_of_books_id = x_sob_id
193    AND    trunc(x_trx_date) BETWEEN trunc(nvl(ps.start_date, x_trx_date))
194                             AND     trunc(nvl(ps.end_date, x_trx_date))
195    AND    ps.adjustment_period_flag = 'N';
196 
197    RETURN(x_closing_status);
198 
199    EXCEPTION
200    WHEN NO_DATA_FOUND then
201       po_message_s.app_error('PO_PO_ENTER_OPEN_GL_DATE');
202       RAISE;
203    WHEN TOO_MANY_ROWS then
204       po_message_s.app_error(''); --bad data in gl_period_statuses
205       RAISE;
206    WHEN OTHERS THEN
207       po_message_s.sql_error('get_closing_status', x_progress, sqlcode);
208       RAISE;
209 
210 END get_closing_status;
211 
212 /*===========================================================================
213 
214   FUNCTION NAME:	get_acct_period_status()
215 
216 ===========================================================================*/
217 
218 FUNCTION get_acct_period_status(x_trx_date IN DATE,
219 		       	        x_sob_id   IN NUMBER,
220 				x_app_id   IN NUMBER,
221 		    	        x_org_id   IN NUMBER) RETURN VARCHAR2 IS
222 
223 /*
224 **  Function returns accounting period closing status.
225 */
226 
227 x_progress        VARCHAR2(3) := NULL;
228 x_closing_status  VARCHAR2(1) := NULL;
229 x_open_flag       VARCHAR2(1) := NULL;
230 
231 BEGIN
232 
233    x_progress := '010';
234 
235   /* SELECT glps.closing_status
236    INTO   x_closing_status
237    FROM   org_acct_periods oap,
238           gl_period_statuses glps,
239           gl_periods glp
240    WHERE  oap.organization_id = x_org_id
241    AND    oap.period_set_name  = glp.period_set_name
242    AND    oap.period_name = glp.period_name   -- Bug 873654
243    AND    glp.period_name = glps.period_name
244    AND   (trunc(x_trx_date)
245           BETWEEN trunc(oap.period_start_date) AND
246           trunc(nvl(oap.period_close_date, oap.schedule_close_date)))
247    AND    oap.open_flag = 'Y'
248    AND   (trunc(x_trx_date)
249          BETWEEN trunc(glps.start_date) AND trunc(glps.end_date))
250    AND    glps.set_of_books_id = x_sob_id
251    AND    glps.application_id  = x_app_id
252    AND    glps.adjustment_period_flag = 'N';
253 */
254    SELECT oap.open_flag
255    INTO   x_open_flag
256    FROM   org_acct_periods oap
257    WHERE  oap.organization_id = x_org_id
258    AND   (trunc(x_trx_date)
259           BETWEEN trunc(oap.period_start_date) AND
260           trunc(nvl(oap.period_close_date, oap.schedule_close_date)))
261    AND    oap.open_flag = 'Y';
262 
263    if (x_open_flag = 'Y') then
264       x_closing_status := 'O';
265    end if;
266 
267    RETURN(x_closing_status);
268 
269    EXCEPTION
270    WHEN NO_DATA_FOUND then
271       po_message_s.app_error('PO_INV_NO_OPEN_PERIOD');
272       RAISE;
273    WHEN TOO_MANY_ROWS then
274       po_message_s.app_error('PO_INV_MUL_PERIODS');
275       RAISE;
276    WHEN OTHERS THEN
277       po_message_s.sql_error('get_acct_period_status', x_progress, sqlcode);
278       RAISE;
279 
280 END get_acct_period_status;
281 
282 END PO_DATES_S;