DBA Data[Home] [Help]

PACKAGE BODY: APPS.INV_RCV_CACHE

Source


1 PACKAGE BODY INV_RCV_CACHE AS
2 /* $Header: INVRCSHB.pls 120.3 2006/03/01 18:12:37 gayu noship $*/
3 
4 PROCEDURE print_debug(p_err_msg VARCHAR2
5 		      ,p_module IN VARCHAR2 := ' '
6 		      ,p_level NUMBER := 4)
7   IS
8      l_debug NUMBER;
9 BEGIN
10    l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
11    inv_mobile_helper_functions.tracelog
12      (p_err_msg => p_err_msg
13       ,p_module => 'INV_RCV_CACHE.'||p_module
14       ,p_level => p_level);
15 END;
16 
17 FUNCTION convert_qty
18   (p_inventory_item_id   IN NUMBER
19    ,p_from_qty           IN NUMBER
20    ,p_from_uom_code      IN VARCHAR2
21    ,p_to_uom_code        IN VARCHAR2
22    ,p_precision          IN NUMBER DEFAULT NULL
23    )
24   RETURN NUMBER IS
25      l_conversion_rate          NUMBER;
26      l_to_qty                   NUMBER;
27 
28      l_debug                    NUMBER;
29      l_progress                 VARCHAR2(10);
30      l_module_name              VARCHAR2(30);
31 
32 BEGIN
33 
34    l_debug := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
35    l_progress := '10';
36    l_module_name := 'CONVERT_QTY';
37 
38    IF (l_debug = 1) THEN
39       print_debug('Entering convert_qty...',l_module_name,4);
40       print_debug(' p_inventory_item_id => '||p_inventory_item_id,l_module_name,4);
41       print_debug(' p_from_uom_code     => '||p_from_uom_code,l_module_name,4);
42       print_debug(' p_to_uom_code       => '||p_to_uom_code,l_module_name,4);
43       print_debug(' p_from_qty          => '||p_from_qty,l_module_name,4);
44       print_debug(' p_precision         => '||p_precision,l_module_name,4);
45    END IF;
46 
47    IF (p_inventory_item_id IS NULL) THEN
48       IF (l_debug = 1) THEN
49 	 print_debug(' No caching for cases without item_id',4);
50       END IF;
51 
52       l_to_qty := inv_convert.inv_um_convert
53 	             (item_id           => p_inventory_item_id,
54 		      precision         => Nvl(p_precision,g_conversion_precision),
55 		      from_quantity     => p_from_qty,
56 		      from_unit         => p_from_uom_code,
57 		      to_unit           => p_to_uom_code,
58 		      from_name         => null,
59 		      to_name           => null);
60 
61       IF (l_debug = 1) THEN
62 	 print_debug(' x_to_qty            => '||l_to_qty,l_module_name,4);
63       END IF;
64 
65       RETURN l_to_qty;
66 
67    END IF;
68 
69    IF (g_item_uom_conversion_tb.exists(p_inventory_item_id) AND
70        g_item_uom_conversion_tb(p_inventory_item_id).exists(p_from_uom_code) AND
71        g_item_uom_conversion_tb(p_inventory_item_id)(p_from_uom_code).exists(p_to_uom_code)) THEN
72       l_conversion_rate := g_item_uom_conversion_tb(p_inventory_item_id)(p_from_uom_code)(p_to_uom_code);
73     ELSE
74       inv_convert.inv_um_conversion(from_unit  => p_from_uom_code,
75 				    to_unit    => p_to_uom_code,
76 				    item_id    => p_inventory_item_id,
77 				    uom_rate   => l_conversion_rate);
78 
79       IF (l_conversion_rate < 0) THEN
80 	 RAISE fnd_api.g_exc_error;
81       END IF;
82 
83       g_item_uom_conversion_tb(p_inventory_item_id)(p_from_uom_code)(p_to_uom_code) := l_conversion_rate;
84       g_item_uom_conversion_tb(p_inventory_item_id)(p_to_uom_code)(p_from_uom_code) := 1 / l_conversion_rate;
85 
86    END IF;
87 
88    l_to_qty := Round(l_conversion_rate*p_from_qty,Nvl(p_precision,g_conversion_precision));
89 
90    IF (l_debug = 1) THEN
91       print_debug(' x_to_qty            => '||l_to_qty,l_module_name,4);
92    END IF;
93 
94    RETURN l_to_qty;
95 EXCEPTION
96    WHEN OTHERS THEN
97       IF (l_debug = 1) THEN
98 	 print_debug('Exception occurred inside convert_qty!',l_module_name,4);
99       END IF;
100       RETURN -1;
101 END convert_qty;
102 
103 FUNCTION get_primary_uom_code
104   (p_organization_id     IN NUMBER
105    ,p_inventory_item_id  IN NUMBER
106    ) RETURN VARCHAR2 IS
107       l_debug                    NUMBER;
108       l_progress                 VARCHAR2(10);
109       l_module_name              VARCHAR2(30);
110 BEGIN
111    l_debug := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
112    l_progress := '10';
113    l_module_name := 'GET_PRIMARY_UOM_CODE';
114 
115    IF (l_debug = 1) THEN
116       print_debug('Entering get_primary_uom_code...',l_module_name,4);
117       print_debug(' p_inventory_item_id    => '||p_inventory_item_id,l_module_name,4);
118       print_debug(' p_organization_id      => '||p_organization_id,l_module_name,4);
119    END IF;
120 
121    IF (g_org_item_attrib_tb.exists(p_organization_id) AND
122        g_org_item_attrib_tb(p_organization_id).exists(p_inventory_item_id)) THEN
123       IF (l_debug = 1) THEN
124 	 print_debug(' x_prim_uom_code (Cache) => '||
125 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code,l_module_name,4);
126       END IF;
127       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code;
128     ELSE
129       BEGIN
130 	 SELECT primary_uom_code
131 	   ,    secondary_uom_code
132 	   ,    lot_control_code
133 	   ,    serial_number_control_code
134 	   INTO g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code
135 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code
136 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code
137 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code
138 	   FROM   mtl_system_items
139 	   WHERE  organization_id = p_organization_id
140 	   AND    inventory_item_id = p_inventory_item_id;
141       EXCEPTION
142 	 WHEN OTHERS THEN
143 	    IF (l_debug = 1) THEN
144 	       print_debug('Unable to query from db!',l_module_name,4);
145 	    END IF;
146 	    RAISE fnd_api.g_exc_error;
147       END;
148 
149       IF (l_debug = 1) THEN
150 	 print_debug(' x_prim_uom_code (DB)     => '||
151 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code,l_module_name,4);
152       END IF;
153 
154       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code;
155    END IF;
156 EXCEPTION
157    WHEN OTHERS THEN
158       IF (l_debug = 1) THEN
159 	 print_debug('Exception occurred inside GET_PRIMARY_UOM_CODE!',l_module_name,4);
160       END IF;
161       RETURN NULL;
162 END get_primary_uom_code;
163 
164 FUNCTION get_secondary_uom_code
165   (p_organization_id     IN NUMBER
166    ,p_inventory_item_id  IN NUMBER
167    ) RETURN VARCHAR2 IS
168       l_debug                    NUMBER;
169       l_progress                 VARCHAR2(10);
170       l_module_name              VARCHAR2(30);
171 BEGIN
172    l_debug := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
173    l_progress := '10';
174    l_module_name := 'GET_SECONDARY_UOM_CODE';
175 
176    IF (l_debug = 1) THEN
177       print_debug('Entering get_secondary_uom_code...',l_module_name,4);
178       print_debug(' p_inventory_item_id    => '||p_inventory_item_id,l_module_name,4);
179       print_debug(' p_organization_id      => '||p_organization_id,l_module_name,4);
180    END IF;
181 
182    IF (g_org_item_attrib_tb.exists(p_organization_id) AND
183        g_org_item_attrib_tb(p_organization_id).exists(p_inventory_item_id)) THEN
184       IF (l_debug = 1) THEN
185 	 print_debug(' x_prim_uom_code (Cache) => '||
186 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code,l_module_name,4);
187       END IF;
188       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code;
189     ELSE
190       BEGIN
191 	 SELECT primary_uom_code
192 	   ,    secondary_uom_code
193 	   ,    lot_control_code
194 	   ,    serial_number_control_code
195 	   INTO g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code
196 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code
197 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code
198 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code
199 	   FROM   mtl_system_items
200 	   WHERE  organization_id = p_organization_id
201 	   AND    inventory_item_id = p_inventory_item_id;
202       EXCEPTION
203 	 WHEN OTHERS THEN
204 	    IF (l_debug = 1) THEN
205 	       print_debug('Unable to query from db!',l_module_name,4);
206 	    END IF;
207 	    RAISE fnd_api.g_exc_error;
208       END;
209 
210       IF (l_debug = 1) THEN
211 	 print_debug(' x_prim_uom_code (DB)     => '||
212 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code,l_module_name,4);
213       END IF;
214 
215       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code;
216    END IF;
217 EXCEPTION
218    WHEN OTHERS THEN
219       IF (l_debug = 1) THEN
220 	 print_debug('Exception occurred inside GET_SECONDARY_UOM_CODE!',l_module_name,4);
221       END IF;
222       RETURN NULL;
223 END get_secondary_uom_code;
224 
225 FUNCTION get_sn_ctrl_code
226   (p_organization_id     IN NUMBER
227    ,p_inventory_item_id  IN NUMBER
228    ) RETURN NUMBER IS
229       l_debug                    NUMBER;
230       l_progress                 VARCHAR2(10);
231       l_module_name              VARCHAR2(30);
232 BEGIN
233    l_debug := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
234    l_progress := '10';
235    l_module_name := 'GET_SN_CTRL_CODE';
236 
237    IF (l_debug = 1) THEN
238       print_debug('Entering get_sn_ctrl_code...',l_module_name,4);
239       print_debug(' p_inventory_item_id    => '||p_inventory_item_id,l_module_name,4);
240       print_debug(' p_organization_id      => '||p_organization_id,l_module_name,4);
241    END IF;
242 
243    IF (g_org_item_attrib_tb.exists(p_organization_id) AND
244        g_org_item_attrib_tb(p_organization_id).exists(p_inventory_item_id)) THEN
245       IF (l_debug = 1) THEN
246 	 print_debug(' x_sn_ctrl_code (Cache) => '||
247 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code,l_module_name,4);
248       END IF;
249       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code;
250     ELSE
251       BEGIN
252 	 SELECT primary_uom_code
253 	   ,    secondary_uom_code
254 	   ,    lot_control_code
255 	   ,    serial_number_control_code
256 	   INTO g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code
257 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code
258 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code
259 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code
260 	   FROM   mtl_system_items
261 	   WHERE  organization_id = p_organization_id
262 	   AND    inventory_item_id = p_inventory_item_id;
263       EXCEPTION
264 	 WHEN OTHERS THEN
265 	    IF (l_debug = 1) THEN
266 	       print_debug('Unable to query from db!',l_module_name,4);
267 	    END IF;
268 	    RAISE fnd_api.g_exc_error;
269       END;
270 
271       IF (l_debug = 1) THEN
272 	 print_debug(' x_sn_ctrl_code (DB)     => '||
273 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code,l_module_name,4);
274       END IF;
275 
276       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code;
277    END IF;
278 EXCEPTION
279    WHEN OTHERS THEN
280       IF (l_debug = 1) THEN
281 	 print_debug('Exception occurred inside GET_SN_CTRL_CODE!',l_module_name,4);
282       END IF;
283       RETURN NULL;
284 END get_sn_ctrl_code;
285 
286 FUNCTION get_lot_control_code
287   (p_organization_id     IN NUMBER
288    ,p_inventory_item_id  IN NUMBER
289    ) RETURN NUMBER IS
290       l_debug                    NUMBER;
291       l_progress                 VARCHAR2(10);
292       l_module_name              VARCHAR2(30);
293 BEGIN
294    l_debug := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
295    l_progress := '10';
296    l_module_name := 'GET_LOT_CONTROL_CODE';
297 
298    IF (l_debug = 1) THEN
299       print_debug('Entering get_lot_control_code...',l_module_name,4);
300       print_debug(' p_inventory_item_id    => '||p_inventory_item_id,l_module_name,4);
301       print_debug(' p_organization_id      => '||p_organization_id,l_module_name,4);
302    END IF;
303 
304    IF (g_org_item_attrib_tb.exists(p_organization_id) AND
305        g_org_item_attrib_tb(p_organization_id).exists(p_inventory_item_id)) THEN
306       IF (l_debug = 1) THEN
307 	 print_debug(' x_lot_control_code (Cache) => '||
308 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code,l_module_name,4);
309       END IF;
310       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code;
311     ELSE
312       BEGIN
313 	 SELECT primary_uom_code
314 	   ,    secondary_uom_code
315 	   ,    lot_control_code
316 	   ,    serial_number_control_code
317 	   INTO g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).primary_uom_code
318 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).secondary_uom_code
319 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code
320 	   ,    g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).serial_number_control_code
321 	   FROM   mtl_system_items
322 	   WHERE  organization_id = p_organization_id
323 	   AND    inventory_item_id = p_inventory_item_id;
324       EXCEPTION
325 	 WHEN OTHERS THEN
326 	    IF (l_debug = 1) THEN
327 	       print_debug('Unable to query from db!',l_module_name,4);
328 	    END IF;
329 	    RAISE fnd_api.g_exc_error;
330       END;
331 
332       IF (l_debug = 1) THEN
333 	 print_debug(' x_lot_control_code (DB)     => '||
334 		     g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code,l_module_name,4);
335       END IF;
336 
337       RETURN g_org_item_attrib_tb(p_organization_id)(p_inventory_item_id).lot_control_code;
338    END IF;
339 EXCEPTION
340    WHEN OTHERS THEN
341       IF (l_debug = 1) THEN
342 	 print_debug('Exception occurred inside GET_LOT_CONTROL_CODE!',l_module_name,4);
343       END IF;
344       RETURN NULL;
345 END get_lot_control_code;
346 
347 FUNCTION get_conversion_rate
348   (p_inventory_item_id   IN NUMBER
349    ,p_from_uom_code      IN VARCHAR2
350    ,p_to_uom_code        IN VARCHAR2
351    )
352    RETURN NUMBER IS
353 
354      l_conversion_rate          NUMBER;
355 
356      l_debug                    NUMBER;
357      l_progress                 VARCHAR2(10);
358      l_module_name              VARCHAR2(30);
359 BEGIN
360 
361    l_debug := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
362    l_progress := '10';
363    l_module_name := 'GET_CONVERSION_RATE';
364 
365    IF (l_debug = 1) THEN
366       print_debug('Entering convert_qty...',l_module_name,4);
367       print_debug(' p_inventory_item_id => '||p_inventory_item_id,l_module_name,4);
368       print_debug(' p_from_uom_code     => '||p_from_uom_code,l_module_name,4);
369       print_debug(' p_to_uom_code       => '||p_to_uom_code,l_module_name,4);
370    END IF;
371 
372    IF (g_item_uom_conversion_tb.exists(p_inventory_item_id) AND
373        g_item_uom_conversion_tb(p_inventory_item_id).exists(p_from_uom_code) AND
374        g_item_uom_conversion_tb(p_inventory_item_id)(p_from_uom_code).exists(p_to_uom_code)) THEN
375       l_conversion_rate := g_item_uom_conversion_tb(p_inventory_item_id)(p_from_uom_code)(p_to_uom_code);
376     ELSE
377       inv_convert.inv_um_conversion(from_unit  => p_from_uom_code,
378 				    to_unit    => p_to_uom_code,
379 				    item_id    => p_inventory_item_id,
380 				    uom_rate   => l_conversion_rate);
381 
382       IF (l_conversion_rate < 0) THEN
383 	 RAISE fnd_api.g_exc_error;
384       END IF;
385 
386       g_item_uom_conversion_tb(p_inventory_item_id)(p_from_uom_code)(p_to_uom_code) := l_conversion_rate;
387       g_item_uom_conversion_tb(p_inventory_item_id)(p_to_uom_code)(p_from_uom_code) := 1 / l_conversion_rate;
388 
389    END IF;
390 
391    IF (l_debug = 1) THEN
392       print_debug(' x_conversion_rate   => '||l_conversion_rate,l_module_name,4);
393    END IF;
394 
395    RETURN l_conversion_rate;
396 EXCEPTION
397    WHEN OTHERS THEN
398       IF (l_debug = 1) THEN
399 	 print_debug('Exception occurred inside get_conversion_rate!',l_module_name,4);
400       END IF;
401       RETURN -1;
402 END get_conversion_rate;
403 END inv_rcv_cache;
404