DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_CORE_SV1

Source


1 PACKAGE BODY PO_CORE_SV1 AS
2 /* $Header: POXPICOB.pls 120.2 2006/04/20 11:32:12 bao noship $ */
3 
4 /*================================================================
5 
6   FUNCTION NAME: 	val_effective_date()
7 
8 ==================================================================*/
9  FUNCTION val_effective_date(x_effective_date   IN DATE,
10                              x_po_header_id     IN NUMBER)
11  RETURN BOOLEAN IS
12 
13   x_progress     VARCHAR2(3):= null;
14   l_temp         VARCHAR2(10);
15 
16   CURSOR l_val_date_csr IS
17       SELECT 'valid'
18         FROM po_headers
19        WHERE po_header_id = x_po_header_id
20          AND (TRUNC(x_effective_date) BETWEEN
21                  TRUNC(nvl(start_date,x_effective_date)) AND
22                  TRUNC(nvl(end_date, x_effective_date)));
23 
24  BEGIN
25     x_progress := '010';
26     /* This is to check if the X_effective_date is between start_date
27         and end_date for a specific po_header_id */
28 
29     -- Bug 2449186. Truncate the dates when comparing them. Also
30     -- refactored to use a cursor instead of a select with count(*).
31     OPEN l_val_date_csr;
32     FETCH l_val_date_csr INTO l_temp;
33 
34     x_progress := '020';
35 
36     IF l_val_date_csr%FOUND THEN
37         CLOSE l_val_date_csr;
38         RETURN TRUE;    /* validation succeeds */
39     ELSE
40         CLOSE l_val_date_csr;
41         RETURN FALSE;   /* validation fails */
42     END IF;
43 
44 EXCEPTION
45   WHEN others THEN
46        IF l_val_date_csr%ISOPEN THEN
47            CLOSE l_val_date_csr;
48        END IF;
49        po_message_s.sql_error('val_effective_date', x_progress, sqlcode);
50        raise;
51 END val_effective_date;
52 
53 /*================================================================
54 
55   FUNCTION NAME: 	val_numeric_value()
56 
57 ==================================================================*/
58  FUNCTION val_numeric_value(x_value  IN VARCHAR2) RETURN BOOLEAN
59  IS
60 
61    x_progress   varchar2(3) := null;
62    X_temp       NUMBER;
63 
64  BEGIN
65    x_progress := '010';
66 
67    X_temp := TO_NUMBER(X_value);
68 
69    RETURN TRUE;
70 
71  EXCEPTION
72    WHEN value_error THEN   /* when input value is not a numeric */
73 	RETURN  FALSE;
74    WHEN others THEN
75         po_message_s.sql_error('val_numeric_value', x_progress,sqlcode);
76         raise;
77  END val_numeric_value;
78 
79 /*================================================================
80 
81   FUNCTION NAME: 	val_start_and_end_date()
82 
83 ==================================================================*/
84  FUNCTION val_start_and_end_date(X_start_date  IN DATE,
85 			         X_end_date    IN DATE)
86  RETURN BOOLEAN
87  IS
88 
89    x_progress   varchar2(3) := null;
90 
91  BEGIN
92    x_progress := '010';
93 
94    IF (X_start_date > X_end_date) THEN
95       RETURN FALSE;   /* validation fails */
96    ELSE
97       RETURN TRUE;    /* validation succeeds */
98    END IF;
99 
100  EXCEPTION
101    WHEN others THEN
102         po_message_s.sql_error('val_start_and_end_date', x_progress,sqlcode);
103         raise;
104  END val_start_and_end_date;
105 
106 /*================================================================
107 
108   FUNCTION NAME: 	val_flag_value()
109 
110 ==================================================================*/
111  FUNCTION val_flag_value(x_flag_value  IN VARCHAR2)
112  RETURN BOOLEAN
113  IS
114 
115    x_progress   varchar2(3) := null;
116 
117  BEGIN
118    x_progress := '010';
119 
120    IF X_flag_value In ('Y','N') THEN
121       RETURN TRUE;    /* validation fails */
122    ELSE
123       RETURN FALSE;   /* validation succeeds */
124    END IF;
125 
126  EXCEPTION
127    WHEN others THEN
128         po_message_s.sql_error('val_flag_value', x_progress,sqlcode);
129         raise;
130  END val_flag_value;
131 
132 /*================================================================
133 
134   FUNCTION NAME:        default_po_unique_identifier()
135 
136 ==================================================================*/
137 
138 FUNCTION  default_po_unique_identifier(X_table_name IN VARCHAR2)
139 return varchar2 IS
140 
141    X_progress       		varchar2(3)     := NULL;
142    X_po_unique_identifier_v     NUMBER    := NULL;
143 
144    l_org_id NUMBER := PO_MOAC_UTILS_PVT.get_current_org_id; -- bug5174177
145 
146 BEGIN
147 
148    X_progress := '010';
149 
150    -- bug5174177
151    -- PO number generation logic has been moved to the following procedure,
152    -- which takes in ou id.
153    X_po_unique_identifier_v := default_po_unique_identifier
154                                ( p_table_name => x_table_name,
155                                  p_org_id     => l_org_id
156                                );
157 
158    RETURN X_po_unique_identifier_v;
159 
160 END default_po_unique_identifier;
161 
162 
163 -- bug5174177 START
164 -- Moved the po num generation logic to this overloaded function.
165 -- Need to introduce p_org_id because autocreate creates the PO
166 -- from a different OU.
167 
168 -----------------------------------------------------------------------
169 --Start of Comments
170 --Name: default_po_unique_identifier
171 --Pre-reqs: None
172 --Modifies:
173 --Locks:
174 --  None
175 --Function:
176 --  Return the next po/req number generated by the system
177 --Parameters:
178 --IN:
179 --p_table_name
180 --  Type of document to generate number for. Possible values are:
181 --  PO_HEADERS             -- For PO and PA
182 --  PO_HEADERS_QUOTE       -- For Quote
183 --  PO_HEADERS_RFQ         -- For RFQ
184 --  PO_REQUISITION_HEADERS -- For Requisition
185 --p_org_id
186 --  Operating unit where the document belongs to
187 --IN OUT:
188 --OUT:
189 --Returns: Next po/req number generated by the system
190 --Notes:
191 --Testing:
192 --End of Comments
193 ------------------------------------------------------------------------
194 FUNCTION  default_po_unique_identifier
195 ( p_table_name IN VARCHAR2,
196   p_org_id     IN NUMBER
197 ) RETURN VARCHAR2 IS
198 PRAGMA AUTONOMOUS_TRANSACTION; -- bug5047141
199 
200 l_progress                   varchar2(3)     := NULL;
201 l_po_unique_identifier_v     NUMBER    := NULL;
202 
203 BEGIN
204 
205   l_progress := '010';
206 
207   -- increment the number in po_unique_identifier_cont_all by 1
208   -- based on table_name and org_id from parameter list.
209   UPDATE po_unique_identifier_cont_all
210   SET    current_max_unique_identifier =
211            current_max_unique_identifier +1
212   WHERE  table_name = p_table_name
213   AND    org_id     = p_org_id
214   RETURNING current_max_unique_identifier
215   INTO   l_po_unique_identifier_v;
216 
217   COMMIT;  -- bug5047141
218 
219 
220   RETURN TO_CHAR(l_po_unique_identifier_v);
221 
222 EXCEPTION
223 WHEN NO_DATA_FOUND THEN
224   RETURN NULL;
225 WHEN OTHERS THEN
226   PO_MESSAGE_S.sql_error('default_po_unique_identifier',
227                          l_progress, sqlcode);
228   RAISE;
229 END default_po_unique_identifier;
230 
231 -- bug5174177 END
232 
233 
234 
235 
236 /*================================================================
237 
238   FUNCTION NAME: 	val_max_and_min_qty()
239 
240 ==================================================================*/
241  FUNCTION val_max_and_min_qty(x_qty1  IN NUMBER,
242                               x_qty2  IN NUMBER) RETURN BOOLEAN
243  IS
244 
245    x_progress        varchar2(3) := null;
246 
247  BEGIN
248    x_progress := '010';
249 
250    /* check to see if x_qty1 > x_qty2 */
251 
252    IF (x_qty1 > x_qty2) THEN
253       RETURN FALSE;    /* validation fails */
254    ELSE
255       RETURN TRUE;     /* validation succeeds */
256    END IF;
257 
258  EXCEPTION
259    WHEN others THEN
260         po_message_s.sql_error
261         ('val_gt_and_lt_qty', x_progress, sqlcode);
262       raise;
263  END val_max_and_min_qty;
264 
265 /*================================================================
266 
267   FUNCTION NAME: 	val_discount()
268 
269 ==================================================================*/
270  FUNCTION val_discount(x_discount  IN NUMBER) RETURN BOOLEAN
271  IS
272 
273    x_progress     varchar2(3) := null;
274 
275  BEGIN
276    x_progress := '010';
277 
278    IF (x_discount < 0) OR (x_discount > 100) THEN
279       RETURN FALSE;    /* validation fails */
280    ELSE
281       RETURN TRUE;     /* validation succeeds */
282    END IF;
283 
284  EXCEPTION
285    WHEN others THEN
286         po_message_s.sql_error('val_discount_betwn_zero_and_hundred',
287                                x_progress,sqlcode);
288         raise;
289  END val_discount;
290 
291 
292 END PO_CORE_SV1;