[Home] [Help]
PACKAGE BODY: APPS.GML_RCV_COMMON_APIS
Source
1 PACKAGE BODY GML_RCV_COMMON_APIS AS
2 /* $Header: GMLRCVAB.pls 120.0 2005/05/25 16:53:16 appldev noship $*/
3
4 -- Global constant holding the package name
5 g_pkg_name CONSTANT VARCHAR2(30) := 'GML_RCV_COMMON_APIS';
6
7
8 PROCEDURE insert_mtlt(p_mtlt_rec mtl_transaction_lots_temp%ROWTYPE) IS
9 BEGIN
10 INSERT INTO mtl_transaction_lots_temp
11 (
12 transaction_temp_id
13 , last_update_date
14 , last_updated_by
15 , creation_date
16 , created_by
17 , last_update_login
18 , request_id
19 , program_application_id
20 , program_id
21 , program_update_date
22 , transaction_quantity
23 , primary_quantity
24 , lot_number
25 , lot_expiration_date
26 , ERROR_CODE
27 , serial_transaction_temp_id
28 , group_header_id
29 , put_away_rule_id
30 , pick_rule_id
31 , description
32 , vendor_id
33 , supplier_lot_number
34 , territory_code
35 , --country_of_origin,
36 origination_date
37 , date_code
38 , grade_code
39 , change_date
40 , maturity_date
41 , status_id
42 , retest_date
43 , age
44 , item_size
45 , color
46 , volume
47 , volume_uom
48 , place_of_origin
49 , --kill_date,
50 best_by_date
51 , LENGTH
52 , length_uom
53 , recycled_content
54 , thickness
55 , thickness_uom
56 , width
57 , width_uom
58 , curl_wrinkle_fold
59 --- Added the following 5 comlumns for OPM
60 , sublot_num
61 , reason_code
62 , SECONDARY_QUANTITY
63 , SECONDARY_UNIT_OF_MEASURE
64 , qc_grade
65 , lot_attribute_category
66 , c_attribute1
67 , c_attribute2
68 , c_attribute3
69 , c_attribute4
70 , c_attribute5
71 , c_attribute6
72 , c_attribute7
73 , c_attribute8
74 , c_attribute9
75 , c_attribute10
76 , c_attribute11
77 , c_attribute12
78 , c_attribute13
79 , c_attribute14
80 , c_attribute15
81 , c_attribute16
82 , c_attribute17
83 , c_attribute18
84 , c_attribute19
85 , c_attribute20
86 , d_attribute1
87 , d_attribute2
88 , d_attribute3
89 , d_attribute4
90 , d_attribute5
91 , d_attribute6
92 , d_attribute7
93 , d_attribute8
94 , d_attribute9
95 , d_attribute10
96 , n_attribute1
97 , n_attribute2
98 , n_attribute3
99 , n_attribute4
100 , n_attribute5
101 , n_attribute6
102 , n_attribute7
103 , n_attribute8
104 , n_attribute9
105 , n_attribute10
106 , vendor_name
107 )
108 VALUES (
109 p_mtlt_rec.transaction_temp_id
110 , p_mtlt_rec.last_update_date
111 , p_mtlt_rec.last_updated_by
112 , p_mtlt_rec.creation_date
113 , p_mtlt_rec.created_by
114 , p_mtlt_rec.last_update_login
115 , p_mtlt_rec.request_id
116 , p_mtlt_rec.program_application_id
117 , p_mtlt_rec.program_id
118 , p_mtlt_rec.program_update_date
119 , p_mtlt_rec.transaction_quantity
120 , p_mtlt_rec.primary_quantity
121 , p_mtlt_rec.lot_number
122 , p_mtlt_rec.lot_expiration_date
123 , p_mtlt_rec.ERROR_CODE
124 , p_mtlt_rec.serial_transaction_temp_id
125 , p_mtlt_rec.group_header_id
126 , p_mtlt_rec.put_away_rule_id
127 , p_mtlt_rec.pick_rule_id
128 , p_mtlt_rec.description
129 , p_mtlt_rec.vendor_id
130 , p_mtlt_rec.supplier_lot_number
131 , p_mtlt_rec.territory_code
132 , --p_mtlt_rec.country_of_origin,
133 p_mtlt_rec.origination_date
134 , p_mtlt_rec.date_code
135 , p_mtlt_rec.grade_code
136 , p_mtlt_rec.change_date
137 , p_mtlt_rec.maturity_date
138 , p_mtlt_rec.status_id
139 , p_mtlt_rec.retest_date
140 , p_mtlt_rec.age
141 , p_mtlt_rec.item_size
142 , p_mtlt_rec.color
143 , p_mtlt_rec.volume
144 , p_mtlt_rec.volume_uom
145 , p_mtlt_rec.place_of_origin
146 , --p_mtlt_rec.kill_date,
147 p_mtlt_rec.best_by_date
148 , p_mtlt_rec.LENGTH
149 , p_mtlt_rec.length_uom
150 , p_mtlt_rec.recycled_content
151 , p_mtlt_rec.thickness
152 , p_mtlt_rec.thickness_uom
153 , p_mtlt_rec.width
154 , p_mtlt_rec.width_uom
155 , p_mtlt_rec.curl_wrinkle_fold
156 --- Added the following 5 comlumns for OPM
157 , p_mtlt_rec.sublot_num
158 , p_mtlt_rec.reason_code
159 , p_mtlt_rec.SECONDARY_QUANTITY
160 , p_mtlt_rec.SECONDARY_UNIT_OF_MEASURE
161 , p_mtlt_rec.qc_grade
162 , p_mtlt_rec.lot_attribute_category
163 , p_mtlt_rec.c_attribute1
164 , p_mtlt_rec.c_attribute2
165 , p_mtlt_rec.c_attribute3
166 , p_mtlt_rec.c_attribute4
167 , p_mtlt_rec.c_attribute5
168 , p_mtlt_rec.c_attribute6
169 , p_mtlt_rec.c_attribute7
170 , p_mtlt_rec.c_attribute8
171 , p_mtlt_rec.c_attribute9
172 , p_mtlt_rec.c_attribute10
173 , p_mtlt_rec.c_attribute11
174 , p_mtlt_rec.c_attribute12
175 , p_mtlt_rec.c_attribute13
176 , p_mtlt_rec.c_attribute14
177 , p_mtlt_rec.c_attribute15
178 , p_mtlt_rec.c_attribute16
179 , p_mtlt_rec.c_attribute17
180 , p_mtlt_rec.c_attribute18
181 , p_mtlt_rec.c_attribute19
182 , p_mtlt_rec.c_attribute20
183 , p_mtlt_rec.d_attribute1
184 , p_mtlt_rec.d_attribute2
185 , p_mtlt_rec.d_attribute3
186 , p_mtlt_rec.d_attribute4
187 , p_mtlt_rec.d_attribute5
188 , p_mtlt_rec.d_attribute6
189 , p_mtlt_rec.d_attribute7
190 , p_mtlt_rec.d_attribute8
191 , p_mtlt_rec.d_attribute9
192 , p_mtlt_rec.d_attribute10
193 , p_mtlt_rec.n_attribute1
194 , p_mtlt_rec.n_attribute2
195 , p_mtlt_rec.n_attribute3
196 , p_mtlt_rec.n_attribute4
197 , p_mtlt_rec.n_attribute5
198 , p_mtlt_rec.n_attribute6
199 , p_mtlt_rec.n_attribute7
200 , p_mtlt_rec.n_attribute8
201 , p_mtlt_rec.n_attribute9
202 , p_mtlt_rec.n_attribute10
203 , p_mtlt_rec.vendor_name
204 );
205 END insert_mtlt;
206
207 FUNCTION break_lots_only(p_original_tid IN mtl_transaction_lots_temp.transaction_temp_id%TYPE, p_new_transactions_tb IN trans_rec_tb_tp)
208 RETURN BOOLEAN IS
209 CURSOR c_lots IS
210 SELECT ROWID
211 , transaction_temp_id
212 , last_update_date
213 , last_updated_by
214 , creation_date
215 , created_by
216 , last_update_login
217 , request_id
218 , program_application_id
219 , program_id
220 , program_update_date
221 , transaction_quantity
222 , primary_quantity
223 , lot_number
224 , lot_expiration_date
225 , ERROR_CODE
226 , serial_transaction_temp_id
227 , group_header_id
228 , put_away_rule_id
229 , pick_rule_id
230 , description
231 , vendor_id
232 , supplier_lot_number
233 , territory_code
234 , origination_date
235 , date_code
236 , grade_code
237 , change_date
238 , maturity_date
239 , status_id
240 , retest_date
241 , age
242 , item_size
243 , color
244 , volume
245 , volume_uom
246 , place_of_origin
247 , best_by_date
248 , LENGTH
249 , length_uom
250 , recycled_content
251 , thickness
252 , thickness_uom
253 , width
254 , width_uom
255 , curl_wrinkle_fold
256 --- Added the following 5 comlumns for OPM
257 , sublot_num
258 , reason_code
259 , SECONDARY_QUANTITY
260 , SECONDARY_UNIT_OF_MEASURE
261 , qc_grade
262 , lot_attribute_category
263 , c_attribute1
264 , c_attribute2
265 , c_attribute3
266 , c_attribute4
267 , c_attribute5
268 , c_attribute6
269 , c_attribute7
270 , c_attribute8
271 , c_attribute9
272 , c_attribute10
273 , c_attribute11
274 , c_attribute12
275 , c_attribute13
276 , c_attribute14
277 , c_attribute15
278 , c_attribute16
279 , c_attribute17
280 , c_attribute18
281 , c_attribute19
282 , c_attribute20
283 , d_attribute1
284 , d_attribute2
285 , d_attribute3
286 , d_attribute4
287 , d_attribute5
288 , d_attribute6
289 , d_attribute7
290 , d_attribute8
291 , d_attribute9
292 , d_attribute10
293 , n_attribute1
294 , n_attribute2
295 , n_attribute3
296 , n_attribute4
297 , n_attribute5
298 , n_attribute6
299 , n_attribute7
300 , n_attribute8
304 FROM mtl_transaction_lots_temp
301 , n_attribute9
302 , n_attribute10
303 , vendor_name
305 WHERE transaction_temp_id = p_original_tid
306 ORDER BY DECODE(
307 inv_rcv_common_apis.g_order_lots_by
308 , inv_rcv_common_apis.g_order_lots_by_exp_date, lot_expiration_date
309 , inv_rcv_common_apis.g_order_lots_by_creation_date, creation_date
310 , lot_expiration_date
311 );
312
313 --Changed the order by for bug 2422193
314 --ORDER BY lot_expiration_date,creation_date;
315
316 l_mtlt_rec mtl_transaction_lots_temp%ROWTYPE;
317 l_new_transaction_temp_id mtl_transaction_lots_temp.transaction_temp_id%TYPE;
318 l_new_primary_quantity NUMBER; -- the quanity user wants to split
319 l_transaction_temp_id mtl_transaction_lots_temp.transaction_temp_id%TYPE;
320 l_primary_quantity NUMBER; -- the primary qty for lot
321 l_secondary_quantity NUMBER; -- the primary qty for lot
322 l_transaction_quantity NUMBER;
323 l_lot_number mtl_transaction_lots_temp.lot_number%TYPE;
324 l_sublot_number mtl_transaction_lots_temp.sublot_num%TYPE;
325 l_item_no VARCHAR2(40);
326 l_unit_of_measure VARCHAR2(100);
327
328 --BUG 2673970
329 l_rowid ROWID;
330 BEGIN
331 FOR i IN 1 .. p_new_transactions_tb.COUNT LOOP -- Loop through all the transaction lines need to be splitted
332 l_new_transaction_temp_id := p_new_transactions_tb(i).transaction_id;
333 l_new_primary_quantity := p_new_transactions_tb(i).primary_quantity;
334 l_item_no := p_new_transactions_tb(i).item_no;
335 l_unit_of_measure := p_new_transactions_tb(i).unit_of_measure;
336 OPEN c_lots;
337
338 LOOP -- Loop through all the lot record for this transaction
339
340 --BUG 2673970
341 FETCH c_lots INTO l_rowid
342 , l_mtlt_rec.transaction_temp_id
343 , l_mtlt_rec.last_update_date
344 , l_mtlt_rec.last_updated_by
345 , l_mtlt_rec.creation_date
346 , l_mtlt_rec.created_by
347 , l_mtlt_rec.last_update_login
348 , l_mtlt_rec.request_id
349 , l_mtlt_rec.program_application_id
350 , l_mtlt_rec.program_id
351 , l_mtlt_rec.program_update_date
352 , l_mtlt_rec.transaction_quantity
353 , l_mtlt_rec.primary_quantity
354 , l_mtlt_rec.lot_number
355 , l_mtlt_rec.lot_expiration_date
356 , l_mtlt_rec.ERROR_CODE
357 , l_mtlt_rec.serial_transaction_temp_id
358 , l_mtlt_rec.group_header_id
359 , l_mtlt_rec.put_away_rule_id
360 , l_mtlt_rec.pick_rule_id
361 , l_mtlt_rec.description
362 , l_mtlt_rec.vendor_id
363 , l_mtlt_rec.supplier_lot_number
364 , l_mtlt_rec.territory_code
365 , l_mtlt_rec.origination_date
366 , l_mtlt_rec.date_code
367 , l_mtlt_rec.grade_code
368 , l_mtlt_rec.change_date
369 , l_mtlt_rec.maturity_date
370 , l_mtlt_rec.status_id
371 , l_mtlt_rec.retest_date
372 , l_mtlt_rec.age
373 , l_mtlt_rec.item_size
374 , l_mtlt_rec.color
375 , l_mtlt_rec.volume
376 , l_mtlt_rec.volume_uom
377 , l_mtlt_rec.place_of_origin
378 , l_mtlt_rec.best_by_date
379 , l_mtlt_rec.LENGTH
380 , l_mtlt_rec.length_uom
381 , l_mtlt_rec.recycled_content
382 , l_mtlt_rec.thickness
383 , l_mtlt_rec.thickness_uom
384 , l_mtlt_rec.width
385 , l_mtlt_rec.width_uom
386 , l_mtlt_rec.curl_wrinkle_fold
387 --- Added the following 5 comlumns for OPM
388 , l_mtlt_rec.sublot_num
389 , l_mtlt_rec.reason_code
390 , l_mtlt_rec.SECONDARY_QUANTITY
391 , l_mtlt_rec.SECONDARY_UNIT_OF_MEASURE
392 , l_mtlt_rec.qc_grade
393 , l_mtlt_rec.lot_attribute_category
394 , l_mtlt_rec.c_attribute1
395 , l_mtlt_rec.c_attribute2
396 , l_mtlt_rec.c_attribute3
397 , l_mtlt_rec.c_attribute4
398 , l_mtlt_rec.c_attribute5
399 , l_mtlt_rec.c_attribute6
400 , l_mtlt_rec.c_attribute7
401 , l_mtlt_rec.c_attribute8
402 , l_mtlt_rec.c_attribute9
403 , l_mtlt_rec.c_attribute10
404 , l_mtlt_rec.c_attribute11
405 , l_mtlt_rec.c_attribute12
406 , l_mtlt_rec.c_attribute13
407 , l_mtlt_rec.c_attribute14
408 , l_mtlt_rec.c_attribute15
409 , l_mtlt_rec.c_attribute16
410 , l_mtlt_rec.c_attribute17
411 , l_mtlt_rec.c_attribute18
412 , l_mtlt_rec.c_attribute19
413 , l_mtlt_rec.c_attribute20
414 , l_mtlt_rec.d_attribute1
415 , l_mtlt_rec.d_attribute2
416 , l_mtlt_rec.d_attribute3
417 , l_mtlt_rec.d_attribute4
418 , l_mtlt_rec.d_attribute5
419 , l_mtlt_rec.d_attribute6
420 , l_mtlt_rec.d_attribute7
421 , l_mtlt_rec.d_attribute8
422 , l_mtlt_rec.d_attribute9
423 , l_mtlt_rec.d_attribute10
424 , l_mtlt_rec.n_attribute1
425 , l_mtlt_rec.n_attribute2
426 , l_mtlt_rec.n_attribute3
427 , l_mtlt_rec.n_attribute4
428 , l_mtlt_rec.n_attribute5
429 , l_mtlt_rec.n_attribute6
430 , l_mtlt_rec.n_attribute7
431 , l_mtlt_rec.n_attribute8
432 , l_mtlt_rec.n_attribute9
433 , l_mtlt_rec.n_attribute10
434 , l_mtlt_rec.vendor_name;
435 EXIT WHEN c_lots%NOTFOUND;
436
437 l_primary_quantity := l_mtlt_rec.primary_quantity; -- initial qty for this lot
438 l_transaction_temp_id := l_mtlt_rec.transaction_temp_id; -- initial txn_int_id for this lot
439 l_lot_number := l_mtlt_rec.lot_number;
440 l_sublot_number := l_mtlt_rec.sublot_num;
441 l_transaction_quantity := l_mtlt_rec.transaction_quantity;
442
443 IF (l_primary_quantity > l_new_primary_quantity) -- new quantity detailed completely
444 -- and there is remaining lot qty
445 THEN
446 l_mtlt_rec.transaction_temp_id := l_new_transaction_temp_id;
447 l_mtlt_rec.primary_quantity := l_new_primary_quantity;
448 l_mtlt_rec.transaction_quantity := l_transaction_quantity * l_new_primary_quantity / l_primary_quantity;
449
453 p_item_no => l_item_no,
450 IF l_mtlt_rec.secondary_unit_of_measure IS NOT NULL THEN
451 --- Calculate secondary qty
452 GML_MOBILE_RECEIPT.Calculate_Secondary_Qty(
454 p_unit_of_measure => l_unit_of_measure,
455 p_quantity => l_mtlt_rec.transaction_quantity,
456 p_lot_no =>l_lot_number,
457 p_sublot_no =>l_sublot_number,
458 p_secondary_unit_of_measure => l_mtlt_rec.secondary_unit_of_measure,
459 x_secondary_quantity => l_mtlt_rec.secondary_quantity);
460 END IF;
461
462
463
464 insert_mtlt(l_mtlt_rec); -- insert one line with new quantity and new txn_id
465
466 l_primary_quantity := l_primary_quantity - l_new_primary_quantity;
467 l_transaction_quantity := l_transaction_quantity - l_mtlt_rec.transaction_quantity;
468
469 -- Update the existing lot rec with reduced quantity
470
471
472 IF l_mtlt_rec.secondary_unit_of_measure IS NOT NULL THEN
473 --- Calculate secondary qty
474 GML_MOBILE_RECEIPT.Calculate_Secondary_Qty(
475 p_item_no => l_item_no,
476 p_unit_of_measure => l_unit_of_measure,
477 p_quantity => l_transaction_quantity,
478 p_lot_no =>l_lot_number,
479 p_sublot_no =>l_sublot_number,
480 p_secondary_unit_of_measure => l_mtlt_rec.secondary_unit_of_measure,
481 x_secondary_quantity => l_secondary_quantity);
482 END IF;
483
484 IF l_sublot_number IS NULL OR l_sublot_number = '' THEN
485 UPDATE mtl_transaction_lots_temp
486 SET primary_quantity = l_primary_quantity
487 , transaction_quantity = l_transaction_quantity
488 , secondary_quantity = l_secondary_quantity
489 WHERE transaction_temp_id = l_transaction_temp_id
490 AND lot_number = l_lot_number
491 AND ROWID = l_rowid;
492 ELSE
493 UPDATE mtl_transaction_lots_temp
494 SET primary_quantity = l_primary_quantity
495 , transaction_quantity = l_transaction_quantity
496 , secondary_quantity = l_secondary_quantity
497 WHERE transaction_temp_id = l_transaction_temp_id
498 AND lot_number = l_lot_number
499 AND sublot_num = l_sublot_number
500 AND ROWID = l_rowid;
501 END IF;
502
503 EXIT; -- exit lot loop
504
505 ELSIF(l_primary_quantity < l_new_primary_quantity) THEN
506 -- new quantity is partially detailed
507 -- lot qty is exhausted
508 -- need to continue lot loop in this case
509
510
511 IF l_sublot_number IS NULL OR l_sublot_number = '' THEN
512 -- Update the lot rec with new transaction interface ID
513 UPDATE mtl_transaction_lots_temp
514 SET transaction_temp_id = l_new_transaction_temp_id
515 WHERE transaction_temp_id = l_transaction_temp_id
516 AND lot_number = l_lot_number
517 AND ROWID = l_rowid;
518 ELSE
519 UPDATE mtl_transaction_lots_temp
520 SET transaction_temp_id = l_new_transaction_temp_id
521 WHERE transaction_temp_id = l_transaction_temp_id
522 AND lot_number = l_lot_number
523 AND sublot_num = l_sublot_number
524 AND ROWID = l_rowid;
525 END IF;
526
527 -- reduce the new qty
528 l_new_primary_quantity := l_new_primary_quantity - l_primary_quantity;
529 ELSIF(l_primary_quantity = l_new_primary_quantity) THEN
530 -- exact match
531
532 IF l_sublot_number IS NULL OR l_sublot_number = '' THEN
533 -- Update the lot rec with new transaction interface ID
534 UPDATE mtl_transaction_lots_temp
535 SET transaction_temp_id = l_new_transaction_temp_id
536 WHERE transaction_temp_id = l_transaction_temp_id
537 AND lot_number = l_lot_number
538 AND ROWID = l_rowid;
539
540 ELSE
541 UPDATE mtl_transaction_lots_temp
542 SET transaction_temp_id = l_new_transaction_temp_id
543 WHERE transaction_temp_id = l_transaction_temp_id
544 AND lot_number = l_lot_number
545 AND sublot_num = l_sublot_number
546 AND ROWID = l_rowid;
547 END IF;
548
549 EXIT; -- exit lot loop
550 END IF;
551 END LOOP; -- end lot loop
552
553 CLOSE c_lots;
554 END LOOP; -- end transaction line loop
555
556 RETURN TRUE;
557 EXCEPTION
558 WHEN OTHERS THEN
559 IF c_lots%ISOPEN THEN
560 CLOSE c_lots;
561 END IF;
562
563 RAISE;
564 END break_lots_only;
565
566
567 PROCEDURE BREAK(
568 p_original_tid IN mtl_transaction_lots_temp.transaction_temp_id%TYPE
569 , p_new_transactions_tb IN trans_rec_tb_tp
570 , p_lot_control_code IN NUMBER
571 , p_serial_control_code IN NUMBER
572 ) IS
573 BEGIN
574
575 IF break_lots_only(p_original_tid, p_new_transactions_tb) THEN
576 NULL;
577 END IF;
578
579 /** The following is not needed as OPM does not support serials
580 IF (p_lot_control_code = 2
581 AND p_serial_control_code IN(1)) THEN
582 IF break_lots_only(p_original_tid, p_new_transactions_tb) THEN
583 NULL;
584 END IF;
585 --serials not lots
586 -- Toshiba Fixes for RMA
587 ELSIF(p_lot_control_code = 1
588 AND p_serial_control_code NOT IN(1)) THEN
589 IF break_serials_only(p_original_tid, p_new_transactions_tb) THEN
590 NULL;
591 END IF;
592 --both lot and serial
593 ELSIF(p_lot_control_code = 2
594 AND p_serial_control_code NOT IN(1)) THEN
595 IF break_lots_serials(p_original_tid, p_new_transactions_tb) THEN
596 NULL;
597 END IF;
598 END IF;
599 */
600 END BREAK;
601
602 END GML_RCV_COMMON_APIS;