[Home] [Help]
PACKAGE BODY: APPS.INV_TXN_MANAGER_GRP
Source
1 PACKAGE BODY INV_TXN_MANAGER_GRP AS
2 /* $Header: INVTXGGB.pls 120.72.12010000.6 2008/10/08 11:58:11 ckrishna ship $ */
3
4 --------------------------------------------------
5 -- Private Procedures and Functions
6 --------------------------------------------------
7
8 /** Following portion of the code is the common objects DECLARATION/DEFINITION
9 that are used in the Package **/
10
11 l_error_code VARCHAR2(3000);
12 l_error_exp VARCHAR2(3000);
13 l_debug number := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
14 l_acctid_validated BOOLEAN := FALSE ; --Bug#4247753. Added this variable
15 --to indicate if 'validate_acctid' has
16 --already been called in 'GETACCTID'
17 g_pkg_name VARCHAR2(80) ;
18 g_lot_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
19 g_select_stmt LONG :=
20 'SELECT NVL(MSNI.SERIAL_ATTRIBUTE_CATEGORY,
21 MSN.SERIAL_ATTRIBUTE_CATEGORY),
22 NVL(MSNI.C_ATTRIBUTE1,
23 MSN.C_ATTRIBUTE1),
24 NVL(MSNI.C_ATTRIBUTE2,
25 MSN.C_ATTRIBUTE2),
26 NVL(MSNI.C_ATTRIBUTE3,
27 MSN.C_ATTRIBUTE3),
28 NVL(MSNI.C_ATTRIBUTE4,
29 MSN.C_ATTRIBUTE4),
30 NVL(MSNI.C_ATTRIBUTE5,
31 MSN.C_ATTRIBUTE5),
32 NVL(MSNI.C_ATTRIBUTE6,
33 MSN.C_ATTRIBUTE6),
34 NVL(MSNI.C_ATTRIBUTE7,
35 MSN.C_ATTRIBUTE7),
36 NVL(MSNI.C_ATTRIBUTE8,
37 MSN.C_ATTRIBUTE8),
38 NVL(MSNI.C_ATTRIBUTE9,
39 MSN.C_ATTRIBUTE9),
40 NVL(MSNI.C_ATTRIBUTE10,
41 MSN.C_ATTRIBUTE10),
42 NVL(MSNI.C_ATTRIBUTE11,
43 MSN.C_ATTRIBUTE11),
44 NVL(MSNI.C_ATTRIBUTE12,
45 MSN.C_ATTRIBUTE12),
46 NVL(MSNI.C_ATTRIBUTE13,
47 MSN.C_ATTRIBUTE13),
48 NVL(MSNI.C_ATTRIBUTE14,
49 MSN.C_ATTRIBUTE14),
50 NVL(MSNI.C_ATTRIBUTE15,
51 MSN.C_ATTRIBUTE15),
52 NVL(MSNI.C_ATTRIBUTE16,
53 MSN.C_ATTRIBUTE16),
54 NVL(MSNI.C_ATTRIBUTE17,
55 MSN.C_ATTRIBUTE17),
56 NVL(MSNI.C_ATTRIBUTE18,
57 MSN.C_ATTRIBUTE18),
58 NVL(MSNI.C_ATTRIBUTE19,
59 MSN.C_ATTRIBUTE19),
60 NVL(MSNI.C_ATTRIBUTE20,
61 MSN.C_ATTRIBUTE20),
62 NVL(MSNI.D_ATTRIBUTE1,
63 MSN.D_ATTRIBUTE1),
64 NVL(MSNI.D_ATTRIBUTE2,
65 MSN.D_ATTRIBUTE2),
66 NVL(MSNI.D_ATTRIBUTE3,
67 MSN.D_ATTRIBUTE3),
68 NVL(MSNI.D_ATTRIBUTE4,
69 MSN.D_ATTRIBUTE4),
70 NVL(MSNI.D_ATTRIBUTE5,
71 MSN.D_ATTRIBUTE5),
72 NVL(MSNI.D_ATTRIBUTE6,
73 MSN.D_ATTRIBUTE6),
74 NVL(MSNI.D_ATTRIBUTE7,
75 MSN.D_ATTRIBUTE7),
76 NVL(MSNI.D_ATTRIBUTE8,
77 MSN.D_ATTRIBUTE8),
78 NVL(MSNI.D_ATTRIBUTE9,
79 MSN.D_ATTRIBUTE9),
80 NVL(MSNI.D_ATTRIBUTE10,
81 MSN.D_ATTRIBUTE10),
82 NVL(MSNI.N_ATTRIBUTE1,
83 MSN.N_ATTRIBUTE1),
84 NVL(MSNI.N_ATTRIBUTE2,
85 MSN.N_ATTRIBUTE2),
86 NVL(MSNI.N_ATTRIBUTE3,
87 MSN.N_ATTRIBUTE3),
88 NVL(MSNI.N_ATTRIBUTE4,
89 MSN.N_ATTRIBUTE4),
90 NVL(MSNI.N_ATTRIBUTE5,
91 MSN.N_ATTRIBUTE5),
92 NVL(MSNI.N_ATTRIBUTE6,
93 MSN.N_ATTRIBUTE6),
94 NVL(MSNI.N_ATTRIBUTE7,
95 MSN.N_ATTRIBUTE7),
96 NVL(MSNI.N_ATTRIBUTE8,
97 MSN.N_ATTRIBUTE8),
98 NVL(MSNI.N_ATTRIBUTE9,
99 MSN.N_ATTRIBUTE9),
100 NVL(MSNI.N_ATTRIBUTE10,
101 MSN.N_ATTRIBUTE10),
102 NVL(MSNI.TERRITORY_CODE,
103 MSN.TERRITORY_CODE),
104 NVL(MSNI.TIME_SINCE_NEW,
105 MSN.TIME_SINCE_NEW),
106 NVL(MSNI.CYCLES_SINCE_NEW,
107 MSN.CYCLES_SINCE_NEW),
108 NVL(MSNI.TIME_SINCE_OVERHAUL,
109 MSN.TIME_SINCE_OVERHAUL),
110 NVL(MSNI.CYCLES_SINCE_OVERHAUL,
111 MSN.CYCLES_SINCE_OVERHAUL),
112 NVL(MSNI.TIME_SINCE_REPAIR,
113 MSN.TIME_SINCE_REPAIR),
114 NVL(MSNI.CYCLES_SINCE_REPAIR,
115 MSN.CYCLES_SINCE_REPAIR),
116 NVL(MSNI.TIME_SINCE_VISIT,
117 MSN.TIME_SINCE_VISIT),
118 NVL(MSNI.CYCLES_SINCE_VISIT,
119 MSN.CYCLES_SINCE_VISIT),
120 NVL(MSNI.TIME_SINCE_MARK,
121 MSN.TIME_SINCE_MARK),
122 NVL(MSNI.CYCLES_SINCE_MARK,
123 MSN.CYCLES_SINCE_MARK),
124 NVL(MSNI.NUMBER_OF_REPAIRS,
125 MSN.NUMBER_OF_REPAIRS),
126 NVL(MSNI.ATTRIBUTE_CATEGORY,
127 MSN.ATTRIBUTE_CATEGORY),
128 NVL(MSNI.ATTRIBUTE1,
129 MSN.ATTRIBUTE1),
130 NVL(MSNI.ATTRIBUTE2,
131 MSN.ATTRIBUTE2),
132 NVL(MSNI.ATTRIBUTE3,
133 MSN.ATTRIBUTE3),
134 NVL(MSNI.ATTRIBUTE4,
135 MSN.ATTRIBUTE4),
136 NVL(MSNI.ATTRIBUTE5,
137 MSN.ATTRIBUTE5),
138 NVL(MSNI.ATTRIBUTE6,
139 MSN.ATTRIBUTE6),
140 NVL(MSNI.ATTRIBUTE7,
141 MSN.ATTRIBUTE7),
142 NVL(MSNI.ATTRIBUTE8,
143 MSN.ATTRIBUTE8),
144 NVL(MSNI.ATTRIBUTE9,
145 MSN.ATTRIBUTE9),
146 NVL(MSNI.ATTRIBUTE10,
147 MSN.ATTRIBUTE10),
148 NVL(MSNI.ATTRIBUTE11,
149 MSN.ATTRIBUTE11),
150 NVL(MSNI.ATTRIBUTE12,
151 MSN.ATTRIBUTE12),
152 NVL(MSNI.ATTRIBUTE13,
153 MSN.ATTRIBUTE13),
154 NVL(MSNI.ATTRIBUTE14,
155 MSN.ATTRIBUTE14),
156 NVL(MSNI.ATTRIBUTE15,
157 MSN.ATTRIBUTE15)
158 FROM
159 MTL_SERIAL_NUMBERS_INTERFACE MSNI,
160 MTL_SERIAL_NUMBERS MSN
161 WHERE
162 MSNI.TRANSACTION_INTERFACE_ID = :B_PARENT_ID AND
163 MSNI.FM_SERIAL_NUMBER = :B_FM_SERIAL_NUMBER AND
164 MSNI.TO_SERIAL_NUMBER = :B_TO_SERIAL_NUMBER AND
165 MSN.SERIAL_NUMBER = :B_SERIAL_NUMBER AND
166 MSN.INVENTORY_ITEM_ID = :B_ITEM_ID AND
167 MSN.CURRENT_ORGANIZATION_ID = :B_ORG_ID';
168
169 lg_ret_sts_error CONSTANT VARCHAR2(30) := fnd_api.g_ret_sts_error;
170 lg_ret_sts_unexp_error CONSTANT VARCHAR2(30) := fnd_api.g_ret_sts_unexp_error;
171 lg_ret_sts_success CONSTANT VARCHAR2(30) := fnd_api.g_ret_sts_success;
172
173 lg_exc_error EXCEPTION ; --fnd_api.g_exc_error;
174 lg_exc_unexpected_error EXCEPTION ; --fnd_api.g_exc_unexpected_error;
175
176
177 TYPE seg_rec_type IS RECORD
178 (colname varchar2(30),
179 colvalue varchar2(150));
180 TYPE bool_array IS TABLE OF NUMBER
181 INDEX BY BINARY_INTEGER;
182
183
184 client_info_org_id NUMBER := -1;
185 pjm_installed NUMBER := -1;
186
187 TS_DEFAULT NUMBER := 1;
188 TS_SAVE_ONLY NUMBER := 2;
189 TS_PROCESS NUMBER := 3;
190 SALORDER NUMBER := 2;
191 INTORDER NUMBER := 8;
192 MDS_RELIEF NUMBER := 1;
193 MPS_RELIEF NUMBER := 2;
194
195 R_WORK_ORDER NUMBER := 1;
196 R_PURCH_ORDER NUMBER := 2;
197 R_SALES_ORDER NUMBER := 3;
198 TO_BE_PROCESSED NUMBER := 2;
199 NOT_TO_BE_PROCESSED NUMBER := 1;
200
201 g_true NUMBER := 1;
202 g_false NUMBER := 0;
203
204 g_create_loc_at NUMBER; --Bug#5044059
205
206
207 /*FUNCTION getitemid( itemid OUT nocopy NUMBER, orgid IN NUMBER, rowid VARCHAR2);
208 FUNCTION getacctid( acct OUT nocopy NUMBER, orgid IN NUMBER, rowid VARCHAR2);
209 FUNCTION setorgclientinfo(orgid IN NUMBER);
210 FUNCTION getlocid(locid OUT nocopy NUMBER, orgid IN NUMBER, subinv NUMBER,
211 rowid VARCHAR2, locctrl NUMBER);
212 FUNCTION getxlocid(locid OUT nocopy NUMBER, orgid IN NUMBER, subinv IN VARCHAR2,
213 rowid IN VARCHAR2, locctrl IN NUMBER);
214 FUNCTION getsrcid(trxsrc OUT nocopy NUMBER, srctype IN NUMBER, orgid IN NUMBER,
215 rowid IN VARCHAR2);
216 PROCEDURE errupdate(p_rowid IN VARCHAR2, lot_rowid IN VARCHAR2 DEFAULT NULL);
217 FUNCTION lotcheck(rowid IN VARCHAR2, orgid IN NUMBER, itemid IN NUMBER, intid IN NUMBER,
218 priuom IN VARCHAR2, trxuom VARCHAR2, lotuniq IN NUMBER,
219 shlfcode IN NUMBER, shlfdays IN NUMBER, serctrl IN NUMBER,
220 srctype IN NUMBER, acttype IN NUMBER);
221 FUNCTION validate_loc_for_project(ltv_locid IN NUMBER, ltv_orgid IN NUMBER,
222 ltv_srctype IN NUMBER, ltv_trxact IN NUMBER,
223 ltv_trx_src_id IN NUMBER, tev_flow_schedule IN NUMBER);
224 FUNCTION validate_unit_number(unit_number IN NUMBER, orgid IN NUMBER,
225 itemid IN NUMBER, srctype IN NUMBER, acttype IN NUMBER);
226 */
227
228
229 TYPE seg_arr_type IS TABLE OF seg_rec_type INDEX BY BINARY_INTEGER;
230
231 --TYPE segment_array IS TABLE OF segment_rec_type INDEX BY BINARY_INTEGER;
232
233 TYPE segment_array IS TABLE OF VARCHAR2(200);
234
235
236 /******************************************************************
237 *
238 * loaderrmsg
239 *
240 ******************************************************************/
241 PROCEDURE mydebug( p_msg IN VARCHAR2
242 ,p_module IN VARCHAR2 DEFAULT NULL)
243 IS
244 BEGIN
245
246 inv_log_util.trace( p_message => p_msg,
247 p_module => g_pkg_name ||'.'||p_module ,
248 p_level => 9);
249
250 --dbms_output.put_line( p_msg );
251 END mydebug;
252
253 PROCEDURE validate_derive_object_details -- R12 Genealogy Enhancements - New Procedure
254 ( p_org_id IN NUMBER
255 , p_object_type IN NUMBER
256 , p_object_id IN NUMBER
257 , p_object_number IN VARCHAR2
258 , p_item_id IN NUMBER
259 , p_object_type2 IN NUMBER
260 , p_object_id2 IN NUMBER
261 , p_object_number2 IN VARCHAR2
262 , p_serctrl IN NUMBER
263 , p_lotctrl IN NUMBER
264 , p_rowid IN rowid
265 , p_table IN VARCHAR2
266 , x_return_status OUT NOCOPY VARCHAR2
267 , x_msg_count OUT NOCOPY NUMBER
268 , x_msg_data OUT NOCOPY VARCHAR2);
269
270 PROCEDURE validate_serial_genealogy_data-- R12 Genealogy Enhancements - New Procedure
271 ( p_interface_id IN NUMBER
272 , p_org_id IN NUMBER
273 , x_return_status OUT NOCOPY VARCHAR2
274 , x_msg_count OUT NOCOPY NUMBER
275 , x_msg_data OUT NOCOPY VARCHAR2);
276
277 PROCEDURE loaderrmsg(mesg1 IN VARCHAR2, mesg2 IN VARCHAR2) IS
278 BEGIN
279 fnd_message.set_name('INV', mesg1);
280 l_error_code := fnd_message.get;
281
282 fnd_message.set_name('INV', mesg2);
283 l_error_exp := fnd_message.get;
284 END;
285
286
287
288 /** end of lot transactions changes **/
289
290 /******************************************************************
291 * Check_Partial_Split - private procedure to check if the lot split
292 * transaction is a partial split, i.e., there are remaining qty
293 * in the parent lots. In this case, we need to insert additional
294 * record in mmtt for the remaining qty
295 * This procedure assumes that the primary qty is already calculated
296 * and the qty comparison is done with the primary qty.
297 * This procedure is called after calling LotTrxInsert
298 * As part of J-dev, we will use tmpInsert to
299 * move lot transaction records from MTI to MMTT. (also for I)
300 * Some changes have been made in this API for I + J, to enable bulk
301 * insert. do not re-insert the parent transaction.
302 * do not insert into MMTT here, but into MTI only, if we are
303 * creating a new record for this transaction
304 *******************************************************************/
305 Function Check_Partial_Split(
306 p_parent_id IN NUMBER,
307 p_current_index IN NUMBER
308 ) RETURN boolean
309 IS
310 cursor mti_csr(p_interface_id NUMBER) IS
311 select mti.transaction_header_id,
312 mti.acct_period_id,
313 mti.distribution_account_id,
314 mti.transaction_interface_id,
315 mti.transaction_Type_id,
316 mti.inventory_item_id,
317 mti.revision,
318 mti.organization_id,
319 mti.subinventory_code,
320 mti.locator_id,
321 mti.transaction_quantity,
322 mti.primary_quantity,
323 mti.transaction_uom,
324 mti.lpn_id,
325 mti.transfer_lpn_id,
326 mti.cost_group_id,
327 mti.transaction_source_type_id,
328 mti.transaction_Action_id,
329 mti.parent_id,
330 mti.created_by,
331 mtli.lot_number,
332 mtli.lot_expiration_date,
333 mtli.description,
334 mtli.vendor_id,
335 mtli.supplier_lot_number,
336 mtli.territory_code,
337 mtli.grade_code,
338 mtli.origination_date,
339 mtli.date_code,
340 mtli.status_id,
341 mtli.change_date,
342 mtli.age,
343 mtli.retest_date,
344 mtli.maturity_date,
345 mtli.lot_attribute_category,
346 mtli.item_size,
347 mtli.color,
348 mtli.volume,
349 mtli.volume_uom,
350 mtli.place_of_origin,
351 mtli.best_by_date,
352 mtli.length,
353 mtli.length_uom,
354 mtli.recycled_content,
355 mtli.thickness,
356 mtli.thickness_uom,
357 mtli.width,
358 mtli.width_uom,
359 mtli.curl_wrinkle_fold,
360 mtli.c_attribute1,
361 mtli.c_Attribute2,
362 mtli.c_attribute3,
363 mtli.c_attribute4,
364 mtli.c_attribute5,
365 mtli.c_attribute6,
366 mtli.c_attribute7,
367 mtli.c_attribute8,
368 mtli.c_attribute9,
369 mtli.c_attribute10,
370 mtli.c_attribute11,
371 mtli.c_attribute12,
372 mtli.c_attribute13,
373 mtli.c_attribute14,
374 mtli.c_attribute15,
375 mtli.c_attribute16,
376 mtli.c_attribute17,
377 mtli.c_attribute18,
378 mtli.c_attribute19,
379 mtli.c_attribute20,
380 mtli.d_attribute1,
381 mtli.d_attribute2,
382 mtli.d_attribute3,
383 mtli.d_attribute4,
384 mtli.d_attribute5,
385 mtli.d_attribute6,
386 mtli.d_attribute7,
387 mtli.d_attribute8,
388 mtli.d_attribute9,
389 mtli.d_attribute10,
390 mtli.n_attribute1,
391 mtli.n_attribute2,
392 mtli.n_attribute3,
393 mtli.n_attribute4,
394 mtli.n_attribute5,
395 mtli.n_attribute6,
396 mtli.n_attribute7,
397 mtli.n_attribute8,
398 mtli.n_attribute9,
399 mtli.n_attribute10,
400 mtli.attribute1,
401 mtli.attribute2,
402 mtli.attribute3,
403 mtli.attribute4,
404 mtli.attribute5,
405 mtli.attribute6,
406 mtli.attribute7,
407 mtli.attribute8,
408 mtli.attribute9,
409 mtli.attribute10,
410 mtli.attribute11,
411 mtli.attribute12,
412 mtli.attribute13,
413 mtli.attribute14,
414 mtli.attribute15,
415 mtli.attribute_category,
416 mtli.parent_object_type, --R12 Genealogy enhancements
417 mtli.parent_object_id, --R12 Genealogy enhancements
418 mtli.parent_object_number, --R12 Genealogy enhancements
419 mtli.parent_item_id, --R12 Genealogy enhancements
420 mtli.parent_object_type2, --R12 Genealogy enhancements
421 mtli.parent_object_id2, --R12 Genealogy enhancements
422 mtli.parent_object_number2, --R12 Genealogy enhancements
423 msi.description item_description,
424 msi.location_control_code,
425 msi.restrict_subinventories_code,
426 msi.restrict_locators_code,
427 msi.revision_qty_control_code,
428 msi.primary_uom_code,
429 msi.shelf_life_code,
430 msi.shelf_life_days,
431 msi.allowed_units_lookup_code,
432 mti.transaction_batch_id,
433 mti.transaction_batch_seq,
434 mti.kanban_card_id,
435 mti.transaction_mode --J-dev
436 FROM MTL_TRANSACTIONS_INTERFACE MTI,
437 MTL_TRANSACTION_LOTS_INTERFACE MTLI,
438 MTL_SYSTEM_ITEMS_B MSI
439 WHERE mti.transaction_interface_id = p_interface_id
440 AND MTI.transaction_interface_id = mtli.transaction_interface_id
441 AND MTI.organization_id = msi.organization_id
442 AND mti.inventory_item_id = msi.inventory_item_id
443 and mti.process_flag = 1;
444 l_count NUMBER := 0;
445 l_partial_total_qty NUMBER :=0;
446 l_remaining_qty NUMBER := 0;
447 l_split_qty NUMBER := 0;
448 l_split_uom VARCHAR2(3);
449 l_transaction_interface_id NUMBER; --J-dev
450 BEGIN
451
452 SELECT count(parent_id)
453 INTO l_count
454 FROM mtl_transactions_interface
455 WHERE parent_id = p_parent_id;
456
457 SELECT abs(primary_quantity)
458 INTO l_split_qty
459 FROM mtl_transactions_interface
460 WHERE transaction_interface_id = p_parent_id;
461
462 SELECT sum(abs(primary_quantity))
463 INTO l_partial_total_qty
464 FROM mtl_transactions_interface
465 WHERE parent_id = p_parent_id
466 AND transaction_interface_id <> p_parent_id;
467
468 l_remaining_qty := l_split_qty - l_partial_total_qty;
469
470 if( p_current_index = l_count AND l_remaining_qty > 0 ) then
471 select mtl_material_transactions_s.nextval
472 into l_transaction_interface_id --J-dev
473 FROM dual;
474 for l_mti_csr in mti_csr(p_parent_id ) LOOP
475 IF (l_debug = 1) THEN
476 inv_log_util.trace('insert into mmti is ' || l_mti_csr.transaction_interface_id, 'INV_TXN_MANAGER_GRP', 9);
477 END IF;
478
479 INSERT INTO mtl_transactions_interface
480 ( transaction_header_id ,
481 transaction_interface_id ,
482 transaction_mode ,
483 lock_flag ,
484 Process_flag
485 ,last_update_date ,
486 last_updated_by ,
487 creation_date ,
488 created_by ,
489 last_update_login
490 ,request_id ,
491 program_application_id ,
492 program_id ,
493 program_update_date
494 ,inventory_item_id ,
495 revision ,
496 organization_id
497 ,subinventory_code ,
498 locator_id
499 ,transaction_quantity ,
500 primary_quantity ,
501 transaction_uom
502 ,transaction_type_id ,
503 transaction_action_id ,
504 transaction_source_type_id
505 ,transaction_date ,
506 acct_period_id ,
507 distribution_account_id,
508 /*item_description ,
509 item_location_control_code ,
510 item_restrict_subinv_code
511 ,item_restrict_locators_code ,
512 item_revision_qty_control_code ,
513 item_primary_uom_code
514 ,item_shelf_life_code ,
515 item_shelf_life_days ,
516 item_lot_control_code
517 ,item_serial_control_code ,
518 allowed_units_lookup_code,*/--J-dev not in MTI
519 parent_id,--J-dev
520 lpn_id ,
521 transfer_lpn_id
522 ,cost_group_id,
523 transaction_batch_id,
524 transaction_batch_seq,
525 kanban_card_id)
526 VALUES
527 ( l_mti_csr.transaction_header_id,
528 l_transaction_interface_id,--J-dev
529 l_mti_csr.transaction_mode /*2722754 */,
530 2,--J-dev
531 1,--J-dev
532 sysdate,
533 l_mti_csr.created_by,
534 sysdate,
535 l_mti_csr.created_by,
536 l_mti_csr.created_by,
537 NULL,
538 NULL,
539 NULL,
540 NULL,
541 l_mti_csr.inventory_item_id,
542 l_mti_csr.revision,
543 l_mti_csr.organization_id,
544 l_mti_csr.subinventory_code,
545 l_mti_csr.locator_id,
546 l_remaining_qty,
547 l_remaining_qty,
548 l_mti_csr.primary_uom_code,
549 l_mti_csr.transaction_type_id,
550 l_mti_csr.transaction_action_id,
551 l_mti_csr.transaction_source_type_id,
552 sysdate,
553 l_mti_csr.acct_period_id,
554 l_mti_csr.distribution_account_id,
555 /*l_mti_csr.item_description,
556 l_mti_csr.location_control_code,
557 l_mti_csr.restrict_subinventories_code,
558 l_mti_csr.restrict_locators_code,
559 l_mti_csr.revision_qty_control_code,
560 l_mti_csr.primary_uom_code,
561 l_mti_csr.shelf_life_code,
562 l_mti_csr.shelf_life_days,
563 2,
564 1,
565 l_mti_csr.allowed_units_lookup_code,*/--J-dev Not in MTI
566 l_mti_csr.parent_id,
567 l_mti_csr.lpn_id,
568 l_mti_csr.transfer_lpn_id,
569 l_mti_csr.cost_group_id,
570 l_mti_csr.transaction_batch_id,
571 l_mti_csr.transaction_batch_seq,
572 l_mti_csr.kanban_card_id);
573 INSERT INTO mtl_transaction_lots_interface
574 (transaction_interface_id, --J-dev
575 last_update_date ,
576 last_updated_by ,
577 creation_date ,
578 created_by ,
579 last_update_login,
580 request_id ,
581 program_application_id ,
582 program_id ,
583 program_update_date,
584 transaction_quantity ,
585 primary_quantity,
586 lot_number ,
587 lot_expiration_date,
588 description ,
589 vendor_id ,
590 supplier_lot_number ,
591 territory_code,
592 grade_code ,
593 origination_date ,
594 date_code,
595 status_id ,
596 change_date ,
597 age ,
598 retest_date,
599 maturity_date ,
600 lot_attribute_category ,
601 item_size,
602 color ,
603 volume ,
604 volume_uom,
605 place_of_origin ,
606 best_by_date ,
607 length ,
608 length_uom,
609 recycled_content ,
610 thickness ,
611 thickness_uom,
612 width ,
613 width_uom ,
614 curl_wrinkle_fold,
615 c_attribute1 ,
616 c_attribute2 ,
617 c_attribute3 ,
618 c_attribute4 ,
619 c_attribute5,
620 c_attribute6 ,
621 c_attribute7 ,
622 c_attribute8 ,
623 c_attribute9 ,
624 c_attribute10,
625 c_attribute11 ,
626 c_attribute12 ,
627 c_attribute13 ,
628 c_attribute14 ,
629 c_attribute15,
630 c_attribute16 ,
631 c_attribute17 ,
632 c_attribute18 ,
633 c_attribute19 ,
634 c_attribute20,
635 d_attribute1 ,
636 d_attribute2 ,
637 d_attribute3 ,
638 d_attribute4 ,
639 d_attribute5 ,
640 d_attribute6 ,
641 d_attribute7 ,
642 d_attribute8 ,
643 d_attribute9 ,
644 d_attribute10,
645 n_attribute1 ,
646 n_attribute2 ,
647 n_attribute3 ,
648 n_attribute4 ,
649 n_attribute5 ,
650 n_attribute6 ,
651 n_attribute7 ,
652 n_attribute8 ,
653 n_attribute9 ,
654 n_attribute10 ,
655 attribute1 ,
656 attribute2,
657 attribute3,
658 attribute4,
659 attribute5,
660 attribute6,
661 attribute7,
662 attribute8,
663 attribute9,
664 attribute10,
665 attribute11,
666 attribute12,
667 attribute13,
668 attribute14,
669 attribute15,
670 attribute_category ,
671 parent_object_type, --R12 Genealogy enhancements
672 parent_object_id, --R12 Genealogy enhancements
673 parent_object_number, --R12 Genealogy enhancements
674 parent_item_id, --R12 Genealogy enhancements
675 parent_object_type2, --R12 Genealogy enhancements
676 parent_object_id2, --R12 Genealogy enhancements
677 parent_object_number2) --R12 Genealogy enhancements
678 VALUES
679 ( l_transaction_interface_id,
680 SYSDATE,
681 l_mti_csr.created_by,
682 SYSDATE,
683 l_mti_csr.created_by,
684 l_mti_Csr.created_by,
685 NULL,
686 NULL,
687 NULL,
688 NULL,
689 l_remaining_qty,
690 l_remaining_qty,
691 l_mti_csr.lot_number,
692 l_mti_csr.lot_expiration_date,
693 l_mti_csr.description,
694 l_mti_csr.vendor_id,
695 l_mti_csr.supplier_lot_number,
696 l_mti_csr.territory_code,
697 l_mti_csr.grade_code,
698 l_mti_csr.origination_date,
699 l_mti_csr.date_code,
700 l_mti_csr.status_id,
701 l_mti_csr.change_date,
702 l_mti_csr.age,
703 l_mti_csr.retest_date,
704 l_mti_csr.maturity_date,
705 l_mti_csr.lot_attribute_category,
706 l_mti_csr.item_size,
707 l_mti_csr.color,
708 l_mti_csr.volume,
709 l_mti_csr.volume_uom,
710 l_mti_csr.place_of_origin,
711 l_mti_csr.best_by_date,
712 l_mti_csr.length,
713 l_mti_csr.length_uom,
714 l_mti_csr.recycled_content,
715 l_mti_csr.thickness,
716 l_mti_csr.thickness_uom,
717 l_mti_csr.width,
718 l_mti_csr.width_uom,
719 l_mti_csr.curl_wrinkle_fold,
720 l_mti_csr.c_attribute1,
721 l_mti_csr.c_attribute2,
722 l_mti_csr.c_attribute3,
723 l_mti_csr.c_attribute4,
724 l_mti_csr.c_attribute5,
725 l_mti_csr.c_attribute6,
726 l_mti_csr.c_attribute7,
727 l_mti_csr.c_attribute8,
728 l_mti_csr.c_attribute9,
729 l_mti_csr.c_attribute10,
730 l_mti_csr.c_attribute11,
731 l_mti_csr.c_attribute12,
732 l_mti_csr.c_attribute13,
733 l_mti_csr.c_attribute14,
734 l_mti_csr.c_attribute15,
735 l_mti_csr.c_attribute16,
736 l_mti_csr.c_attribute17,
737 l_mti_csr.c_attribute18,
738 l_mti_csr.c_attribute19,
739 l_mti_csr.c_attribute20,
740 l_mti_csr.d_attribute1,
741 l_mti_csr.d_attribute2,
742 l_mti_csr.d_attribute3,
743 l_mti_csr.d_attribute4,
744 l_mti_csr.d_attribute5,
745 l_mti_csr.d_attribute6,
746 l_mti_csr.d_attribute7,
747 l_mti_csr.d_attribute8,
748 l_mti_csr.d_attribute9,
749 l_mti_csr.d_attribute10,
750 l_mti_csr.n_attribute1,
751 l_mti_csr.n_attribute2,
752 l_mti_csr.n_attribute3,
753 l_mti_csr.n_attribute4,
754 l_mti_csr.n_attribute5,
755 l_mti_csr.n_attribute6,
756 l_mti_csr.n_attribute7,
757 l_mti_csr.n_attribute8,
758 l_mti_csr.n_attribute9,
759 l_mti_csr.n_attribute10,
760 l_mti_csr.attribute1,
761 l_mti_csr.attribute2,
762 l_mti_csr.attribute3,
763 l_mti_csr.attribute4,
764 l_mti_csr.attribute5,
765 l_mti_csr.attribute6,
766 l_mti_csr.attribute7,
767 l_mti_csr.attribute8,
768 l_mti_csr.attribute9,
769 l_mti_csr.attribute10,
770 l_mti_csr.attribute11,
771 l_mti_csr.attribute12,
772 l_mti_csr.attribute13,
773 l_mti_csr.attribute14,
774 l_mti_csr.attribute15,
775 l_mti_csr.attribute_category,
776 l_mti_csr.parent_object_type, --R12 Genealogy enhancements
777 l_mti_csr.parent_object_id, --R12 Genealogy enhancements
778 l_mti_csr.parent_object_number, --R12 Genealogy enhancements
779 l_mti_csr.parent_item_id, --R12 Genealogy enhancements
780 l_mti_csr.parent_object_type2, --R12 Genealogy enhancements
781 l_mti_csr.parent_object_id2, --R12 Genealogy enhancements
782 l_mti_csr.parent_object_number2); --R12 Genealogy enhancements
783
784 END LOOP;
785 END if;
786 return true;
787 EXCEPTION
788 when FND_API.G_EXC_ERROR then
789 IF (l_debug = 1) THEN
790 inv_log_util.trace('SQL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
791 inv_log_util.trace('Error in check_partial_split : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','9');
792 END IF;
793 return FALSE;
794 when Others then
795 IF (l_debug = 1) THEN
796 inv_log_util.trace('SQL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
797 inv_log_util.trace('Error in check_partial_split : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','9');
798 END IF;
799 return false;
800 END Check_Partial_Split;
801
802 /* Bug#4247753. Added the below functon for validating the Account combination ID*/
803 /* Bug#5176266. Added one more parameter, 'p_txn_date' to the function, 'validate_acctid'*/
804
805 FUNCTION validate_acctid(p_acctid IN NUMBER, p_orgid IN NUMBER, p_txn_date IN DATE)
806 RETURN BOOLEAN
807 IS
808 l_chart number;
809 catsegs varchar2(200);
810 BEGIN
811 SELECT CHART_OF_ACCOUNTS_ID
812 INTO l_chart
813 FROM ORG_ORGANIZATION_DEFINITIONS
814 WHERE ORGANIZATION_ID = p_orgid;
815
816 IF fnd_flex_keyval.validate_ccid ( APPL_SHORT_NAME => 'SQLGL'
817 ,KEY_FLEX_CODE => 'GL#'
818 ,STRUCTURE_NUMBER => l_chart
819 ,COMBINATION_ID => p_acctid )
820 THEN
821 catsegs := fnd_flex_keyval.concatenated_values;
822 IF fnd_flex_keyval.validate_segs ( OPERATION => 'CHECK_COMBINATION'
823 ,APPL_SHORT_NAME => 'SQLGL'
824 ,KEY_FLEX_CODE => 'GL#'
825 ,STRUCTURE_NUMBER => l_chart
826 ,CONCAT_SEGMENTS => catsegs
827 ,VALIDATION_DATE => p_txn_date
828 ,VRULE => '\nSUMMARY_FLAG\nI\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWED\nN'||
829 '\0GL_GLOBAL\nDETAIL_POSTING_ALLOWED\nE\nAPPL=INV;NAME=INV_VRULE_POSTING\nN' )
830 THEN
831 IF (l_debug = 1) THEN
832 inv_log_util.trace('Distribution acct id : ' || p_acctid || ' is valid', 'INV_TXN_MANAGER_GRP','1');
833 END IF;
834 RETURN TRUE;
835 ELSE
836 l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
837 IF (l_debug = 1) THEN
838 inv_log_util.trace('Distribution acct id is invalid '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
839 END IF;
840 RETURN FALSE;
841 END IF;
842 ELSE
843 l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
844 IF (l_debug = 1) THEN
845 inv_log_util.trace('Distribution acct id Validation Error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
846 END IF;
847 RETURN FALSE;
848 END IF ;
849
850 EXCEPTION
851 WHEN OTHERS THEN
852 l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
853 IF (l_debug = 1) THEN
854 inv_log_util.trace('Error in validate_acctid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
855 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
856 END IF;
857 RETURN FALSE;
858 END validate_acctid;
859
860 /* getacctid()
861 *
862 ******************************************************************/
863 FUNCTION getacctid(x_acctid OUT NOCOPY NUMBER, p_orgid IN NUMBER, p_rowid IN VARCHAR2)
864 RETURN BOOLEAN
865 IS
866
867 kff fnd_flex_key_api.flexfield_type;
868 str fnd_flex_key_api.structure_type;
869 seg fnd_flex_key_api.segment_type;
870 seg_list fnd_flex_key_api.segment_list;
871 j number;
872 i number;
873 nsegs number;
874 l_popul boolean;
875 segarray fnd_flex_ext.segmentarray;
876 --segarray segment_array;
877 tmp_seg_arr seg_arr_type;
878 concat varchar2(2000);
879 l_chart number;
880 l_acctid number;
881 l_trxdate date; --Bug#5176266.
882 begin
883
884 SELECT DST_SEGMENT1, DST_SEGMENT2, DST_SEGMENT3,
885 DST_SEGMENT4, DST_SEGMENT5, DST_SEGMENT6,
886 DST_SEGMENT7, DST_SEGMENT8, DST_SEGMENT9,
887 DST_SEGMENT10, DST_SEGMENT11, DST_SEGMENT12,
888 DST_SEGMENT13, DST_SEGMENT14, DST_SEGMENT15,
889 DST_SEGMENT16, DST_SEGMENT17, DST_SEGMENT18,
890 DST_SEGMENT19, DST_SEGMENT20, DST_SEGMENT21,
891 DST_SEGMENT22, DST_SEGMENT23, DST_SEGMENT24,
892 DST_SEGMENT25, DST_SEGMENT26, DST_SEGMENT27,
893 DST_SEGMENT28, DST_SEGMENT29, DST_SEGMENT30,
894 TRANSACTION_DATE /*Bug#5176266*/
895 INTO tmp_seg_arr(1).colvalue, tmp_seg_arr(2).colvalue, tmp_seg_arr(3).colvalue,
896 tmp_seg_arr(4).colvalue, tmp_seg_arr(5).colvalue, tmp_seg_arr(6).colvalue,
897 tmp_seg_arr(7).colvalue, tmp_seg_arr(8).colvalue, tmp_seg_arr(9).colvalue,
898 tmp_seg_arr(10).colvalue, tmp_seg_arr(11).colvalue, tmp_seg_arr(12).colvalue,
899 tmp_seg_arr(13).colvalue, tmp_seg_arr(14).colvalue, tmp_seg_arr(15).colvalue,
900 tmp_seg_arr(16).colvalue, tmp_seg_arr(17).colvalue, tmp_seg_arr(18).colvalue,
901 tmp_seg_arr(19).colvalue, tmp_seg_arr(20).colvalue, tmp_seg_arr(21).colvalue,
902 tmp_seg_arr(22).colvalue, tmp_seg_arr(23).colvalue, tmp_seg_arr(24).colvalue,
903 tmp_seg_arr(25).colvalue, tmp_seg_arr(26).colvalue, tmp_seg_arr(27).colvalue,
904 tmp_seg_arr(28).colvalue, tmp_seg_arr(29).colvalue, tmp_seg_arr(30).colvalue,
905 l_trxdate/*Bug#5176266*/
906 FROM MTL_TRANSACTIONS_INTERFACE
907 WHERE ROWID = p_rowid;
908
909 l_popul := FALSE;
910 i := 0;
911 WHILE (i < 30) and (NOT l_popul) loop
912 i := i + 1;
913 IF (tmp_seg_arr(i).colvalue IS NOT NULL) THEN
914 l_popul := TRUE;
915 END IF;
916 END LOOP;
917
918 IF NOT l_popul THEN
919 return true;
920 END IF;
921
922 SELECT CHART_OF_ACCOUNTS_ID
923 INTO l_chart
924 FROM ORG_ORGANIZATION_DEFINITIONS
925 WHERE ORGANIZATION_ID = p_orgid;
926
927
928 kff := fnd_flex_key_api.find_flexfield('SQLGL','GL#');
929 str := fnd_flex_key_api.find_structure(kff, l_chart);
930 fnd_flex_key_api.get_segments(kff, str, TRUE, nsegs, seg_list);
931
932 /*
933 * When the flexfield is defined, the order the segments are displayed
934 * and the order of segment columns need not be the same. For example, a
935 * flexfield may contain 3 segments, which are defined as segment 1, 4 and 3.
936 * The following loop re-arranges the order of the flexfield segments
937 * so that the AOL routine can process it.
938 */
939 for i in 1..nsegs loop
940 seg := fnd_flex_key_api.find_segment(kff, str, seg_list(i));
941 j := 1;
942 while (j <= tmp_seg_arr.count) loop
943 if (seg.column_name = 'SEGMENT' || j) THEN
944 segarray(i) := tmp_seg_arr(j).colvalue;
945 j := tmp_seg_arr.count + 2;
946 else
947 j := j + 1;
948 end if;
949 end loop;
950 if (j = tmp_seg_arr.count + 1) then
951 j := j;
952 --
953 -- Error raise exception.
954 --
955 end if;
956 end loop;
957
958 --
959 -- Now we have the all segment values in correct order in segarray.
960 l_acctid_validated := TRUE; --Bug#4247753
961 --
962 if fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => 'SQLGL',
963 KEY_FLEX_CODE => 'GL#',
964 STRUCTURE_NUMBER => l_chart,
965 N_SEGMENTS => nsegs,
966 VALIDATION_DATE => l_trxdate,/*Bug#5176266*/
967 SEGMENTS => segarray,
968 COMBINATION_ID => l_acctid)
969 then
970
971 /* Bug#4247753. Added call to 'validate_acctid' */
972 IF ( NOT validate_acctid(l_acctid , p_orgid, l_trxdate) ) THEN
973 RETURN FALSE;
974 END IF;
975
976 IF (l_debug = 1) THEN
977 inv_log_util.trace('Distribution acct id : ' || x_acctid, 'INV_TXN_MANAGER_GRP','1');
978 END IF;
979 x_acctid := l_acctid;
980 RETURN TRUE;
981 else
982 l_error_exp := substr(FND_MESSAGE.get,1,240);
983 IF (l_debug = 1) THEN
984 inv_log_util.trace('Distribution acct id error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
985 END IF;
986 RETURN FALSE;
987 end if;
988 --x_acctid := fnd_flex_ext.concatenate_segments(nsegs,segarray, str.segment_separator);
989
990 EXCEPTION
991 WHEN NO_DATA_FOUND THEN
992 FND_MESSAGE.set_name('INV','INV-Database corrupt');
993 FND_MESSAGE.set_token('ROUTINE','getacctid');
994 RETURN FALSE;
995 WHEN OTHERS THEN
996 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
997 IF (l_debug = 1) THEN
998 inv_log_util.trace('Error in getacctid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
999 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1000 END IF;
1001 x_acctid := NULL;
1002 RETURN FALSE;
1003 END getacctid;
1004
1005 /******************************************************************
1006 -- Procedure
1007 -- getitemid
1008 -- Description
1009 -- find the item_id using the flex field segments
1010 -- Output Parameters
1011 -- x_item_id locator or null if error occurred
1012 ******************************************************************/
1013 FUNCTION getitemid(x_itemid out NOCOPY NUMBER, p_orgid NUMBER, p_rowid VARCHAR2)
1014 RETURN BOOLEAN
1015 IS
1016 l_nseg NUMBER;
1017 l_seglist fnd_flex_key_api.segment_list;
1018 l_segs1 fnd_flex_ext.segmentarray;
1019 l_fftype fnd_flex_key_api.flexfield_type;
1020 l_ffstru fnd_flex_key_api.structure_type;
1021 l_segment_type fnd_flex_key_api.segment_type;
1022 -- Local array to hold the data for getting the cancatenated segment.
1023 l_segmentarray fnd_flex_ext.segmentarray;
1024 l_itemsegs VARCHAR2(32000);
1025 l_delim VARCHAR2(1);
1026 l_result BOOLEAN := FALSE;
1027 BEGIN
1028 -- Getting the segments from MTI
1029 SELECT
1030 ITEM_SEGMENT1,
1031 ITEM_SEGMENT2,
1032 ITEM_SEGMENT3,
1033 ITEM_SEGMENT4,
1034 ITEM_SEGMENT5,
1035 ITEM_SEGMENT6,
1036 ITEM_SEGMENT7,
1037 ITEM_SEGMENT8,
1038 ITEM_SEGMENT9,
1039 ITEM_SEGMENT10,
1040 ITEM_SEGMENT11,
1041 ITEM_SEGMENT12,
1042 ITEM_SEGMENT13,
1043 ITEM_SEGMENT14,
1044 ITEM_SEGMENT15,
1045 ITEM_SEGMENT16,
1046 ITEM_SEGMENT17,
1047 ITEM_SEGMENT18,
1048 ITEM_SEGMENT19,
1049 ITEM_SEGMENT20
1050 INTO
1051 l_segs1(1),
1052 l_segs1(2),
1053 l_segs1(3),
1054 l_segs1(4),
1055 l_segs1(5),
1056 l_segs1(6),
1057 l_segs1(7),
1058 l_segs1(8),
1059 l_segs1(9),
1060 l_segs1(10),
1061 l_segs1(11),
1062 l_segs1(12),
1063 l_segs1(13),
1064 l_segs1(14),
1065 l_segs1(15),
1066 l_segs1(16),
1067 l_segs1(17),
1068 l_segs1(18),
1069 l_segs1(19),
1070 l_segs1(20)
1071 FROM mtl_transactions_interface mti
1072 WHERE mti.rowid = p_rowid;
1073
1074 -- find flex field type
1075 l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MSTK');
1076
1077 -- find flex structure type
1078 l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
1079
1080 -- find segment list for the key flex field
1081 fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
1082
1083 -- find segment delimiter
1084 l_delim := l_ffstru.segment_separator;
1085
1086 -- get the corresponding column for all segments
1087 FOR l_loop IN 1..l_nseg LOOP
1088 l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(l_loop));
1089 -- Bug Fix#4747090
1090 --l_segmentarray contains data in the order flexfield is defined. Used in creating cancatenated segments for validation.
1091 l_segmentarray(l_loop) := l_segs1(To_number(Substr(l_segment_type.column_name, 8)));
1092 END LOOP;
1093 -- Bug Fix#4747090
1094 -- Gets the encoded cancatenated string
1095 l_itemsegs := fnd_flex_ext.concatenate_segments(n_segments => l_nseg,
1096 segments => l_segmentarray,
1097 delimiter => l_delim);
1098 l_result := FND_FLEX_KEYVAL.Validate_Segs(
1099 OPERATION => 'FIND_COMBINATION',
1100 APPL_SHORT_NAME => 'INV',
1101 KEY_FLEX_CODE => 'MSTK',
1102 STRUCTURE_NUMBER => 101,
1103 CONCAT_SEGMENTS => l_itemsegs,
1104 VALUES_OR_IDS => 'I',
1105 DATA_SET => p_orgid,
1106 SELECT_COMB_FROM_VIEW => 'MTL_SYSTEM_ITEMS_FVL') ;
1107
1108 if l_result then
1109 x_itemid := fnd_flex_keyval.combination_id;
1110 else
1111 x_itemid := NULL;
1112 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
1113 inv_log_util.trace('Error in getitemid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
1114 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1115 end if;
1116 return l_result;
1117
1118 END getitemid;
1119
1120
1121 /******************************************************************
1122 -- Procedure
1123 -- getsrcid
1124 -- Description
1125 -- find the Source ID using the flex field segments
1126 -- Output Parameters
1127 -- x_trxsrc transaction source id or null if error occurred
1128 ******************************************************************/
1129 FUNCTION getsrcid(x_trxsrc OUT NOCOPY NUMBER, p_srctype IN NUMBER, p_orgid IN NUMBER, p_rowid IN VARCHAR2)
1130 RETURN BOOLEAN
1131 IS
1132 l_nseg NUMBER;
1133 l_seglist fnd_flex_key_api.segment_list;
1134 l_fftype fnd_flex_key_api.flexfield_type;
1135 l_ffstru fnd_flex_key_api.structure_type;
1136 l_segment_type fnd_flex_key_api.segment_type;
1137 l_structure_list fnd_flex_key_api.structure_list;
1138 l_chart NUMBER;
1139 segarray fnd_flex_ext.segmentarray;
1140 tmp_seg_arr seg_arr_type;
1141 i NUMBER;
1142 j NUMBER;
1143 l_app_shortname VARCHAR2(20);
1144 l_struct_number NUMBER;
1145 l_flex_code VARCHAR2(20);
1146 seg fnd_flex_key_api.segment_type;
1147 l_result boolean; -- Added for bug 3346767
1148
1149 BEGIN
1150 SELECT DSP_SEGMENT1, DSP_SEGMENT2, DSP_SEGMENT3,
1151 DSP_SEGMENT4, DSP_SEGMENT5, DSP_SEGMENT6,
1152 DSP_SEGMENT7, DSP_SEGMENT8, DSP_SEGMENT9,
1153 DSP_SEGMENT10, DSP_SEGMENT11, DSP_SEGMENT12,
1154 DSP_SEGMENT13, DSP_SEGMENT14, DSP_SEGMENT15,
1155 DSP_SEGMENT16, DSP_SEGMENT17, DSP_SEGMENT18,
1156 DSP_SEGMENT19, DSP_SEGMENT20, DSP_SEGMENT21,
1157 DSP_SEGMENT22, DSP_SEGMENT23, DSP_SEGMENT24,
1158 DSP_SEGMENT25, DSP_SEGMENT26, DSP_SEGMENT27,
1159 DSP_SEGMENT28, DSP_SEGMENT29, DSP_SEGMENT30
1160 INTO tmp_seg_arr(1).colvalue, tmp_seg_arr(2).colvalue, tmp_seg_arr(3).colvalue,
1161 tmp_seg_arr(4).colvalue, tmp_seg_arr(5).colvalue, tmp_seg_arr(6).colvalue,
1162 tmp_seg_arr(7).colvalue, tmp_seg_arr(8).colvalue, tmp_seg_arr(9).colvalue,
1163 tmp_seg_arr(10).colvalue, tmp_seg_arr(11).colvalue, tmp_seg_arr(12).colvalue,
1164 tmp_seg_arr(13).colvalue, tmp_seg_arr(14).colvalue, tmp_seg_arr(15).colvalue,
1165 tmp_seg_arr(16).colvalue, tmp_seg_arr(17).colvalue, tmp_seg_arr(18).colvalue,
1166 tmp_seg_arr(19).colvalue, tmp_seg_arr(20).colvalue, tmp_seg_arr(21).colvalue,
1167 tmp_seg_arr(22).colvalue, tmp_seg_arr(23).colvalue, tmp_seg_arr(24).colvalue,
1168 tmp_seg_arr(25).colvalue, tmp_seg_arr(26).colvalue, tmp_seg_arr(27).colvalue,
1169 tmp_seg_arr(28).colvalue, tmp_seg_arr(29).colvalue, tmp_seg_arr(30).colvalue
1170 FROM MTL_TRANSACTIONS_INTERFACE
1171 WHERE ROWID = p_rowid;
1172
1173 SELECT CHART_OF_ACCOUNTS_ID
1174 INTO l_chart
1175 FROM ORG_ORGANIZATION_DEFINITIONS
1176 WHERE ORGANIZATION_ID = p_orgid;
1177
1178
1179 -- find flex field type
1180 -- find flex structure type
1181 l_app_shortname := 'INV';
1182 l_struct_number := 101;
1183 IF (p_srctype = 2) OR (p_srctype = 8) THEN
1184 l_flex_code := 'MKTS';
1185 ELSE
1186 IF (p_srctype = 3) THEN
1187 l_app_shortname := 'SQLGL';
1188 l_flex_code := 'GL#';
1189 l_struct_number := l_chart;
1190 ELSE
1191 IF (p_srctype = 6) THEN
1192 l_flex_code := 'MDSP';
1193 END IF;
1194 END IF;
1195 END IF;
1196
1197 l_fftype := fnd_flex_key_api.find_flexfield(l_app_shortname,l_flex_code);
1198 l_ffstru := fnd_flex_key_api.find_structure(l_fftype, l_struct_number);
1199
1200 -- find segment list for the key flex field
1201 fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
1202
1203 /*
1204 * When the flexfield is defined, the order the segments are displayed
1205 * and the order of segment columns need not be the same. For example, a
1206 * flexfield may contain 3 segments, which are defined as segment 1, 4 and 3.
1207 * The following loop re-arranges the order of the flexfield segments
1208 * so that the AOL routine can process it.
1209 */
1210 for i in 1..l_nseg loop
1211 seg := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(i));
1212 j := 1;
1213 while (j <= tmp_seg_arr.count) loop
1214 if (seg.column_name = 'SEGMENT' || j) THEN
1215 segarray(i) := tmp_seg_arr(j).colvalue;
1216 j := tmp_seg_arr.count + 2;
1217 else
1218 j := j + 1;
1219 end if;
1220 end loop;
1221 if (j = tmp_seg_arr.count + 1) then
1222 j := j;
1223 --
1224 -- Error raise exception.
1225 --
1226 end if;
1227 end loop;
1228
1229 --
1230 -- Now we have the all segment values in correct order in segarray.
1231 --
1232 -- Bug 3273172 Added DATA_SET => p_orgid to the below FND call
1233 -- Changed for bug 3346767
1234 IF (p_srctype = 6) THEN
1235 l_result := fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => l_app_shortname,
1236 KEY_FLEX_CODE => l_flex_code,
1237 STRUCTURE_NUMBER => l_struct_number,
1238 VALIDATION_DATE => sysdate,
1239 N_SEGMENTS => l_nseg,
1240 SEGMENTS => segarray,
1241 COMBINATION_ID => x_trxsrc,
1242 DATA_SET => p_orgid);
1243 ELSE
1244 l_result := fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => l_app_shortname,
1245 KEY_FLEX_CODE => l_flex_code,
1246 STRUCTURE_NUMBER => l_struct_number,
1247 VALIDATION_DATE => sysdate,
1248 N_SEGMENTS => l_nseg,
1249 SEGMENTS => segarray,
1250 COMBINATION_ID => x_trxsrc);
1251 END IF;
1252 if l_result then
1253 IF (l_debug = 1) THEN
1254 inv_log_util.trace('Transaction Source ID : ' || x_trxsrc, 'INV_TXN_MANAGER_GRP','1');
1255 END IF;
1256 RETURN TRUE;
1257 else
1258 l_error_exp := substr(FND_MESSAGE.get,1,240);
1259 IF (l_debug = 1) THEN
1260 inv_log_util.trace('Transaction Source ID error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1'
1261 );
1262 END IF;
1263 RETURN FALSE;
1264 end if;
1265
1266 EXCEPTION
1267 WHEN OTHERS THEN
1268 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
1269 IF (l_debug = 1) THEN
1270 inv_log_util.trace('Error in getsrcid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
1271 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1272 END IF;
1273 x_trxsrc := NULL;
1274 return FALSE;
1275
1276 END getsrcid;
1277
1278 /******************************************************************
1279 *
1280 * errupdate()
1281 *
1282 ******************************************************************/
1283
1284 /* Bug 5343678 rowid is a keyword so we should never pass it as parameter */
1285 /* Also passed the reqd number of parameters in all places just to avoid confusion as
1286 parameter name is not prefixed in any of the calls */
1287
1288 PROCEDURE errupdate(p_rowid IN VARCHAR2 DEFAULT NULL, lot_rowid IN VARCHAR2 DEFAULT NULL)
1289 IS
1290
1291 l_userid NUMBER := -1; -- = prg_info.userid;
1292 l_reqstid NUMBER := -1; -- = prg_info.reqstid;
1293 l_applid NUMBER := -1; -- = prg_info.appid;
1294 l_progid NUMBER := -1; -- = prg_info.progid;
1295 l_loginid NUMBER := -1; --= prg_info.loginid;
1296 BEGIN
1297
1298 -- WHENEVER NOT FOUND CONTINUE;
1299 --Jalaj Srivastava Bug 4969885
1300 --if errors are for lot record then also update MLTI
1301 IF (lot_rowid IS NOT NULL) THEN
1302
1303 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
1304 SET LAST_UPDATE_DATE = SYSDATE,
1305 LAST_UPDATED_BY = l_userid,
1306 LAST_UPDATE_LOGIN = l_loginid,
1307 PROGRAM_UPDATE_DATE = SYSDATE,
1308 ERROR_CODE = substrb(l_error_code,1,240)
1309 WHERE ROWID = lot_rowid;
1310 END IF;
1311 IF (p_rowid IS NOT NULL) THEN
1312 UPDATE MTL_TRANSACTIONS_INTERFACE
1313 SET ERROR_CODE = substrb(l_error_code,1,240),
1314 ERROR_EXPLANATION = substrb(l_error_exp,1,240),
1315 LAST_UPDATE_DATE = sysdate,
1316 LAST_UPDATED_BY = l_userid,
1317 LAST_UPDATE_LOGIN = l_loginid,
1318 PROGRAM_UPDATE_DATE = SYSDATE,
1319 PROCESS_FLAG = 3,
1320 LOCK_FLAG = 2
1321 WHERE ROWID = p_rowid;
1322 END IF;
1323 return;
1324
1325 EXCEPTION
1326 WHEN OTHERS THEN
1327 RETURN;
1328 END errupdate;
1329
1330
1331
1332 /******************************************************************
1333 -- Procedure
1334 -- derive_segment_ids
1335 -- Description
1336 -- derive segment-ids based on segment values
1337 -- Output Parameters
1338 --
1339 ******************************************************************/
1340 PROCEDURE derive_segment_ids(p_header_id NUMBER, x_return_status OUT NOCOPY VARCHAR2,
1341 x_msg_count OUT NOCOPY NUMBER, x_msg_data OUT NOCOPY VARCHAR2)
1342 IS
1343 CURSOR c_mti IS
1344 SELECT inventory_item_id,
1345 organization_id,
1346 distribution_account_id,
1347 transaction_source_type_id,
1348 transaction_source_id,
1349 transaction_date, --Bug#5176266.
1350 rowid
1351 FROM MTL_TRANSACTIONS_INTERFACE
1352 WHERE transaction_header_id = p_header_id
1353 AND process_flag = 1
1354 AND (inventory_item_id is NULL OR distribution_account_id is NULL
1355 OR
1356 (transaction_source_id is NULL AND transaction_source_type_id in (2,3,6,8))); --Bug 2971400
1357
1358 l_itemid MTL_TRANSACTIONS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
1359 l_acctid MTL_TRANSACTIONS_INTERFACE.DISTRIBUTION_ACCOUNT_ID%TYPE;
1360 l_srctype MTL_TRANSACTIONS_INTERFACE.TRANSACTION_SOURCE_TYPE_ID%TYPE;
1361 l_trxsrc MTL_TRANSACTIONS_INTERFACE.TRANSACTION_SOURCE_ID%TYPE;
1362 l_trxdate MTL_TRANSACTIONS_INTERFACE.TRANSACTION_DATE%TYPE; --Bug#5176266.
1363 BEGIN
1364
1365 FOR c_mti_row in c_mti LOOP
1366 l_acctid := c_mti_row.distribution_account_id;
1367 l_itemid := c_mti_row.inventory_item_id;
1368 l_srctype := c_mti_row.transaction_source_type_id;
1369 l_trxsrc := c_mti_row.transaction_source_id;
1370 l_trxdate :=c_mti_row.transaction_date; --Bug#5176266.
1371
1372 IF (l_itemid IS NULL) THEN
1373 IF (NOT getitemid(l_itemid, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1374 l_error_exp := FND_MESSAGE.get;
1375
1376 FND_MESSAGE.set_name('INV', 'INV_INT_ITMSEGCODE');
1377 l_error_code := FND_MESSAGE.get;
1378
1379 errupdate(c_mti_row.rowid,null);
1380 END IF;
1381 END IF;
1382 /* Bug 3273172,moved the below code here
1383 for Account, Account Alias source is populated first before getting the account */
1384 IF ( ( l_srctype=INV_Globals.G_SourceType_SalesOrder OR
1385 l_srctype = INV_Globals.G_SourceType_Account OR
1386 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
1387 l_srctype = INV_Globals.G_SourceType_IntOrder)
1388 AND (l_trxsrc is NULL) ) THEN
1389 IF ( NOT getsrcid(l_trxsrc, l_srctype, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1390 l_error_exp := FND_MESSAGE.get;
1391
1392 FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
1393 l_error_code := FND_MESSAGE.get;
1394
1395 errupdate(c_mti_row.rowid,null);
1396 END IF;
1397 END IF;
1398 l_acctid_validated := FALSE; --Bug#4247753
1399 IF (l_acctid IS NULL) THEN
1400 IF (l_srctype = 3 OR l_srctype = 6) THEN
1401 IF (l_srctype = 6) THEN
1402 SELECT DISTRIBUTION_ACCOUNT
1403 INTO l_acctid
1404 FROM MTL_GENERIC_DISPOSITIONS
1405 WHERE ORGANIZATION_ID = c_mti_row.organization_id
1406 AND DISPOSITION_ID = l_trxsrc;
1407 ELSE
1408 l_acctid := l_trxsrc;
1409 END IF;
1410
1411 ELSE
1412 IF (NOT getacctid(l_acctid, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1413 --l_error_exp := FND_MESSAGE.get; --Bug#4247753. Error Explaination is
1414 --already set in getacctid()
1415 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
1416 l_error_code := FND_MESSAGE.get;
1417
1418 errupdate(c_mti_row.rowid,null);
1419 END IF;
1420 END IF;
1421 END IF;
1422
1423 --Bug#4247753 calling the functon, validate_acctid() for validating the Account combination ID
1424 IF ( l_acctid IS NOT NULL AND (NOT l_acctid_validated)) THEN
1425 IF ( NOT validate_acctid(l_acctid, c_mti_row.organization_id, l_trxdate)) THEN
1426 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
1427 l_error_code := FND_MESSAGE.get;
1428 errupdate(c_mti_row.rowid,null);
1429 END IF;
1430 END IF;
1431
1432 /* Bug 2971400 populating transaction source id */
1433 /* Bug 3273172,Moving the below code to above
1434 IF ( ( l_srctype=INV_Globals.G_SourceType_SalesOrder OR
1435 l_srctype = INV_Globals.G_SourceType_Account OR
1436 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
1437 l_srctype = INV_Globals.G_SourceType_IntOrder)
1438 AND (l_trxsrc is NULL) ) THEN
1439 IF ( NOT getsrcid(l_trxsrc, l_srctype, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1440 l_error_exp := FND_MESSAGE.get;
1441
1442 FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
1443 l_error_code := FND_MESSAGE.get;
1444
1445 errupdate(c_mti_row.rowid,null);
1446 END IF;
1447
1448 END IF; */
1449
1450 UPDATE MTL_TRANSACTIONS_INTERFACE
1451 SET inventory_item_id = l_itemid,
1452 distribution_account_id = l_acctid,
1453 transaction_source_id = l_trxsrc
1454 WHERE rowid = c_mti_row.rowid;
1455
1456 END LOOP;
1457
1458 EXCEPTION
1459 WHEN OTHERS THEN
1460 IF (l_debug = 1) THEN
1461 inv_log_util.trace('Error in derive_segment_ids : ' || l_error_exp, 'INV_TXN_MANAGER_GRP ','1');
1462 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1463 END IF;
1464 x_return_status := FND_API.G_RET_STS_ERROR;
1465
1466 END derive_segment_ids;
1467
1468 -----------------------------------------------------------------------
1469 -- Name : validate_quantities
1470 -- Desc : This procedure is used to validate transaction quantity2
1471 --
1472 -- I/P Params :
1473 -- All the relevant transaction details :
1474 -- - organization id
1475 -- - item_id
1476 -- - lot, revision, subinventory
1477 -- - transaction quantities
1478 -- O/P Params :
1479 -- x_rerturn_status.
1480 -- RETURN VALUE :
1481 -- TRUE : IF the transaction is valid regarding Quantity2 and lot indivisible
1482 -- FALSE : IF the transaction is NOT valid regarding Quantity2 and lot indivisible
1483 --
1484 -- HISTORY
1485 -- Jalaj Srivastava Bug 4969885
1486 -- Added parameter p_lot_rowid
1487 -- Jalaj Srivastava Bug 5446542
1488 -- Check for lot indivisibility here
1489 -- Make sure that lot indivisibility api is called
1490 -- with primary quantity
1491 -----------------------------------------------------------------------
1492 FUNCTION validate_quantities(
1493 p_rowid IN VARCHAR2
1494 , p_lot_rowid IN VARCHAR2
1495 , p_transaction_type_id IN NUMBER
1496 , p_organization_id IN NUMBER
1497 , p_inventory_item_id IN NUMBER
1498 , p_revision IN VARCHAR2
1499 , p_subinventory_code IN VARCHAR2
1500 , p_locator_id IN NUMBER
1501 , p_lot_number IN VARCHAR2
1502 , p_transaction_quantity IN OUT NOCOPY NUMBER
1503 , p_transaction_uom IN VARCHAR2
1504 , p_secondary_quantity IN OUT NOCOPY NUMBER
1505 , p_secondary_uom_code IN OUT NOCOPY VARCHAR2)
1506 RETURN BOOLEAN
1507 IS
1508 l_lot_divisible_flag VARCHAR2(1);
1509 l_tracking_quantity_ind VARCHAR2(30);
1510 l_secondary_default_ind VARCHAR2(30);
1511 l_secondary_uom_code VARCHAR2(3);
1512 l_secondary_qty NUMBER;
1513 l_transaction_quantity NUMBER;
1514 l_lot_indiv_trx_valid BOOLEAN;
1515 l_msg VARCHAR2(4000);
1516 l_msg_index_out pls_integer;
1517 l_return_status varchar2(1);
1518 l_msg_data varchar2(4000);
1519 l_msg_count pls_integer;
1520 l_primary_uom_code VARCHAR2(3);--Bug 5446542
1521 l_primary_quantity NUMBER;--Bug 5446542
1522
1523 CURSOR get_item_details( org_id IN NUMBER
1524 , item_id IN NUMBER) IS
1525 SELECT lot_divisible_flag
1526 , tracking_quantity_ind
1527 , secondary_default_ind
1528 , secondary_uom_code
1529 , primary_uom_code /* Bug 5446542 */
1530 FROM mtl_system_items
1531 WHERE organization_id = org_id
1532 AND inventory_item_id = item_id;
1533
1534 BEGIN
1535 IF (l_debug is null)
1536 THEN
1537 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1538 END IF;
1539
1540 IF (l_debug = 1) THEN
1541 inv_log_util.trace('validate_quantities: Start ', 'INV_TXN_MANAGER_GRP', 9);
1542 inv_log_util.trace('org id='||to_char(p_organization_id)||' item id='||to_char(p_inventory_item_id)||' rev='||p_revision, 'INV_TXN_MANAGER_GRP', 9);
1543 inv_log_util.trace('txn uom='||p_transaction_uom||' qty='||to_char(p_transaction_quantity), 'INV_TXN_MANAGER_GRP', 9);
1544 inv_log_util.trace('sec uom='||p_secondary_uom_code||' qty='||to_char(p_secondary_quantity), 'INV_TXN_MANAGER_GRP', 9);
1545 END IF;
1546
1547
1548 /* =======================================================================
1549 Init variables
1550 ======================================================================= */
1551 OPEN get_item_details( p_organization_id
1552 , p_inventory_item_id);
1553 FETCH get_item_details
1554 INTO l_lot_divisible_flag
1555 , l_tracking_quantity_ind
1556 , l_secondary_default_ind
1557 , l_secondary_uom_code
1558 , l_primary_uom_code;/* Bug 5446542 */
1559 --Item has already been validated
1560 --no need to check for no_data_found
1561 CLOSE get_item_details;
1562 --{
1563 IF (l_tracking_quantity_ind = 'PS') THEN
1564
1565 /** Quantity Validation **/
1566 IF (p_transaction_quantity IS NULL AND p_secondary_quantity IS NULL) THEN
1567 IF (l_debug = 1) THEN
1568 inv_log_util.trace('validate_quantities: both transaction and secondary quantities are null', 'INV_TXN_MANAGER_GRP', 9);
1569 END IF;
1570 loaderrmsg('INV_INT_QTYCODE','INV_INT_QTYCODE');
1571 errupdate(p_rowid, p_lot_rowid);
1572 return false;
1573 END IF;
1574
1575 -- the item is DUOM controlled
1576
1577 /** UOM Validation **/
1578 IF (p_secondary_uom_code <> l_secondary_uom_code) THEN
1579 IF (l_debug = 1) THEN
1580 inv_log_util.trace('validate_quantities: sec uom passed in not same as item sec uom', 'INV_TXN_MANAGER_GRP', 9);
1581 END IF;
1582 loaderrmsg('INV_INCORRECT_SECONDARY_UOM','INV_INCORRECT_SECONDARY_UOM');
1583 errupdate(p_rowid, p_lot_rowid);
1584 return false;
1585 END IF;
1586 -- Set the default UOM2 if missing
1587 IF (p_secondary_uom_code IS NULL) THEN
1588 p_secondary_uom_code := l_secondary_uom_code;
1589 END IF;
1590 IF (l_debug = 1) THEN
1591 inv_log_util.trace('validate_quantities: assigned sec uom='||p_secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
1592 END IF;
1593 -- Set the Qty2 from Qty1 if missing:
1594 --{
1595 IF (p_secondary_quantity IS NULL) THEN
1596 l_secondary_qty := INV_CONVERT.INV_UM_CONVERT
1597 ( item_id => p_inventory_item_id
1598 ,lot_number => p_lot_number
1599 ,organization_id => p_organization_id
1600 ,precision => 5
1601 ,from_quantity => p_transaction_quantity
1602 ,from_unit => p_transaction_uom
1603 ,to_unit => p_secondary_uom_code
1604 ,from_name => NULL
1605 ,to_name => NULL);
1606
1607 IF (l_secondary_qty = -99999) THEN
1608 IF (l_debug = 1) THEN
1609 inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT error while calculating sec qty', 'INV_TXN_MANAGER_GRP', 9);
1610 END IF;
1611 loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1612 errupdate(p_rowid, p_lot_rowid);
1613 return false;
1614 END IF;
1615 p_secondary_quantity := l_secondary_qty;
1616 IF (l_debug = 1) THEN
1617 inv_log_util.trace('validate_quantities: new secondary qty is: '|| l_secondary_qty , 'INV_TXN_MANAGER_GRP', 9);
1618 END IF;
1619 END IF;--}
1620
1621 -- Set the Qty1 from Qty2 if missing:
1622 --{
1623 IF (p_transaction_quantity IS NULL) THEN
1624 l_transaction_quantity := INV_CONVERT.INV_UM_CONVERT
1625 ( item_id => p_inventory_item_id
1626 , lot_number => p_lot_number
1627 , organization_id => p_organization_id
1628 , precision => 5
1629 , from_quantity => p_secondary_quantity
1630 , from_unit => p_secondary_uom_code
1631 , to_unit => p_transaction_uom
1632 , from_name => NULL
1633 , to_name => NULL);
1634
1635 IF (l_transaction_quantity = -99999) THEN
1636 IF (l_debug = 1) THEN
1637 inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT ERROR while calculating transaction quantity', 'INV_TXN_MANAGER_GRP', 9);
1638 END IF;
1639 loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1640 errupdate(p_rowid, p_lot_rowid);
1641 return false;
1642 END IF;
1643 p_transaction_quantity := l_transaction_quantity;
1644 IF (l_debug = 1) THEN
1645 inv_log_util.trace('validate_quantities: new transaction qty is: '|| l_transaction_quantity , 'INV_TXN_MANAGER_GRP', 9);
1646 END IF;
1647 END IF;--}
1648
1649 --Jalaj Srivastava Bug 4969885
1650 --We will not check for deviation
1651 --calling programs and customers should validate for deviation
1652 --before loading in mti
1653 ELSE
1654 --tracking is in primary
1655 p_secondary_quantity := NULL;
1656 p_secondary_uom_code := NULL;
1657 END IF;--}
1658
1659 --Jalaj Srivastava Bug 5446542
1660 --Lot indivisibility check will be done here
1661 -- Lot Indivisible Validation
1662 --{
1663 IF (l_lot_divisible_flag = 'N') THEN
1664 --Jalaj Srivastava Bug 5446542
1665 --if txn uom is not same as the primary uom then
1666 --convert txn qty to prim qty.
1667 IF (l_primary_uom_code <> p_transaction_uom) THEN
1668 l_primary_quantity := INV_CONVERT.INV_UM_CONVERT
1669 ( item_id => p_inventory_item_id
1670 ,lot_number => p_lot_number
1671 ,organization_id => p_organization_id
1672 ,precision => 5
1673 ,from_quantity => p_transaction_quantity
1674 ,from_unit => p_transaction_uom
1675 ,to_unit => l_primary_uom_code
1676 ,from_name => NULL
1677 ,to_name => NULL);
1678
1679 IF (l_primary_quantity = -99999) THEN
1680 IF (l_debug = 1) THEN
1681 inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT error while calculating primary qty', 'INV_TXN_MANAGER_GRP', 9);
1682 END IF;
1683 loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1684 errupdate(p_rowid, p_lot_rowid);
1685 return false;
1686 END IF;
1687 ELSE
1688 l_primary_quantity := p_transaction_quantity;
1689 END IF;
1690
1691 l_lot_indiv_trx_valid := INV_LOT_API_PUB.VALIDATE_LOT_INDIVISIBLE
1692 ( p_api_version => 1.0
1693 , p_init_msg_list => fnd_api.g_false
1694 , p_transaction_type_id => p_transaction_type_id
1695 , p_organization_id => p_organization_id
1696 , p_inventory_item_id => p_inventory_item_id
1697 , p_revision => p_revision
1698 , p_subinventory_code => p_subinventory_code
1699 , p_locator_id => p_locator_id
1700 , p_lot_number => p_lot_number
1701 , p_primary_quantity => l_primary_quantity /* Bug 5446542: pass primary qty and not txn qty */
1702 , p_qoh => NULL
1703 , p_atr => NULL
1704 , x_return_status => l_return_status
1705 , x_msg_count => l_msg_count
1706 , x_msg_data => l_msg_data);
1707
1708 IF (NOT l_lot_indiv_trx_valid) THEN
1709 --the transaction is not valid regarding lot indivisible:
1710 IF (l_debug = 1) THEN
1711 inv_log_util.trace('validate_quantities: Failed check for lot indivisibility', 'INV_TXN_MANAGER_GRP', 9);
1712 END IF;
1713 RAISE FND_API.G_EXC_ERROR;
1714 END IF;
1715
1716 IF (l_debug = 1) THEN
1717 inv_log_util.trace('validate_quantities: passed check for lot indivisibility', 'INV_TXN_MANAGER_GRP', 9);
1718 END IF;
1719
1720
1721 END IF;--} -- l_lot_divisible_flag = 'N'
1722
1723 IF (l_debug = 1) THEN
1724 inv_log_util.trace('validate_quantities: End .... ', 'INV_TXN_MANAGER_GRP', 9);
1725 END IF;
1726
1727 RETURN TRUE;
1728
1729 EXCEPTION
1730 WHEN FND_API.G_EXC_ERROR THEN
1731 FND_MSG_PUB.Get(
1732 p_msg_index => 1,
1733 p_data => l_msg,
1734 p_encoded => FND_API.G_FALSE,
1735 p_msg_index_out => l_msg_index_out);
1736
1737 l_error_exp := l_msg;
1738 l_error_code := l_msg;
1739
1740 IF (l_debug = 1) THEN
1741 inv_log_util.trace('validate_quantities: FND_API.G_EXC_ERROR ' || l_error_code, 'INV_TXN_MANAGER_GRP', 9);
1742 END IF;
1743
1744 errupdate(p_rowid, p_lot_rowid);
1745 RETURN FALSE;
1746
1747 WHEN OTHERS THEN
1748 IF (l_debug = 1) THEN
1749 inv_log_util.trace('validate_quantities: when others'||substr(sqlerrm,1,240),'INV_TXN_MANAGER_GRP',1);
1750 END IF;
1751 RETURN FALSE;
1752
1753 END validate_quantities;
1754
1755
1756 /******************************************************************
1757 *
1758 * validate_group
1759 * Validate a group of MTI records in a batch together
1760
1761 * J-dev (WIP related validations)
1762 * For patchet J, wip desktop transactions will be inserted into MTI,
1763 * validated by INV and moved to MMTT. Since WIP already does some
1764 * validations, we will by-pass some validation done here (based on the
1765 * variable l_validation_full)
1766 * The validation to be done for WIP desktop are:
1767 * MTI WIP Validation
1768 * DESKTOP WIP TRANSACTIONS
1769 * 1. Flow Schedule will only exist for WIP Transactions
1770 * 2. Derive Transaction_action_id and Transaction_source_type_id
1771 * from transaction_type_id
1772 * 3. Validate Shippable_flag records in MTI have transaction_enabled items.
1773 * 4. Validate Inventory_item_flag, Inventory_asset_flag Costing Enabled_Flag
1774 * 5. Validate Subinventory_code(disabled ?)
1775 * 6. Validate Transfer Subinventory(disabled ?)
1776 * 7. Validate Restricted Subinventories
1777 * 8. Validate Subinventory for the following:
1778 * -You cannot issue from non tracked
1779 * - You cannot transfer from expense sub to asset sub for asset items
1780 * -If the expense to asset transfer allowed profile is set then
1781 * You cannot issue from a non-tracked sub
1782 * All other transfers are valid
1783 * 9. Validate Transaction_type_id (disable date )
1784 * 10. Validate Transaction_action(currently we do not support cycle
1785 * count
1786 * and some internal orders through MTI)
1787 * 11. Validate Organization(disable date)
1788 * 12. Validate Locators(disable date)
1789 * 13. Validate Revision ( should exists in mtl_item_revisions,
1790 * we do not validate against disbaled_date for revision).
1791 * 14. Validate Transaction reasons(disable date)
1792 * 15. Validate Transaction Qty Sign
1793 * 16. Validate OverCompletion Trx qtyshould not be -ve or greater
1794 * than the transaction qty.
1795 * 17. Validate Distribution Account
1796 *(if dist account id is not null or if null,should be an asset item/sub)
1797 *18. Validate transaction UOM
1798 *19. Validate cost_group, Xfr cost Groups
1799 * 20. Validate VMI: po_asl_attributes
1800 * 21. Validate LPN, Xfr LPN, Contenet LPN
1801 * All Other validations will be by-passed
1802 ******************************************************************/
1803 PROCEDURE validate_group(
1804 p_header_id NUMBER,
1805 x_return_status OUT NOCOPY VARCHAR2,
1806 x_msg_count OUT NOCOPY NUMBER,
1807 x_msg_data OUT NOCOPY VARCHAR2,
1808 p_userid NUMBER,
1809 p_loginid NUMBER,
1810 p_validation_level NUMBER:= fnd_api.g_valid_level_full)
1811 IS
1812
1813 srctypeid NUMBER;
1814 tvu_flow_schedule VARCHAR2(50);
1815 tev_scheduled_flag NUMBER;
1816 flow_schedule_children VARCHAR2(50);
1817 l_count NUMBER;
1818 l_profile VARCHAR2(100);
1819 EXP_TO_AST_ALLOWED NUMBER;
1820 EXP_TYPE_REQUIRED NUMBER;
1821 NUMHOLD NUMBER:=0;
1822 l_validate_full BOOLEAN := TRUE; --J-dev
1823
1824 -- INVCONV start fabdi
1825 -- new cursor AA2
1826 CURSOR AA2 IS
1827 SELECT
1828 ROWID,
1829 TRANSACTION_TYPE_ID,
1830 ORGANIZATION_ID,
1831 INVENTORY_ITEM_ID,
1832 REVISION,
1833 SUBINVENTORY_CODE,
1834 LOCATOR_ID,
1835 TRANSACTION_QUANTITY,
1836 TRANSACTION_UOM,
1837 SECONDARY_TRANSACTION_QUANTITY,
1838 SECONDARY_UOM_CODE
1839 FROM MTL_TRANSACTIONS_INTERFACE
1840 WHERE TRANSACTION_HEADER_ID = p_header_id
1841 AND PROCESS_FLAG = 1
1842 ORDER BY ORGANIZATION_ID,INVENTORY_ITEM_ID,REVISION,
1843 SUBINVENTORY_CODE,LOCATOR_ID;
1844
1845 l_transaction_quantity NUMBER ;
1846 l_transaction_uom_code VARCHAR(3);
1847 l_secondary_quantity NUMBER;
1848 l_secondary_uom_code VARCHAR(3);
1849 l_return_status VARCHAR(3);
1850 l_msg_count NUMBER;
1851 l_msg_data VARCHAR(200);
1852
1853 l_transaction_type_id NUMBER;
1854 l_organization_id NUMBER;
1855 l_inventory_item_id NUMBER;
1856 l_revision VARCHAR(3);
1857 l_subinventory_code VARCHAR(10);
1858 l_locator_id NUMBER;
1859 l_rowid VARCHAR(31);
1860 l_tracking_quantity_ind mtl_system_items_b.tracking_quantity_ind%TYPE;
1861 l_item_secondary_uom_code mtl_system_items_b.secondary_uom_code%TYPE;
1862
1863 l_qty_check BOOLEAN;
1864 l_lot_control_code number;
1865
1866 /* get lot control flag */
1867 CURSOR get_item_info( org_id IN NUMBER
1868 , item_id IN NUMBER) IS
1869 SELECT lot_control_code, tracking_quantity_ind, secondary_uom_code
1870 FROM mtl_system_items
1871 WHERE organization_id = org_id
1872 AND inventory_item_id = item_id;
1873
1874 -- INVCONV end fabdi
1875
1876
1877 BEGIN
1878 if (l_debug is null) then
1879 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1880 end if;
1881
1882
1883 /*---------------------------------------------------------+
1884 | Derive transaction_action_id and transaction_source_
1885 | type_id
1886 +---------------------------------------------------------*/
1887
1888 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
1889 SET LAST_UPDATE_DATE = SYSDATE,
1890 LAST_UPDATED_BY = p_userid,
1891 LAST_UPDATE_LOGIN = p_loginid,
1892 PROGRAM_UPDATE_DATE = SYSDATE,
1893 TRANSACTION_ACTION_ID =
1894 (SELECT MTT.TRANSACTION_ACTION_ID
1895 FROM MTL_TRANSACTION_TYPES MTT
1896 WHERE MTT.TRANSACTION_TYPE_ID
1897 = MTI.TRANSACTION_TYPE_ID),
1898 TRANSACTION_SOURCE_TYPE_ID =
1899 (SELECT MTT.TRANSACTION_SOURCE_TYPE_ID
1900 FROM MTL_TRANSACTION_TYPES MTT
1901 WHERE MTT.TRANSACTION_TYPE_ID
1902 = MTI.TRANSACTION_TYPE_ID)
1903 WHERE TRANSACTION_HEADER_ID = p_header_id
1904 AND PROCESS_FLAG = 1;
1905
1906
1907 /*+-----------------------------------------------------------------+
1908 | OPM INVCONV umoogala (Bug 4432078) |
1909 | Flag error for all unsupported txns for Process Mfg Orgs. |
1910 +-----------------------------------------------------------------+*/
1911
1912 loaderrmsg('INV_TXN_NOT_SUPPORTED_CODE', 'INV_TXN_NOT_SUPPORTED_CODE_EXP');
1913
1914 UPDATE mtl_transactions_interface mti
1915 SET last_update_date = SYSDATE,
1916 last_updated_by = p_userid,
1917 last_update_login = p_loginid,
1918 program_update_date = SYSDATE,
1919 process_flag = 3,
1920 lock_flag = 2,
1921 error_code = substrb(l_error_code,1,240),
1922 error_explanation = substrb(l_error_exp,1,240)
1923 WHERE transaction_header_id = p_header_id
1924 AND process_flag = 1
1925 AND transaction_type_id in (25, 90, 91, 92, 38, 48, 55,
1926 56, 57, 58, 24, 93, 66, 67,
1927 68, 80, 94, 26, 28, 77)
1928 AND EXISTS
1929 (SELECT 'This is a Process Mfg Org'
1930 FROM mtl_parameters mp
1931 WHERE mp.process_enabled_flag = 'Y'
1932 AND mp.organization_id = mti.organization_id
1933 );
1934
1935 l_count := SQL%ROWCOUNT;
1936 /*------------------------------------------------------+
1937 | get flow schedule control variables
1938 +------------------------------------------------------*/
1939
1940 BEGIN
1941 SELECT TRANSACTION_SOURCE_TYPE_ID,
1942 DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y',1,0),
1943 NVL(SCHEDULED_FLAG,0)
1944 INTO srctypeid, tvu_flow_schedule, tev_scheduled_flag
1945 FROM MTL_TRANSACTIONS_INTERFACE
1946 WHERE TRANSACTION_HEADER_ID = p_header_id
1947 AND PROCESS_FLAG = 1
1948 AND ROWNUM < 2;
1949 EXCEPTION
1950 WHEN NO_DATA_FOUND THEN
1951 x_return_status := FND_API.G_RET_STS_ERROR;
1952 x_msg_data := 'No Transaction found in MTI';
1953 return;
1954 END;
1955
1956 /**J-dev check we need to perform a full validation*/
1957 IF (l_debug = 1) THEN
1958 inv_log_util.trace('wip_constants.DMF_PATCHSET_LEVEL'||wip_constants.dmf_patchset_level,'INV_TXN_MANAGER_GRP', 9);
1959 inv_log_util.trace('wip_constants.DMF_PATCHSET_J_VALUE'||wip_constants.dmf_patchset_J_VALUE,'INV_TXN_MANAGER_GRP', 9);
1960 END IF;
1961
1962 IF (srctypeid = 5 AND wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE) THEN
1963 IF (p_validation_level <> fnd_api.g_valid_level_full) THEN
1964 l_validate_full := FALSE;
1965 /**implies this a WIP desktop transaction*/
1966 IF (l_debug = 1) THEN
1967 inv_log_util.trace('Val Grp:WIP desktop trx','INV_TXN_MANAGER_GRP', 9);
1968 END IF;
1969 ELSE
1970 IF (l_debug = 1) THEN
1971 inv_log_util.trace('Val Grp:WIP MTI trx','INV_TXN_MANAGER_GRP', 9);
1972 END IF;
1973 END IF;
1974 END IF;
1975
1976 IF (l_validate_full) THEN--J-dev
1977 /* The flow_schedule will only make sense for wip transactions */
1978 IF srctypeid = 5 THEN
1979 BEGIN
1980 SELECT
1981 DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y',1,0)
1982 INTO flow_schedule_children
1983 FROM MTL_TRANSACTIONS_INTERFACE
1984 WHERE TRANSACTION_HEADER_ID = p_header_id
1985 AND TRANSACTION_ACTION_ID IN (1, 27, 33, 34)
1986 AND PROCESS_FLAG = 1
1987 AND ROWNUM < 2;
1988 EXCEPTION
1989 WHEN NO_DATA_FOUND THEN
1990 flow_schedule_children := 0;
1991 END;
1992 END IF;
1993 END IF;--J-dev
1994
1995
1996
1997 /*-------------------------------------------------------------------------+
1998 | Derive inventory_item_id, distribution_acct_id and transaction_source_id
1999 | where not supplied
2000 +--------------------------------------------------------------------------*/
2001
2002
2003 /* commented logical validations fr inv_globals pre-req*/
2004 IF (l_validate_full) THEN --J-dev
2005 fnd_flex_key_api.set_session_mode('seed_data');
2006 derive_segment_ids(p_header_id, x_return_status ,x_msg_count, x_msg_data);
2007 END IF;
2008 loaderrmsg('INV_INT_TRXACTCODE', 'INV_INT_TRXACTCODE');
2009
2010 --------------------------------------------------------+
2011 --Validate Logical Transactions.
2012 --========================================================
2013 -- Add a check to prevent processing logical transactions
2014 -- that are populated directly to the interface table
2015 --------------------------------------------------------
2016
2017 --J-dev for Drop Ship
2018 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2019 SET LAST_UPDATE_DATE = SYSDATE,
2020 LAST_UPDATED_BY = p_userid,
2021 LAST_UPDATE_LOGIN = p_loginid,
2022 PROGRAM_UPDATE_DATE = SYSDATE,
2023 PROCESS_FLAG = 3,
2024 LOCK_FLAG = 2,
2025 ERROR_CODE = substrb(l_error_code,1,240),
2026 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2027 WHERE TRANSACTION_HEADER_ID = p_header_id
2028 AND process_flag = 1
2029 AND ((transaction_source_type_id = inv_globals.G_sourcetype_inventory
2030 AND transaction_action_id IN
2031 (inv_globals.G_action_logicalissue,
2032 inv_globals.G_action_logicalicsales,
2033 inv_globals.G_action_logicalicreceipt,
2034 inv_globals.G_action_logicalicrcptreturn,
2035 inv_globals.G_action_logicalicsalesreturn,
2036 inv_globals.G_action_logicalreceipt)) OR
2037 (transaction_source_type_id = inv_globals.G_sourcetype_rma
2038 AND transaction_action_id = inv_globals.G_action_logicalreceipt)
2039 OR
2040 (transaction_source_type_id = inv_globals.G_sourcetype_purchaseorder
2041 AND transaction_action_id in
2042 (inv_globals.G_action_logicalissue,
2043 -- inv_globals.G_action_logicaldeladj,
2044 -- inv_globals.G_action_logicalreceipt,
2045 inv_globals.G_action_retropriceupdate)) OR
2046 (transaction_source_type_id = inv_globals.G_sourcetype_rma
2047 AND transaction_action_id = inv_globals.G_action_logicalreceipt) OR
2048 (transaction_source_type_id = inv_globals.G_sourcetype_intreq
2049 AND transaction_action_id = inv_globals.G_action_logicalexpreqreceipt) OR
2050 (transaction_source_type_id = inv_globals.G_sourcetype_salesorder
2051 and transaction_action_id = inv_globals.G_action_logicalissue)) ;
2052 --J-dev for Drop Ship
2053
2054 /*------------------------------------------------------+
2055 | Validate inventory item
2056 +------------------------------------------------------*/
2057 l_count := 0;
2058
2059 loaderrmsg('INV_INT_ITMCODE', 'INV_INT_ITMEXP');
2060
2061 -- Bug: 3616999: The WIP phantom items are not transactable items
2062 -- but are still inserted into MTI. We should not validate them
2063 -- but will have to move them to MMTT and it will be deleted from the
2064 -- table before pushed to MMT. So, if the source type is 5 (WIP) and
2065 -- wip_supply_type is 6, we do not validate them
2066 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2067 SET LAST_UPDATE_DATE = SYSDATE,
2068 LAST_UPDATED_BY = p_userid,
2069 LAST_UPDATE_LOGIN = p_loginid,
2070 PROGRAM_UPDATE_DATE = SYSDATE,
2071 PROCESS_FLAG = 3,
2072 LOCK_FLAG = 2,
2073 ERROR_CODE = substrb(l_error_code,1,240),
2074 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2075 WHERE TRANSACTION_HEADER_ID = p_header_id
2076 AND PROCESS_FLAG = 1
2077 AND TRANSACTION_ACTION_ID <> 24
2078 AND NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2079 AND NOT (TRANSACTION_SOURCE_TYPE_ID = 5 AND
2080 nvl(OPERATION_SEQ_NUM,1) < 0 AND nvl(WIP_SUPPLY_TYPE,0) = 6)
2081 -- AND ((TRANSACTION_SOURCE_TYPE_ID = 5 AND WIP_SUPPLY_TYPE <> 6) OR
2082 -- (transaction_source_type_id <>5))
2083 AND NOT EXISTS (
2084 SELECT NULL
2085 FROM MTL_SYSTEM_ITEMS MSI
2086 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2087 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2088 AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y');
2089
2090 l_count := SQL%ROWCOUNT;
2091
2092
2093 /*----------------------------------------------------+
2094 | Start validation of item where it is specified
2095 +----------------------------------------------------*/
2096 loaderrmsg('INV_INT_ITMCODE','INV_INT_ITMEXP');
2097
2098
2099 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2100 SET LAST_UPDATE_DATE = SYSDATE,
2101 LAST_UPDATED_BY = p_userid,
2102 LAST_UPDATE_LOGIN = p_loginid,
2103 PROGRAM_UPDATE_DATE = SYSDATE,
2104 PROCESS_FLAG = 3,
2105 LOCK_FLAG = 2,
2106 ERROR_CODE = substrb(l_error_code,1,240),
2107 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2108 WHERE TRANSACTION_HEADER_ID = p_header_id
2109 AND INVENTORY_ITEM_ID IS NOT NULL
2110 AND (TRANSACTION_ACTION_ID NOT IN (1, 27, 33, 34)
2111 OR TRANSACTION_SOURCE_TYPE_ID <> 5)
2112 AND PROCESS_FLAG = 1
2113 AND NOT EXISTS (
2114 SELECT NULL
2115 FROM MTL_SYSTEM_ITEMS MSI
2116 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2117 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2118 AND MSI.INVENTORY_ITEM_FLAG = 'Y');
2119
2120 l_count := SQL%ROWCOUNT;
2121 IF (l_debug = 1) THEN
2122 inv_log_util.trace('Validating specified item ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2123 END IF;
2124
2125
2126
2127 /*----------------------------------------------------------------+
2128 | The items are validated seperately for average cost update
2129 | transactions as done in the form
2130 +----------------------------------------------------------------*/
2131
2132 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2133 SET LAST_UPDATE_DATE = SYSDATE,
2134 LAST_UPDATED_BY = p_userid,
2135 LAST_UPDATE_LOGIN = p_loginid,
2136 PROGRAM_UPDATE_DATE = SYSDATE,
2137 PROCESS_FLAG = 3,
2138 LOCK_FLAG = 2,
2139 ERROR_CODE = substrb(l_error_code,1,240),
2140 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2141 WHERE TRANSACTION_HEADER_ID = p_header_id
2142 AND PROCESS_FLAG = 1
2143 AND TRANSACTION_ACTION_ID = 24
2144 AND NOT EXISTS (
2145 SELECT NULL
2146 FROM MTL_SYSTEM_ITEMS MSI
2147 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2148 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2149 AND MSI.INVENTORY_ITEM_FLAG = 'Y'
2150 AND MSI.INVENTORY_ASSET_FLAG = 'Y'
2151 AND MSI.COSTING_ENABLED_FLAG = 'Y');
2152
2153 l_count := SQL%ROWCOUNT;
2154 IF (l_debug = 1) THEN
2155 inv_log_util.trace('Validating specified item ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2156 END IF;
2157
2158 /*----------------------------------------------------------------+
2159 | The inv layer is validated seperately for layer cost update
2160 | transactions. Only positive qty layers can be updated.
2161 +----------------------------------------------------------------*/
2162
2163 IF (l_validate_full) THEN--J-dev
2164 loaderrmsg('INV_POS_QTY_LAYER','INV_POS_QTY_LAYER');
2165 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2166 SET LAST_UPDATE_DATE = SYSDATE,
2167 LAST_UPDATED_BY = p_userid,
2168 LAST_UPDATE_LOGIN = p_loginid,
2169 PROGRAM_UPDATE_DATE = SYSDATE,
2170 PROCESS_FLAG = 3,
2171 LOCK_FLAG = 2,
2172 ERROR_CODE = substrb(l_error_code,1,240),
2173 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2174 WHERE TRANSACTION_HEADER_ID = p_header_id
2175 AND PROCESS_FLAG = 1
2176 AND TRANSACTION_ACTION_ID = 24
2177 AND TRANSACTION_SOURCE_TYPE_ID = 15
2178 AND NOT EXISTS (
2179 SELECT NULL
2180 FROM CST_INV_LAYERS CIL
2181 WHERE CIL.INV_LAYER_ID = MTI.TRANSACTION_SOURCE_ID
2182 AND CIL.LAYER_QUANTITY > 0);
2183
2184 l_count := SQL%ROWCOUNT;
2185 IF (l_debug = 1) THEN
2186 inv_log_util.trace('Validating for layer cost update ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2187 END IF;
2188 END IF;--J-dev
2189
2190 /*------------------------------------------------------------------------+
2191 | Validate for lot/serial/revision control for direct inter-org transfers
2192 +------------------------------------------------------------------------*/
2193
2194 IF (l_validate_full) THEN--J-dev
2195 loaderrmsg('INV_INT_ITMCTRL','INV_INT_ITMECTRL');
2196
2197 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2198 SET LAST_UPDATE_DATE = SYSDATE,
2199 LAST_UPDATED_BY = p_userid,
2200 LAST_UPDATE_LOGIN = p_loginid,
2201 PROGRAM_UPDATE_DATE = SYSDATE,
2202 PROCESS_FLAG = 3,
2203 LOCK_FLAG = 2,
2204 ERROR_CODE = substrb(l_error_code,1,240),
2205 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2206 WHERE TRANSACTION_HEADER_ID = p_header_id
2207 AND PROCESS_FLAG = 1
2208 AND TRANSACTION_ACTION_ID = 3
2209 AND EXISTS (
2210 SELECT NULL
2211 FROM MTL_SYSTEM_ITEMS MS1,
2212 MTL_SYSTEM_ITEMS MS2
2213 WHERE MS1.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2214 AND MS1.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2215 AND MS2.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2216 AND MS2.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2217 AND ((MS1.LOT_CONTROL_CODE = 1 AND
2218 MS2.LOT_CONTROL_CODE = 2)
2219 OR (MS1.SERIAL_NUMBER_CONTROL_CODE IN (1,6)
2220 AND MS2.SERIAL_NUMBER_CONTROL_CODE IN (2,3,5))
2221 OR (MS1.REVISION_QTY_CONTROL_CODE = 1 AND
2222 MS2.REVISION_QTY_CONTROL_CODE = 2)));
2223
2224 l_count := SQL%ROWCOUNT;
2225 IF (l_debug = 1) THEN
2226 inv_log_util.trace('Validating lot/serial/revision control for direct inter-org transfers ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2227 END IF;
2228
2229 END IF;--J-dev
2230
2231
2232 /*-----------------------------------------------------------+
2233 | Validating inventory item against transfer organization
2234 +-----------------------------------------------------------*/
2235
2236 IF (l_validate_full) THEN --J-dev
2237 loaderrmsg('INV_INT_ITEMCODE','INV_INT_XFRITMEXP');
2238
2239 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2240 SET LAST_UPDATE_DATE = SYSDATE,
2241 LAST_UPDATED_BY = p_userid,
2242 LAST_UPDATE_LOGIN = p_loginid,
2243 PROGRAM_UPDATE_DATE = SYSDATE,
2244 PROCESS_FLAG = 3,
2245 LOCK_FLAG = 2,
2246 ERROR_CODE = substrb(l_error_code,1,240),
2247 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2248 WHERE TRANSACTION_HEADER_ID = p_header_id
2249 AND TRANSACTION_ACTION_ID = 3
2250 AND PROCESS_FLAG = 1
2251 AND NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2252 AND NOT EXISTS (
2253 SELECT NULL
2254 FROM MTL_SYSTEM_ITEMS MSI
2255 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2256 AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2257 AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y');
2258
2259 l_count := SQL%ROWCOUNT;
2260 IF (l_debug = 1) THEN
2261 inv_log_util.trace('Validating item against xfer org ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2262 END IF;
2263
2264 END IF;--J-dev
2265
2266
2267 /*-----------------------------------------------+
2268 | Start validation of subinventory code
2269 +-----------------------------------------------*/
2270 loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBEXP');
2271
2272
2273 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2274 SET LAST_UPDATE_DATE = SYSDATE,
2275 LAST_UPDATED_BY = p_userid,
2276 LAST_UPDATE_LOGIN = p_loginid,
2277 PROGRAM_UPDATE_DATE = SYSDATE,
2278 PROCESS_FLAG = 3,
2279 LOCK_FLAG = 2,
2280 ERROR_CODE = substrb(l_error_code,1,240),
2281 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2282 WHERE TRANSACTION_HEADER_ID = p_header_id
2283 AND PROCESS_FLAG = 1
2284 AND TRANSACTION_ACTION_ID NOT IN (24, 30) /* CFM Scrap Transactions */
2285 AND (NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2286 AND NOT EXISTS (
2287 SELECT NULL
2288 FROM MTL_SECONDARY_INVENTORIES MSI
2289 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2290 AND MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2291 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)
2292 OR (SHIPPABLE_FLAG = 'N'
2293 AND SUBINVENTORY_CODE IS NOT NULL
2294 AND NOT EXISTS (
2295 SELECT NULL
2296 FROM MTL_SECONDARY_INVENTORIES MSI
2297 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2298 AND MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2299 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)));
2300
2301 l_count := SQL%ROWCOUNT;
2302 IF (l_debug = 1) THEN
2303 inv_log_util.trace('Validating subinventory code ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2304 END IF;
2305
2306
2307
2308 /*-----------------------------------------------------------+
2309 | Start validating the transfer subinventory |
2310 +-----------------------------------------------------------*/
2311
2312 IF (l_validate_full) THEN --J-dev
2313
2314 loaderrmsg('INV_INT_XSUBCODE','INV_INT_XSUBEXP');
2315
2316
2317 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2318 SET LAST_UPDATE_DATE = SYSDATE,
2319 LAST_UPDATED_BY = p_userid,
2320 LAST_UPDATE_LOGIN = p_loginid,
2321 PROGRAM_UPDATE_DATE = SYSDATE,
2322 PROCESS_FLAG = 3,
2323 LOCK_FLAG = 2,
2324 ERROR_CODE = substrb(l_error_code,1,240),
2325 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2326 WHERE TRANSACTION_HEADER_ID = p_header_id
2327 AND PROCESS_FLAG = 1
2328 AND (TRANSACTION_ACTION_ID IN (2,3,21,5)
2329 AND TRANSFER_SUBINVENTORY IS NOT NULL)
2330 AND ((NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2331 AND NOT EXISTS (
2332 SELECT NULL
2333 FROM MTL_SECONDARY_INVENTORIES MSI
2334 WHERE MSI.ORGANIZATION_ID =
2335 DECODE(MTI.TRANSACTION_ACTION_ID,2,
2336 MTI.ORGANIZATION_ID,5,MTI.organization_id,
2337 MTI.TRANSFER_ORGANIZATION)
2338 AND MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2339 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE))
2340 OR (SHIPPABLE_FLAG = 'N'
2341 AND TRANSFER_SUBINVENTORY IS NOT NULL
2342 AND NOT EXISTS (
2343 SELECT NULL
2344 FROM MTL_SECONDARY_INVENTORIES MSI
2345 WHERE MSI.ORGANIZATION_ID =
2346 DECODE(MTI.TRANSACTION_ACTION_ID,3,
2347 MTI.TRANSFER_ORGANIZATION,21,
2348 MTI.TRANSFER_ORGANIZATION,MTI.ORGANIZATION_ID)
2349 AND MSI.SECONDARY_INVENTORY_NAME =
2350 MTI.TRANSFER_SUBINVENTORY
2351 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)));
2352
2353 l_count := SQL%ROWCOUNT;
2354 IF (l_debug = 1) THEN
2355 inv_log_util.trace('Validating xfer subinventory code ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2356 END IF;
2357 END IF;--J-dev
2358
2359
2360
2361 /*-----------------------------------------------------------+
2362 | Validating restricted subinventories
2363 +-----------------------------------------------------------*/
2364 loaderrmsg('INV_INT_SUBCODE','INV_INT_RESUBEXP');
2365
2366 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2367 SET LAST_UPDATE_DATE = SYSDATE,
2368 LAST_UPDATED_BY = p_userid,
2369 LAST_UPDATE_LOGIN = p_loginid,
2370 PROGRAM_UPDATE_DATE = SYSDATE,
2371 PROCESS_FLAG = 3,
2372 LOCK_FLAG = 2,
2373 ERROR_CODE = substrb(l_error_code,1,240),
2374 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2375 WHERE TRANSACTION_HEADER_ID = p_header_id
2376 AND SUBINVENTORY_CODE IS NOT NULL
2377 AND PROCESS_FLAG = 1
2378 AND NOT EXISTS (
2379 SELECT NULL
2380 FROM MTL_ITEM_SUB_INVENTORIES MIS,
2381 MTL_SYSTEM_ITEMS MSI
2382 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2383 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2384 AND MSI.RESTRICT_SUBINVENTORIES_CODE = 1
2385 AND MIS.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2386 AND MIS.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2387 AND MIS.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2388 AND MIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2389 AND MIS.SECONDARY_INVENTORY = MTI.SUBINVENTORY_CODE
2390 UNION
2391 SELECT NULL
2392 FROM MTL_SYSTEM_ITEMS ITM
2393 WHERE ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2394 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2395 AND ITM.RESTRICT_SUBINVENTORIES_CODE = 2);
2396
2397 l_count := SQL%ROWCOUNT;
2398 IF (l_debug = 1) THEN
2399 inv_log_util.trace('Validating restricted subinventories ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2400 END IF;
2401
2402
2403 /*--------------------------------------------------------+
2404 | Validating restricted subinventory against transfer
2405 | organization
2406 +--------------------------------------------------------*/
2407
2408 IF (l_validate_full) THEN --J-dev
2409
2410 loaderrmsg('INV_INT_XSUBCODE','INV_INT_RESXFRSUBEXP');
2411
2412
2413 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2414 SET LAST_UPDATE_DATE = SYSDATE,
2415 LAST_UPDATED_BY = p_userid,
2416 LAST_UPDATE_LOGIN = p_loginid,
2417 PROGRAM_UPDATE_DATE = SYSDATE,
2418 PROCESS_FLAG = 3,
2419 LOCK_FLAG = 2,
2420 ERROR_CODE = substrb(l_error_code,1,240),
2421 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2422 WHERE TRANSACTION_HEADER_ID = p_header_id
2423 AND PROCESS_FLAG = 1
2424 AND TRANSFER_SUBINVENTORY IS NOT NULL
2425 AND TRANSACTION_ACTION_ID in (2,21,3,5)
2426 AND NOT EXISTS (
2427 SELECT NULL
2428 FROM MTL_ITEM_SUB_INVENTORIES MIS,
2429 MTL_SYSTEM_ITEMS MSI
2430 WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID, 2,
2431 MTI.ORGANIZATION_ID,
2432 MTI.TRANSFER_ORGANIZATION)
2433 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2434 AND MSI.RESTRICT_SUBINVENTORIES_CODE = 1
2435 AND MIS.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
2436 MTI.ORGANIZATION_ID,
2437 MTI.TRANSFER_ORGANIZATION)
2438 AND MIS.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2439 AND MIS.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2440 AND MIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2441 AND MIS.SECONDARY_INVENTORY = MTI.TRANSFER_SUBINVENTORY
2442 UNION
2443 SELECT NULL
2444 FROM MTL_SYSTEM_ITEMS ITM
2445 WHERE ITM.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
2446 MTI.ORGANIZATION_ID,
2447 MTI.TRANSFER_ORGANIZATION)
2448 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2449 AND ITM.RESTRICT_SUBINVENTORIES_CODE = 2);
2450
2451
2452 l_count := SQL%ROWCOUNT;
2453 IF (l_debug = 1) THEN
2454 inv_log_util.trace('Validating xfer res subs ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2455 END IF;
2456
2457 END IF;--J-dev
2458
2459 /*----------------------------------------------------------------------+
2460 | Validate Subinventory for the following:
2461 | You cannot issue from non tracked
2462 | You cannot issue from expense sub for intransit shipment
2463 | You cannot transfer from expense sub to asset sub for asset items
2464 |If the expense to asset transfer allowed profiel is set then
2465 | You cannot issue from a non-tracked sub
2466 | All other transfers are valid
2467 |exp_to_ast_allowed = 1 means that the exp to ast trx are not alowed
2468 +----------------------------------------------------------------------*/
2469 SELECT FND_PROFILE.VALUE('INV:EXPENSE_TO_ASSET_TRANSFER')
2470 INTO l_profile
2471 FROM dual;
2472
2473 IF SQL%FOUND THEN
2474 IF l_profile = '2' THEN
2475 exp_to_ast_allowed := 1;
2476 ELSE
2477 exp_to_ast_allowed := 2;
2478 END IF;
2479 ELSE
2480 exp_to_ast_allowed := 1;
2481 END IF;
2482
2483
2484 IF exp_to_ast_allowed = 1 THEN
2485
2486 loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBTYPEXP');
2487
2488 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2489 SET LAST_UPDATE_DATE = SYSDATE,
2490 LAST_UPDATED_BY = p_userid,
2491 LAST_UPDATE_LOGIN = p_loginid,
2492 PROGRAM_UPDATE_DATE = SYSDATE,
2493 PROCESS_FLAG = 3,
2494 LOCK_FLAG = 2,
2495 ERROR_CODE = substrb(l_error_code,1,240),
2496 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2497 WHERE TRANSACTION_HEADER_ID = p_header_id
2498 AND PROCESS_FLAG = 1
2499 AND ((TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2500 AND EXISTS (
2501 SELECT 'X'
2502 FROM MTL_SECONDARY_INVENTORIES MSI
2503 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2504 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2505 AND MSI.QUANTITY_TRACKED = 2))
2506 OR (TRANSACTION_ACTION_ID = 21
2507 AND EXISTS (
2508 SELECT 'X'
2509 FROM MTL_SECONDARY_INVENTORIES MSI,
2510 MTL_SYSTEM_ITEMS ITM
2511 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2512 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2513 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2514 AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2515 AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2516 AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2517 AND MSI.ASSET_INVENTORY = 2)));
2518
2519 l_count := SQL%ROWCOUNT;
2520
2521
2522 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2523 SET LAST_UPDATE_DATE = SYSDATE,
2524 LAST_UPDATED_BY = p_userid,
2525 LAST_UPDATE_LOGIN = p_loginid,
2526 PROGRAM_UPDATE_DATE = SYSDATE,
2527 PROCESS_FLAG = 3,
2528 LOCK_FLAG = 2,
2529 ERROR_CODE = substrb(l_error_code,1,240),
2530 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2531 WHERE TRANSACTION_HEADER_ID = p_header_id
2532 AND PROCESS_FLAG = 1
2533 AND TRANSACTION_ACTION_ID in (2,5)
2534 AND EXISTS (
2535 SELECT 'X'
2536 FROM MTL_SECONDARY_INVENTORIES MSI,
2537 MTL_SYSTEM_ITEMS ITM
2538 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2539 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2540 AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2541 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2542 AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2543 AND MSI.ASSET_INVENTORY = 2)
2544 AND EXISTS (
2545 SELECT 'X'
2546 FROM MTL_SECONDARY_INVENTORIES MSI,
2547 MTL_SYSTEM_ITEMS ITM
2548 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2549 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2550 AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2551 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2552 AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2553 AND MSI.ASSET_INVENTORY = 1);
2554
2555 l_count := l_count + SQL%ROWCOUNT;
2556
2557 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2558 SET LAST_UPDATE_DATE = SYSDATE,
2559 LAST_UPDATED_BY = p_userid,
2560 LAST_UPDATE_LOGIN = p_loginid,
2561 PROGRAM_UPDATE_DATE = SYSDATE,
2562 PROCESS_FLAG = 3,
2563 LOCK_FLAG = 2,
2564 ERROR_CODE = substrb(l_error_code,1,240),
2565 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2566 WHERE TRANSACTION_HEADER_ID = p_header_id
2567 AND PROCESS_FLAG = 1
2568 AND TRANSACTION_ACTION_ID = 3
2569 AND EXISTS (
2570 SELECT 'X'
2571 FROM MTL_SECONDARY_INVENTORIES MSI
2572 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2573 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2574 AND MSI.ASSET_INVENTORY = 2)
2575 AND EXISTS (
2576 SELECT 'X'
2577 FROM MTL_SECONDARY_INVENTORIES MSI
2578 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2579 AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2580 AND MSI.ASSET_INVENTORY = 1);
2581
2582 l_count := l_count + SQL%ROWCOUNT;
2583
2584 IF (l_debug = 1) THEN
2585 inv_log_util.trace('Validating subs ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2586 END IF;
2587 FND_MESSAGE.set_name('INV', 'INV_ERR_DETVAL');
2588 FND_MESSAGE.set_token('token', numhold);
2589
2590 ELSE
2591
2592 loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBTYPEXP');
2593
2594 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2595 SET LAST_UPDATE_DATE = SYSDATE,
2596 LAST_UPDATED_BY = p_userid,
2597 LAST_UPDATE_LOGIN = p_loginid,
2598 PROGRAM_UPDATE_DATE = SYSDATE,
2599 PROCESS_FLAG = 3,
2600 LOCK_FLAG = 2,
2601 ERROR_CODE = substrb(l_error_code,1,240),
2602 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2603 WHERE TRANSACTION_HEADER_ID = p_header_id
2604 AND PROCESS_FLAG = 1
2605 AND ((TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2606 AND EXISTS (
2607 SELECT 'X'
2608 FROM MTL_SECONDARY_INVENTORIES MSI
2609 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2610 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2611 AND MSI.QUANTITY_TRACKED = 2)
2612 )) ;
2613
2614 l_count := SQL%ROWCOUNT;
2615 IF (l_debug = 1) THEN
2616 inv_log_util.trace('Validating subs else ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2617 END IF;
2618 FND_MESSAGE.set_name('INV', 'INV_ERR_DETVAL');
2619 FND_MESSAGE.set_token('token', numhold);
2620
2621 END IF;
2622
2623
2624 /*--------------------------------------------------------------------+
2625 | Start validation of transaction source
2626 +--------------------------------------------------------------------*/
2627
2628 IF (l_validate_full) THEN --J-dev
2629
2630 loaderrmsg('INV_INT_SRCCODE','INV_INT_SALEXP');
2631
2632
2633 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2634 SET LAST_UPDATE_DATE = SYSDATE,
2635 LAST_UPDATED_BY = p_userid,
2636 LAST_UPDATE_LOGIN = p_loginid,
2637 PROGRAM_UPDATE_DATE = SYSDATE,
2638 PROCESS_FLAG = 3,
2639 LOCK_FLAG = 2,
2640 ERROR_CODE = substrb(l_error_code,1,240),
2641 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2642 WHERE TRANSACTION_HEADER_ID = p_header_id
2643 AND PROCESS_FLAG = 1
2644 AND TRANSACTION_SOURCE_TYPE_ID in (2,8)
2645 AND NOT EXISTS (
2646 SELECT NULL
2647 FROM MTL_SALES_ORDERS MSO
2648 WHERE MSO.SALES_ORDER_ID = MTI.TRANSACTION_SOURCE_ID
2649 AND NVL(START_DATE_ACTIVE, SYSDATE - 1) <= SYSDATE
2650 AND NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE
2651 AND ENABLED_FLAG = 'Y');
2652
2653 l_count := SQL%ROWCOUNT;
2654 loaderrmsg('INV_INT_SRCCODE','INV_INT_ACCTEXP');
2655
2656 /*Bug#5176266. Made changes to the below UPDATE statement
2657 to validate the Account effective date against transactions
2658 date( not sysdate)*/
2659 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2660 SET LAST_UPDATE_DATE = SYSDATE,
2661 LAST_UPDATED_BY = p_userid,
2662 LAST_UPDATE_LOGIN = p_loginid,
2663 PROGRAM_UPDATE_DATE = SYSDATE,
2664 PROCESS_FLAG = 3,
2665 LOCK_FLAG = 2,
2666 ERROR_CODE = substrb(l_error_code,1,240),
2667 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2668 WHERE TRANSACTION_HEADER_ID = p_header_id
2669 AND PROCESS_FLAG = 1
2670 AND TRANSACTION_SOURCE_TYPE_ID = 3
2671 AND NOT EXISTS (
2672 SELECT NULL
2673 FROM GL_CODE_COMBINATIONS GCC,
2674 ORG_ORGANIZATION_DEFINITIONS OOD
2675 WHERE GCC.CODE_COMBINATION_ID = MTI.TRANSACTION_SOURCE_ID
2676 AND GCC.CHART_OF_ACCOUNTS_ID = OOD.CHART_OF_ACCOUNTS_ID
2677 AND OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2678 AND GCC.ENABLED_FLAG = 'Y'
2679 AND NVL(GCC.START_DATE_ACTIVE, MTI.TRANSACTION_DATE - 1) <= MTI.TRANSACTION_DATE
2680 AND NVL(GCC.END_DATE_ACTIVE, MTI.TRANSACTION_DATE + 1) > MTI.TRANSACTION_DATE);
2681
2682 l_count := l_count + SQL%ROWCOUNT;
2683 loaderrmsg('INV_INT_SRCCODE','INV_INT_ALIASEXP');
2684
2685 /* Bug# 3249130/ 3249131, Port change of Bug# 3238160. Changing the DML statement that populates the
2686 error code in MTI when the Account alias is inactive. The query now checks for the
2687 EFFECTIVE_DATE and DISABLE_DATE rather than START_DATE_ACTIVE and END_DATE_ACTIVE*/
2688
2689 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2690 SET LAST_UPDATE_DATE = SYSDATE,
2691 LAST_UPDATED_BY = p_userid,
2692 LAST_UPDATE_LOGIN = p_loginid,
2693 PROGRAM_UPDATE_DATE = SYSDATE,
2694 PROCESS_FLAG = 3,
2695 LOCK_FLAG = 2,
2696 ERROR_CODE = substrb(l_error_code,1,240),
2697 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2698 WHERE TRANSACTION_HEADER_ID = p_header_id
2699 AND PROCESS_FLAG = 1
2700 AND TRANSACTION_SOURCE_TYPE_ID = INV_GLOBALS.G_SourceType_AccountAlias
2701 AND NOT EXISTS (
2702 SELECT NULL
2703 FROM MTL_GENERIC_DISPOSITIONS MGD
2704 WHERE MGD.DISPOSITION_ID = MTI.TRANSACTION_SOURCE_ID
2705 AND MGD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2706 AND MGD.ENABLED_FLAG = 'Y'
2707 AND NVL(MGD.EFFECTIVE_DATE, SYSDATE - 1) <= SYSDATE
2708 AND NVL(MGD.DISABLE_DATE, SYSDATE + 1) > SYSDATE );
2709 /* AND NVL(MGD.START_DATE_ACTIVE, SYSDATE - 1) <= SYSDATE
2710 AND NVL(MGD.END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE );*/
2711
2712
2713 l_count := l_count + SQL%ROWCOUNT;
2714 IF (l_debug = 1) THEN
2715 inv_log_util.trace('Validating transaction source ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2716 END IF;
2717
2718 END IF;--J-dev
2719
2720 /*----------------------------------------------------+
2721 | Validating transaction type
2722 +----------------------------------------------------*/
2723 loaderrmsg('INV_INT_TRXTYPCODE','INV_INT_TYPEXP');
2724
2725 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2726 SET LAST_UPDATE_DATE = SYSDATE,
2727 LAST_UPDATED_BY = p_userid,
2728 LAST_UPDATE_LOGIN = p_loginid,
2729 PROGRAM_UPDATE_DATE = SYSDATE,
2730 PROCESS_FLAG = 3,
2731 LOCK_FLAG = 2,
2732 ERROR_CODE = substrb(l_error_code,1,240),
2733 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2734 WHERE TRANSACTION_HEADER_ID = p_header_id
2735 AND PROCESS_FLAG = 1
2736 AND NOT EXISTS (
2737 SELECT NULL
2738 FROM MTL_TRANSACTION_TYPES MTT
2739 WHERE MTT.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
2740 AND nvl(MTT.DISABLE_DATE,SYSDATE+1) > SYSDATE );
2741
2742 l_count := SQL%ROWCOUNT;
2743 IF (l_debug = 1) THEN
2744 inv_log_util.trace('Validating transaction type ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2745 END IF;
2746
2747
2748 /*-------------------------------------------------------+
2749 | Validating transaction actions
2750 +-------------------------------------------------------*/
2751 loaderrmsg('INV_INT_TRXACTCODE','INV_INT_TRXACTEXP');
2752
2753 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2754 SET LAST_UPDATE_DATE = SYSDATE,
2755 LAST_UPDATED_BY = p_userid,
2756 LAST_UPDATE_LOGIN = p_loginid,
2757 PROGRAM_UPDATE_DATE = SYSDATE,
2758 PROCESS_FLAG = 3,
2759 LOCK_FLAG = 2,
2760 ERROR_CODE = substrb(l_error_code,1,240),
2761 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2762 WHERE TRANSACTION_HEADER_ID = p_header_id
2763 AND PROCESS_FLAG = 1
2764 AND (TRANSACTION_ACTION_ID in (4,8,12,28,29)
2765 OR (TRANSACTION_ACTION_ID = 30 AND UPPER(NVL(FLOW_SCHEDULE,'N')) <> 'Y')); /* CFM Scrap Transaction */
2766
2767 l_count := SQL%ROWCOUNT;
2768 IF (l_debug = 1) THEN
2769 inv_log_util.trace('Validating transaction action ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2770 END IF;
2771
2772
2773 /*-------------------------------------------------------+
2774 | Start validation of organization
2775 +-------------------------------------------------------*/
2776
2777 loaderrmsg('INV_INT_ORGCODE','INV_INT_ORGEXP');
2778
2779
2780 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2781 SET LAST_UPDATE_DATE = SYSDATE,
2782 LAST_UPDATED_BY = p_userid,
2783 LAST_UPDATE_LOGIN = p_loginid,
2784 PROGRAM_UPDATE_DATE = SYSDATE,
2785 PROCESS_FLAG = 3,
2786 LOCK_FLAG = 2,
2787 ERROR_CODE = substrb(l_error_code,1,240),
2788 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2789 WHERE TRANSACTION_HEADER_ID = p_header_id
2790 AND PROCESS_FLAG = 1
2791 AND NOT EXISTS (
2792 SELECT NULL
2793 FROM ORG_ORGANIZATION_DEFINITIONS OOD
2794 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2795 AND NVL(OOD.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
2796
2797 l_count := SQL%ROWCOUNT;
2798 IF (l_debug = 1) THEN
2799 inv_log_util.trace('Validating ORG ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2800 END IF;
2801
2802
2803 /*-------------------------------------------------------------+
2804 | Start validating the transfer organization
2805 +-------------------------------------------------------------*/
2806
2807 IF (l_validate_full) THEN --J-dev
2808
2809 loaderrmsg('INV_INT_XORGCODE','INV_INT_XORGEXP');
2810
2811
2812 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2813 SET LAST_UPDATE_DATE = SYSDATE,
2814 LAST_UPDATED_BY = p_userid,
2815 LAST_UPDATE_LOGIN = p_loginid,
2816 PROGRAM_UPDATE_DATE = SYSDATE,
2817 PROCESS_FLAG = 3,
2818 LOCK_FLAG = 2,
2819 ERROR_CODE = substrb(l_error_code,1,240),
2820 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2821 WHERE TRANSACTION_HEADER_ID = p_header_id
2822 AND TRANSACTION_ACTION_ID in (3,21)
2823 AND PROCESS_FLAG = 1
2824 AND (NOT EXISTS (
2825 SELECT NULL
2826 FROM ORG_ORGANIZATION_DEFINITIONS OOD
2827 WHERE OOD.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2828 AND NVL(OOD.DISABLE_DATE, SYSDATE + 1) > SYSDATE)
2829 OR NOT EXISTS (
2830 SELECT NULL
2831 FROM MTL_INTERORG_PARAMETERS MIP
2832 WHERE MIP.TO_ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2833 AND MIP.FROM_ORGANIZATION_ID = MTI.ORGANIZATION_ID));
2834
2835 l_count := SQL%ROWCOUNT;
2836 IF (l_debug = 1) THEN
2837 inv_log_util.trace('Validating xfer ORG ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2838 END IF;
2839
2840 END IF;--J-dev
2841
2842 /*--------------------------------------------------+
2843 | Validating item revisions
2844 +--------------------------------------------------*/
2845 loaderrmsg('INV_INT_REVCODE','INV_INT_REVEXP');
2846
2847 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2848 SET LAST_UPDATE_DATE = SYSDATE,
2849 LAST_UPDATED_BY = p_userid,
2850 LAST_UPDATE_LOGIN = p_loginid,
2851 PROGRAM_UPDATE_DATE = SYSDATE,
2852 PROCESS_FLAG = 3,
2853 LOCK_FLAG = 2,
2854 ERROR_CODE = substrb(l_error_code,1,240),
2855 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2856 WHERE TRANSACTION_HEADER_ID = p_header_id
2857 AND PROCESS_FLAG = 1
2858 AND TRANSACTION_ACTION_ID NOT IN (24,33,34)
2859 AND NOT EXISTS (
2860 SELECT NULL
2861 FROM MTL_ITEM_REVISIONS MIR,
2862 MTL_SYSTEM_ITEMS MSI
2863 WHERE MSI.REVISION_QTY_CONTROL_CODE = 2
2864 AND MIR.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2865 AND MIR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2866 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2867 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2868 AND MIR.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2869 AND MIR.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2870 AND MIR.REVISION = MTI.REVISION
2871 UNION
2872 SELECT NULL
2873 FROM MTL_SYSTEM_ITEMS ITM
2874 WHERE ITM.REVISION_QTY_CONTROL_CODE = 1
2875 AND MTI.REVISION IS NULL
2876 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2877 AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID);
2878
2879
2880 l_count := SQL%ROWCOUNT;
2881
2882 IF (l_validate_full) THEN --J-dev
2883
2884 loaderrmsg('INV_INT_REVCODE','INV_INT_REVXFREXP');
2885
2886
2887 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2888 SET LAST_UPDATE_DATE = SYSDATE,
2889 LAST_UPDATED_BY = p_userid,
2890 LAST_UPDATE_LOGIN = p_loginid,
2891 PROGRAM_UPDATE_DATE = SYSDATE,
2892 PROCESS_FLAG = 3,
2893 LOCK_FLAG = 2,
2894 ERROR_CODE = substrb(l_error_code,1,240),
2895 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2896 WHERE TRANSACTION_HEADER_ID = p_header_id
2897 AND PROCESS_FLAG = 1
2898 AND TRANSACTION_ACTION_ID = 3
2899 AND NOT EXISTS (
2900 SELECT NULL
2901 FROM MTL_ITEM_REVISIONS MIR,
2902 MTL_SYSTEM_ITEMS MSI
2903 WHERE MSI.REVISION_QTY_CONTROL_CODE = 2
2904 AND MIR.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2905 AND MIR.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2906 AND MIR.REVISION = MTI.REVISION
2907 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2908 AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2909 AND MIR.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2910 AND MIR.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2911 UNION
2912 SELECT NULL
2913 FROM MTL_SYSTEM_ITEMS ITM
2914 WHERE ITM.REVISION_QTY_CONTROL_CODE = 1
2915 -- AND MTI.REVISION IS NULL --Bug#3285134. No REVISION validation for Revision to Non-Revision Org Xfer
2916 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2917 AND ITM.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION);
2918
2919 l_count := l_count + SQL%ROWCOUNT;
2920
2921 END IF;--J-dev
2922
2923 IF (l_debug = 1) THEN
2924 inv_log_util.trace('Validating revisions ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2925 END IF;
2926
2927
2928 /*------------------------------------------------------+
2929 | Validating transaction reasons
2930 +------------------------------------------------------*/
2931 loaderrmsg('INV_INT_REACODE','INV_INT_REAEXP');
2932
2933 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2934 SET LAST_UPDATE_DATE = SYSDATE,
2935 LAST_UPDATED_BY = p_userid,
2936 LAST_UPDATE_LOGIN = p_loginid,
2937 PROGRAM_UPDATE_DATE = SYSDATE,
2938 PROCESS_FLAG = 3,
2939 LOCK_FLAG = 2,
2940 ERROR_CODE = substrb(l_error_code,1,240),
2941 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2942 WHERE TRANSACTION_HEADER_ID = p_header_id
2943 AND PROCESS_FLAG = 1
2944 AND REASON_ID IS NOT NULL
2945 AND NOT EXISTS (
2946 SELECT NULL
2947 FROM MTL_TRANSACTION_REASONS MTR
2948 WHERE MTR.REASON_ID = MTI.REASON_ID
2949 AND NVL(MTR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
2950
2951 l_count := SQL%ROWCOUNT;
2952 IF (l_debug = 1) THEN
2953 inv_log_util.trace('Validating reasons ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2954 END IF;
2955
2956 --Jalaj Srivastava Bug 4969885
2957 --Validate the transaction uom befoire validating quantities
2958 /*---------------------------------------------------------+
2959 | Start validating the transaction uom
2960 +---------------------------------------------------------*/
2961
2962 loaderrmsg('INV_INT_UOMCODE','INV_INT_UOMEXP');
2963
2964
2965 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2966 SET LAST_UPDATE_DATE = SYSDATE,
2967 LAST_UPDATED_BY = p_userid,
2968 LAST_UPDATE_LOGIN = p_loginid,
2969 PROGRAM_UPDATE_DATE = SYSDATE,
2970 PROCESS_FLAG = 3,
2971 LOCK_FLAG = 2,
2972 ERROR_CODE = substrb(l_error_code,1,240),
2973 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2974 WHERE TRANSACTION_HEADER_ID = p_header_id
2975 AND INVENTORY_ITEM_ID IS NOT NULL
2976 AND PROCESS_FLAG = 1
2977 AND NOT EXISTS (
2978 SELECT NULL
2979 FROM MTL_ITEM_UOMS_VIEW MIUV
2980 WHERE MIUV.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2981 AND MIUV.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2982 AND MIUV.UOM_CODE = MTI.TRANSACTION_UOM);
2983
2984 l_count := SQL%ROWCOUNT;
2985 IF (l_debug = 1) THEN
2986 inv_log_util.trace('Validating transaction uom ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2987 END IF;
2988
2989 /*------------------------------------------------------+
2990 | Validating transaction quantity
2991 +------------------------------------------------------*/
2992
2993 loaderrmsg('INV_INT_QTYCODE','INV_INT_QTYSGNEXP');
2994
2995 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2996 SET LAST_UPDATE_DATE = SYSDATE,
2997 LAST_UPDATED_BY = p_userid,
2998 LAST_UPDATE_LOGIN = p_loginid,
2999 PROGRAM_UPDATE_DATE = SYSDATE,
3000 PROCESS_FLAG = 3,
3001 LOCK_FLAG = 2,
3002 ERROR_CODE = substrb(l_error_code,1,240),
3003 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3004 WHERE TRANSACTION_HEADER_ID = p_header_id
3005 AND PROCESS_FLAG = 1
3006 AND TRANSACTION_QUANTITY > 0
3007 AND TRANSACTION_ACTION_ID IN (1,21,32,34);
3008
3009 l_count := SQL%ROWCOUNT;
3010
3011 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3012 SET LAST_UPDATE_DATE = SYSDATE,
3013 LAST_UPDATED_BY = p_userid,
3014 LAST_UPDATE_LOGIN = p_loginid,
3015 PROGRAM_UPDATE_DATE = SYSDATE,
3016 PROCESS_FLAG = 3,
3017 LOCK_FLAG = 2,
3018 ERROR_CODE = substrb(l_error_code,1,240),
3019 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3020 WHERE TRANSACTION_HEADER_ID = p_header_id
3021 AND PROCESS_FLAG = 1
3022 AND TRANSACTION_QUANTITY < 0
3023 AND TRANSACTION_ACTION_ID IN (12,27,31,33);
3024
3025 l_count := l_count + SQL%ROWCOUNT;
3026 IF (l_debug = 1) THEN
3027 inv_log_util.trace('Validating transaction quantity ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3028 END IF;
3029
3030 IF (l_debug = 1) THEN
3031 inv_log_util.trace('start of OPM validations within (validate_group)' , 'INV_TXN_MANAGER_GRP', 9);
3032 END IF;
3033
3034 OPEN AA2 ;
3035 LOOP
3036 FETCH AA2 INTO
3037 l_rowid
3038 ,l_transaction_type_id
3039 ,l_organization_id
3040 ,l_inventory_item_id
3041 ,l_revision
3042 ,l_subinventory_code
3043 ,l_locator_id
3044 ,l_transaction_quantity
3045 ,l_transaction_uom_code
3046 ,l_secondary_quantity
3047 ,l_secondary_uom_code ;
3048
3049 OPEN get_item_info(l_organization_id,l_inventory_item_id) ;
3050 FETCH get_item_info INTO l_lot_control_code, l_tracking_quantity_ind, l_item_secondary_uom_code;
3051 --item is already validated at this point no need to check for no_data_found
3052 CLOSE get_item_info;
3053
3054 /* bug 4178299, bypass dual qty validations for none-lot ctl items
3055 * since qty will be validated at lot level per line, at header level
3056 * we only need to check that transaction qty equals the sum of the lines total */
3057 --{
3058 IF (l_tracking_quantity_ind = 'PS') THEN
3059 --{
3060 IF (l_lot_control_code = 1 ) THEN
3061
3062 IF (l_debug = 1) THEN
3063 inv_log_util.trace('calling validate_quantities IN (validate_group)' , 'INV_TXN_MANAGER_GRP', 9);
3064 END IF;
3065
3066 /*------------------------------------------------------+
3067 | Validating secondary quantity, only
3068 | If the item is tracked in both primary AND secondary
3069 |
3070 +------------------------------------------------------*/
3071 l_qty_check := validate_quantities(
3072 p_rowid => l_rowid
3073 , p_lot_rowid => NULL
3074 , p_transaction_type_id => l_transaction_type_id
3075 , p_organization_id => l_organization_id
3076 , p_inventory_item_id => l_inventory_item_id
3077 , p_revision => l_revision
3078 , p_subinventory_code => l_subinventory_code
3079 , p_locator_id => l_locator_id
3080 , p_lot_number => NULL
3081 , p_transaction_quantity => l_transaction_quantity
3082 , p_transaction_uom => l_transaction_uom_code
3083 , p_secondary_quantity => l_secondary_quantity
3084 , p_secondary_uom_code => l_secondary_uom_code
3085 );
3086 --{
3087 IF (l_qty_check) THEN
3088 IF (l_debug = 1) THEN
3089 inv_log_util.trace('validate_quantities IN (validate_group) - PASSED ' , 'INV_TXN_MANAGER_GRP', 9);
3090 END IF;
3091
3092 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3093 SET TRANSACTION_QUANTITY = l_transaction_quantity,
3094 SECONDARY_TRANSACTION_QUANTITY = l_secondary_quantity,
3095 SECONDARY_UOM_CODE = l_secondary_uom_code
3096 WHERE ROWID = l_rowid;
3097
3098 ELSE
3099 -- validation failed
3100 IF (l_debug = 1) THEN
3101 inv_log_util.trace('validate_quantities IN (validate_group) - FAIL ' || l_msg_data , 'INV_TXN_MANAGER_GRP', 9);
3102 inv_log_util.trace('validate_group: TRANSACTION_QUANTITY ' || l_transaction_quantity , 'INV_TXN_MANAGER_GRP', 9);
3103 inv_log_util.trace('validate_group: SECONDARY_TRANSACTION_QUANTITY ' || l_secondary_quantity || ' uom2 '|| l_secondary_uom_code ,
3104 'INV_TXN_MANAGER_GRP', 9);
3105 END IF;
3106 END IF;--}
3107 ELSIF (l_lot_control_code = 2 ) THEN
3108 IF (l_debug = 1) THEN
3109 inv_log_util.trace('validate_group: for lot controlled items secondary uom='||l_secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
3110 END IF;
3111 IF (l_secondary_uom_code <> l_item_secondary_uom_code) THEN
3112 IF (l_debug = 1) THEN
3113 inv_log_util.trace('validate_group: sec uom in mti is diff than item sec uom', 'INV_TXN_MANAGER_GRP', 9);
3114 END IF;
3115 loaderrmsg('INV_INCORRECT_SECONDARY_UOM','INV_INCORRECT_SECONDARY_UOM');
3116 errupdate(l_rowid, NULL);
3117 END IF;
3118 --Set the default UOM2 if missing
3119 IF (l_secondary_uom_code IS NULL) THEN
3120 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3121 SET SECONDARY_UOM_CODE = l_item_secondary_uom_code
3122 WHERE ROWID = l_rowid;
3123 END IF;
3124 END IF;--} -- Lot ctl check
3125 ELSE
3126 --tracking is primary. no need for sec uom/qty
3127 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3128 SET SECONDARY_TRANSACTION_QUANTITY = NULL,
3129 SECONDARY_UOM_CODE = NULL
3130 WHERE ROWID = l_rowid;
3131 END IF;--}
3132
3133 EXIT WHEN AA2%NOTFOUND;
3134 END LOOP;
3135 CLOSE AA2;
3136
3137 -- INVCONV end fabdi
3138
3139
3140 /*------------------------------------------------------+
3141 | Validating Overcompletion transaction quantity
3142 +------------------------------------------------------*/
3143
3144 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3145 FND_MESSAGE.set_token('ENTITY1','overcompletion_txn_qty');
3146 FND_MESSAGE.set_token('ENTITY2','zero');
3147
3148 l_error_exp := FND_MESSAGE.get;
3149
3150 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3151 l_error_code := FND_MESSAGE.get;
3152
3153
3154 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3155 SET LAST_UPDATE_DATE = SYSDATE,
3156 LAST_UPDATED_BY = p_userid,
3157 LAST_UPDATE_LOGIN = p_loginid,
3158 PROGRAM_UPDATE_DATE = SYSDATE,
3159 PROCESS_FLAG = 3,
3160 LOCK_FLAG = 2,
3161 ERROR_CODE = substrb(l_error_code,1,240),
3162 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3163 WHERE TRANSACTION_HEADER_ID = p_header_id
3164 AND PROCESS_FLAG = 1
3165 AND NVL(OVERCOMPLETION_TRANSACTION_QTY,1) <= 0;
3166
3167 l_count := SQL%ROWCOUNT;
3168
3169 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3170 FND_MESSAGE.set_token('ENTITY1','transaction quantity-cap');
3171 FND_MESSAGE.set_token('ENTITY2','overcompletion_txn_qty');
3172
3173 l_error_exp := FND_MESSAGE.get;
3174
3175 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3176 l_error_code := FND_MESSAGE.get;
3177
3178
3179
3180 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3181 SET LAST_UPDATE_DATE = SYSDATE,
3182 LAST_UPDATED_BY = p_userid,
3183 LAST_UPDATE_LOGIN = p_loginid,
3184 PROGRAM_UPDATE_DATE = SYSDATE,
3185 PROCESS_FLAG = 3,
3186 LOCK_FLAG = 2,
3187 ERROR_CODE = substrb(l_error_code,1,240),
3188 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3189 WHERE TRANSACTION_HEADER_ID = p_header_id
3190 AND PROCESS_FLAG = 1
3191 AND OVERCOMPLETION_TRANSACTION_QTY IS NOT NULL
3192 AND OVERCOMPLETION_TRANSACTION_QTY > TRANSACTION_QUANTITY;
3193
3194 l_count := l_count + SQL%ROWCOUNT;
3195 IF (l_debug = 1) THEN
3196 inv_log_util.trace('Validating overcompletion quantity ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3197 END IF;
3198
3199
3200 /*------------------------------------------------------+
3201 | Validate distribution account
3202 +------------------------------------------------------*/
3203
3204 IF (l_validate_full) THEN --J-dev
3205
3206 loaderrmsg('INV_INT_DISTCODE','INV_INT_DISTEXP');
3207
3208 /*Bug#5176266. Made changes to the below UPDATE statement
3209 to validate the Account effective date against transactions
3210 date( not sysdate)*/
3211
3212 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3213 SET LAST_UPDATE_DATE = SYSDATE,
3214 LAST_UPDATED_BY = p_userid,
3215 LAST_UPDATE_LOGIN = p_loginid,
3216 PROGRAM_UPDATE_DATE = SYSDATE,
3217 PROCESS_FLAG = 3,
3218 LOCK_FLAG = 2,
3219 ERROR_CODE = substrb(l_error_code,1,240),
3220 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3221 WHERE TRANSACTION_HEADER_ID = p_header_id
3222 AND PROCESS_FLAG = 1
3223 AND DISTRIBUTION_ACCOUNT_ID IS NOT NULL
3224 AND NOT EXISTS (
3225 SELECT NULL
3226 FROM GL_CODE_COMBINATIONS GCC
3227 WHERE GCC.CODE_COMBINATION_ID = MTI.DISTRIBUTION_ACCOUNT_ID
3228 AND GCC.CHART_OF_ACCOUNTS_ID
3229 = (SELECT CHART_OF_ACCOUNTS_ID
3230 FROM ORG_ORGANIZATION_DEFINITIONS OOD
3231 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
3232 AND GCC.ENABLED_FLAG = 'Y'
3233 AND NVL(GCC.START_DATE_ACTIVE, MTI.TRANSACTION_DATE - 1) <= MTI.TRANSACTION_DATE
3234 AND NVL(GCC.END_DATE_ACTIVE, MTI.TRANSACTION_DATE + 1) > MTI.TRANSACTION_DATE);
3235
3236 l_count := SQL%ROWCOUNT;
3237
3238
3239 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3240 SET LAST_UPDATE_DATE = SYSDATE,
3241 LAST_UPDATED_BY = p_userid,
3242 LAST_UPDATE_LOGIN = p_loginid,
3243 PROGRAM_UPDATE_DATE = SYSDATE,
3244 PROCESS_FLAG = 3,
3245 LOCK_FLAG = 2,
3246 ERROR_CODE = substrb(l_error_code,1,240),
3247 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3248 WHERE TRANSACTION_HEADER_ID = p_header_id
3249 AND PROCESS_FLAG = 1
3250 AND DISTRIBUTION_ACCOUNT_ID IS NULL
3251 AND (TRANSACTION_SOURCE_TYPE_ID = INV_Globals.G_SourceType_Inventory OR
3252 TRANSACTION_SOURCE_TYPE_ID >=100)
3253 AND NVL(OWNING_ORGANIZATION_ID,organization_id) = organization_id
3254 AND NVL(OWNING_TP_TYPE,2) = 2 -- if it is null we are considering it as normal item..
3255 -- Added the above two lines for the bug # 5896859
3256 AND (TRANSACTION_ACTION_ID IN (1,27)
3257 AND EXISTS (
3258 SELECT NULL
3259 FROM MTL_SYSTEM_ITEMS MSI,
3260 mtl_secondary_inventories MSUB
3261 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3262 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3263 AND MSI.INVENTORY_ASSET_FLAG = 'Y'
3264 AND MSUB.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
3265 AND MSUB.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3266 AND MSUB.ASSET_INVENTORY = 1));
3267
3268
3269 l_count := l_count + SQL%ROWCOUNT;
3270 IF (l_debug = 1) THEN
3271 inv_log_util.trace('Validating distribution account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3272 END IF;
3273
3274 END IF;--J-dev
3275
3276
3277
3278 /*-----------------------------------------------------------+
3279 | Validate freight and freight account
3280 +-----------------------------------------------------------*/
3281
3282
3283 IF (l_validate_full) THEN --J-dev
3284
3285 loaderrmsg('INV_INT_FRTCODE','INV_INT_FRTEXP');
3286
3287
3288 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3289 SET LAST_UPDATE_DATE = SYSDATE,
3290 LAST_UPDATED_BY = p_userid,
3291 LAST_UPDATE_LOGIN = p_loginid,
3292 PROGRAM_UPDATE_DATE = SYSDATE,
3293 PROCESS_FLAG = 3,
3294 LOCK_FLAG = 2,
3295 ERROR_CODE = substrb(l_error_code,1,240),
3296 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3297 WHERE TRANSACTION_HEADER_ID = p_header_id
3298 AND TRANSACTION_ACTION_ID in (3,21)
3299 AND FREIGHT_CODE IS NOT NULL
3300 AND PROCESS_FLAG = 1
3301 AND NOT EXISTS (
3302 SELECT NULL
3303 FROM ORG_FREIGHT FR
3304 WHERE FR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3305 AND FR.FREIGHT_CODE = MTI.FREIGHT_CODE
3306 AND NVL(FR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
3307
3308 l_count := SQL%ROWCOUNT;
3309 loaderrmsg('INV_INT_FRTACTCODE','INV_INT_FRTACTEXP');
3310
3311
3312 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3313 SET LAST_UPDATE_DATE = SYSDATE,
3314 LAST_UPDATED_BY = p_userid,
3315 LAST_UPDATE_LOGIN = p_loginid,
3316 PROGRAM_UPDATE_DATE = SYSDATE,
3317 PROCESS_FLAG = 3,
3318 LOCK_FLAG = 2,
3319 ERROR_CODE = substrb(l_error_code,1,240),
3320 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3321 WHERE TRANSACTION_HEADER_ID = p_header_id
3322 AND TRANSACTION_ACTION_ID in (3,21)
3323 AND TRANSPORTATION_ACCOUNT IS NOT NULL
3324 AND PROCESS_FLAG = 1
3325 AND NOT EXISTS (
3326 SELECT NULL
3327 FROM ORG_FREIGHT FR
3328 WHERE FR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3329 AND FR.FREIGHT_CODE = MTI.FREIGHT_CODE
3330 AND FR.DISTRIBUTION_Account = MTI.TRANSPORTATION_ACCOUNT
3331 AND NVL(FR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
3332
3333 l_count := l_count + SQL%ROWCOUNT;
3334 IF (l_debug = 1) THEN
3335 inv_log_util.trace('Validating freight account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3336 END IF;
3337 END IF; --J-dev
3338
3339 /*--------------------------------------------------------+
3340 | Start validation of wip_entity for wip transactions for
3341 | non-CFMs.
3342 |+--------------------------------------------------------*/
3343
3344 --J-dev This should not be done for WIP MTI records in J.
3345 -- WIP will do this validation.
3346 IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3347 loaderrmsg('INV_INT_SRCCODE','INV_INT_SRCWIPEXP');
3348
3349
3350 IF srctypeid = 5 THEN
3351
3352 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3353 SET LAST_UPDATE_DATE = SYSDATE,
3354 LAST_UPDATED_BY = p_userid,
3355 LAST_UPDATE_LOGIN = p_loginid,
3356 PROGRAM_UPDATE_DATE = SYSDATE,
3357 PROCESS_FLAG = 3,
3358 LOCK_FLAG = 2,
3359 ERROR_CODE = substrb(l_error_code,1,240),
3360 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3361 WHERE TRANSACTION_HEADER_ID = p_header_id
3362 AND PROCESS_FLAG = 1
3363 AND TRANSACTION_SOURCE_TYPE_ID = 5
3364 AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'N'
3365 AND NOT EXISTS (
3366 SELECT NULL
3367 FROM WIP_ENTITIES WEN
3368 WHERE WEN.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3369 AND WEN.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID);
3370
3371 l_count := SQL%ROWCOUNT;
3372 IF (l_debug = 1) THEN
3373 inv_log_util.trace('Validating wip entity non-CFM ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3374 END IF;
3375 END IF;
3376 END IF;--J-dev
3377
3378
3379 /*------------------------------------------------------+
3380 | Start validation of wip_entity for wip transactions
3381 | that are CFMs
3382 +------------------------------------------------------*/
3383
3384 --J-dev
3385 --This validation should not be done for WIP MTI in J.
3386 --WIP will do this validation in J.
3387
3388 IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3389 loaderrmsg('INV_INT_SRCCODE','INV_INT_SRCCFMEXP');
3390 IF srctypeid = 5 THEN
3391 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3392 SET LAST_UPDATE_DATE = SYSDATE,
3393 LAST_UPDATED_BY = p_userid,
3394 LAST_UPDATE_LOGIN = p_loginid,
3395 PROGRAM_UPDATE_DATE = SYSDATE,
3396 PROCESS_FLAG = 3,
3397 LOCK_FLAG = 2,
3398 ERROR_CODE = substrb(l_error_code,1,240),
3399 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3400 WHERE TRANSACTION_HEADER_ID = p_header_id
3401 AND PROCESS_FLAG = 1
3402 AND TRANSACTION_SOURCE_TYPE_ID = 5
3403 AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'Y'
3404 AND NOT EXISTS (
3405 SELECT NULL
3406 FROM WIP_ENTITIES WEN
3407 WHERE WEN.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3408 AND WEN.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID);
3409
3410 l_count := SQL%ROWCOUNT;
3411 IF (l_debug = 1) THEN
3412 inv_log_util.trace('Validating wip entity CFM ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3413 END IF;
3414 END IF;
3415 END IF;--J-dev
3416
3417 /*---------------------------------------------------------------+
3418 | Validating Projects Contracts
3419 |
3420 +----------------------------------------------------------------*/
3421 /* load message to detect source project contracts error*/
3422
3423 IF (l_validate_full) THEN --J-dev
3424
3425 loaderrmsg('INV_PROJCON_ERR','INV_PROJCON_ERR');
3426
3427 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3428 SET LAST_UPDATE_DATE = SYSDATE,
3429 LAST_UPDATED_BY = p_userid,
3430 LAST_UPDATE_LOGIN = p_loginid,
3431 PROCESS_FLAG = 3,
3432 ERROR_CODE = substrb(l_error_code,1,240),
3433 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3434 WHERE TRANSACTION_HEADER_ID = p_header_id
3435 AND TRANSACTION_SOURCE_TYPE_ID = INV_GLOBALS.G_SourceType_PrjContracts
3436 AND NOT EXISTS (
3437 SELECT NULL
3438 FROM OKE_K_HEADERS_V OKHV
3439 WHERE MTI.TRANSACTION_SOURCE_ID = OKHV.K_HEADER_ID);
3440
3441 l_count := SQL%ROWCOUNT;
3442 /*-----------------------------------------------------------+
3443 | Start validating source_project_id, source_task_id,
3444 | expenditure_type and expenditure_org_id for miscllaneous
3445 | trxs that are project related.
3446 +-----------------------------------------------------------*/
3447
3448 -- Bug #2505534 Moved validation of source_project_id inside validate_line()
3449
3450 /* validate source task id */
3451 loaderrmsg('INV_TASK_ERR','INV_TASK_ERR');
3452
3453
3454 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3455 SET LAST_UPDATE_DATE = SYSDATE,
3456 LAST_UPDATED_BY = p_userid,
3457 LAST_UPDATE_LOGIN = p_loginid,
3458 PROGRAM_UPDATE_DATE = SYSDATE,
3459 PROCESS_FLAG = 3,
3460 LOCK_FLAG = 2,
3461 ERROR_CODE = substrb(l_error_code,1,240),
3462 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3463 WHERE TRANSACTION_HEADER_ID = p_header_id
3464 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3465 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3466 AND TRANSACTION_ACTION_ID IN (1, 27 )
3467 AND PROCESS_FLAG = 1
3468 AND EXISTS (
3469 SELECT NULL
3470 FROM MTL_TRANSACTION_TYPES MTTY
3471 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3472 AND MTTY.TYPE_CLASS = 1 )
3473 AND NOT EXISTS (
3474 SELECT NULL
3475 FROM PA_TASKS_LOWEST_V TSK
3476 WHERE TSK.PROJECT_ID = MTI.SOURCE_PROJECT_ID AND
3477 TSK.TASK_ID = MTI.SOURCE_TASK_ID );
3478
3479
3480 l_count := l_count + SQL%ROWCOUNT;
3481
3482 /* validate expenditure type */
3483 /* get value of profile INV:Miscllaneous Project transaction to see
3484 if the expenditure type field is required and has a value or
3485 that it does not have a user entered value
3486 INV: Project Miscellaneous Transaction Expenditure Type
3487 INV_PROJ_MISC_TXN_EXP_TYPE
3488 user_entered = 2 (user must provide valid exp type)
3489 system derived = 1 (user must NOT provide any value for exp type)
3490 */
3491
3492 SELECT FND_PROFILE.VALUE('INV_PROJ_MISC_TXN_EXP_TYPE')
3493 INTO l_profile
3494 FROM dual;
3495
3496 IF SQL%FOUND THEN
3497 if l_profile = '2' THEN
3498 exp_type_required := 2 ;
3499 else
3500 exp_type_required := 1 ;
3501 end if;
3502 ELSE
3503 exp_type_required := 1;
3504 END IF;
3505
3506 loaderrmsg('INV_ETYPE_ERR','INV_ETYPE_ERR');
3507 IF exp_type_required = 2 THEN
3508
3509 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3510 SET LAST_UPDATE_DATE = SYSDATE,
3511 LAST_UPDATED_BY = p_userid,
3512 LAST_UPDATE_LOGIN = p_loginid,
3513 PROGRAM_UPDATE_DATE = SYSDATE,
3514 PROCESS_FLAG = 3,
3515 LOCK_FLAG = 2,
3516 ERROR_CODE = substrb(l_error_code,1,240),
3517 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3518 WHERE TRANSACTION_HEADER_ID = p_header_id
3519 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3520 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3521 AND TRANSACTION_ACTION_ID IN (1, 27 )
3522 AND PROCESS_FLAG = 1
3523 AND EXISTS (
3524 SELECT NULL
3525 FROM MTL_TRANSACTION_TYPES MTTY
3526 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3527 AND MTTY.TYPE_CLASS = 1 )
3528 AND NOT EXISTS (
3529 SELECT NULL
3530 FROM CST_PROJ_EXP_TYPES_VAL_V CET
3531 WHERE CET.EXPENDITURE_TYPE = MTI.EXPENDITURE_TYPE
3532 AND CET.COST_ELEMENT_ID = 1
3533 AND TRUNC(MTI.TRANSACTION_DATE) >= CET.SYS_LINK_START_DATE
3534 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(SYS_LINK_END_DATE,
3535 MTI.TRANSACTION_DATE + 1)
3536 AND TRUNC(MTI.TRANSACTION_DATE) >= CET.EXP_TYPE_START_DATE
3537 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(EXP_TYPE_END_DATE,
3538 MTI.TRANSACTION_DATE+1)) ;
3539
3540 l_count := l_count + SQL%ROWCOUNT;
3541
3542 ELSE
3543 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3544 SET LAST_UPDATE_DATE = SYSDATE,
3545 LAST_UPDATED_BY = p_userid,
3546 LAST_UPDATE_LOGIN = p_loginid,
3547 PROGRAM_UPDATE_DATE = SYSDATE,
3548 PROCESS_FLAG = 3,
3549 LOCK_FLAG = 2,
3550 ERROR_CODE = substrb(l_error_code,1,240),
3551 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3552 WHERE TRANSACTION_HEADER_ID = p_header_id
3553 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3554 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3555 AND TRANSACTION_ACTION_ID IN (1, 27 )
3556 AND PROCESS_FLAG = 1
3557 AND EXISTS (
3558 SELECT NULL
3559 FROM MTL_TRANSACTION_TYPES MTTY
3560 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3561 AND MTTY.TYPE_CLASS = 1 )
3562 AND MTI.EXPENDITURE_TYPE IS NOT NULL ;
3563
3564 l_count := l_count + SQL%ROWCOUNT;
3565
3566 END IF;
3567
3568 /* validate expenditure org id */
3569 --Bug #2505534 moved validation code inside validate_line()
3570 /*+--------------------------------------------------------------+
3571 | Now validate cost group ids, these must exist and must be |
3572 | enabled in terms of date |
3573 +--------------------------------------------------------------+*/
3574 loaderrmsg('INV_INT_CSTGRP','INV_INT_CSTEXP');
3575
3576 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3577 SET LAST_UPDATE_DATE = SYSDATE,
3578 LAST_UPDATED_BY = p_userid,
3579 LAST_UPDATE_LOGIN = p_loginid,
3580 PROGRAM_UPDATE_DATE = SYSDATE,
3581 PROCESS_FLAG = 3,
3582 LOCK_FLAG = 2,
3583 ERROR_CODE = substrb(l_error_code,1,240),
3584 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3585 WHERE TRANSACTION_HEADER_ID = p_header_id
3586 AND PROCESS_FLAG = 1
3587 --AND TRANSACTION_ACTION_ID = 24
3588 --AND TRANSACTION_SOURCE_TYPE_ID IN (13,15)
3589 AND COST_GROUP_ID IS NOT NULL
3590 AND NOT EXISTS (
3591 SELECT NULL
3592 FROM CST_COST_GROUPS CCG
3593 WHERE CCG.COST_GROUP_ID = MTI.COST_GROUP_ID
3594 AND NVL(CCG.ORGANIZATION_ID, MTI.ORGANIZATION_ID)
3595 =MTI.ORGANIZATION_ID
3596 AND TRUNC(NVL(CCG.DISABLE_DATE,SYSDATE+1)) >= TRUNC(SYSDATE) ) ;
3597
3598 l_count := SQL%ROWCOUNT;
3599 IF (l_debug = 1) THEN
3600 inv_log_util.trace('Validating cost group ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3601 END IF;
3602
3603 END IF;--J-dev
3604
3605
3606 /*+-----------------------------------------------------------------------+
3607 | Now validate transfer cost group ids, these must exist and must be |
3608 | enabled in terms of date |
3609 +-----------------------------------------------------------------------+*/
3610 loaderrmsg('INV_INT_XCSTGRP','INV_INT_XCSTEXP');
3611
3612 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3613 SET LAST_UPDATE_DATE = SYSDATE,
3614 LAST_UPDATED_BY = p_userid,
3615 LAST_UPDATE_LOGIN = p_loginid,
3616 PROGRAM_UPDATE_DATE = SYSDATE,
3617 PROCESS_FLAG = 3,
3618 LOCK_FLAG = 2,
3619 ERROR_CODE = substrb(l_error_code,1,240),
3620 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3621 WHERE TRANSACTION_HEADER_ID = p_header_id
3622 AND PROCESS_FLAG = 1
3623 AND TRANSFER_COST_GROUP_ID IS NOT NULL
3624 AND NOT EXISTS (
3625 SELECT NULL
3626 FROM CST_COST_GROUPS CCG
3627 WHERE CCG.COST_GROUP_ID = MTI.TRANSFER_COST_GROUP_ID
3628 AND NVL(CCG.ORGANIZATION_ID, MTI.ORGANIZATION_ID) =
3629 MTI.ORGANIZATION_ID
3630 AND TRUNC(NVL(CCG.DISABLE_DATE,SYSDATE+1)) >= TRUNC(SYSDATE) ) ;
3631
3632
3633 l_count := SQL%ROWCOUNT;
3634 IF (l_debug = 1) THEN
3635 inv_log_util.trace('Validating xfer cost group ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3636 END IF;
3637
3638 /*-------------------------------------------------------------+
3639 | Validate the interface table for Planning Organization
3640 | to be used for VMI transactions
3641 +-------------------------------------------------------------*/
3642
3643 loaderrmsg('INV_INT_PLANORG','INV_INT_PLANORG');
3644
3645 /*Bug#4951558. In the where clause of the below UPDATE statement, added the
3646 condition, 'paa.using_organization_code = -1' because
3647 'using_organization_code' is set to -1 in the table, 'po_asl_attributes' if
3648 the global flag is set to 'Yes' in the ASL for an (item, supplier)
3649 combination*/
3650
3651 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3652 SET LAST_UPDATE_DATE = SYSDATE,
3653 LAST_UPDATED_BY = p_userid,
3654 LAST_UPDATE_LOGIN = p_loginid,
3655 PROGRAM_UPDATE_DATE = SYSDATE,
3656 PROCESS_FLAG = 3,
3657 LOCK_FLAG = 2,
3658 ERROR_CODE = substrb(l_error_code,1,240),
3659 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3660 WHERE TRANSACTION_HEADER_ID = p_header_id
3661 AND PROCESS_FLAG = 1
3662 AND PLANNING_ORGANIZATION_ID IS NOT NULL
3663 AND planning_tp_type = 1
3664 AND planning_organization_id <> ORGANIZATION_ID
3665 AND NOT EXISTS (
3666 SELECT NULL
3667 FROM po_asl_attributes paa
3668 WHERE PAA.vendor_site_id = mti.planning_organization_id
3669 AND PAA.ITEM_ID = MTI.INVENTORY_ITEM_ID
3670 AND (paa.using_organization_id = -1 OR
3671 paa.using_organization_id = mti.organization_id));
3672
3673 l_count := SQL%ROWCOUNT;
3674 IF (l_debug = 1) THEN
3675 inv_log_util.trace('Validating group Plann Org:Supplier' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3676 END IF;
3677
3678 --if the planning _org is a inventory org it should be in
3679 --mtl_parameters.
3680
3681 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3682 SET LAST_UPDATE_DATE = SYSDATE,
3683 LAST_UPDATED_BY = p_userid,
3684 LAST_UPDATE_LOGIN = p_loginid,
3685 PROGRAM_UPDATE_DATE = SYSDATE,
3686 PROCESS_FLAG = 3,
3687 LOCK_FLAG = 2,
3688 ERROR_CODE = substrb(l_error_code,1,240),
3689 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3690 WHERE TRANSACTION_HEADER_ID = p_header_id
3691 AND PROCESS_FLAG = 1
3692 AND PLANNING_ORGANIZATION_ID IS NOT NULL
3693 AND planning_tp_type = 2
3694 AND planning_organization_id <> ORGANIZATION_ID
3695 AND NOT EXISTS (
3696 SELECT NULL
3697 FROM mtl_parameters mp
3698 where
3699 mp.organization_id = mti.planning_organization_id);
3700
3701
3702 l_count := SQL%ROWCOUNT;
3703 IF (l_debug = 1) THEN
3704 inv_log_util.trace('Validating group Planning Org:Inventory Org' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3705 END IF;
3706
3707
3708 /*-------------------------------------------------------------+
3709 | Validate the Interface table for LPN
3710 +-------------------------------------------------------------*/
3711
3712 loaderrmsg('INV_INT_LPN','INV_INT_LPN');
3713
3714
3715 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3716 SET LAST_UPDATE_DATE = SYSDATE,
3717 LAST_UPDATED_BY = p_userid,
3718 LAST_UPDATE_LOGIN = p_loginid,
3719 PROGRAM_UPDATE_DATE = SYSDATE,
3720 PROCESS_FLAG = 3,
3721 LOCK_FLAG = 2,
3722 ERROR_CODE = substrb(l_error_code,1,240),
3723 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3724 WHERE TRANSACTION_HEADER_ID = p_header_id
3725 AND PROCESS_FLAG = 1
3726 AND lpn_id IS NOT NULL
3727 AND NOT EXISTS (
3728 SELECT NULL
3729 FROM wms_license_plate_numbers wlpn
3730 where
3731 wlpn.lpn_id = mti.lpn_id);
3732
3733
3734 l_count := SQL%ROWCOUNT;
3735 IF (l_debug = 1) THEN
3736 inv_log_util.trace('Validating group LPN:LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3737 END IF;
3738
3739 --Validate Xfr LPN
3740
3741 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3742 SET LAST_UPDATE_DATE = SYSDATE,
3743 LAST_UPDATED_BY = p_userid,
3744 LAST_UPDATE_LOGIN = p_loginid,
3745 PROGRAM_UPDATE_DATE = SYSDATE,
3746 PROCESS_FLAG = 3,
3747 LOCK_FLAG = 2,
3748 ERROR_CODE = substrb(l_error_code,1,240),
3749 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3750 WHERE TRANSACTION_HEADER_ID = p_header_id
3751 AND PROCESS_FLAG = 1
3752 AND TRANSFER_LPN_ID IS NOT NULL
3753 AND NOT EXISTS (
3754 SELECT NULL
3755 FROM wms_license_plate_numbers wlpn
3756 where
3757 wlpn.lpn_id = mti.TRANSFER_LPN_ID);
3758
3759
3760 l_count := SQL%ROWCOUNT;
3761 IF (l_debug = 1) THEN
3762 inv_log_util.trace('Validating group LPN:XFER_LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3763 END IF;
3764
3765
3766 --Validate Content LPN
3767
3768 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3769 SET LAST_UPDATE_DATE = SYSDATE,
3770 LAST_UPDATED_BY = p_userid,
3771 LAST_UPDATE_LOGIN = p_loginid,
3772 PROGRAM_UPDATE_DATE = SYSDATE,
3773 PROCESS_FLAG = 3,
3774 LOCK_FLAG = 2,
3775 ERROR_CODE = substrb(l_error_code,1,240),
3776 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3777 WHERE TRANSACTION_HEADER_ID = p_header_id
3778 AND PROCESS_FLAG = 1
3779 AND CONTENT_LPN_ID IS NOT NULL
3780 AND NOT EXISTS (
3781 SELECT NULL
3782 FROM wms_license_plate_numbers wlpn
3783 where
3784 wlpn.lpn_id = mti.CONTENT_LPN_ID);
3785
3786
3787 l_count := SQL%ROWCOUNT;
3788 IF (l_debug = 1) THEN
3789 inv_log_util.trace('Validating group LPN:Content_LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3790 END IF;
3791
3792
3793 /*-------------------------------------------------------------+
3794 | Update the interface table with shippable item flag
3795 | to be used for OE transactions
3796 +-------------------------------------------------------------*/
3797
3798
3799
3800 IF (srctypeid = INV_GLOBALS.G_SourceType_SalesOrder OR
3801 srctypeid = INV_GLOBALS.G_SourceType_IntOrder OR
3802 srctypeid = INV_GLOBALS.G_SourceType_PrjContracts) THEN
3803 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3804 SET LAST_UPDATE_DATE = SYSDATE,
3805 LAST_UPDATED_BY = p_userid,
3806 LAST_UPDATE_LOGIN = p_loginid,
3807 PROGRAM_UPDATE_DATE = SYSDATE,
3808 SHIPPABLE_FLAG = (SELECT SHIPPABLE_ITEM_FLAG
3809 FROM MTL_SYSTEM_ITEMS MSI
3810 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3811 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
3812 WHERE TRANSACTION_HEADER_ID = p_header_id
3813 AND INVENTORY_ITEM_ID IS NOT NULL
3814 AND TRANSACTION_SOURCE_TYPE_ID in (2,8,16)
3815 AND PROCESS_FLAG = 1;
3816
3817 END IF;
3818
3819 /*-----------------------------------------------------------+
3820 | Deriving values for inventory_item_id and wip_entity_type
3821 | for WIP transactions. Do this for bot CFM and non-CFMs.
3822 +------------------------------------------------------------*/
3823
3824 --J-dev
3825 --This validation should not be done for WIP MTI in J.
3826 --WIP will do this validation in J.
3827
3828 IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3829
3830 IF (srctypeid = 5) THEN
3831 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3832 SET LAST_UPDATE_DATE = SYSDATE,
3833 LAST_UPDATED_BY = p_userid,
3834 LAST_UPDATE_LOGIN = p_loginid,
3835 PROGRAM_UPDATE_DATE = SYSDATE,
3836 INVENTORY_ITEM_ID = (SELECT DECODE(MTI.TRANSACTION_ACTION_ID,30,
3837 PRIMARY_ITEM_ID,31,PRIMARY_ITEM_ID,32,
3838 PRIMARY_ITEM_ID,
3839 MTI.INVENTORY_ITEM_ID) -- CFM Scrap Transactions
3840 FROM WIP_ENTITIES WE
3841 WHERE WE.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID
3842 AND WE.ORGANIZATION_ID = MTI.ORGANIZATION_ID),
3843 WIP_ENTITY_TYPE = (SELECT ENTITY_TYPE
3844 FROM WIP_ENTITIES WE
3845 WHERE WE.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3846 AND WE.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID)
3847 WHERE TRANSACTION_HEADER_ID = p_header_id
3848 AND TRANSACTION_SOURCE_TYPE_ID = 5
3849 AND PROCESS_FLAG = 1;
3850
3851
3852 /*-------------------------------------------------------------+
3853 | Update MTI with right op seq num for non-CFMs
3854 +--------------------------------------------------------------*/
3855
3856 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3857 SET LAST_UPDATE_DATE = SYSDATE,
3858 LAST_UPDATED_BY = p_userid,
3859 LAST_UPDATE_LOGIN = p_loginid,
3860 PROGRAM_UPDATE_DATE = SYSDATE,
3861 OPERATION_SEQ_NUM = (SELECT nvl(max(operation_seq_num),1)
3862 FROM WIP_OPERATIONS WO
3863 WHERE WO.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID
3864 AND WO.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
3865 WHERE TRANSACTION_HEADER_ID = p_header_id
3866 AND TRANSACTION_SOURCE_TYPE_ID = 5
3867 AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'N'
3868 AND TRANSACTION_ACTION_ID IN (32,31)
3869 AND PROCESS_FLAG = 1;
3870
3871 END IF;
3872 END IF;--J-dev
3873
3874 /*-------------------------------------------------------------+
3875 | If a single transaction within a group fails all transactions
3876 | in that group should not be processed.
3877 +--------------------------------------------------------------*/
3878
3879 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
3880
3881 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3882 SET LAST_UPDATE_DATE = SYSDATE,
3883 LAST_UPDATED_BY = p_userid,
3884 LAST_UPDATE_LOGIN = p_loginid,
3885 PROGRAM_UPDATE_DATE = SYSDATE,
3886 PROCESS_FLAG = 3,
3887 LOCK_FLAG = 2,
3888 ERROR_CODE = substrb(l_error_code,1,240)
3889 WHERE TRANSACTION_HEADER_ID = p_header_id
3890 AND PROCESS_FLAG = 1
3891 AND TRANSACTION_BATCH_ID IN
3892 (SELECT DISTINCT MTI2.TRANSACTION_BATCH_ID
3893 FROM MTL_TRANSACTIONS_INTERFACE MTI2
3894 WHERE MTI2.TRANSACTION_HEADER_ID = p_header_id
3895 AND MTI2.PROCESS_FLAG = 3
3896 AND MTI2.ERROR_CODE IS NOT NULL);
3897
3898
3899 -- start of fix for eam
3900 -- added following validation on rebuild_item_id (valid in MSI and transactable)
3901 -- and rebuild_activity_id (valid in MSI)
3902 /*----------------------------------------------------+
3903 | validate rebuild item id and rebuild activity id where it is specified
3904 +----------------------------------------------------*/
3905
3906
3907 IF (l_validate_full) THEN --J-dev
3908
3909 loaderrmsg('INV_REB_ITMCODE','INV_REB_ITMEXP');
3910
3911 /* Bug# 5264549 : made changes to the REBUILD_ITEM_ID query to
3912 update EAM validations from Transaction Manager */
3913
3914 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3915 SET LAST_UPDATE_DATE = SYSDATE,
3916 LAST_UPDATED_BY = p_userid,
3917 LAST_UPDATE_LOGIN = p_loginid,
3918 PROGRAM_UPDATE_DATE = SYSDATE,
3919 PROCESS_FLAG = 3,
3920 LOCK_FLAG = 2,
3921 ERROR_CODE = substrb(l_error_code,1,240),
3922 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3923 WHERE TRANSACTION_HEADER_ID = p_header_id
3924 AND PROCESS_FLAG = 1
3925 AND ((REBUILD_ITEM_ID IS NOT NULL
3926 AND NOT EXISTS (
3927 SELECT NULL
3928 FROM MTL_SYSTEM_ITEMS MSI, MTL_PARAMETERS MP
3929 WHERE MSI.INVENTORY_ITEM_ID = MTI.REBUILD_ITEM_ID
3930 AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
3931 AND MP.MAINT_ORGANIZATION_ID = MTI.ORGANIZATION_ID
3932 AND MSI.EAM_ITEM_TYPE = 3
3933 AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y'))
3934
3935 OR (REBUILD_ACTIVITY_ID IS NOT NULL
3936 AND NOT EXISTS (
3937 SELECT NULL
3938 FROM MTL_SYSTEM_ITEMS MSI
3939 WHERE MSI.INVENTORY_ITEM_ID = MTI.REBUILD_ACTIVITY_ID
3940 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3941 AND MSI.EAM_ITEM_TYPE = 2)));
3942
3943 l_count := SQL%ROWCOUNT;
3944 IF (l_debug = 1) THEN
3945 inv_log_util.trace('Validating rebuild items ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3946 END IF;
3947 -- end of fix for eam
3948
3949 END IF;--J-dev
3950
3951 x_return_status := FND_API.G_RET_STS_SUCCESS;
3952
3953 FND_MESSAGE.clear;
3954
3955
3956 EXCEPTION
3957 WHEN OTHERS THEN
3958 IF (l_debug = 1) THEN
3959 inv_log_util.trace('Error in validate_group : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
3960 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
3961 END IF;
3962 x_return_status := FND_API.G_RET_STS_ERROR;
3963 FND_MESSAGE.clear;
3964
3965 END validate_group;
3966
3967
3968
3969
3970
3971 /******* LINE VALIDATION OBJECTS ***************/
3972
3973 /******************************************************************
3974 *
3975 * lotcheck
3976 *
3977 ******************************************************************/
3978 FUNCTION lotcheck(p_rowid VARCHAR2, p_orgid NUMBER, p_itemid NUMBER, p_intid NUMBER,
3979 p_priuom VARCHAR2, p_trxuom VARCHAR2, p_lotuniq NUMBER,
3980 p_shlfcode NUMBER, p_shlfdays NUMBER, p_serctrl NUMBER, p_srctype NUMBER, p_acttype NUMBER,
3981 p_is_wsm_enabled VARCHAR2,
3982 -- INVCONV start fabdi
3983 p_trx_typeid NUMBER, p_revision VARCHAR2, p_subinvtory_code VARCHAR2, p_locator NUMBER)
3984 -- INVCONV end fabdi
3985
3986 RETURN BOOLEAN
3987 IS
3988 -- INVCONV fabdi start
3989 CURSOR INT3 IS
3990 SELECT LOT_NUMBER,
3991 TRANSACTION_QUANTITY,
3992 -- INVCONV start fabdi
3993 SECONDARY_TRANSACTION_QUANTITY,
3994 GRADE_CODE,
3995 RETEST_DATE,
3996 MATURITY_DATE,
3997 PARENT_LOT_NUMBER,
3998 ORIGINATION_DATE,
3999 ORIGINATION_TYPE,
4000 EXPIRATION_ACTION_CODE,
4001 EXPIRATION_ACTION_DATE,
4002 LOT_EXPIRATION_DATE,
4003 HOLD_DATE,
4004 REASON_ID,
4005 -- INVCONV end fabdi
4006 SERIAL_TRANSACTION_TEMP_ID,
4007 fnd_date.date_to_canonical(LOT_EXPIRATION_DATE),
4008 ROWID,
4009 parent_object_type, --R12 Genealogy enhancements
4010 parent_object_id, --R12 Genealogy enhancements
4011 parent_object_number, --R12 Genealogy enhancements
4012 parent_item_id, --R12 Genealogy enhancements
4013 parent_object_type2, --R12 Genealogy enhancements
4014 parent_object_id2, --R12 Genealogy enhancements
4015 parent_object_number2 --R12 Genealogy enhancements
4016 FROM MTL_TRANSACTION_LOTS_INTERFACE
4017 WHERE TRANSACTION_INTERFACE_ID = p_intid;
4018 -- INVCONV fabdi end
4019
4020
4021
4022 l_lotnum VARCHAR2(80); -- changed lot_number to 80, inconv
4023 --- mrana changed to type ROWID l_lotrowid VARCHAR2(20);
4024 l_lotrowid ROWID;
4025 l_lotexpdate VARCHAR2(22);
4026 l_userid NUMBER := -1; --prg_info.userid;
4027 l_reqstid NUMBER := -1; -- prg_info.reqstid;
4028 l_applid NUMBER := -1; -- prg_info.appid;
4029 l_progid NUMBER := -1; -- prg_info.progid;
4030 l_loginid NUMBER := -1; -- prg_info.loginid;
4031 l_lotqty NUMBER;
4032 l_lotpriqty NUMBER;
4033 l_sertempid NUMBER;
4034 l_tnum NUMBER;
4035
4036 -- INVCONV start fabdi
4037 L_parent_object_type NUMBER; --R12 Genealogy enhancements
4038 L_parent_object_id NUMBER; --R12 Genealogy enhancements
4039 L_parent_object_number NUMBER; --R12 Genealogy enhancements
4040 L_parent_item_id NUMBER; --R12 Genealogy enhancements
4041 L_parent_object_type2 NUMBER; --R12 Genealogy enhancements
4042 L_parent_object_id2 NUMBER; --R12 Genealogy enhancements
4043 L_parent_object_number2 NUMBER; --R12 Genealogy enhancements
4044 l_table VARCHAR2(10);
4045 l_rowid ROWID;
4046 l_serrowid ROWID;
4047 l_fm_serial_number VARCHAR2(30);
4048 l_to_serial_number VARCHAR2(30);
4049
4050 /* get copy lot attribute flag */
4051 CURSOR get_org_copy_lot_flag IS
4052 SELECT copy_lot_attribute_flag,
4053 lot_number_generation
4054 FROM mtl_parameters
4055 WHERE organization_id = p_orgid;
4056
4057 /* get item information */
4058 CURSOR c_get_item_info IS
4059 SELECT COPY_LOT_ATTRIBUTE_FLAG , child_lot_flag
4060 from mtl_system_items
4061 WHERE inventory_item_id = p_itemid
4062 AND organization_id = p_orgid;
4063
4064 -- nsinghi bug 5209065. Added the cursor.
4065 CURSOR cur_get_interface_id IS
4066 SELECT transaction_interface_id
4067 FROM MTL_TRANSACTIONS_INTERFACE
4068 WHERE ROWID = p_rowid;
4069
4070 l_item_copy_lot_attribute_flag VARCHAR2(1);
4071 l_org_copy_lot_attribute_flag VARCHAR2(1);
4072 l_lot_number_generation NUMBER;
4073 l_copy_lot_attribute_flag VARCHAR2(1);
4074 l_child_lot_enabled VARCHAR2(1);
4075
4076 l_transaction_uom_code VARCHAR(3);
4077 l_secondary_quantity NUMBER;
4078 l_secondary_uom_code VARCHAR(3);
4079 l_qty_check BOOLEAN;
4080
4081 l_grade_code VARCHAR2(250);
4082 l_retest_date DATE;
4083 l_maturity_date DATE;
4084 l_parent_lot_number VARCHAR2(80);
4085 l_origination_date DATE;
4086 l_origination_type NUMBER;
4087 l_expiration_action_code VARCHAR2(80);
4088 l_expiration_action_date DATE ;
4089 l_expiration_date DATE;
4090 l_hold_date DATE;
4091 l_attr_check boolean;
4092 l_error_message varchar2(200);
4093 l_reason_id number;
4094
4095 l_return_status VARCHAR(3);
4096 l_msg_count NUMBER;
4097 l_msg_data VARCHAR(200);
4098
4099 -- INVCONV end fabdi
4100 l_interface_id NUMBER; -- nsinghi bug 5209065
4101
4102 BEGIN
4103 g_pkg_name := 'Lot_check';
4104
4105 if (l_debug is null) then
4106 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
4107 end if;
4108 if l_debug = 1 then
4109 mydebug ('In lot check ...' );
4110 mydebug ('p_rowid : ' || p_rowid );
4111 mydebug ('p_orgid : ' || p_orgid );
4112 mydebug ('p_itemid : ' || p_itemid );
4113 mydebug ('p_intid : ' || p_intid );
4114 mydebug ('p_priuom : ' || p_priuom );
4115 mydebug ('p_trxuom : ' || p_trxuom );
4116 mydebug ('p_lotuniq : ' || p_lotuniq );
4117 mydebug ('p_shlfcode : ' || p_shlfcode );
4118 mydebug ('p_shlfdays : ' || p_shlfdays );
4119 mydebug ('p_serctrl : ' || p_serctrl );
4120 mydebug ('p_srctype : ' || p_srctype );
4121 mydebug ('p_acttype : ' || p_acttype );
4122 mydebug ('p_trx_typeid : ' || p_trx_typeid );
4123 mydebug ('p_revision : ' || p_revision );
4124 mydebug ('p_subinvtory_code : ' || p_subinvtory_code );
4125 mydebug ('p_locator : ' || p_locator );
4126 mydebug ('p_is_wsm_enabled : ' || p_is_wsm_enabled );
4127 end if;
4128
4129 -- INVCONV start fabdi
4130 IF (l_debug = 1) THEN
4131 inv_log_util.trace('invconv: inside lotcheck..', 'INV_TXN_MANAGER_GRP', 9);
4132 END IF;
4133
4134 /* GET Copy Lot Attribute_flag */
4135
4136 OPEN get_org_copy_lot_flag;
4137 FETCH get_org_copy_lot_flag INTO l_org_copy_lot_attribute_flag, l_lot_number_generation ;
4138 CLOSE get_org_copy_lot_flag;
4139
4140 /* Get item info */
4141 OPEN c_get_item_info;
4142 FETCH c_get_item_info INTO l_item_copy_lot_attribute_flag, l_child_lot_enabled;
4143 CLOSE c_get_item_info;
4144
4145 IF l_lot_number_generation = 1 THEN
4146 l_copy_lot_attribute_flag := NVL(l_org_copy_lot_attribute_flag,'N') ;
4147 ELSIF l_lot_number_generation IN (2,3) THEN
4148 l_copy_lot_attribute_flag := NVL(l_item_copy_lot_attribute_flag,'N') ;
4149 END IF;
4150 -- INVCONV end fabdi
4151
4152 --WHENEVER NOT FOUND CONTINUE;
4153
4154 loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
4155
4156 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4157 SET LAST_UPDATE_DATE = SYSDATE,
4158 LAST_UPDATED_BY = l_userid,
4159 LAST_UPDATE_LOGIN = l_loginid,
4160 PROGRAM_UPDATE_DATE = SYSDATE,
4161 PROCESS_FLAG = 3,
4162 LOCK_FLAG = 2,
4163 ERROR_CODE = substrb(l_error_code,1,240),
4164 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4165 WHERE ROWID = p_rowid
4166 AND ABS(TRANSACTION_QUANTITY) <>
4167 (SELECT ABS(SUM(TRANSACTION_QUANTITY))
4168 FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI
4169 WHERE MTLI.TRANSACTION_INTERFACE_ID = p_intid);
4170
4171 IF SQL%FOUND THEN
4172 return(FALSE);
4173 END IF;
4174
4175 IF p_lotuniq = 1 THEN
4176 FND_MESSAGE.set_name('INV','INV_INT_LOTUNIQCODE');
4177 l_error_code := FND_MESSAGE.get;
4178
4179 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4180 SET LAST_UPDATE_DATE = SYSDATE,
4181 LAST_UPDATED_BY = l_userid,
4182 LAST_UPDATE_LOGIN = l_loginid,
4183 PROGRAM_APPLICATION_ID = l_applid,
4184 PROGRAM_ID = l_progid,
4185 PROGRAM_UPDATE_DATE = SYSDATE,
4186 REQUEST_ID = l_reqstid,
4187 ERROR_CODE = substrb(l_error_code,1,240)
4188 WHERE TRANSACTION_INTERFACE_ID = p_intid
4189 AND EXISTS (
4190 SELECT NULL
4191 FROM MTL_LOT_NUMBERS MLN
4192 WHERE MLN.LOT_NUMBER = MTLI.LOT_NUMBER
4193 AND MLN.INVENTORY_ITEM_ID <> p_itemid);
4194
4195 IF SQL%FOUND THEN
4196 FND_MESSAGE.set_name('INV','INV_INT_LOTUNIQEXP');
4197 l_error_exp := FND_MESSAGE.get;
4198
4199 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4200 SET LAST_UPDATE_DATE = SYSDATE,
4201 LAST_UPDATED_BY = l_userid,
4202 LAST_UPDATE_LOGIN = l_loginid,
4203 PROGRAM_UPDATE_DATE = SYSDATE,
4204 PROCESS_FLAG = 3,
4205 LOCK_FLAG = 2,
4206 ERROR_CODE = substrb(l_error_code,1,240),
4207 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4208 WHERE ROWID = p_rowid;
4209
4210 return(FALSE);
4211 END IF;
4212
4213 END IF;
4214
4215 OPEN INT3;
4216
4217 while (TRUE) LOOP
4218
4219 FETCH INT3 INTO
4220 l_lotnum,
4221 l_lotqty,
4222 -- INVCONV start fabdi
4223 l_secondary_quantity,
4224 l_grade_code,
4225 l_retest_date,
4226 l_maturity_date,
4227 l_parent_lot_number,
4228 l_origination_date,
4229 l_origination_type,
4230 l_expiration_action_code ,
4231 l_expiration_action_date,
4232 l_expiration_date ,
4233 l_hold_date ,
4234 l_reason_id,
4235 -- INVCONV end fabdi
4236 l_sertempid,
4237 l_lotexpdate,
4238 l_lotrowid,
4239 l_parent_object_type, --R12 Genealogy enhancements
4240 l_parent_object_id, --R12 Genealogy enhancements
4241 l_parent_object_number, --R12 Genealogy enhancements
4242 l_parent_item_id, --R12 Genealogy enhancements
4243 l_parent_object_type2, --R12 Genealogy enhancements
4244 l_parent_object_id2, --R12 Genealogy enhancements
4245 l_parent_object_number2; --R12 Genealogy enhancements
4246
4247 IF int3%NOTFOUND THEN
4248 CLOSE int3;
4249 return(true);
4250 END IF;
4251
4252 BEGIN
4253
4254 -- INVCONV start fabdi
4255 l_transaction_uom_code := p_trxuom;
4256
4257 IF (l_debug = 1) THEN
4258 inv_log_util.trace('lotcheck: calling validate_quantities', 'INV_TXN_MANAGER_GRP', 9);
4259 inv_log_util.trace('l_parent_object_type: ' || l_parent_object_type,'INV_TXN_MANAGER_GRP', 9);
4260 inv_log_util.trace('l_parent_object_id: ' || l_parent_object_id,'INV_TXN_MANAGER_GRP', 9);
4261 inv_log_util.trace('l_parent_object_number: ' || l_parent_object_number,'INV_TXN_MANAGER_GRP', 9);
4262 inv_log_util.trace('l_parent_item_id: ' || l_parent_item_id,'INV_TXN_MANAGER_GRP', 9);
4263 inv_log_util.trace('l_parent_object_type2: ' || l_parent_object_type2,'INV_TXN_MANAGER_GRP', 9);
4264 inv_log_util.trace('l_parent_object_id2: ' || l_parent_object_id2,'INV_TXN_MANAGER_GRP', 9);
4265 inv_log_util.trace('l_parent_object_number2: ' || l_parent_object_number2,'INV_TXN_MANAGER_GRP', 9);
4266 inv_log_util.trace('l_sertempid: ' || l_sertempid,'INV_TXN_MANAGER_GRP', 9);
4267
4268 END IF;
4269
4270
4271 /*------------------------------------------------------+
4272 | Validating quantity both (primary and secondary qty)
4273 | in MTLT, only
4274 | If the item is tracked in both primary AND secondary
4275 |
4276 +------------------------------------------------------*/
4277
4278 l_qty_check := validate_quantities(
4279 p_rowid => p_rowid
4280 , p_lot_rowid => l_lotrowid
4281 , p_transaction_type_id => p_trx_typeid
4282 , p_organization_id => p_orgid
4283 , p_inventory_item_id => p_itemid
4284 , p_revision => p_revision
4285 , p_subinventory_code => p_subinvtory_code
4286 , p_locator_id => p_locator
4287 , p_lot_number => l_lotnum
4288 , p_transaction_quantity => l_lotqty
4289 , p_transaction_uom => l_transaction_uom_code
4290 , p_secondary_quantity => l_secondary_quantity
4291 , p_secondary_uom_code => l_secondary_uom_code
4292 );
4293
4294
4295 IF (l_qty_check) THEN
4296 IF (l_debug = 1) THEN
4297 inv_log_util.trace('validate_quantities IN (lotcheck) ==> PASS ' , 'INV_TXN_MANAGER_GRP', 9);
4298 END IF;
4299
4300 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4301 SET TRANSACTION_QUANTITY = l_lotqty,
4302 SECONDARY_TRANSACTION_QUANTITY = l_secondary_quantity
4303 WHERE ROWID = l_lotrowid;
4304 ELSE
4305 IF (l_debug = 1) THEN
4306 inv_log_util.trace('validate_quantities IN (lotcheck) - FAIL ' || l_msg_data, 'INV_TXN_MANAGER_GRP', 9);
4307 END IF;
4308 l_error_exp := '';
4309 l_error_code := '';
4310 FND_MESSAGE.clear;
4311 return(FALSE);
4312 END IF;
4313
4314 IF (l_debug = 1) THEN
4315 inv_log_util.trace('calling VALIDATE_ADDITIONAL_ATTR', 'INV_TXN_MANAGER_GRP', 9);
4316 end if;
4317
4318 IF l_child_lot_enabled = 'N'
4319 THEN
4320 l_parent_lot_number := NULL ;
4321 END IF;
4322
4323 /* nsinghi bug 5209065. Following cursor used to set interface id, so that interface record can be queried
4324 for custom expiration dt calculation. When transaction is created through API, lot expiration date
4325 calculation is handled by the following code. */
4326 OPEN cur_get_interface_id;
4327 FETCH cur_get_interface_id INTO l_interface_id;
4328 CLOSE cur_get_interface_id;
4329 inv_calculate_exp_date.set_txn_id (p_table => 1, p_header_id => l_interface_id);
4330 inv_calculate_exp_date.set_lot_txn_id (p_table => 1, p_header_id => l_lotrowid);
4331
4332 /* this api will validate all the added new lot attributes intoduced in INVCONV
4333 project */
4334 l_attr_check := VALIDATE_ADDITIONAL_ATTR(
4335 p_api_version => 1.0
4336 , p_init_msg_list => fnd_api.g_false
4337 , p_validation_level => fnd_api.g_valid_level_full
4338 , p_intid => p_intid
4339 , p_rowid => p_rowid
4340 , p_inventory_item_id => p_itemid
4341 , p_organization_id => p_orgid
4342 , p_lot_number => l_lotnum
4343 , p_grade_code => l_grade_code
4344 , p_retest_date => l_retest_date
4345 , p_maturity_date => l_maturity_date
4346 , p_parent_lot_number => l_parent_lot_number
4347 , p_origination_date => l_origination_date
4348 , p_origination_type => l_origination_type
4349 , p_expiration_action_code => l_expiration_action_code
4350 , p_expiration_action_date => l_expiration_action_date
4351 , p_expiration_date => l_expiration_date
4352 , p_hold_date => l_hold_date
4353 , p_reason_id => l_reason_id
4354 , p_copy_lot_attribute_flag => l_copy_lot_attribute_flag
4355 , x_return_status => l_return_status
4356 , x_msg_count => l_msg_count
4357 , x_msg_data => l_msg_data
4358 ) ;
4359 IF (l_attr_check)
4360 THEN
4361
4362 IF (l_debug = 1) THEN
4363 inv_log_util.trace('VALIDATE_ADDITIONAL_ATTR IN (lotcheck) ==> PASS ' , 'INV_TXN_MANAGER_GRP', 9);
4364 END IF;
4365
4366 -- nsinghi bug 5209065. Added the following line.
4367 -- Expiration date was getting reset and hence ensured that appropriate value gets updated to MTLI.
4368 -- nsinghi bug#5209065 rework. Added fnd_date.date_to_canonical call.
4369 l_lotexpdate := fnd_date.date_to_canonical(l_expiration_date);
4370
4371 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4372 SET GRADE_CODE = l_grade_code ,
4373 RETEST_DATE = l_retest_date ,
4374 MATURITY_DATE = l_maturity_date,
4375 PARENT_LOT_NUMBER = l_parent_lot_number,
4376 ORIGINATION_DATE = l_origination_date,
4377 ORIGINATION_TYPE = l_origination_type ,
4378 EXPIRATION_ACTION_CODE = l_expiration_action_code,
4379 EXPIRATION_ACTION_DATE = l_expiration_action_date ,
4380 LOT_EXPIRATION_DATE = l_expiration_date ,
4381 HOLD_DATE = l_hold_date,
4382 REASON_ID = l_reason_id
4383 WHERE ROWID = l_lotrowid;
4384
4385 ELSE
4386 IF (l_debug = 1) THEN
4387 inv_log_util.trace('VALIDATE_ADDITIONAL_ATTR IN (lotcheck) - FAIL ' || l_msg_data, 'INV_TXN_MANAGER_GRP', 9);
4388 END IF;
4389 l_error_exp := '';
4390 l_error_code := '';
4391 FND_MESSAGE.clear;
4392 return(FALSE);
4393 END IF;
4394
4395 -- INVCONV end fabdi
4396
4397 -- R12 Genealogy Enhancement : Start
4398 IF (p_srctype = INV_GLOBALS.G_SOURCETYPE_WIP AND
4399 p_acttype = INV_GLOBALS.G_ACTION_ISSUE) THEN
4400 IF (p_serctrl = 2 OR p_serctrl = 5) -- Lot + serial Controlled
4401 THEN
4402 -- mrana:5443557: this is not needed anymore AND (p_is_wsm_enabled = 'N')) THEN
4403 IF (l_debug = 1) THEN
4404 INV_log_util.trace('{{- It is lot+serial controlled item. Call validate_serial_genealogy_data }}'
4405 , 'INV_TXN_MANAGER_GRP', 9);
4406 END IF;
4407 validate_serial_genealogy_data ( p_interface_id => l_sertempid
4408 , p_org_id => p_orgid
4409 , x_return_status => l_return_status
4410 , x_msg_count => l_msg_count
4411 , x_msg_data => l_msg_data);
4412 IF l_return_status <> lg_ret_sts_success THEN
4413 IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
4414 --RAISE lg_exc_error; ????
4415 END IF;
4416 ELSE
4417 IF (l_debug = 1) THEN
4418 INV_log_util.trace('{{- It is lot controlled item - if parent details are available, }} ' ||
4419 '{{ Validation/derivation of parent object details should happen here}}'
4420 , 'INV_TXN_MANAGER_GRP', 9);
4421 END IF;
4422 IF (l_parent_object_id is NOT NULL AND l_parent_object_type is NOT NULL) OR
4423 (l_parent_object_type is NOT NULL AND l_parent_object_number is NOT NULL
4424 AND l_parent_Item_id IS NOT NULL) THEN
4425 IF (l_debug = 1) THEN
4426 inv_log_util.trace('{{- Parent details are available - Validation/derivation of }} ' ||
4427 '{{ parent object details is called here}}' , 'INV_TXN_MANAGER_GRP', 9);
4428 END IF;
4429 validate_derive_object_details
4430 ( p_org_id => p_orgid
4431 , p_object_type => l_parent_object_type
4432 , p_object_id => l_parent_object_id
4433 , p_object_number => l_parent_object_number
4434 , p_item_id => l_parent_Item_id
4435 , p_object_type2 => l_parent_object_type2
4436 , p_object_id2 => l_parent_object_id2
4437 , p_object_number2 => l_parent_object_number2
4438 , p_serctrl => p_serctrl
4439 , p_lotctrl => 2
4440 , p_rowid => l_lotrowid
4441 , p_table => 'MTLI'
4442 , x_return_status => l_return_status
4443 , x_msg_count => l_msg_count
4444 , x_msg_data => l_msg_data);
4445 IF l_return_status <> lg_ret_sts_success THEN
4446 IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
4447 --RAISE lg_exc_error; ????
4448 END IF;
4449
4450 ELSE
4451 null; -- Parent object details not populated during wip issue . It is OK
4452 IF (l_debug = 1) THEN
4453 inv_log_util.trace('{{ Parent object details not populated during WIP issue . It is OK }}' ,
4454 'INV_TXN_MANAGER_GRP', 9);
4455 END IF;
4456 END IF;
4457 END IF;
4458 IF (l_debug = 1) THEN
4459 inv_log_util.trace('{{- It is not a WIP issue transactioon, so no validation/derivation of }}' ||
4460 '{{ parent object details should happen here}}' , 'INV_TXN_MANAGER_GRP', 9);
4461 END IF;
4462 END IF;
4463 -- R12 Genealogy Enhancement : End
4464
4465 IF (p_srctype =5) then
4466 l_lotpriqty := inv_convert.inv_um_convert(p_itemid,6,l_lotqty,p_trxuom,p_priuom,'','');
4467 ELSE
4468 l_lotpriqty := inv_convert.inv_um_convert(p_itemid,5,l_lotqty,p_trxuom,p_priuom,'','');
4469 END IF;
4470
4471
4472 EXCEPTION
4473 WHEN OTHERS THEN
4474
4475 /*IF (NOT UomConvert(l_itemid,0,l_trxuom, '',
4476 l_priuom, '',l_lotqty,
4477 l_lotpriqty, 0)) THEN */
4478 l_error_exp := FND_MESSAGE.get;
4479
4480 FND_MESSAGE.set_name('INV','INV_INT_UOMCONVCODE');
4481 l_error_code := FND_MESSAGE.get;
4482
4483 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4484 SET LAST_UPDATE_DATE = SYSDATE,
4485 LAST_UPDATED_BY = l_userid,
4486 LAST_UPDATE_LOGIN = l_loginid,
4487 PROGRAM_APPLICATION_ID = l_applid,
4488 PROGRAM_ID = l_progid,
4489 PROGRAM_UPDATE_DATE = SYSDATE,
4490 REQUEST_ID = l_reqstid,
4491 ERROR_CODE = substrb(l_error_code,1,240)
4492 WHERE ROWID = l_lotrowid;
4493
4494 UPDATE MTL_TRANSACTIONS_INTERFACE
4495 SET ERROR_CODE = substrb(l_error_code,1,240),
4496 ERROR_EXPLANATION = substrb(l_error_exp,1,240),
4497 LAST_UPDATE_DATE = sysdate,
4498 LAST_UPDATED_BY = l_userid,
4499 LAST_UPDATE_LOGIN = l_loginid,
4500 PROGRAM_UPDATE_DATE = SYSDATE,
4501 PROCESS_FLAG = 3,
4502 LOCK_FLAG = 2
4503 WHERE ROWID = p_rowid;
4504
4505 return(FALSE);
4506 END;
4507 /* Changes done in the below if condition for bug2725491
4508 Hadling the no_data_found exception when the lot is new
4509 and expiration is set */
4510 IF ((p_shlfcode <> 1) AND (l_lotexpdate IS NULL)) THEN
4511 BEGIN
4512 SELECT
4513 fnd_date.date_to_canonical(EXPIRATION_DATE)
4514 INTO l_lotexpdate
4515 FROM MTL_LOT_NUMBERS
4516 WHERE INVENTORY_ITEM_ID = p_itemid
4517 AND ORGANIZATION_ID = p_orgid
4518 AND LOT_NUMBER = l_lotnum;
4519 EXCEPTION
4520 WHEN NO_DATA_FOUND THEN
4521 IF ((p_shlfcode = 2) AND (l_lotexpdate IS NULL)) THEN
4522 SELECT fnd_date.date_to_canonical(SYSDATE + p_shlfdays)
4523 INTO l_lotexpdate
4524 FROM DUAL;
4525 END IF;
4526
4527 IF ((p_shlfcode = 4) AND (l_lotexpdate IS NULL)) THEN
4528
4529 FND_MESSAGE.set_name('INV','INV_LOT_EXPREQD');
4530 l_error_exp := FND_MESSAGE.get;
4531 FND_MESSAGE.set_name('INV','INV_LOT_EXPREQD');
4532 l_error_code := FND_MESSAGE.get;
4533
4534 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4535 SET LAST_UPDATE_DATE = SYSDATE,
4536 LAST_UPDATED_BY = l_userid,
4537 LAST_UPDATE_LOGIN = l_loginid,
4538 PROGRAM_APPLICATION_ID = l_applid,
4539 PROGRAM_ID = l_progid,
4540 PROGRAM_UPDATE_DATE = SYSDATE,
4541 REQUEST_ID = l_reqstid,
4542 ERROR_CODE = substrb(l_error_code,1,240)
4543 WHERE ROWID = l_lotrowid;
4544
4545 UPDATE MTL_TRANSACTIONS_INTERFACE
4546 SET ERROR_CODE = substrb(l_error_code,1,240),
4547 ERROR_EXPLANATION = substrb(l_error_exp,1,240),
4548 LAST_UPDATE_DATE = sysdate,
4549 LAST_UPDATED_BY = l_userid,
4550 LAST_UPDATE_LOGIN = l_loginid,
4551 PROGRAM_UPDATE_DATE = SYSDATE,
4552 PROCESS_FLAG = 3,
4553 LOCK_FLAG = 2
4554 WHERE ROWID = p_rowid;
4555
4556
4557 return(FALSE);
4558
4559 END IF;
4560 END;
4561 END IF;
4562
4563 --Bug #5738503
4564 --If the item is not under shelf life control and
4565 --expiration date is not null then set the expiration date to null
4566 IF ((p_shlfcode = 1) AND (l_lotexpdate IS NOT NULL)) THEN
4567 l_lotexpdate := NULL;
4568 END IF;
4569
4570 IF (p_serctrl = 2 OR p_serctrl = 5 OR (p_serctrl = 6 AND
4571 p_srctype = 2 AND p_acttype = 1) OR (p_serctrl = 6 AND
4572 p_srctype = INV_GLOBALS.G_SourceType_IntOrder AND p_acttype = 1)
4573 OR (p_serctrl = 6 AND p_srctype = 8)
4574 /*2815918*/
4575 OR (P_serctrl = 6 AND p_srctype = 16 and p_acttype = 1) )
4576 THEN
4577 BEGIN
4578 SELECT 1
4579 into l_tnum
4580 FROM MTL_SERIAL_NUMBERS_INTERFACE
4581 WHERE TRANSACTION_INTERFACE_ID = l_sertempid
4582 AND ROWNUM < 2;
4583 EXCEPTION
4584 WHEN NO_DATA_FOUND THEN
4585 loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
4586
4587 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4588 SET LAST_UPDATE_DATE = SYSDATE,
4589 LAST_UPDATED_BY = l_userid,
4590 LAST_UPDATE_LOGIN = l_loginid,
4591 PROGRAM_APPLICATION_ID = l_applid,
4592 PROGRAM_ID = l_progid,
4593 PROGRAM_UPDATE_DATE = SYSDATE,
4594 REQUEST_ID = l_reqstid,
4595 ERROR_CODE = substrb(l_error_code,1,240)
4596 WHERE ROWID = l_lotrowid;
4597
4598 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4599 SET LAST_UPDATE_DATE = SYSDATE,
4600 LAST_UPDATED_BY = l_userid,
4601 LAST_UPDATE_LOGIN = l_loginid,
4602 PROGRAM_UPDATE_DATE = SYSDATE,
4603 PROCESS_FLAG = 3,
4604 LOCK_FLAG = 2,
4605 ERROR_CODE = substrb(l_error_code,1,240),
4606 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4607 WHERE ROWID = p_rowid;
4608
4609
4610 return(FALSE);
4611 END;
4612
4613 ELSE
4614 IF (l_sertempid IS NOT NULL) THEN
4615 DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
4616 WHERE TRANSACTION_INTERFACE_ID = l_sertempid;
4617 END IF;
4618
4619 END IF;
4620 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4621 SET LAST_UPDATE_DATE = SYSDATE,
4622 LAST_UPDATED_BY = l_userid,
4623 LAST_UPDATE_LOGIN = l_loginid,
4624 PROGRAM_APPLICATION_ID = l_applid,
4625 PROGRAM_ID = l_progid,
4626 PROGRAM_UPDATE_DATE = SYSDATE,
4627 REQUEST_ID = l_reqstid,
4628 PRIMARY_QUANTITY = l_lotpriqty,
4629 LOT_EXPIRATION_DATE = fnd_date.canonical_to_date(l_lotexpdate),
4630 SERIAL_TRANSACTION_TEMP_ID = l_sertempid
4631 WHERE ROWID = l_lotrowid;
4632
4633 END LOOP;
4634 IF int3%ISOPEN THEN
4635 CLOSE int3;
4636 END IF ;
4637
4638 EXCEPTION
4639 WHEN OTHERS THEN
4640 FND_MESSAGE.set_name('INV','INV_INT_UOMCONVCODE');
4641
4642 --WHENEVER SQL ERROR CONTINUE;
4643 UPDATE MTL_TRANSACTIONS_INTERFACE
4644 SET LAST_UPDATE_DATE = SYSDATE,
4645 LAST_UPDATED_BY = l_userid,
4646 LAST_UPDATE_LOGIN = l_loginid,
4647 PROGRAM_UPDATE_DATE = SYSDATE,
4648 PROCESS_FLAG = 3,
4649 LOCK_FLAG = 2,
4650 ERROR_CODE = substrb(l_error_code,1,240)
4651 WHERE ROWID = p_rowid;
4652
4653 return FALSE;
4654
4655 END lotcheck;
4656
4657
4658
4659 /******************************************************************
4660 *
4661 * setorgclientinfo()
4662 *
4663 ******************************************************************/
4664 FUNCTION setorgclientinfo(p_orgid in NUMBER)
4665 RETURN BOOLEAN
4666 IS
4667
4668 x_return_status varchar2(50);
4669
4670 BEGIN
4671
4672 --WHENEVER NOT FOUND CONTINUE;
4673
4674 --Commenting the processing based on checking PJM_INSTALL. Bug 3812559
4675 /*
4676 IF (pjm_installed = -1) THEN
4677 IF PJM_INSTALL.check_install
4678 THEN
4679 pjm_installed := 1;
4680 ELSE
4681 pjm_installed := 0;
4682 END IF;
4683
4684 END IF;
4685 */
4686
4687 /* IF (pjm_installed = 1) THEN */
4688 IF (client_info_org_id <> p_orgid) THEN
4689 INV_Project.Set_Org_client_info(x_return_status,
4690 p_orgid);
4691 IF (x_return_status <> 'S') THEN
4692 return FALSE;
4693 END IF;
4694 -- commented as a part of bug #2505534
4695 --client_info_org_id := p_orgid;
4696 END IF;
4697 /* END IF; */
4698 return TRUE;
4699
4700 EXCEPTION
4701 WHEN OTHERS THEN
4702 return FALSE;
4703 END setorgclientinfo;
4704
4705 /******************************************************************
4706 -- Function
4707 -- getloc
4708 -- Description
4709 -- Private function to get Locator id using Flex API's
4710 -- Uses FND_FLEX_KEY_API (AFFFKAIS/B.pls) and
4711 -- FND_FLEX_EXT (AFFFEXTS/B.pls)
4712 --
4713 -- Assumes that only Id's are populated in the MTI segments
4714 --
4715 -- Returns
4716 -- Returns false if any error occurs
4717 -- Output Parameters
4718 -- x_locid locator or null if error occurred
4719 ******************************************************************/
4720
4721 FUNCTION getloc(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_locctrl NUMBER, p_segmentarray fnd_flex_ext.segmentarray) return BOOLEAN is
4722 l_nseg NUMBER;
4723 l_seglist fnd_flex_key_api.segment_list;
4724 l_fftype fnd_flex_key_api.flexfield_type;
4725 l_ffstru fnd_flex_key_api.structure_type;
4726 l_segment_type fnd_flex_key_api.segment_type;
4727 l_locator VARCHAR2(32000);
4728 l_error_exp VARCHAR2(250);
4729 l_structure_list fnd_flex_key_api.structure_list;
4730 l_nstru NUMBER;
4731 l_index NUMBER;
4732 l_locid NUMBER;
4733 l_delim VARCHAR2(1);
4734 l_val BOOLEAN := FALSE;
4735 DYNAMIC CONSTANT NUMBER := 3;
4736 l_operation VARCHAR2(100);
4737 -- Local array to hold the data for getting the cancatenated segment.
4738 l_segmentarray fnd_flex_ext.segmentarray;
4739 BEGIN
4740
4741 fnd_flex_key_api.set_session_mode('seed_data');
4742
4743 -- find flex field type
4744 l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MTLL');
4745
4746 -- find flex structure type
4747 l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
4748
4749 -- find segment list for the key flex field
4750 fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
4751
4752 -- find segment delimiter
4753 l_delim := l_ffstru.segment_separator;
4754
4755 -- get the corresponding column for all segments
4756 --
4757 -- The default segments for the LocatorKFF is SEGMENT1 - SEGMENT20
4758 -- 'To_number(Substr(l_segment_type.column_name, 8))' gives the
4759 -- number of the segment i.e. 1 - 20 which is used as index to
4760 -- fetch the corresponding columns from segments array
4761 --
4762 FOR l_loop IN 1..l_nseg LOOP
4763
4764 l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(l_loop));
4765 -- Bug Fix#4747090
4766 --l_segmentarray contains data in the order flexfield is defined. Used in creating cancatenated segments for validation.
4767 l_segmentarray(l_loop) := p_segmentarray(To_number(Substr(l_segment_type.column_name, 8)));
4768 END LOOP;
4769 -- Bug Fix#4747090
4770 -- Gets the encoded cancatenated string
4771 l_locator := fnd_flex_ext.concatenate_segments(n_segments => l_nseg,
4772 segments => l_segmentarray,
4773 delimiter => l_delim);
4774 IF (l_debug = 1) THEN
4775 inv_log_util.trace('Locator is : ' || l_locator, 'INV_TXN_MANAGER_GRP','1');
4776 END IF;
4777 /*
4778 * If Locator control allows dynamic creation then create the combination
4779 * if it does not already exist else just check if it exists.
4780 */
4781 if p_locctrl = DYNAMIC then
4782 /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
4783 call FND_FLEX_KEYVAL.Validate_Segs with 'CREATE_COMBINATION' operation*/
4784 IF (g_create_loc_at = 1) then
4785 l_operation := 'CREATE_COMBINATION';
4786 ELSE
4787 l_operation := 'CREATE_COMB_NO_AT';
4788 END IF;
4789 else
4790 l_operation := 'FIND_COMBINATION';
4791 end if;
4792
4793 l_val := FND_FLEX_KEYVAL.Validate_Segs(
4794 OPERATION => l_operation,
4795 APPL_SHORT_NAME => 'INV',
4796 KEY_FLEX_CODE => 'MTLL',
4797 STRUCTURE_NUMBER => 101,
4798 CONCAT_SEGMENTS => l_locator,
4799 VALUES_OR_IDS => 'I',
4800 DATA_SET => p_org_id ) ;
4801
4802 if l_val then
4803 x_locid := fnd_flex_keyval.combination_id;
4804 else
4805 x_locid := NULL;
4806 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4807 IF (l_debug = 1) THEN
4808 inv_log_util.trace('Error in getloc : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4809 inv_log_util.trace('Error in getloc : error_segment :' || FND_FLEX_KEYVAL.error_segment , 'INV_TXN_MANAGER_GRP','1');
4810 inv_log_util.trace('Error in getloc : error_message :' || FND_FLEX_KEYVAL.error_message , 'INV_TXN_MANAGER_GRP','1');
4811 inv_log_util.trace('Error in getloc : encoded_error_message :' || FND_FLEX_KEYVAL.encoded_error_message , 'INV_TXN_MANAGER_GRP','1');
4812 END IF;
4813 end if;
4814
4815 return l_val;
4816
4817 EXCEPTION
4818
4819 WHEN OTHERS THEN
4820
4821 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4822 IF (l_debug = 1) THEN
4823 inv_log_util.trace('Error in getloc : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4824 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
4825 END IF;
4826 x_locid := NULL;
4827 return FALSE;
4828
4829 END getloc;
4830 /******************************************************************
4831 -- Function
4832 -- getlocid
4833 -- Description
4834 -- find the locator using the flex field segments
4835 -- Calls private function getLoc to do the work
4836 -- Output Parameters
4837 -- x_locator locator or null if error occurred
4838 ******************************************************************/
4839 FUNCTION getlocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
4840 l_segs1 fnd_flex_ext.segmentArray;
4841 l_error_exp VARCHAR2(250);
4842 l_locid number;
4843 begin
4844
4845 SELECT
4846 LOCATOR_ID,
4847 LOC_SEGMENT1,
4848 LOC_SEGMENT2,
4849 LOC_SEGMENT3,
4850 LOC_SEGMENT4,
4851 LOC_SEGMENT5,
4852 LOC_SEGMENT6,
4853 LOC_SEGMENT7,
4854 LOC_SEGMENT8,
4855 LOC_SEGMENT9,
4856 LOC_SEGMENT10,
4857 LOC_SEGMENT11,
4858 LOC_SEGMENT12,
4859 LOC_SEGMENT13,
4860 LOC_SEGMENT14,
4861 LOC_SEGMENT15,
4862 LOC_SEGMENT16,
4863 LOC_SEGMENT17,
4864 LOC_SEGMENT18,
4865 LOC_SEGMENT19,
4866 LOC_SEGMENT20
4867 INTO
4868 l_locid,
4869 l_segs1(1),
4870 l_segs1(2),
4871 l_segs1(3),
4872 l_segs1(4),
4873 l_segs1(5),
4874 l_segs1(6),
4875 l_segs1(7),
4876 l_segs1(8),
4877 l_segs1(9),
4878 l_segs1(10),
4879 l_segs1(11),
4880 l_segs1(12),
4881 l_segs1(13),
4882 l_segs1(14),
4883 l_segs1(15),
4884 l_segs1(16),
4885 l_segs1(17),
4886 l_segs1(18),
4887 l_segs1(19),
4888 l_segs1(20)
4889 FROM mtl_transactions_interface mti
4890 WHERE mti.rowid = p_rowid;
4891
4892 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
4893
4894 EXCEPTION
4895
4896 WHEN OTHERS THEN
4897 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4898 IF (l_debug = 1) THEN
4899 inv_log_util.trace('Error in getlocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4900 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
4901 END IF;
4902 x_locid := NULL;
4903 return FALSE;
4904
4905 END getlocid;
4906
4907 /******************************************************************
4908 -- Function
4909 -- getxlocid
4910 -- Description
4911 -- find the locator using the flex field segments
4912 -- Calls private function getLoc to do the work
4913 -- Output Parameters
4914 -- x_locator locator or null if error occurred
4915 ******************************************************************/
4916
4917 FUNCTION getxlocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
4918 l_segs1 fnd_flex_ext.segmentArray;
4919 l_error_exp VARCHAR2(250);
4920 l_locid number;
4921 begin
4922
4923 SELECT
4924 TRANSFER_LOCATOR,
4925 XFER_LOC_SEGMENT1,
4926 XFER_LOC_SEGMENT2,
4927 XFER_LOC_SEGMENT3,
4928 XFER_LOC_SEGMENT4,
4929 XFER_LOC_SEGMENT5,
4930 XFER_LOC_SEGMENT6,
4931 XFER_LOC_SEGMENT7,
4932 XFER_LOC_SEGMENT8,
4933 XFER_LOC_SEGMENT9,
4934 XFER_LOC_SEGMENT10,
4935 XFER_LOC_SEGMENT11,
4936 XFER_LOC_SEGMENT12,
4937 XFER_LOC_SEGMENT13,
4938 XFER_LOC_SEGMENT14,
4939 XFER_LOC_SEGMENT15,
4940 XFER_LOC_SEGMENT16,
4941 XFER_LOC_SEGMENT17,
4942 XFER_LOC_SEGMENT18,
4943 XFER_LOC_SEGMENT19,
4944 XFER_LOC_SEGMENT20
4945 INTO
4946 l_locid,
4947 l_segs1(1),
4948 l_segs1(2),
4949 l_segs1(3),
4950 l_segs1(4),
4951 l_segs1(5),
4952 l_segs1(6),
4953 l_segs1(7),
4954 l_segs1(8),
4955 l_segs1(9),
4956 l_segs1(10),
4957 l_segs1(11),
4958 l_segs1(12),
4959 l_segs1(13),
4960 l_segs1(14),
4961 l_segs1(15),
4962 l_segs1(16),
4963 l_segs1(17),
4964 l_segs1(18),
4965 l_segs1(19),
4966 l_segs1(20)
4967 FROM mtl_transactions_interface mti
4968 WHERE mti.rowid = p_rowid;
4969
4970 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
4971
4972 EXCEPTION
4973
4974 WHEN OTHERS THEN
4975 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4976 IF (l_debug = 1) THEN
4977 inv_log_util.trace('Error in getxlocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4978 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
4979 END IF;
4980 x_locid := NULL;
4981 return FALSE;
4982
4983 END getxlocid;
4984
4985 /******************************************************************
4986 -- Function
4987 -- getplocid. Added for Bug: 7323175
4988 -- Description
4989 -- find the locator using the flex field segments
4990 -- Calls private function getLoc to do the work.
4991 -- Used only in case of Project enabled ords for the
4992 -- creation of physical locators
4993 -- Output Parameters
4994 -- x_locator locator or null if error occurred
4995 ******************************************************************/
4996 FUNCTION getplocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
4997 l_segs1 fnd_flex_ext.segmentArray;
4998 l_error_exp VARCHAR2(250);
4999 l_locid number;
5000 begin
5001
5002 SELECT
5003 LOCATOR_ID,
5004 LOC_SEGMENT1,
5005 LOC_SEGMENT2,
5006 LOC_SEGMENT3,
5007 LOC_SEGMENT4,
5008 LOC_SEGMENT5,
5009 LOC_SEGMENT6,
5010 LOC_SEGMENT7,
5011 LOC_SEGMENT8,
5012 LOC_SEGMENT9,
5013 LOC_SEGMENT10,
5014 LOC_SEGMENT11,
5015 LOC_SEGMENT12,
5016 LOC_SEGMENT13,
5017 LOC_SEGMENT14,
5018 LOC_SEGMENT15,
5019 LOC_SEGMENT16,
5020 LOC_SEGMENT17,
5021 LOC_SEGMENT18,
5022 '',
5023 ''
5024 INTO
5025 l_locid,
5026 l_segs1(1),
5027 l_segs1(2),
5028 l_segs1(3),
5029 l_segs1(4),
5030 l_segs1(5),
5031 l_segs1(6),
5032 l_segs1(7),
5033 l_segs1(8),
5034 l_segs1(9),
5035 l_segs1(10),
5036 l_segs1(11),
5037 l_segs1(12),
5038 l_segs1(13),
5039 l_segs1(14),
5040 l_segs1(15),
5041 l_segs1(16),
5042 l_segs1(17),
5043 l_segs1(18),
5044 l_segs1(19),
5045 l_segs1(20)
5046
5047
5048
5049 FROM mtl_transactions_interface mti
5050 WHERE mti.rowid = p_rowid;
5051
5052 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5053
5054 EXCEPTION
5055
5056 WHEN OTHERS THEN
5057 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5058 IF (l_debug = 1) THEN
5059 inv_log_util.trace('Error in getplocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5060 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5061 END IF;
5062 x_locid := NULL;
5063 return FALSE;
5064
5065 END getplocid;
5066
5067 /******************************************************************
5068 -- Function
5069 -- getxplocid : Added for Bug: 7323175
5070 -- Description
5071 -- find the locator using the flex field segments
5072 -- Calls private function getLoc to do the work
5073 -- Used only in case of Project enabled orgs for the
5074 -- creation of physical locators for transfer transactions
5075 -- Output Parameters
5076 -- x_locator locator or null if error occurred
5077 ******************************************************************/
5078
5079 FUNCTION getxplocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
5080 l_segs1 fnd_flex_ext.segmentArray;
5081 l_error_exp VARCHAR2(250);
5082 l_locid number;
5083 begin
5084
5085 SELECT
5086 TRANSFER_LOCATOR,
5087 XFER_LOC_SEGMENT1,
5088 XFER_LOC_SEGMENT2,
5089 XFER_LOC_SEGMENT3,
5090 XFER_LOC_SEGMENT4,
5091 XFER_LOC_SEGMENT5,
5092 XFER_LOC_SEGMENT6,
5093 XFER_LOC_SEGMENT7,
5094 XFER_LOC_SEGMENT8,
5095 XFER_LOC_SEGMENT9,
5096 XFER_LOC_SEGMENT10,
5097 XFER_LOC_SEGMENT11,
5098 XFER_LOC_SEGMENT12,
5099 XFER_LOC_SEGMENT13,
5100 XFER_LOC_SEGMENT14,
5101 XFER_LOC_SEGMENT15,
5102 XFER_LOC_SEGMENT16,
5103 XFER_LOC_SEGMENT17,
5104 XFER_LOC_SEGMENT18,
5105 '',
5106 ''
5107
5108 INTO
5109 l_locid,
5110 l_segs1(1),
5111 l_segs1(2),
5112 l_segs1(3),
5113 l_segs1(4),
5114 l_segs1(5),
5115 l_segs1(6),
5116 l_segs1(7),
5117 l_segs1(8),
5118 l_segs1(9),
5119 l_segs1(10),
5120 l_segs1(11),
5121 l_segs1(12),
5122 l_segs1(13),
5123 l_segs1(14),
5124 l_segs1(15),
5125 l_segs1(16),
5126 l_segs1(17),
5127 l_segs1(18),
5128 l_segs1(19),
5129 l_segs1(20)
5130
5131
5132 FROM mtl_transactions_interface mti
5133 WHERE mti.rowid = p_rowid;
5134
5135 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5136
5137 EXCEPTION
5138
5139 WHEN OTHERS THEN
5140 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5141 IF (l_debug = 1) THEN
5142 inv_log_util.trace('Error in getxplocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5143 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5144 END IF;
5145 x_locid := NULL;
5146 return FALSE;
5147
5148 END getxplocid;
5149
5150
5151 /******************************************************************
5152 *
5153 * validate_loc_for_project()
5154 *
5155 ******************************************************************/
5156 FUNCTION validate_loc_for_project(p_ltv_locid in NUMBER, p_ltv_orgid in NUMBER, p_ltv_srctype in NUMBER,
5157 p_ltv_trxact in NUMBER, p_ltv_trx_src_id in NUMBER, p_ltv_flow_schedule in NUMBER,
5158 p_ltv_scheduled_flag in NUMBER)
5159 RETURN BOOLEAN
5160 IS
5161
5162 CURSOR LTV1 IS
5163 SELECT PROJECT_ID, TASK_ID
5164 FROM WIP_DISCRETE_JOBS
5165 WHERE WIP_ENTITY_ID = p_ltv_trx_src_id
5166 AND ROWNUM < 2 ;
5167
5168 CURSOR LTV2 IS
5169 SELECT PROJECT_ID, TASK_ID
5170 FROM WIP_FLOW_SCHEDULES
5171 WHERE WIP_ENTITY_ID = p_ltv_trx_src_id
5172 AND ROWNUM < 2 ;
5173
5174 l_ltv_project_ref_enabled NUMBER := 0 ;
5175 l_ltv_project_id NUMBER;
5176 l_ltv_task_id NUMBER;
5177 l_ltv_mode VARCHAR2(20);
5178 l_ltv_reqd_flag VARCHAR2(10);
5179 l_ltv_loc_project_valid NUMBER := 1;
5180 l_ltv_error_mesg VARCHAR2(241);
5181
5182 BEGIN
5183
5184 -- WHENEVER NOT FOUND CONTINUE;
5185
5186 BEGIN
5187 SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
5188 INTO l_ltv_project_ref_enabled
5189 FROM MTL_PARAMETERS
5190 WHERE ORGANIZATION_ID = p_ltv_orgid ;
5191 EXCEPTION
5192 WHEN NO_DATA_FOUND THEN
5193 FND_MESSAGE.set_name('INV','INV_INT_ORGEXP');
5194 return(FALSE);
5195 END;
5196
5197 IF l_ltv_project_ref_enabled = 0 THEN
5198 return(TRUE);
5199 END IF;
5200
5201 l_ltv_mode := 'ANY';
5202 l_ltv_reqd_flag := 'N';
5203
5204 IF p_ltv_srctype = 5 THEN
5205 IF p_ltv_scheduled_flag = 1 THEN
5206
5207 IF p_ltv_trx_src_id IS NULL THEN
5208 FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5209 return FALSE;
5210 END IF;
5211
5212 IF p_ltv_flow_schedule = 0 THEN
5213 OPEN LTV1 ;
5214 FETCH LTV1 INTO
5215 l_ltv_project_id,
5216 l_ltv_task_id;
5217
5218 IF SQL%NOTFOUND THEN
5219 FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5220 CLOSE LTV1;
5221 return(FALSE);
5222 END IF;
5223 CLOSE LTV1;
5224 ELSE
5225 IF p_ltv_flow_schedule = 1 THEN
5226 OPEN LTV2 ;
5227 FETCH LTV2 INTO
5228 l_ltv_project_id,
5229 l_ltv_task_id;
5230
5231 IF SQL%NOTFOUND THEN
5232 FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5233 CLOSE LTV2;
5234 return(FALSE);
5235 END IF;
5236 CLOSE LTV2;
5237 END IF;
5238 END IF;
5239
5240 l_ltv_mode := 'SPECIFIC';
5241 IF ( p_ltv_trxact = 31 OR p_ltv_trxact = 32 ) THEN
5242 l_ltv_reqd_flag := 'Y';
5243 END IF;
5244 ELSE
5245 return(TRUE);
5246 END IF;
5247 END IF;
5248 IF (l_debug=1) THEN
5249 inv_log_util.trace('Validating l_ltv_project_id='||l_ltv_project_id||' l_ltv_task_id='||l_ltv_task_id, 'INV_TXN_MANAGER_GRP','9');
5250 END IF;
5251
5252 IF p_ltv_scheduled_flag = 1 THEN
5253 inv_wwacst.call_prj_loc_validation(
5254 p_ltv_locid,
5255 p_ltv_orgid,
5256 l_ltv_mode,
5257 l_ltv_reqd_flag,
5258 l_ltv_project_id,
5259 l_ltv_task_id,
5260 l_ltv_loc_project_valid,
5261 l_ltv_error_mesg);
5262
5263
5264 IF l_ltv_loc_project_valid = 0 THEN
5265 --Bug #6449667, Modified the code below so that relavant error message are displayed from project validation API.
5266 IF (l_debug=1) THEN
5267 inv_log_util.trace('Error in validate_loc_for_project : ' || l_ltv_error_mesg, 'INV_TXN_MANAGER_GRP','9');
5268 END IF;
5269 --FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5270 FND_MESSAGE.set_name('INV', 'INV_FND_GENERIC_MSG');
5271 FND_MESSAGE.set_token('MSG', l_ltv_error_mesg);
5272 return(FALSE);
5273 ELSE
5274 FND_MESSAGE.clear;
5275 return(TRUE);
5276 END IF;
5277
5278
5279 ELSE
5280 return(TRUE);
5281 END IF;
5282
5283
5284 EXCEPTION
5285 WHEN OTHERS THEN
5286 RETURN FALSE;
5287 END validate_loc_for_project;
5288
5289
5290 /******************************************************************
5291 *
5292 * validate_unit_number()
5293 *
5294 ******************************************************************/
5295 FUNCTION validate_unit_number(p_unit_number in VARCHAR2, p_orgid in NUMBER, p_itemid in NUMBER,
5296 p_srctype in NUMBER, p_acttype in NUMBER)
5297
5298 RETURN BOOLEAN
5299 IS
5300
5301 l_unit_no_ok NUMBER := 1;
5302
5303 BEGIN
5304
5305 -- WHENEVER NOT FOUND CONTINUE;
5306
5307 IF (NVL(PJM_UNIT_EFF.ENABLED,'N') = 'Y') THEN
5308 IF (PJM_UNIT_EFF.UNIT_EFFECTIVE_ITEM(p_itemid,p_orgid) = 'Y') THEN
5309 IF (p_srctype = 3 AND p_acttype in(3,21) AND p_unit_number IS NOT NULL) then
5310 l_unit_no_ok := 0;
5311 SELECT count(1) INTO l_unit_no_ok
5312 FROM PJM_UNIT_NUMBERS_LOV_V
5313 WHERE UNIT_NUMBER =p_unit_number;
5314 END IF;
5315 END IF;
5316 END IF;
5317
5318 IF (l_unit_no_ok = 0) THEN
5319
5320 FND_MESSAGE.set_name('INV','INV_INT_UNITNUMBER');
5321 FND_MESSAGE.set_token('ROUTINE','validate_unit_number');
5322 return FALSE;
5323 ELSE
5324 FND_MESSAGE.clear;
5325 return TRUE;
5326 END IF;
5327
5328 EXCEPTION
5329 WHEN OTHERS THEN
5330 RETURN FALSE;
5331 END validate_unit_number;
5332
5333 /******************************************************************
5334 * get_costgrpid() : This function derives the cost group id for a particular Organization, Subinventory and Locator_id combination
5335 * Added for Bug 6356567
5336 ******************************************************************/
5337
5338 FUNCTION get_costgrpid(p_org_id in NUMBER, p_subinv in VARCHAR2, p_locatorid in NUMBER)
5339 RETURN mtl_transactions_interface.cost_group_id%TYPE IS
5340 l_cost_group_id number;
5341 l_org_cost_group_id number;
5342 l_primary_cost_method mtl_parameters.primary_cost_method%TYPE;
5343 l_project_enabled NUMBER;
5344 l_project_id NUMBER;
5345 BEGIN
5346 IF p_org_id is NULL then
5347 return NULL;
5348 END IF;
5349
5350 l_cost_group_id := NULL; /* Initializing the value of Cost Group id to Null */
5351
5352 BEGIN
5353 SELECT Nvl(project_reference_enabled,2), default_cost_group_id, primary_cost_method
5354 INTO l_project_enabled, l_org_cost_group_id, l_primary_cost_method
5355 FROM mtl_parameters
5356 WHERE organization_id = p_org_id;
5357 EXCEPTION
5358 WHEN no_data_found THEN
5359 return NULL;
5360 END;
5361
5362 IF (l_project_enabled = 1 and p_locatorid is not null) THEN --If the Org is Project enabled Org
5363 BEGIN
5364 SELECT project_id INTO l_project_id
5365 FROM mtl_item_locations
5366 WHERE organization_id =p_org_id
5367 AND inventory_location_id = p_locatorid;
5368 EXCEPTION
5369 WHEN no_data_found THEN
5370 l_project_id := null;
5371 END;
5372
5373 IF l_project_id IS NOT NULL THEN
5374 SELECT mpp.costing_group_id INTO l_cost_group_id
5375 FROM mrp_project_parameters mpp
5376 WHERE mpp.project_id = l_project_id
5377 AND mpp.organization_id = p_org_id;
5378 END IF; --IF l_project_id IS NOT NULL THEN
5379 END IF;
5380
5381 IF (l_cost_group_id is null) then
5382 IF l_primary_cost_method = 1 THEN -- costing method is standard
5383 BEGIN
5384 SELECT default_cost_group_id INTO l_cost_group_id
5385 FROM mtl_secondary_inventories
5386 WHERE secondary_inventory_name = p_subinv
5387 AND organization_id = p_org_id
5388 AND default_cost_group_id IS NOT NULL;
5389 EXCEPTION
5390 WHEN no_data_found THEN
5391 l_cost_group_id := l_org_cost_group_id;
5392 END;
5393 ELSE -- costing method is not standard
5394 l_cost_group_id := l_org_cost_group_id;
5395 END IF;
5396 END IF;
5397 return l_cost_group_id;
5398 END get_costgrpid;
5399
5400 /******************************************************************
5401 *
5402 * update_mil() : To update dynamic locators in autonomous mode
5403 * Added for Bug# 5044059
5404 * Added a parameter p_plocid Physical Locator for Bug# 7323175
5405 ******************************************************************/
5406 PROCEDURE update_mil(p_userid NUMBER,
5407 p_loginid NUMBER,
5408 p_applid NUMBER,
5409 p_progid NUMBER,
5410 p_reqstid NUMBER,
5411 p_subinv VARCHAR2,
5412 p_default_locator_status NUMBER,
5413 p_orgid NUMBER,
5414 p_locid NUMBER,
5415 p_plocid NUMBER) IS
5416 PRAGMA AUTONOMOUS_TRANSACTION;
5417 l_count NUMBER := 0;
5418 BEGIN
5419
5420 begin
5421 SELECT 1 INTO l_count
5422 FROM MTL_ITEM_LOCATIONS
5423 WHERE ORGANIZATION_ID = p_orgid
5424 /* Start: Fix for Bug# 7323175 : Also considering the physical locator for locking */
5425 --AND INVENTORY_LOCATION_ID = p_locid
5426 AND INVENTORY_LOCATION_ID IN (p_locid,p_plocid)
5427 /* End: Fix for Bug# 7323175 */
5428 AND SUBINVENTORY_CODE is NULL FOR UPDATE NOWAIT;
5429 exception
5430 when others then
5431 l_count := 0;
5432 IF (l_debug = 1) THEN
5433 inv_log_util.trace('Could not lock MIL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
5434 END IF;
5435 end;
5436
5437 IF (l_count = 1) THEN
5438 UPDATE MTL_ITEM_LOCATIONS
5439 SET LAST_UPDATE_DATE = SYSDATE,
5440 LAST_UPDATED_BY = p_userid,
5441 LAST_UPDATE_LOGIN = p_loginid,
5442 PROGRAM_APPLICATION_ID = p_applid,
5443 PROGRAM_ID = p_progid,
5444 PROGRAM_UPDATE_DATE = SYSDATE,
5445 REQUEST_ID = p_reqstid,
5446 SUBINVENTORY_CODE = p_subinv,
5447 STATUS_ID = p_default_locator_status,
5448 /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
5449 physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
5450 p_plocid would be null */
5451 PHYSICAL_LOCATION_ID = p_plocid
5452 /* End: Fix for Bug# 7323175 */
5453 WHERE ORGANIZATION_ID = p_orgid
5454 /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
5455 --AND INVENTORY_LOCATION_ID = p_locid
5456 AND INVENTORY_LOCATION_ID IN (p_locid,p_plocid)
5457 /* End: Fix for Bug# 7323175 */
5458 AND SUBINVENTORY_CODE is NULL;
5459
5460
5461 IF (l_debug = 1) THEN
5462 inv_log_util.trace('Rows updated in MIL = '||SQL%ROWCOUNT, 'INV_TXN_MANAGER_GRP','9');
5463 END IF;
5464 END IF;
5465
5466 COMMIT;
5467
5468 EXCEPTION
5469 WHEN OTHERS THEN
5470 IF (l_debug = 1) THEN
5471 inv_log_util.trace('update_mil SQL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
5472 END IF;
5473 ROLLBACK;
5474 RETURN;
5475 END update_mil;
5476
5477
5478 /*Bug#5125632. Added the following procedure to update the lot status
5479 of lots for a given line in MTLI, if they are NULL.
5480 Fist MTL_LOT_NUMBERS is checked to find the status. If there is no row in this
5481 table, then, MTL_SYSTEM_ITEMS is checked to fetch the 'default_lot_status_id'
5482 for the corresponding item*/
5483
5484 Procedure update_status_id_in_mtli( p_txn_interface_id IN NUMBER
5485 ,p_org_id IN NUMBER
5486 ,p_inventory_item_id IN NUMBER ) Is
5487 l_status_enabled VARCHAR2(1);
5488 l_status_id NUMBER;
5489 l_mtli_status_id NUMBER;
5490 l_lot_num VARCHAR2(31);
5491
5492 CURSOR lots IS
5493 SELECT ROWID
5494 , lot_number
5495 , status_id
5496 FROM MTL_TRANSACTION_LOTS_INTERFACE
5497 WHERE transaction_interface_id = p_txn_interface_id;
5498
5499 Begin
5500 IF (l_debug = 1) THEN
5501 inv_log_util.trace('Entered The Procedure update_status_id_in_mtli() with the parameters:', 'INV_TXN_MANAGER_GRP','1');
5502 inv_log_util.trace('p_txn_interface_id:'||p_txn_interface_id, 'INV_TXN_MANAGER_GRP','1');
5503 inv_log_util.trace('p_org_id:'||p_org_id, 'INV_TXN_MANAGER_GRP','1');
5504 inv_log_util.trace('p_inventory_item_id:'||p_inventory_item_id, 'INV_TXN_MANAGER_GRP','1');
5505 End If;
5506
5507 FOR lots_rec IN lots
5508 LOOP
5509 IF lots_rec.status_id IS NULL THEN
5510 l_mtli_status_id := lots_rec.status_id;--To initialize 'lots_rec.status_id' with NULL
5511 IF (l_debug = 1) THEN
5512 inv_log_util.trace('Current cursor values are :', 'INV_TXN_MANAGER_GRP','1');
5513 inv_log_util.trace('lots_rec.lot_number:'||lots_rec.lot_number, 'INV_TXN_MANAGER_GRP','1');
5514 inv_log_util.trace('lots_rec.status_id:'||lots_rec.status_id, 'INV_TXN_MANAGER_GRP','1');
5515 End If;
5516 BEGIN
5517 SELECT status_id
5518 INTO l_mtli_status_id
5519 FROM mtl_lot_numbers
5520 WHERE organization_id = p_org_id
5521 AND inventory_item_id = p_inventory_item_id
5522 AND lot_number = lots_rec.lot_number;
5523
5524 IF (l_debug = 1) THEN
5525 inv_log_util.trace('After selecting from MLN, Value is:', 'INV_TXN_MANAGER_GRP','1');
5526 inv_log_util.trace('l_mtli_status_id:'||l_mtli_status_id, 'INV_TXN_MANAGER_GRP','1');
5527 End If;
5528
5529 EXCEPTION WHEN NO_DATA_FOUND THEN
5530 BEGIN
5531 SELECT lot_status_enabled
5532 ,default_lot_status_id
5533 INTO l_status_enabled
5534 ,l_status_id
5535 FROM mtl_system_items
5536 WHERE organization_id = p_org_id
5537 AND inventory_item_id = p_inventory_item_id;
5538 IF (l_debug = 1) THEN
5539 inv_log_util.trace('After selecting from MSI, Values are:', 'INV_TXN_MANAGER_GRP','1');
5540 inv_log_util.trace('lot_status_enabled:'||l_status_enabled, 'INV_TXN_MANAGER_GRP','1');
5541 inv_log_util.trace('default_lot_status_id:'||l_status_id, 'INV_TXN_MANAGER_GRP','1');
5542 End If;
5543
5544 IF (NVL(l_status_enabled, 'N') = 'Y') THEN
5545 l_mtli_status_id := l_status_id;
5546 ELSE
5547 l_mtli_status_id := 1;
5548 END IF;
5549 END;
5550 END;
5551
5552 IF (l_debug = 1) THEN
5553 inv_log_util.trace('Before Update of MTLI', 'INV_TXN_MANAGER_GRP','1');
5554 End If;
5555
5556 UPDATE mtl_transaction_lots_interface
5557 SET status_id = l_mtli_status_id
5558 ,last_updated_by = fnd_global.user_id
5559 ,last_update_date = sysdate
5560 ,last_update_login = fnd_global.login_id
5561 ,request_id = fnd_global.conc_request_id
5562 ,program_application_id = fnd_global.prog_appl_id
5563 ,program_id = fnd_global.conc_program_id
5564 ,program_update_date = Decode(fnd_global.conc_request_id, -1, NULL, SYSDATE)
5565 WHERE ROWID = lots_rec.rowid;
5566
5567 IF (l_debug = 1) THEN
5568 inv_log_util.trace('After Update of MTLI', 'INV_TXN_MANAGER_GRP','1');
5569 End If;
5570
5571 END IF;
5572 END LOOP;
5573 EXCEPTION WHEN OTHERS THEN
5574 IF lots%ISOPEN THEN
5575 CLOSE lots;
5576 END IF;
5577 IF (l_debug = 1) THEN
5578 inv_log_util.trace('Exception occurred in update_status_id_in_mtli procedure:', 'INV_TXN_MANAGER_GRP','1');
5579 inv_log_util.trace('Error Is:'||SQLERRM, 'INV_TXN_MANAGER_GRP','1');
5580 End If;
5581
5582 End update_status_id_in_mtli;
5583
5584 /******************************************************************
5585 *
5586 * validate_lot_serial_for_rcpt()
5587 * SDPAUL Bug# 5710830
5588 * This private procedure is used to validate a set of
5589 * MTL_TRANSACTION_LOTS_INTERFACE and MTL_SERIAL_NUMBERS_INTERFACE records
5590 * and inserts them into the corresponding master tables.
5591 * These validations are only needed for Receipt into stores transaction -> 27
5592 * and for the transaction sources -> 3,6 and 13.
5593 *
5594 ******************************************************************/
5595
5596 PROCEDURE validate_lot_serial_for_rcpt
5597 (p_interface_id IN NUMBER
5598 , p_org_id IN NUMBER
5599 , p_item_id IN NUMBER
5600 , p_lotctrl IN NUMBER
5601 , p_serctrl IN NUMBER
5602 , p_rev IN VARCHAR2 DEFAULT NULL
5603 , p_trx_src_id IN NUMBER DEFAULT NULL
5604 , p_trx_action_id IN NUMBER DEFAULT NULL
5605 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
5606 , p_locator_id IN NUMBER DEFAULT NULL
5607 , x_proc_msg OUT NOCOPY VARCHAR2
5608 , x_return_status OUT NOCOPY VARCHAR2
5609 )
5610 IS
5611 CURSOR cur_MTLI IS
5612 SELECT LOT_NUMBER
5613 , LOT_EXPIRATION_DATE
5614 , LOT_ATTRIBUTE_CATEGORY
5615 , ATTRIBUTE_CATEGORY
5616 , ATTRIBUTE1
5617 , ATTRIBUTE2
5618 , ATTRIBUTE3
5619 , ATTRIBUTE4
5620 , ATTRIBUTE5
5621 , ATTRIBUTE6
5622 , ATTRIBUTE7
5623 , ATTRIBUTE8
5624 , ATTRIBUTE9
5625 , ATTRIBUTE10
5626 , ATTRIBUTE11
5627 , ATTRIBUTE12
5628 , ATTRIBUTE13
5629 , ATTRIBUTE14
5630 , ATTRIBUTE15
5631 , C_ATTRIBUTE1
5632 , C_ATTRIBUTE2
5633 , C_ATTRIBUTE3
5634 , C_ATTRIBUTE4
5635 , C_ATTRIBUTE5
5636 , C_ATTRIBUTE6
5637 , C_ATTRIBUTE7
5638 , C_ATTRIBUTE8
5639 , C_ATTRIBUTE9
5640 , C_ATTRIBUTE10
5641 , C_ATTRIBUTE11
5642 , C_ATTRIBUTE12
5643 , C_ATTRIBUTE13
5644 , C_ATTRIBUTE14
5645 , C_ATTRIBUTE15
5646 , C_ATTRIBUTE16
5647 , C_ATTRIBUTE17
5648 , C_ATTRIBUTE18
5649 , C_ATTRIBUTE19
5650 , C_ATTRIBUTE20
5651 , N_ATTRIBUTE1
5652 , N_ATTRIBUTE2
5653 , N_ATTRIBUTE3
5654 , N_ATTRIBUTE4
5655 , N_ATTRIBUTE5
5656 , N_ATTRIBUTE6
5657 , N_ATTRIBUTE7
5658 , N_ATTRIBUTE8
5659 , N_ATTRIBUTE9
5660 , N_ATTRIBUTE10
5661 , D_ATTRIBUTE1
5662 , D_ATTRIBUTE2
5663 , D_ATTRIBUTE3
5664 , D_ATTRIBUTE4
5665 , D_ATTRIBUTE5
5666 , D_ATTRIBUTE6
5667 , D_ATTRIBUTE7
5668 , D_ATTRIBUTE8
5669 , D_ATTRIBUTE9
5670 , D_ATTRIBUTE10
5671 , GRADE_CODE
5672 , ORIGINATION_DATE
5673 , DATE_CODE
5674 , STATUS_ID
5675 , CHANGE_DATE
5676 , AGE
5677 , RETEST_DATE
5678 , MATURITY_DATE
5679 , ITEM_SIZE
5680 , COLOR
5681 , VOLUME
5682 , VOLUME_UOM
5683 , PLACE_OF_ORIGIN
5684 , BEST_BY_DATE
5685 , LENGTH
5686 , LENGTH_UOM
5687 , RECYCLED_CONTENT
5688 , THICKNESS
5689 , THICKNESS_UOM
5690 , WIDTH
5691 , WIDTH_UOM
5692 , TERRITORY_CODE
5693 , SUPPLIER_LOT_NUMBER
5694 , VENDOR_NAME
5695 , SERIAL_TRANSACTION_TEMP_ID
5696 FROM MTL_TRANSACTION_LOTS_INTERFACE
5697 WHERE TRANSACTION_INTERFACE_ID = p_interface_id;
5698
5699 CURSOR cur_MSNI(interface_id NUMBER) IS
5700 SELECT FM_SERIAL_NUMBER
5701 , TO_SERIAL_NUMBER
5702 FROM MTL_SERIAL_NUMBERS_INTERFACE
5703 WHERE TRANSACTION_INTERFACE_ID = interface_id;
5704
5705 -- PL/SQL table to store lot attributes
5706 l_attributes_tbl inv_lot_api_pub.char_tbl;
5707 l_c_attributes_tbl inv_lot_api_pub.char_tbl;
5708 l_n_attributes_tbl inv_lot_api_pub.number_tbl;
5709 l_d_attributes_tbl inv_lot_api_pub.date_tbl;
5710
5711 l_lot_exists NUMBER := 0;
5712 l_ret_number NUMBER := 0;
5713 l_qty NUMBER := NULL;
5714 l_start_qty NUMBER := 0;
5715 l_end_ser VARCHAR2(30);
5716
5717 l_expiration_date DATE;
5718 l_object_id NUMBER;
5719 l_msg_count NUMBER;
5720
5721 BEGIN
5722 x_return_status := lg_ret_sts_success;
5723
5724 -- Check for both lot and serial controlled item
5725 IF (p_lotctrl = 2 AND p_serctrl IN (2,5) ) THEN
5726 IF (l_debug = 1) THEN
5727 inv_log_util.trace('Validating both lot and serial controlled item','INV_TXN_MANAGER_GRP', 9);
5728 END IF;
5729 -- Looping through all MTLI records
5730 FOR rec_MTLI IN cur_MTLI
5731 LOOP
5732
5733 -- Check to see if the lot already exists
5734 -- If 'NO' then call the create_inv_lot API
5735 l_lot_exists := 0;
5736 BEGIN
5737 SELECT 1 INTO l_lot_exists
5738 FROM DUAL
5739 WHERE EXISTS(SELECT lot_number
5740 FROM mtl_lot_numbers
5741 WHERE lot_number = rec_MTLI.LOT_NUMBER
5742 AND inventory_item_id = p_item_id
5743 AND organization_id = p_org_id);
5744 EXCEPTION
5745 WHEN OTHERS THEN
5746 l_lot_exists := 0;
5747 END; -- End of check for lot exists
5748
5749 IF (l_lot_exists = 1) THEN
5750 IF (l_debug = 1) THEN
5751 inv_log_util.trace('Lot already exists','INV_TXN_MANAGER_GRP', 9);
5752 END IF;
5753 ELSE -- Have to create a new lot
5754
5755 l_attributes_tbl(1) := rec_MTLI.ATTRIBUTE1;
5756 l_attributes_tbl(2) := rec_MTLI.ATTRIBUTE2;
5757 l_attributes_tbl(3) := rec_MTLI.ATTRIBUTE3;
5758 l_attributes_tbl(4) := rec_MTLI.ATTRIBUTE4;
5759 l_attributes_tbl(5) := rec_MTLI.ATTRIBUTE5;
5760 l_attributes_tbl(6) := rec_MTLI.ATTRIBUTE6;
5761 l_attributes_tbl(7) := rec_MTLI.ATTRIBUTE7;
5762 l_attributes_tbl(8) := rec_MTLI.ATTRIBUTE8;
5763 l_attributes_tbl(9) := rec_MTLI.ATTRIBUTE9;
5764 l_attributes_tbl(10) := rec_MTLI.ATTRIBUTE10;
5765 l_attributes_tbl(11) := rec_MTLI.ATTRIBUTE11;
5766 l_attributes_tbl(12) := rec_MTLI.ATTRIBUTE12;
5767 l_attributes_tbl(13) := rec_MTLI.ATTRIBUTE13;
5768 l_attributes_tbl(14) := rec_MTLI.ATTRIBUTE14;
5769 l_attributes_tbl(15) := rec_MTLI.ATTRIBUTE15;
5770
5771 l_c_attributes_tbl(1) := rec_MTLI.C_ATTRIBUTE1;
5772 l_c_attributes_tbl(2) := rec_MTLI.C_ATTRIBUTE2;
5773 l_c_attributes_tbl(3) := rec_MTLI.C_ATTRIBUTE3;
5774 l_c_attributes_tbl(4) := rec_MTLI.C_ATTRIBUTE4;
5775 l_c_attributes_tbl(5) := rec_MTLI.C_ATTRIBUTE5;
5776 l_c_attributes_tbl(6) := rec_MTLI.C_ATTRIBUTE6;
5777 l_c_attributes_tbl(7) := rec_MTLI.C_ATTRIBUTE7;
5778 l_c_attributes_tbl(8) := rec_MTLI.C_ATTRIBUTE8;
5779 l_c_attributes_tbl(9) := rec_MTLI.C_ATTRIBUTE9;
5780 l_c_attributes_tbl(10) := rec_MTLI.C_ATTRIBUTE10;
5781 l_c_attributes_tbl(11) := rec_MTLI.C_ATTRIBUTE11;
5782 l_c_attributes_tbl(12) := rec_MTLI.C_ATTRIBUTE12;
5783 l_c_attributes_tbl(13) := rec_MTLI.C_ATTRIBUTE13;
5784 l_c_attributes_tbl(14) := rec_MTLI.C_ATTRIBUTE14;
5785 l_c_attributes_tbl(15) := rec_MTLI.C_ATTRIBUTE15;
5786 l_c_attributes_tbl(16) := rec_MTLI.C_ATTRIBUTE16;
5787 l_c_attributes_tbl(17) := rec_MTLI.C_ATTRIBUTE17;
5788 l_c_attributes_tbl(18) := rec_MTLI.C_ATTRIBUTE18;
5789 l_c_attributes_tbl(19) := rec_MTLI.C_ATTRIBUTE19;
5790 l_c_attributes_tbl(20) := rec_MTLI.C_ATTRIBUTE20;
5791
5792 l_n_attributes_tbl(1) := rec_MTLI.N_ATTRIBUTE1;
5793 l_n_attributes_tbl(2) := rec_MTLI.N_ATTRIBUTE2;
5794 l_n_attributes_tbl(3) := rec_MTLI.N_ATTRIBUTE3;
5795 l_n_attributes_tbl(4) := rec_MTLI.N_ATTRIBUTE4;
5796 l_n_attributes_tbl(5) := rec_MTLI.N_ATTRIBUTE5;
5797 l_n_attributes_tbl(6) := rec_MTLI.N_ATTRIBUTE6;
5798 l_n_attributes_tbl(7) := rec_MTLI.N_ATTRIBUTE7;
5799 l_n_attributes_tbl(8) := rec_MTLI.N_ATTRIBUTE8;
5800 l_n_attributes_tbl(9) := rec_MTLI.N_ATTRIBUTE9;
5801 l_n_attributes_tbl(10) := rec_MTLI.N_ATTRIBUTE10;
5802
5803 l_d_attributes_tbl(1) := rec_MTLI.D_ATTRIBUTE1;
5804 l_d_attributes_tbl(2) := rec_MTLI.D_ATTRIBUTE2;
5805 l_d_attributes_tbl(3) := rec_MTLI.D_ATTRIBUTE3;
5806 l_d_attributes_tbl(4) := rec_MTLI.D_ATTRIBUTE4;
5807 l_d_attributes_tbl(5) := rec_MTLI.D_ATTRIBUTE5;
5808 l_d_attributes_tbl(6) := rec_MTLI.D_ATTRIBUTE6;
5809 l_d_attributes_tbl(7) := rec_MTLI.D_ATTRIBUTE7;
5810 l_d_attributes_tbl(8) := rec_MTLI.D_ATTRIBUTE8;
5811 l_d_attributes_tbl(9) := rec_MTLI.D_ATTRIBUTE9;
5812 l_d_attributes_tbl(10) := rec_MTLI.D_ATTRIBUTE10;
5813
5814 IF (l_debug=1) THEN
5815 inv_log_util.trace('Before call to inv_lot_api_pub.create_inv_lot', 'INV_TXN_MANAGER_GRP', 9);
5816 END IF;
5817
5818 inv_lot_api_pub.create_inv_lot(
5819 x_return_status => x_return_status
5820 , x_msg_count => l_msg_count
5821 , x_msg_data => x_proc_msg
5822 , p_inventory_item_id => p_item_id
5823 , p_organization_id => p_org_id
5824 , p_lot_number => rec_MTLI.LOT_NUMBER
5825 , p_expiration_date => rec_MTLI.LOT_EXPIRATION_DATE
5826 , p_disable_flag => null
5827 , p_attribute_category => rec_MTLI.ATTRIBUTE_CATEGORY
5828 , p_lot_attribute_category => rec_MTLI.LOT_ATTRIBUTE_CATEGORY
5829 , p_attributes_tbl => l_attributes_tbl
5830 , p_c_attributes_tbl => l_c_attributes_tbl
5831 , p_n_attributes_tbl => l_n_attributes_tbl
5832 , p_d_attributes_tbl => l_d_attributes_tbl
5833 , p_grade_code => rec_MTLI.GRADE_CODE
5834 , p_origination_date => rec_MTLI.ORIGINATION_DATE
5835 , p_date_code => rec_MTLI.DATE_CODE
5836 , p_status_id => rec_MTLI.STATUS_ID
5837 , p_change_date => rec_MTLI.CHANGE_DATE
5838 , p_age => rec_MTLI.AGE
5839 , p_retest_date => rec_MTLI.RETEST_DATE
5840 , p_maturity_date => rec_MTLI.MATURITY_DATE
5841 , p_item_size => rec_MTLI.ITEM_SIZE
5842 , p_color => rec_MTLI.COLOR
5843 , p_volume => rec_MTLI.VOLUME
5844 , p_volume_uom => rec_MTLI.VOLUME_UOM
5845 , p_place_of_origin => rec_MTLI.PLACE_OF_ORIGIN
5846 , p_best_by_date => rec_MTLI.BEST_BY_DATE
5847 , p_length => rec_MTLI.LENGTH
5848 , p_length_uom => rec_MTLI.LENGTH_UOM
5849 , p_recycled_content => rec_MTLI.RECYCLED_CONTENT
5850 , p_thickness => rec_MTLI.THICKNESS
5851 , p_thickness_uom => rec_MTLI.THICKNESS_UOM
5852 , p_width => rec_MTLI.WIDTH
5853 , p_width_uom => rec_MTLI.WIDTH_UOM
5854 , p_territory_code => rec_MTLI.TERRITORY_CODE
5855 , p_supplier_lot_number => rec_MTLI.SUPPLIER_LOT_NUMBER
5856 , p_vendor_name => rec_MTLI.VENDOR_NAME
5857 , p_source => null
5858 );
5859
5860 IF (l_debug=1) THEN
5861 inv_log_util.trace('After call to inv_lot_api_pub.create_inv_lot', 'INV_TXN_MANAGER_GRP', 9);
5862 inv_log_util.trace(' x_return_status : ' || x_return_status, 'INV_TXN_MANAGER_GRP', 9);
5863 END IF;
5864 END IF; -- End of Lot Exists check
5865
5866 IF (x_return_status = lg_ret_sts_success) THEN
5867 IF (l_debug=1) THEN
5868 inv_log_util.trace('Call to inv_lot_api_pub.create_inv_lot was successful','INV_TXN_MANAGER_GRP', 9);
5869 END IF;
5870 -- Looping through every serials in the lot
5871 FOR rec_MSNI IN cur_MSNI(rec_MTLI.SERIAL_TRANSACTION_TEMP_ID)
5872 LOOP
5873 IF (l_debug=1) THEN
5874 inv_log_util.trace('About to call inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5875 END IF;
5876
5877 l_qty := NULL;
5878 l_end_ser := NVL(rec_MSNI.TO_SERIAL_NUMBER,rec_MSNI.FM_SERIAL_NUMBER);
5879 l_start_qty := inv_serial_number_pub.get_serial_diff(rec_MSNI.FM_SERIAL_NUMBER,l_end_ser);
5880 l_ret_number := inv_serial_number_pub.validate_serials(
5881 p_org_id => p_org_id
5882 , p_item_id => p_item_id
5883 , p_qty => l_qty
5884 , p_rev => p_rev
5885 , p_lot => rec_MTLI.LOT_NUMBER
5886 , p_start_ser => rec_MSNI.FM_SERIAL_NUMBER
5887 , p_trx_src_id => p_trx_src_id
5888 , p_trx_action_id => p_trx_action_id
5889 , p_subinventory_code => p_subinventory_code
5890 , p_locator_id => p_locator_id
5891 , p_issue_receipt => 'R'
5892 , x_end_ser => l_end_ser
5893 , x_proc_msg => x_proc_msg
5894 , p_check_for_grp_mark_id => 'Y'
5895 );
5896 -- Check for group mark validations
5897 IF (l_start_qty <> l_qty) THEN
5898 x_return_status := lg_ret_sts_error;
5899 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5900 IF (l_debug = 1) THEN
5901 inv_log_util.trace('Group mark validations failed', 'INV_TXN_MANAGER_GRP', 9);
5902 END IF;
5903 RETURN;
5904 END IF; -- End of group mark validations
5905 IF (l_debug=1) THEN
5906 inv_log_util.trace('After call to inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5907 inv_log_util.trace(' l_ret_number : ' || l_ret_number, 'INV_TXN_MANAGER_GRP', 9);
5908 END IF;
5909 IF (l_ret_number = 0) THEN -- Success from inv_serial_number_pub.validate_serials
5910 x_return_status := lg_ret_sts_success;
5911 IF (l_debug = 1) THEN
5912 inv_log_util.trace('Call to inv_serial_number_pub.validate_serials was successful','INV_TXN_MANAGER_GRP', 9);
5913 END IF;
5914 ELSIF (l_ret_number = 1) THEN
5915 x_return_status := lg_ret_sts_error;
5916 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5917 IF (l_debug = 1) THEN
5918 inv_log_util.trace('Error from inv_serial_number_pub.validate_serials'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
5919 END IF;
5920 RETURN;
5921 END IF;
5922 END LOOP; -- End of cur_MSNI cursor
5923
5924 ELSE -- Failure from inv_lot_api_pub.create_inv_lot
5925 x_return_status := lg_ret_sts_error;
5926 loaderrmsg('INV_INT_LOTCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5927 IF (l_debug = 1) THEN
5928 inv_log_util.trace('Error from inv_lot_api_pub.create_inv_lot'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
5929 END IF;
5930 RETURN;
5931 END IF;
5932
5933 END LOOP; -- End of cur_MTLI
5934
5935 -- Check for only serial controlled item
5936 ELSIF (p_lotctrl = 1 AND p_serctrl IN (2,5)) THEN
5937
5938 -- Looping through every serials in the table
5939 FOR rec_MSNI IN cur_MSNI(p_interface_id)
5940 LOOP
5941
5942 l_qty := NULL;
5943 l_end_ser := NVL(rec_MSNI.TO_SERIAL_NUMBER,rec_MSNI.FM_SERIAL_NUMBER);
5944 l_start_qty := inv_serial_number_pub.get_serial_diff(rec_MSNI.FM_SERIAL_NUMBER,l_end_ser);
5945 IF (l_debug=1) THEN
5946 inv_log_util.trace('About to call inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5947 END IF;
5948 l_ret_number := inv_serial_number_pub.validate_serials(
5949 p_org_id => p_org_id
5950 , p_item_id => p_item_id
5951 , p_qty => l_qty
5952 , p_rev => p_rev
5953 , p_lot => null
5954 , p_start_ser => rec_MSNI.FM_SERIAL_NUMBER
5955 , p_trx_src_id => p_trx_src_id
5956 , p_trx_action_id => p_trx_action_id
5957 , p_subinventory_code => p_subinventory_code
5958 , p_locator_id => p_locator_id
5959 , p_issue_receipt => 'R'
5960 , x_end_ser => l_end_ser
5961 , x_proc_msg => x_proc_msg
5962 , p_check_for_grp_mark_id => 'Y'
5963 );
5964 --Check for Group mark validations
5965 IF (l_start_qty <> l_qty) THEN
5966 x_return_status := lg_ret_sts_error;
5967 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5968 IF (l_debug = 1) THEN
5969 inv_log_util.trace('Group mark validations failed', 'INV_TXN_MANAGER_GRP', 9);
5970 END IF;
5971 RETURN;
5972 END IF; -- End of check for group mark validations
5973 IF (l_debug=1) THEN
5974 inv_log_util.trace('After call to inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5975 inv_log_util.trace(' l_ret_number : ' || l_ret_number, 'INV_TXN_MANAGER_GRP', 9);
5976 END IF;
5977
5978 IF (l_ret_number = 0) THEN -- Success from inv_serial_number_pub.validate_serials
5979 x_return_status := lg_ret_sts_success;
5980 IF (l_debug = 1) THEN
5981 inv_log_util.trace('Call to inv_serial_number_pub.validate_serials was successful','INV_TXN_MANAGER_GRP', 9);
5982 END IF;
5983 ELSIF (l_ret_number = 1) THEN -- Failure from inv_serial_number_pub.validate_serials
5984 x_return_status := lg_ret_sts_error;
5985 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5986 IF (l_debug = 1) THEN
5987 inv_log_util.trace('Error from inv_serial_number_pub.validate_serials'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
5988 END IF;
5989 RETURN;
5990 END IF;
5991
5992 END LOOP; -- End of cur_MSNI
5993 END IF;
5994 EXCEPTION
5995 WHEN OTHERS THEN
5996 x_return_status := lg_ret_sts_unexp_error;
5997 IF (l_debug = 1) THEN
5998 inv_log_util.trace(' x_return_status : ' || x_return_status, 'INV_TXN_MANAGER_GRP', 9);
5999 inv_log_util.trace('Exception in validate_lot_serial_for_rcpt '|| x_proc_msg || ':' || sqlerrm, 'INV_TXN_MANAGER_GRP', 9);
6000 END IF;
6001 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6002
6003 END validate_lot_serial_for_rcpt;
6004
6005 /******************************************************************
6006 *
6007 * validate_lines() : Outer
6008 *
6009 ******************************************************************/
6010 PROCEDURE validate_lines(p_header_id NUMBER,
6011 p_commit VARCHAR2 := fnd_api.g_false ,
6012 p_validation_level NUMBER := fnd_api.g_valid_level_full ,
6013 x_return_status OUT NOCOPY VARCHAR2,
6014 x_msg_count OUT NOCOPY NUMBER,
6015 x_msg_data OUT NOCOPY VARCHAR2,
6016 p_userid NUMBER,
6017 p_loginid NUMBER,
6018 p_applid NUMBER,
6019 p_progid NUMBER)
6020 AS
6021
6022 CURSOR AA1 IS
6023 SELECT
6024 TRANSACTION_INTERFACE_ID,
6025 TRANSACTION_HEADER_ID,
6026 REQUEST_ID,
6027 INVENTORY_ITEM_ID,
6028 ORGANIZATION_ID,
6029 SUBINVENTORY_CODE,
6030 TRANSFER_ORGANIZATION,
6031 TRANSFER_SUBINVENTORY,
6032 TRANSACTION_UOM,
6033 TRANSACTION_DATE,
6034 TRANSACTION_QUANTITY,
6035 LOCATOR_ID,
6036 TRANSFER_LOCATOR,
6037 TRANSACTION_SOURCE_ID,
6038 TRANSACTION_SOURCE_TYPE_ID,
6039 TRANSACTION_ACTION_ID,
6040 TRANSACTION_TYPE_ID,
6041 DISTRIBUTION_ACCOUNT_ID,
6042 NVL(SHIPPABLE_FLAG,'Y'),
6043 ROWID,
6044 NEW_AVERAGE_COST,
6045 VALUE_CHANGE,
6046 PERCENTAGE_CHANGE,
6047 MATERIAL_ACCOUNT,
6048 MATERIAL_OVERHEAD_ACCOUNT,
6049 RESOURCE_ACCOUNT,
6050 OUTSIDE_PROCESSING_ACCOUNT,
6051 OVERHEAD_ACCOUNT,
6052 REQUISITION_LINE_ID,
6053 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
6054 END_ITEM_UNIT_NUMBER,
6055 SCHEDULED_PAYBACK_DATE, /* Borrow Payback */
6056 REVISION, /* Borrow Payback */
6057 ORG_COST_GROUP_ID, /* PCST */
6058 COST_TYPE_ID, /* PCST */
6059 PRIMARY_QUANTITY,
6060 SOURCE_LINE_ID,
6061 PROCESS_FLAG,
6062 TRANSACTION_SOURCE_NAME,
6063 TRX_SOURCE_DELIVERY_ID,
6064 TRX_SOURCE_LINE_ID,
6065 PARENT_ID,
6066 TRANSACTION_BATCH_ID,
6067 TRANSACTION_BATCH_SEQ,
6068 -- INVCONV start fabdi
6069 SECONDARY_TRANSACTION_QUANTITY,
6070 SECONDARY_UOM_CODE
6071 -- INVCONV end fabdi
6072 ,SHIP_TO_LOCATION_ID --eIB Build; Bug# 4348541
6073 , transfer_price -- OPM INVCONV umoogala Bug 4432078
6074 ,wip_entity_type -- Pawan 11th july added
6075 /*Bug:5392366. Added the following two columns. */
6076 ,completion_transaction_id
6077 ,move_transaction_id
6078 FROM MTL_TRANSACTIONS_INTERFACE
6079 WHERE TRANSACTION_HEADER_ID = p_header_id
6080 AND PROCESS_FLAG = 1
6081 ORDER BY ORGANIZATION_ID,INVENTORY_ITEM_ID,REVISION,
6082 SUBINVENTORY_CODE,LOCATOR_ID;
6083
6084
6085 line_vldn_error_flag VARCHAR(1);
6086 l_Line_Rec_Type inv_txn_manager_pub.Line_Rec_Type;
6087 l_count number;
6088
6089 BEGIN
6090 if ( l_debug is null) then
6091 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6092 end if;
6093
6094 fnd_flex_key_api.set_session_mode('seed_data');
6095
6096 FOR l_Line_rec_Type IN AA1 LOOP
6097 BEGIN
6098 savepoint line_validation_svpt;
6099 validate_lines(p_line_Rec_Type => l_Line_rec_type,
6100 p_commit => p_commit,
6101 p_validation_level => p_validation_level,
6102 p_error_flag => line_vldn_error_flag,
6103 p_userid => p_userid,
6104 p_loginid => p_loginid,
6105 p_applid => p_applid,
6106 p_progid => p_progid);
6107 IF (line_vldn_error_flag = 'Y') then
6108 IF (l_debug = 1) THEN
6109 inv_log_util.trace('Error in Line Validatin', 'INV_TXN_MANAGER_GRP', 9);
6110 END IF;
6111 END IF;
6112
6113 END;
6114 END LOOP;
6115
6116 x_return_status := FND_API.G_RET_STS_SUCCESS;
6117
6118 EXCEPTION
6119 WHEN OTHERS THEN
6120 IF (l_debug = 1) THEN
6121 inv_log_util.trace('Error in outer validate_lines'||substr(sqlerrm,1,240),
6122 'INV_TXN_MANAGER_GRP',1);
6123 END IF;
6124 x_return_status := FND_API.G_RET_STS_ERROR;
6125
6126 END validate_lines;
6127
6128
6129 /******************************************************************
6130 *
6131 * validate_lines()
6132 * Validate one transaction record in MTL_TRANSACTIONS_INTERFACE
6133 *
6134 ******************************************************************/
6135 PROCEDURE validate_lines(p_line_Rec_Type inv_txn_manager_pub.line_rec_type,
6136 p_commit VARCHAR2 := fnd_api.g_false ,
6137 p_validation_level NUMBER := fnd_api.g_valid_level_full ,
6138 p_error_flag OUT NOCOPY VARCHAR2,
6139 p_userid NUMBER,
6140 p_loginid NUMBER,
6141 p_applid NUMBER,
6142 p_progid NUMBER)
6143 AS
6144
6145 l_shlfdays NUMBER;
6146 l_count NUMBER;
6147 l_header_id NUMBER;
6148 l_intid NUMBER;
6149 l_itemid NUMBER;
6150 l_orgid NUMBER;
6151 l_xorgid NUMBER;
6152 l_locid NUMBER;
6153 l_loci NUMBER;
6154 l_prdid NUMBER;
6155 l_xlocid NUMBER;
6156 l_acttype NUMBER;
6157 l_trxtype NUMBER;
6158 l_srctypeid NUMBER;
6159 l_error_num NUMBER;
6160 l_mat_accnt NUMBER;
6161 l_mat_ovhd_accnt NUMBER;
6162 l_res_accnt NUMBER;
6163 l_osp_accnt NUMBER;
6164 l_ovhd_accnt NUMBER;
6165 l_srctype NUMBER;
6166 l_req_line_id NUMBER;
6167 l_primary_cost_method NUMBER;
6168 l_acct NUMBER;
6169 l_trxsrc VARCHAR(40);
6170 l_cost_type_id NUMBER;
6171 l_org_cost_group_id NUMBER; /* PCST (Periodic Cost Update) */
6172 l_default_locator_status NUMBER; /* Status Control */
6173 l_overcomp_txn_qty NUMBER;
6174 l_overcomp_primary_qty NUMBER :=0; /* Overcompletion Transactions */
6175 tev_flow_schedule NUMBER := 0;
6176 tev_scheduled_flag NUMBER := 1; --Bug #6449667, changing the default value from 0 to 1.
6177 l_trxqty NUMBER;
6178 l_priqty NUMBER;
6179 l_new_avg_cst NUMBER;
6180 l_val_chng NUMBER;
6181 l_per_chng NUMBER;
6182 l_rowid VARCHAR2(20);
6183 l_subinv VARCHAR2(11);
6184 l_xsubinv VARCHAR2(11);
6185 l_trxdate DATE;
6186 -- l_trxdate VARCHAR2(22);
6187 l_scheduled_payback_date VARCHAR2(22);
6188 l_trxuom VARCHAR2(4);
6189 l_priuom VARCHAR2(4);
6190 l_unit_number VARCHAR2(31);
6191 l_itmshpflag VARCHAR2(1);
6192 l_revision VARCHAR2(3); /* Borrow Payback */
6193 x_return_status VARCHAR2(1);
6194 l_locctrl NUMBER;
6195 l_xlocctrl NUMBER;
6196 l_lotctrl NUMBER;
6197 l_serctrl NUMBER;
6198 l_resloc NUMBER;
6199 l_xlotctrl NUMBER;
6200 l_xserctrl NUMBER;
6201 l_xresloc NUMBER;
6202 l_engitemflag NUMBER;
6203 l_lotuniq NUMBER;
6204 l_shlfcode VARCHAR2(40);
6205 l_avg_cost_update NUMBER;
6206 l_flow_schedule_children NUMBER;
6207 l_exp_type_required NUMBER :=1;
6208 l_tnum NUMBER;
6209 l_cst_temp NUMBER;
6210 l_reqstid NUMBER;
6211
6212 l_result NUMBER;
6213 l_lcm_enabled_org mtl_parameters.lcm_enabled_flag%type := 'N';
6214
6215
6216 /* WMS installed -- Installed:1, not installed: 0 */
6217 wms_installed NUMBER;
6218
6219 l_wms_installed boolean;
6220 l_return_status VARCHAR2(300);
6221 l_msg_count NUMBER;
6222 l_msg_data VARCHAR2(300);
6223 l_validate_full BOOLEAN :=TRUE;
6224
6225 l_cg_org NUMBER := NULL; -- Bug 6356567 Starting
6226 l_cost_group_id NUMBER := NULL;
6227 l_xfer_cost_group_id NUMBER := NULL;
6228 l_temp_cost_group_id NUMBER := NULL;
6229 l_temp_xfer_cost_group_id NUMBER := NULL; -- Bug 6356567 Ending
6230
6231 -- INVCONV fabdi start
6232 l_secondary_qty NUMBER;
6233 l_secondary_UOM VARCHAR2(3);
6234 -- INVCONV fabdi end
6235
6236 -- OPM INVCONV umoogala For Process-Discrete Enh.
6237 -- Bug 4432078
6238 l_pd_xfer_ind BINARY_INTEGER;
6239 l_transfer_price NUMBER;
6240 l_transfer_price_priuom NUMBER;
6241 l_from_ou BINARY_INTEGER;
6242 l_to_ou BINARY_INTEGER;
6243 l_order_line_id BINARY_INTEGER;
6244 l_xfer_type VARCHAR2(6);
6245 l_xfer_source VARCHAR2(6);
6246
6247 x_currency_code VARCHAR2(31);
6248 x_incr_transfer_price NUMBER;
6249 x_incr_currency_code VARCHAR2(31);
6250 x_msg_data VARCHAR2(3000);
6251 x_msg_count NUMBER;
6252
6253 l_process_enabled_flag_from VARCHAR2(1);
6254 l_process_enabled_flag_to VARCHAR2(1);
6255
6256 l_ic_invoicing_enabled NUMBER;
6257 -- End OPM INVCONV umoogala
6258
6259 l_is_wsm_enabled VARCHAR2(1);
6260 /*Bug#5205455. Added the below 2 variables*/
6261 l_fob_point NUMBER;
6262 l_validate_xfer_org BOOLEAN := FALSE;
6263
6264 --hjogleka
6265 --Bug #5497519
6266 l_lot_ser_qty NUMBER;
6267 l_account varchar2(100); /* Bug 6271039 */
6268
6269 --Start: Fix for Bug# 7323175
6270 l_project_ref_enabled NUMBER := 0;
6271 l_plocid NUMBER;
6272 l_xplocid NUMBER;
6273 --End: Fix for Bug# 7323175
6274
6275 BEGIN
6276
6277 if (l_debug is null) then
6278 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6279 end if;
6280 IF (l_debug = 1) THEN
6281 inv_log_util.trace('in Validate_lines ....','INV_TXN_MANAGER_GRP', 9);
6282 END IF;
6283
6284 l_count := 0;
6285
6286 /*----------------------------------------
6287 | Checking whether WMS is installed
6288 +-----------------------------------------*/
6289 l_wms_installed := wms_install.check_install
6290 (x_return_status => l_return_status,
6291 x_msg_count => l_msg_count,
6292 x_msg_data => l_msg_data,
6293 p_organization_id => null );
6294
6295 IF l_wms_installed then
6296 wms_installed := 1;
6297 else
6298 wms_installed := 0;
6299 END IF;
6300
6301 /* ACP */
6302 l_avg_cost_update := 2;
6303
6304
6305 l_intid := p_line_Rec_Type.TRANSACTION_INTERFACE_ID;
6306 l_header_id:= p_line_Rec_Type.TRANSACTION_HEADER_ID;
6307 l_reqstid := p_line_Rec_Type.REQUEST_ID;
6308 l_itemid := p_line_Rec_Type.INVENTORY_ITEM_ID;
6309 l_orgid := p_line_Rec_Type.ORGANIZATION_ID;
6310 l_subinv := p_line_Rec_Type.SUBINVENTORY_CODE;
6311 l_xorgid := p_line_Rec_Type.TRANSFER_ORGANIZATION;
6312 l_xsubinv := p_line_Rec_Type.TRANSFER_SUBINVENTORY;
6313 l_trxuom := p_line_Rec_Type.TRANSACTION_UOM;
6314 l_trxdate := p_line_Rec_Type.TRANSACTION_DATE;
6315 l_trxqty := p_line_Rec_Type.TRANSACTION_QUANTITY;
6316 l_locid := p_line_Rec_Type.LOCATOR_ID;
6317 l_xlocid := p_line_Rec_Type.TRANSFER_LOCATOR;
6318 l_trxsrc := p_line_Rec_Type.TRANSACTION_SOURCE_ID;
6319 l_srctype := p_line_Rec_Type.TRANSACTION_SOURCE_TYPE_ID;
6320 l_acttype := p_line_Rec_Type.TRANSACTION_ACTION_ID;
6321 l_trxtype := p_line_Rec_Type.TRANSACTION_TYPE_ID;
6322 l_acct := p_line_Rec_Type.DISTRIBUTION_ACCOUNT_ID;
6323 l_itmshpflag := p_line_Rec_Type.SHIPPABLE_FLAG ;
6324 l_rowid := p_line_Rec_Type.ROWID;
6325 l_new_avg_cst := p_line_Rec_Type.NEW_AVERAGE_COST;
6326 l_val_chng := p_line_Rec_Type.VALUE_CHANGE;
6327 l_per_chng := p_line_Rec_Type.PERCENTAGE_CHANGE;
6328 l_mat_accnt := p_line_Rec_Type.MATERIAL_ACCOUNT;
6329 l_mat_ovhd_accnt := p_line_Rec_Type.MATERIAL_OVERHEAD_ACCOUNT;
6330 l_res_accnt := p_line_Rec_Type.RESOURCE_ACCOUNT;
6331 l_osp_accnt := p_line_Rec_Type.OUTSIDE_PROCESSING_ACCOUNT;
6332 l_ovhd_accnt := p_line_Rec_Type.OVERHEAD_ACCOUNT;
6333 l_req_line_id := p_line_Rec_Type.REQUISITION_LINE_ID;
6334 l_overcomp_txn_qty := p_line_Rec_Type.OVERCOMPLETION_TRANSACTION_QTY;
6335 l_unit_number := p_line_Rec_Type.END_ITEM_UNIT_NUMBER;
6336 l_scheduled_payback_date := p_line_Rec_Type.SCHEDULED_PAYBACK_DATE;
6337 l_revision := p_line_Rec_Type.REVISION ;
6338 l_org_cost_group_id := p_line_Rec_Type.ORG_COST_GROUP_ID;
6339 l_cost_type_id := p_line_Rec_Type.COST_TYPE_ID;
6340 l_secondary_qty := p_line_Rec_Type.SECONDARY_TRANSACTION_QUANTITY;
6341 l_secondary_uom := p_line_Rec_Type.SECONDARY_UOM_CODE;
6342 l_transfer_price := p_line_Rec_Type.TRANSFER_PRICE; -- INVCONV umoogala Bug 4432078
6343 l_order_line_id := p_line_Rec_Type.TRX_SOURCE_LINE_ID; -- INVCONV umoogala Bug 4432078
6344
6345 IF l_locid IS NOT NULL THEN
6346 l_loci := 1;
6347 ELSE
6348 l_loci := -1;
6349 END IF;
6350
6351 IF (l_debug = 1) THEN
6352 inv_log_util.trace('Before calling fnd_profile.put MFG_ORGANIZATION_ID','INV_TXN_MANAGER_PUB',9);
6353 END IF;
6354
6355 fnd_profile.put('MFG_ORGANIZATION_ID',l_orgid);
6356
6357 /**J-dev check we need to perform a full validation*/
6358 IF (l_debug = 1) THEN
6359 inv_log_util.trace('wip_constants.DMF_PATCHSET_LEVEL'||wip_constants.dmf_patchset_level,'INV_TXN_MANAGER_GRP', 9);
6360 inv_log_util.trace('wip_constants.DMF_PATCHSET_J_VALUE'||wip_constants.dmf_patchset_J_VALUE,'INV_TXN_MANAGER_GRP', 9);
6361 END IF;
6362
6363 IF (l_srctype = 5 AND wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE) THEN
6364 IF (p_validation_level <> fnd_api.g_valid_level_full) THEN
6365 l_validate_full := FALSE;
6366 /**implies this a WIP desktop transaction*/
6367 IF (l_debug = 1) THEN
6368 inv_log_util.trace('Val line:WIP desktop trx','INV_TXN_MANAGER_GRP', 9);
6369 END IF;
6370 ELSE
6371 IF (l_debug = 1) THEN
6372 inv_log_util.trace('Val line:WIP MTI trx','INV_TXN_MANAGER_GRP', 9);
6373 END IF;
6374 END IF;
6375 END IF;--J-dev
6376
6377
6378
6379
6380 --Begin Fix 2505534
6381
6382 IF (l_debug = 1) THEN
6383 inv_log_util.trace('Before calling setorgclientinfo with l_orgid '||l_orgid, 'INV_TXN_MANAGER_GRP', 9);
6384 END IF;
6385
6386 IF (NOT setorgclientinfo(l_orgid)) THEN
6387 RAISE fnd_api.g_exc_error;
6388 END IF;
6389
6390 IF (l_debug = 1) THEN
6391 inv_log_util.trace('After calling setorgclientinfo', 'INV_TXN_MANAGER_GRP',9);
6392 END IF;
6393
6394 /* load message to detect source project error */
6395 loaderrmsg('INV_PRJ_ERR','INV_PRJ_ERR');
6396
6397 IF (l_debug = 1) THEN
6398 inv_log_util.trace('After loaderrmsg INV_PRJ_ERR', 'INV_TXN_MANAGER_GRP',9);
6399 END IF;
6400
6401 /* validate source project id */
6402 IF (l_debug = 1) THEN
6403 inv_log_util.trace('#$Validating source project ID l_error_code '||l_error_code||' l_error_exp '||l_error_exp , 'INV_TXN_MANAGER_GRP', 9);
6404 inv_log_util.trace('#$l_rowid '||l_rowid, 'INV_TXN_MANAGER_GRP', 9);
6405 END IF;
6406
6407
6408 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
6409 SET LAST_UPDATE_DATE = SYSDATE,
6410 LAST_UPDATED_BY = p_userid,
6411 LAST_UPDATE_LOGIN = p_loginid,
6412 PROGRAM_UPDATE_DATE = SYSDATE,
6413 PROCESS_FLAG = 3,
6414 LOCK_FLAG = 2,
6415 ERROR_CODE = substrb(l_error_code,1,240),
6416 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
6417 WHERE ROWID = l_rowid
6418 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
6419 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
6420 AND TRANSACTION_ACTION_ID IN (1, 27 )
6421 AND PROCESS_FLAG = 1
6422 AND EXISTS (
6423 SELECT null
6424 FROM MTL_TRANSACTION_TYPES MTTY
6425 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
6426 AND MTTY.TYPE_CLASS = 1 )
6427 AND NOT EXISTS (
6428 SELECT null
6429 FROM pa_projects_expend_v prj1
6430 WHERE prj1.project_id = mti.source_project_id ) ;
6431
6432 if sql%notfound then
6433 IF (l_debug = 1) THEN
6434 inv_log_util.trace('Passed the source project Validation**', 'INV_TXN_MANAGER_GRP',9);
6435 END IF;
6436 else
6437 IF (l_debug = 1) THEN
6438 inv_log_util.trace('Failed the source project Validation**', 'INV_TXN_MANAGER_GRP',9);
6439 END IF;
6440 l_count := l_count + 1;
6441 RAISE fnd_api.g_exc_error;
6442 end if;
6443
6444 IF (l_debug = 1) THEN
6445 inv_log_util.trace('After update on MTI for INV_PRJ_ERR', 'INV_TXN_MANAGER_GRP',9);
6446 END IF;
6447
6448 /*
6449
6450 IF (SQL%FOUND) THEN
6451 l_count := l_count + 1;
6452 RAISE fnd_api.g_exc_error;
6453 END IF;
6454
6455 */
6456
6457 IF (l_debug = 1) THEN
6458 inv_log_util.trace('Before loaderrmsg INV_PAORG_ERR','INV_TXN_MANAGER_GRP',9);
6459 END IF;
6460
6461 /* validate expenditure org id */
6462
6463 loaderrmsg('INV_PAORG_ERR','INV_PAORG_ERR');
6464
6465 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
6466 SET LAST_UPDATE_DATE = SYSDATE,
6467 LAST_UPDATED_BY = p_userid,
6468 LAST_UPDATE_LOGIN = p_loginid,
6469 PROGRAM_UPDATE_DATE = SYSDATE,
6470 PROCESS_FLAG = 3,
6471 LOCK_FLAG = 2,
6472 ERROR_CODE = substrb(l_error_code,1,240),
6473 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
6474 WHERE ROWID = l_rowid
6475 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
6476 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
6477 AND TRANSACTION_ACTION_ID IN (1, 27 )
6478 AND PROCESS_FLAG = 1
6479 AND EXISTS (
6480 SELECT NULL
6481 FROM MTL_TRANSACTION_TYPES MTTY
6482 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
6483 AND MTTY.TYPE_CLASS = 1 )
6484 AND NOT EXISTS (
6485 SELECT NULL
6486 FROM PA_ORGANIZATIONS_EXPEND_V POE
6487 WHERE POE.ORGANIZATION_ID = MTI.PA_EXPENDITURE_ORG_ID
6488 AND TRUNC(SYSDATE) BETWEEN POE.DATE_FROM
6489 AND NVL(POE.DATE_TO, TRUNC(SYSDATE)));
6490
6491 if sql%notfound then
6492 IF (l_debug = 1) THEN
6493 inv_log_util.trace('Passed the exp org Validation**', 'INV_TXN_MANAGER_GRP',9);
6494 END IF;
6495 else
6496 IF (l_debug = 1) THEN
6497 inv_log_util.trace('Failed the exp org Validation**', 'INV_TXN_MANAGER_GRP',9);
6498 END IF;
6499 l_count := l_count + 1;
6500 RAISE fnd_api.g_exc_error;
6501 end if;
6502
6503 IF (l_debug = 1) THEN
6504 inv_log_util.trace('After update on MTI for INV_PAORG_ERR','INV_TXN_MANAGER_GRP',9);
6505 END IF;
6506
6507 /*
6508 IF (SQL%ROWCOUNT > 0) THEN
6509 l_count := l_count + 1;
6510 RAISE fnd_api.g_exc_error;
6511 END IF;
6512 */
6513
6514 --End Fix 2505534
6515
6516 l_flow_schedule_children := 0;
6517
6518
6519 IF (l_acttype = 2) THEN
6520 l_xorgid := l_orgid;
6521 END IF;
6522
6523 IF ( ( l_srctype=INV_Globals.G_SourceType_SalesOrder OR
6524 l_srctype = INV_Globals.G_SourceType_Account OR
6525 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
6526 l_srctype = INV_Globals.G_SourceType_IntOrder)
6527 AND (l_trxsrc is NULL) ) THEN
6528 IF ( NOT getsrcid(l_trxsrc, l_srctype, l_orgid, l_rowid)) THEN
6529 FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
6530 l_error_code := FND_MESSAGE.get;
6531
6532 errupdate(l_rowid,null);
6533 --exit;
6534 RAISE fnd_api.g_exc_error;
6535 END IF;
6536 END IF;
6537
6538 IF l_itemid IS NULL THEN
6539 IF (NOT getitemid(l_itemid, l_orgid, l_rowid)) THEN
6540 FND_MESSAGE.set_name('INV', 'INV_INT_ITMSEGCODE');
6541 l_error_code := FND_MESSAGE.get;
6542
6543 errupdate(l_rowid,null);
6544 --exit;
6545 RAISE fnd_api.g_exc_error;
6546 END IF;
6547 END IF;
6548
6549 /* CFM Scrap Transactions */
6550 IF ((l_itmshpflag = 'N') OR l_acttype = 24 OR l_acttype = 30) THEN
6551 BEGIN
6552 SELECT PRIMARY_UOM_CODE,1,1,1,2
6553 INTO l_priuom,
6554 l_locctrl,
6555 l_lotctrl,
6556 l_serctrl,
6557 l_resloc
6558 FROM MTL_SYSTEM_ITEMS
6559 WHERE INVENTORY_ITEM_ID = l_itemid
6560 AND ORGANIZATION_ID = l_orgid;
6561
6562 EXCEPTION
6563 WHEN NO_DATA_FOUND THEN
6564 loaderrmsg('INV_INT_ITMCODE','INV-No item record');
6565 errupdate(l_rowid,null);
6566 l_count := l_count + 1;
6567 --exit;
6568 RAISE fnd_api.g_exc_error;
6569 END;
6570
6571 ELSE
6572 BEGIN
6573 SELECT decode(P.STOCK_LOCATOR_CONTROL_CODE,4,
6574 decode(S.LOCATOR_TYPE,5,I.LOCATION_CONTROL_CODE,
6575 S.LOCATOR_TYPE),P.STOCK_LOCATOR_CONTROL_CODE),
6576 PRIMARY_UOM_CODE,
6577 LOT_CONTROL_CODE,
6578 SERIAL_NUMBER_CONTROL_CODE,
6579 RESTRICT_LOCATORS_CODE,
6580 SHELF_LIFE_CODE,
6581 SHELF_LIFE_DAYS,
6582 P.LOT_NUMBER_UNIQUENESS
6583 INTO l_locctrl ,
6584 l_priuom,
6585 l_lotctrl,
6586 l_serctrl,
6587 l_resloc,
6588 l_shlfcode,
6589 l_shlfdays,
6590 l_lotuniq
6591 FROM MTL_PARAMETERS P,
6592 MTL_SECONDARY_INVENTORIES S,
6593 MTL_SYSTEM_ITEMS I
6594 WHERE I.INVENTORY_ITEM_ID = l_itemid
6595 AND S.SECONDARY_INVENTORY_NAME = l_subinv
6596 AND P.ORGANIZATION_ID = l_orgid
6597 AND I.ORGANIZATION_ID = S.ORGANIZATION_ID
6598 AND P.ORGANIZATION_ID = S.ORGANIZATION_ID
6599 AND P.ORGANIZATION_ID = I.ORGANIZATION_ID;
6600 EXCEPTION
6601 WHEN NO_DATA_FOUND THEN
6602 loaderrmsg('INV_INT_ITMCODE','INV-No item record');
6603 errupdate(l_rowid,null);
6604 l_count := l_count + 1;
6605 --exit;
6606 RAISE fnd_api.g_exc_error;
6607 END;
6608 END IF;
6609
6610
6611 IF ((l_locctrl = 1) OR l_acttype = 24) THEN
6612 l_loci := -1;
6613 l_locid := NULL; --Added for bug 3703053
6614 END IF;
6615 /*For Bug#5044059, added the following code to read the profilele value
6616 'INV_CREATE_LOC_AT' that indicates whether locators should be created
6617 in autonomous mode or not*/
6618 IF (g_create_loc_at is null) THEN
6619 SELECT Nvl(FND_PROFILE.Value('INV_CREATE_LOC_AT'), 2)
6620 INTO g_create_loc_at
6621 FROM DUAL;
6622 END IF;
6623
6624 IF (l_debug = 1) THEN
6625 inv_log_util.trace('g_create_loc_at : '||g_create_loc_at, 'INV_TXN_MANAGER_GRP', 9);
6626 END IF;
6627
6628
6629 IF ((l_loci = -1) AND (l_locctrl <> 1 AND l_acttype <> 24)) THEN
6630 IF (l_resloc = 1) THEN
6631 l_locctrl := 2;
6632 END IF;
6633 IF ( NOT getlocid(l_locid, l_orgid, l_subinv, l_rowid, l_locctrl)) THEN
6634 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
6635 l_error_exp := FND_MESSAGE.get; --bug6679112, error_code=>error_exp
6636 errupdate(l_rowid,null);
6637 --exit;
6638 RAISE fnd_api.g_exc_error;
6639 END IF;
6640
6641 /* Start: Fix for Bug# 7323175: For a PROJECT_REFERENCE_ENABLED org, a physical locator will be
6642 created for a logical locator( locator with project and task info). If the physical locator is
6643 already present then only logical locator will be created with the same PHYSICAL_LOCATION_ID in
6644 mil as that of the already existing logical/physical locator */
6645
6646 BEGIN
6647 SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
6648 INTO l_project_ref_enabled
6649 FROM MTL_PARAMETERS
6650 WHERE ORGANIZATION_ID = l_orgid ;
6651 EXCEPTION
6652 WHEN NO_DATA_FOUND THEN
6653 l_project_ref_enabled := 0;
6654 END;
6655
6656 IF l_project_ref_enabled = 1 THEN
6657 IF ( NOT getplocid(l_plocid, l_orgid, l_subinv, l_rowid, l_locctrl)) THEN
6658 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
6659 l_error_code := FND_MESSAGE.get;
6660 errupdate(l_rowid);
6661 RAISE fnd_api.g_exc_error;
6662 END IF;
6663 END IF;
6664
6665 /* End: Fix for Bug# 7323175 */
6666
6667 /* get the default locator status */
6668 IF l_wms_installed THEN
6669 l_default_locator_status :=INV_MATERIAL_STATUS_PKG.get_default_locator_status(
6670 l_orgid, l_subinv);
6671 ELSE
6672 l_default_locator_status := 1;
6673 END IF;
6674
6675 /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
6676 update Locators in autonomous mode*/
6677 IF (g_create_loc_at = 1) THEN
6678 update_mil( p_userid
6679 , p_loginid
6680 , p_applid
6681 , p_progid
6682 , l_reqstid
6683 , l_subinv
6684 , l_default_locator_status
6685 , l_orgid
6686 , l_locid
6687 , l_plocid);
6688 /* Added one more parameter l_plocid for Bug# 7323175 to update_mil() for the physical locator */
6689
6690 ELSE
6691 UPDATE MTL_ITEM_LOCATIONS
6692 SET LAST_UPDATE_DATE = SYSDATE,
6693 LAST_UPDATED_BY = p_userid,
6694 LAST_UPDATE_LOGIN = p_loginid,
6695 PROGRAM_APPLICATION_ID = p_applid,
6696 PROGRAM_ID = p_progid,
6697 PROGRAM_UPDATE_DATE = SYSDATE,
6698 REQUEST_ID = l_reqstid,
6699 SUBINVENTORY_CODE = l_subinv,
6700 STATUS_ID = l_default_locator_status,
6701 /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
6702 physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
6703 p_plocid would be null */
6704 PHYSICAL_LOCATION_ID = l_plocid
6705 /* End: Fix for Bug# 7323175 */
6706 WHERE ORGANIZATION_ID = l_orgid
6707 /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
6708 --AND INVENTORY_LOCATION_ID = l_locid
6709 AND INVENTORY_LOCATION_ID IN (l_locid,l_plocid)
6710 /* End: Fix for Bug# 7323175 */
6711 AND SUBINVENTORY_CODE is NULL;
6712
6713 END IF;
6714
6715 IF l_locid = -2 THEN
6716 l_loci := -1;
6717 END IF;
6718
6719 END IF;
6720
6721 /*------------------------------------------------------------------------+
6722 | Now check whether locator is valid under project
6723 | mfg. constraints. Validate newly created locator ids and
6724 | ids which are populated into the table.
6725 +------------------------------------------------------------------------*/
6726
6727 -- Bug #6721912, fetching FLOW_SCHEDULE, SCHEDULED_FLAG from MTI
6728 -- So that validate_loc_for_project is called with right parameters
6729 -- In future this select statement should be merged in cursor AA1.
6730 /*------------------------------------------------------+
6731 | get flow schedule control variables
6732 +------------------------------------------------------*/
6733 IF l_srctype = 5 THEN
6734 BEGIN
6735 SELECT DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y', 1, 0), NVL(SCHEDULED_FLAG, 0)
6736 INTO tev_flow_schedule, tev_scheduled_flag
6737 FROM MTL_TRANSACTIONS_INTERFACE
6738 WHERE ROWID = l_rowid;
6739 EXCEPTION
6740 WHEN NO_DATA_FOUND THEN
6741 tev_flow_schedule := 0;
6742 tev_scheduled_flag := 0;
6743 END;
6744
6745 IF (l_debug = 1) THEN
6746 inv_log_util.trace('flow_schedule = '|| tev_flow_schedule || ', scheduled_flag = ' || tev_scheduled_flag,'INV_TXN_MANAGER_GRP', 9);
6747 END IF;
6748 END IF;
6749
6750
6751 IF ( l_loci <> -1 AND (l_locctrl <>1 AND l_acttype <>24) ) THEN
6752 IF ( NOT validate_loc_for_project(l_locid, l_orgid, l_srctype,
6753 l_acttype, l_trxsrc, tev_flow_schedule, tev_scheduled_flag) ) THEN
6754
6755 l_error_exp := FND_MESSAGE.get;
6756
6757 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
6758 l_error_code := FND_MESSAGE.get;
6759
6760 errupdate(l_rowid,null);
6761 l_count := l_count + 1;
6762 --exit;
6763 RAISE fnd_api.g_exc_error;
6764 END IF;
6765
6766 END IF;
6767
6768 IF ((l_acttype = 2) OR (l_acttype=3)) THEN
6769 IF (l_xsubinv IS NULL) THEN
6770 IF (l_srctype = 8) THEN
6771 BEGIN
6772 SELECT SUBINVENTORY_CODE
6773 INTO l_xsubinv
6774 FROM MTL_ITEM_SUB_DEFAULTS
6775 WHERE INVENTORY_ITEM_ID = l_itemid
6776 AND ORGANIZATION_ID = l_xorgid
6777 AND DEFAULT_TYPE = 2;
6778 EXCEPTION
6779 WHEN NO_DATA_FOUND THEN
6780 loaderrmsg('INV_INT_XSUBCODE','INV_DEFAULT_SUB');
6781 errupdate(l_rowid,null);
6782 l_count := l_count + 1;
6783 --exit;
6784 RAISE fnd_api.g_exc_error;
6785 END;
6786 ELSE
6787 loaderrmsg('INV_INT_XSUBCODE','INV_INT_XSUBEXP');
6788 errupdate(l_rowid,null);
6789 l_count := l_count + 1;
6790 --exit;
6791 RAISE fnd_api.g_exc_error;
6792 END IF;
6793 END IF;
6794
6795
6796 BEGIN
6797 SELECT decode(P.STOCK_LOCATOR_CONTROL_CODE,4,
6798 decode(S.LOCATOR_TYPE,5,I.LOCATION_CONTROL_CODE,
6799 S.LOCATOR_TYPE),P.STOCK_LOCATOR_CONTROL_CODE),
6800 LOT_CONTROL_CODE,
6801 SERIAL_NUMBER_CONTROL_CODE,
6802 RESTRICT_LOCATORS_CODE
6803 INTO l_xlocctrl,
6804 l_xlotctrl,
6805 l_xserctrl,
6806 l_xresloc
6807 FROM MTL_PARAMETERS P,
6808 MTL_SECONDARY_INVENTORIES S,
6809 MTL_SYSTEM_ITEMS I
6810 WHERE I.INVENTORY_ITEM_ID = l_itemid
6811 AND S.SECONDARY_INVENTORY_NAME = l_xsubinv
6812 AND P.ORGANIZATION_ID = l_xorgid
6813 AND I.ORGANIZATION_ID = S.ORGANIZATION_ID
6814 AND P.ORGANIZATION_ID = S.ORGANIZATION_ID
6815 AND P.ORGANIZATION_ID = I.ORGANIZATION_ID;
6816
6817 EXCEPTION
6818 WHEN NO_DATA_FOUND THEN
6819 loaderrmsg('INV_INT_ITMCODE','INV-No item record');
6820 errupdate(l_rowid,null);
6821 l_count := l_count + 1;
6822 --exit;
6823 RAISE fnd_api.g_exc_error;
6824 END;
6825
6826 --IF (l_xlocctrl IS NULL) THEN bug2460745
6827
6828 /* Bug #2493941 - Call validation logic for destination locator
6829 * (getxlocid) only when locator control code != 1 and xferlocid is NULL
6830 */
6831 -- Begin changes for bug 3703053
6832 IF l_xlocctrl = 1 THEN
6833 l_xlocid := NULL;
6834 END IF;
6835 -- End changes for bug 3703053
6836 IF ((l_xlocctrl <> 1) AND (l_xlocid IS NULL)) THEN
6837 IF (l_xresloc = 1) THEN
6838 l_xlocctrl := 2;
6839 END IF;
6840
6841 IF (l_srctype = 8) THEN
6842 BEGIN
6843 SELECT LOCATOR_ID
6844 INTO l_xlocid
6845 FROM MTL_ITEM_LOC_DEFAULTS MTLD,
6846 MTL_ITEM_LOCATIONS MIL
6847 WHERE MTLD.LOCATOR_ID=MIL.INVENTORY_LOCATION_ID
6848 AND MTLD.ORGANIZATION_ID=MIL.ORGANIZATION_ID
6849 AND MTLD.INVENTORY_ITEM_ID = l_itemid
6850 AND MTLD.ORGANIZATION_ID = l_xorgid
6851 AND MTLD.SUBINVENTORY_CODE = l_xsubinv
6852 AND MTLD.DEFAULT_TYPE = 2
6853 AND NVL(MIL.DISABLE_DATE,SYSDATE+1) > SYSDATE;
6854
6855 EXCEPTION
6856 WHEN NO_DATA_FOUND THEN
6857 loaderrmsg('INV_INT_XLOCCODE','INV_DEFAULT_LOC');
6858 errupdate(l_rowid,null);
6859 l_count := l_count + 1;
6860 --exit;
6861 RAISE fnd_api.g_exc_error;
6862 END;
6863
6864 /* For srctype = 8 i.e internal order, the below code is added to append
6865 project and task from the requisition to a locator that is selected
6866 from locator defaults. If the transfer bet orgs is 'direct', the shipment
6867 transaction itself creates the recipt transaction and while doing so
6868 it picks up the default locator from the locator defaults.
6869 */
6870 IF (l_req_line_id IS NOT NULL) THEN
6871 INV_PROJECT.Get_project_loc_for_prj_Req(
6872 x_return_status,
6873 l_xlocid,
6874 l_xorgid,
6875 l_req_line_id);
6876
6877 IF (x_return_status <> 'S') THEN
6878 l_error_exp := FND_MESSAGE.get;
6879 FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
6880 l_error_code := FND_MESSAGE.get;
6881
6882 errupdate(l_rowid,null);
6883 l_count := l_count + 1;
6884 --exit;
6885 RAISE fnd_api.g_exc_error;
6886 END IF;
6887 END IF;
6888 ELSE
6889 -- Bug 5011566 setting transfer org as org context
6890 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) THEN
6891 IF (NOT setorgclientinfo(l_xorgid)) THEN
6892 RAISE fnd_api.g_exc_error;
6893 END IF;
6894 fnd_profile.put('MFG_ORGANIZATION_ID',l_xorgid);
6895 END IF;
6896
6897 IF (NOT getxlocid(l_xlocid, l_xorgid, l_xsubinv, l_rowid,
6898 l_xlocctrl)) THEN
6899 FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
6900 l_error_code := FND_MESSAGE.get;
6901 --exit;
6902 RAISE fnd_api.g_exc_error;
6903 END IF;
6904
6905 /* Start: Fix for Bug# 7323175: For a PROJECT_REFERENCE_ENABLED org, a physical locator will be
6906 created for a logical locator( locator with project and task info). If the physical locator is
6907 already present then only logical locator will be created with the same PHYSICAL_LOCATION_ID in
6908 mil as that of the already existing logical/physical locator */
6909 BEGIN
6910 SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
6911 INTO l_project_ref_enabled
6912 FROM MTL_PARAMETERS
6913 WHERE ORGANIZATION_ID = l_xorgid ;
6914 EXCEPTION
6915 WHEN NO_DATA_FOUND THEN
6916 l_project_ref_enabled := 0;
6917 END;
6918
6919 IF l_project_ref_enabled = 1 THEN
6920 IF (NOT getxplocid(l_xplocid, l_xorgid, l_xsubinv, l_rowid, l_xlocctrl)) THEN
6921 FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
6922 l_error_code := FND_MESSAGE.get;
6923 RAISE fnd_api.g_exc_error;
6924 END IF;
6925 END IF;
6926 /* End: Fix for Bug# 7323175 */
6927
6928
6929 -- Bug 5011566 re-setting org as org context
6930 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) then
6931 IF (NOT setorgclientinfo(l_orgid)) THEN
6932 RAISE fnd_api.g_exc_error;
6933 END IF;
6934 fnd_profile.put('MFG_ORGANIZATION_ID',l_orgid);
6935 END IF;
6936
6937 /* get the default locator status */
6938 IF l_wms_installed THEN
6939 l_default_locator_status :=INV_MATERIAL_STATUS_PKG.get_default_locator_status(
6940 l_xorgid, l_xsubinv);
6941 ELSE
6942 l_default_locator_status := 1;
6943 END IF;
6944
6945
6946 /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
6947 update Locators in autonomous mode*/
6948 IF (g_create_loc_at = 1) THEN
6949 update_mil( p_userid
6950 , p_loginid
6951 , p_applid
6952 , p_progid
6953 , l_reqstid
6954 , l_xsubinv
6955 , l_default_locator_status
6956 , l_xorgid
6957 , l_xlocid
6958 , l_xplocid);
6959 /* Addded a parameter l_xplocid for Bug# 7323175 in update_mil */
6960 ELSE
6961 UPDATE MTL_ITEM_LOCATIONS
6962 SET LAST_UPDATE_DATE = SYSDATE,
6963 LAST_UPDATED_BY = p_userid,
6964 LAST_UPDATE_LOGIN = p_loginid,
6965 PROGRAM_APPLICATION_ID = p_applid,
6966 PROGRAM_ID = p_progid,
6967 PROGRAM_UPDATE_DATE = SYSDATE,
6968 REQUEST_ID = l_reqstid,
6969 SUBINVENTORY_CODE = l_xsubinv,
6970 STATUS_ID = l_default_locator_status,
6971 /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
6972 physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
6973 l_xplocid would be null */
6974 PHYSICAL_LOCATION_ID = l_xplocid
6975 /* End: Fix for Bug# 7323175 */
6976 WHERE ORGANIZATION_ID = l_xorgid
6977 /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
6978 --AND INVENTORY_LOCATION_ID = l_xlocid
6979 AND INVENTORY_LOCATION_ID IN (l_xlocid,l_xplocid)
6980 /* End: Fix for Bug# 7323175 */
6981 AND SUBINVENTORY_CODE is NULL;
6982 END IF;
6983
6984 END IF;
6985 END IF;
6986 END IF;
6987
6988 /*------------------------------------------------------------------------+
6989 | Now check whether locator is valid under project
6990 | mfg. constraints. Validate newly created locator ids and
6991 | ids which are populated into the table.
6992 +------------------------------------------------------------------------*/
6993 IF ( (l_xlocid IS NOT NULL) AND (l_xlocctrl <> 1) AND (l_acttype = 2 OR l_acttype = 3)) THEN
6994 IF ( NOT validate_loc_for_project(l_xlocid, l_xorgid, l_srctype,
6995 l_acttype, l_trxsrc, tev_flow_schedule, tev_scheduled_flag) ) THEN
6996
6997 l_error_exp := FND_MESSAGE.get;
6998
6999 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
7000 l_error_code := FND_MESSAGE.get;
7001
7002 errupdate(l_rowid,null);
7003 l_count := l_count + 1;
7004 --exit;
7005 RAISE fnd_api.g_exc_error;
7006 END IF;
7007
7008 END IF;
7009
7010
7011 BEGIN
7012 IF (l_srctype = 5) then
7013 l_priqty := inv_convert.inv_um_convert(l_itemid,6,l_trxqty,
7014 l_trxuom,l_priuom,'','');
7015 ELSE
7016 l_priqty := inv_convert.inv_um_convert(l_itemid,5,l_trxqty,
7017 l_trxuom,l_priuom,'','');
7018 END IF;
7019 EXCEPTION
7020 WHEN OTHERS THEN
7021 /*IF (NOT UomConvert(l_itemid,0,l_trxuom, '',
7022 l_priuom, '', l_trxqty,
7023 l_priqty, 0)) THEN */
7024 l_error_exp := FND_MESSAGE.get;
7025
7026 FND_MESSAGE.set_name('INV', 'INV_INT_UOMSEGCODE');
7027 l_error_code := FND_MESSAGE.get;
7028
7029 errupdate(l_rowid,null);
7030 l_count := l_count + 1;
7031 --exit;
7032 RAISE fnd_api.g_exc_error;
7033 END;
7034
7035 /* Borrow Payback */
7036 IF(l_acttype = 2) THEN
7037 l_result := PJM_BORROW_PAYBACK.validate_trx(l_trxtype,l_acttype,
7038 l_orgid,l_subinv,l_locid,
7039 l_xsubinv,l_xlocid,
7040 l_itemid,l_revision,
7041 l_priqty,l_trxdate, l_scheduled_payback_date,l_error_code);
7042
7043 IF(l_result = 1) THEN
7044
7045 l_error_exp := FND_MESSAGE.get;
7046
7047 errupdate(l_rowid,null);
7048 l_count := l_count + 1;
7049 --exit;
7050 RAISE fnd_api.g_exc_error;
7051 END IF;
7052 END IF;
7053 --prOR := 0;
7054 IF (l_srctype <> 14) THEN /* PCST */
7055
7056 IF l_trxdate <= sysdate THEN
7057 l_tnum := 1;
7058 ELSE
7059 loaderrmsg('INV_INT_TDATECODE','INV_INT_TDATEEX');
7060
7061 errupdate(l_rowid,null);
7062 l_count := l_count + 1;
7063 --exit;
7064 RAISE fnd_api.g_exc_error;
7065 END IF;
7066
7067 l_prdid := get_open_period(l_orgid,l_trxdate,0);
7068
7069
7070 IF (l_prdid = -1 OR l_prdid = 0) THEN
7071 FND_MESSAGE.set_name('INV', 'INV_INT_PRDCODE');
7072 l_error_code := FND_MESSAGE.get;
7073 FND_MESSAGE.set_name('INV', 'INV_NO_OPEN_PERIOD');
7074 /*END IF;*/
7075
7076 l_error_exp := FND_MESSAGE.get;
7077
7078 errupdate(l_rowid,null);
7079 l_count := l_count + 1;
7080 --exit;
7081 RAISE fnd_api.g_exc_error;
7082 END IF;
7083 /*Bug#5205455. Validation of the acc period for to_org */
7084 IF ( l_acttype IN ( 3, 21) OR
7085 (l_srctype = 8 AND l_acttype IN (1, 2)) ) THEN
7086 IF l_acttype IN ( 1, 2, 21) THEN
7087 IF (l_debug = 1) THEN
7088 inv_log_util.trace('l_acttype: '||l_acttype||' l_srctype: '||l_srctype, 'INV_TXN_MANAGER_GRP', 9);
7089 END IF;
7090
7091 BEGIN
7092 IF (l_debug = 1) THEN
7093 inv_log_util.trace('Getting the FOB Point between the orgs, '||l_orgid||' and '||l_xorgid, 'INV_TXN_MANAGER_GRP', 9);
7094 END IF;
7095
7096 SELECT fob_point
7097 INTO l_fob_point
7098 FROM mtl_interorg_parameters
7099 WHERE from_organization_id = l_orgid
7100 AND to_organization_id = l_xorgid;
7101
7102 IF (l_debug = 1) THEN
7103 inv_log_util.trace('FOB Point is: '||l_fob_point, 'INV_TXN_MANAGER_GRP', 9);
7104 END IF;
7105
7106 EXCEPTION
7107 WHEN OTHERS THEN
7108 IF (l_debug = 1) THEN
7109 inv_log_util.trace('Exception while finding the FOB Point.', 'INV_TXN_MANAGER_GRP', 9);
7110 END IF;
7111 l_fob_point := NULL;
7112 END;
7113 IF l_fob_point = 1 THEN
7114 l_validate_xfer_org := TRUE;
7115 ELSIF (l_fob_point = 2) THEN
7116 l_validate_xfer_org := FALSE;
7117 END IF;
7118 ELSE
7119 l_validate_xfer_org := TRUE;
7120 END IF;
7121 IF (l_validate_xfer_org) THEN
7122 IF (l_debug = 1) THEN
7123 inv_log_util.trace('l_validate_xfer_org is TRUE', 'INV_TXN_MANAGER_GRP', 9);
7124 END IF;
7125 IF ( get_open_period(l_xorgid,l_trxdate,0) IN (-1, 0)) THEN
7126 FND_MESSAGE.set_name('INV', 'INV_INT_PRDCODE');
7127 l_error_code := FND_MESSAGE.get;
7128 FND_MESSAGE.set_name('INV', 'INV_NO_OPEN_PERIOD_TOORG');
7129 l_error_exp := FND_MESSAGE.get;
7130 errupdate(l_rowid,null);
7131 l_count := l_count + 1;
7132 RAISE fnd_api.g_exc_error;
7133 END IF;
7134 END IF;
7135 END IF;
7136
7137
7138
7139 ELSE
7140 l_prdid := 0; /* Bug 4122107 */
7141 END IF;
7142
7143 /* Bug# 6271039, For average cost update and layer cost update, validate rows in
7144 * MTI for material account, material overhead account, resource account,
7145 * outside processing account, overhead account. */
7146
7147 IF ( l_acttype = 24 AND ((l_srctype = INV_Globals.G_SourceType_Inventory) OR (l_srctype = 15)) AND ( l_avg_cost_update = 2 ) )
7148 OR (( l_acttype = 24 AND l_srctype = 14 )) THEN
7149
7150 /*-----------------------------------------------------------+
7151 | Validate material account
7152 +-----------------------------------------------------------*/
7153
7154 IF (l_validate_full) THEN --J-dev
7155 FND_MESSAGE.set_name('INV','INV_MATERIAL_ACCOUNT');
7156 l_account := FND_MESSAGE.get ;
7157
7158 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7159 fnd_message.set_token('ACCOUNT',l_account);
7160 l_error_code := fnd_message.get;
7161
7162 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7163 fnd_message.set_token('ACCOUNT',l_account);
7164 l_error_exp := fnd_message.get;
7165
7166 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7167 SET LAST_UPDATE_DATE = SYSDATE,
7168 LAST_UPDATED_BY = p_userid,
7169 LAST_UPDATE_LOGIN = p_loginid,
7170 PROGRAM_UPDATE_DATE = SYSDATE,
7171 PROCESS_FLAG = 3,
7172 LOCK_FLAG = 2,
7173 ERROR_CODE = substrb(l_error_code,1,240),
7174 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7175 WHERE TRANSACTION_HEADER_ID = l_header_id
7176 AND PROCESS_FLAG = 1
7177 AND MATERIAL_ACCOUNT IS NOT NULL
7178 AND NOT EXISTS (
7179 SELECT NULL
7180 FROM GL_CODE_COMBINATIONS GCC
7181 WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_ACCOUNT
7182 AND GCC.CHART_OF_ACCOUNTS_ID
7183 = (SELECT CHART_OF_ACCOUNTS_ID
7184 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7185 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7186 AND GCC.ENABLED_FLAG = 'Y'
7187 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7188 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7189
7190 l_count := SQL%ROWCOUNT;
7191 IF (l_debug = 1) THEN
7192 inv_log_util.trace('Validating material account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7193 END IF;
7194
7195 END IF; --J-dev
7196
7197
7198 /*-----------------------------------------------------------+
7199 | Validate material overhead account
7200 +-----------------------------------------------------------*/
7201
7202 IF (l_validate_full) THEN --J-dev
7203 FND_MESSAGE.set_name('INV','INV_MAT_OVRHD_ACCOUNT');
7204 l_account := FND_MESSAGE.get ;
7205
7206 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7207 fnd_message.set_token('ACCOUNT',l_account);
7208 l_error_code := fnd_message.get;
7209
7210 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7211 fnd_message.set_token('ACCOUNT',l_account);
7212 l_error_exp := fnd_message.get;
7213
7214 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7215 SET LAST_UPDATE_DATE = SYSDATE,
7216 LAST_UPDATED_BY = p_userid,
7217 LAST_UPDATE_LOGIN = p_loginid,
7218 PROGRAM_UPDATE_DATE = SYSDATE,
7219 PROCESS_FLAG = 3,
7220 LOCK_FLAG = 2,
7221 ERROR_CODE = substrb(l_error_code,1,240),
7222 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7223 WHERE TRANSACTION_HEADER_ID = l_header_id
7224 AND PROCESS_FLAG = 1
7225 AND MATERIAL_OVERHEAD_ACCOUNT IS NOT NULL
7226 AND NOT EXISTS (
7227 SELECT NULL
7228 FROM GL_CODE_COMBINATIONS GCC
7229 WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_OVERHEAD_ACCOUNT
7230 AND GCC.CHART_OF_ACCOUNTS_ID
7231 = (SELECT CHART_OF_ACCOUNTS_ID
7232 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7233 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7234 AND GCC.ENABLED_FLAG = 'Y'
7235 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7236 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7237
7238 l_count := SQL%ROWCOUNT;
7239 IF (l_debug = 1) THEN
7240 inv_log_util.trace('Validating material overhead account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7241 END IF;
7242
7243 END IF; --J-dev
7244
7245 /*-----------------------------------------------------------+
7246 | Validate resource account
7247 +-----------------------------------------------------------*/
7248
7249 IF (l_validate_full) THEN --J-dev
7250 FND_MESSAGE.set_name('INV','INV_RESOURCE_ACCOUNT');
7251 l_account := FND_MESSAGE.get ;
7252
7253 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7254 fnd_message.set_token('ACCOUNT',l_account);
7255 l_error_code := fnd_message.get;
7256
7257 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7258 fnd_message.set_token('ACCOUNT',l_account);
7259 l_error_exp := fnd_message.get;
7260
7261 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7262 SET LAST_UPDATE_DATE = SYSDATE,
7263 LAST_UPDATED_BY = p_userid,
7264 LAST_UPDATE_LOGIN = p_loginid,
7265 PROGRAM_UPDATE_DATE = SYSDATE,
7266 PROCESS_FLAG = 3,
7267 LOCK_FLAG = 2,
7268 ERROR_CODE = substrb(l_error_code,1,240),
7269 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7270 WHERE TRANSACTION_HEADER_ID = l_header_id
7271 AND PROCESS_FLAG = 1
7272 AND RESOURCE_ACCOUNT IS NOT NULL
7273 AND NOT EXISTS (
7274 SELECT NULL
7275 FROM GL_CODE_COMBINATIONS GCC
7276 WHERE GCC.CODE_COMBINATION_ID = MTI.RESOURCE_ACCOUNT
7277 AND GCC.CHART_OF_ACCOUNTS_ID
7278 = (SELECT CHART_OF_ACCOUNTS_ID
7279 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7280 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7281 AND GCC.ENABLED_FLAG = 'Y'
7282 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7283 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7284
7285 l_count := SQL%ROWCOUNT;
7286 IF (l_debug = 1) THEN
7287 inv_log_util.trace('Validating resource account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7288 END IF;
7289
7290 END IF; --J-dev
7291
7292 /*-----------------------------------------------------------+
7293 | Validate outside processing account
7294 +-----------------------------------------------------------*/
7295
7296 IF (l_validate_full) THEN --J-dev
7297 FND_MESSAGE.set_name('INV','INV_OUTSIDE_PROC_ACCOUNT');
7298 l_account := FND_MESSAGE.get ;
7299
7300 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7301 fnd_message.set_token('ACCOUNT',l_account);
7302 l_error_code := fnd_message.get;
7303
7304 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7305 fnd_message.set_token('ACCOUNT',l_account);
7306 l_error_exp := fnd_message.get;
7307
7308 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7309 SET LAST_UPDATE_DATE = SYSDATE,
7310 LAST_UPDATED_BY = p_userid,
7311 LAST_UPDATE_LOGIN = p_loginid,
7312 PROGRAM_UPDATE_DATE = SYSDATE,
7313 PROCESS_FLAG = 3,
7314 LOCK_FLAG = 2,
7315 ERROR_CODE = substrb(l_error_code,1,240),
7316 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7317 WHERE TRANSACTION_HEADER_ID = l_header_id
7318 AND PROCESS_FLAG = 1
7319 AND OUTSIDE_PROCESSING_ACCOUNT IS NOT NULL
7320 AND NOT EXISTS (
7321 SELECT NULL
7322 FROM GL_CODE_COMBINATIONS GCC
7323 WHERE GCC.CODE_COMBINATION_ID = MTI.OUTSIDE_PROCESSING_ACCOUNT
7324 AND GCC.CHART_OF_ACCOUNTS_ID
7325 = (SELECT CHART_OF_ACCOUNTS_ID
7326 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7327 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7328 AND GCC.ENABLED_FLAG = 'Y'
7329 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7330 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7331
7332 l_count := SQL%ROWCOUNT;
7333 IF (l_debug = 1) THEN
7334 inv_log_util.trace('Validating outside processing account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7335 END IF;
7336
7337 END IF; --J-dev
7338
7339 /*-----------------------------------------------------------+
7340 | Validate overhead account
7341 +-----------------------------------------------------------*/
7342
7343 IF (l_validate_full) THEN --J-dev
7344 FND_MESSAGE.set_name('INV','INV_OVERHEAD_ACCOUNT');
7345 l_account := FND_MESSAGE.get ;
7346
7347 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7348 fnd_message.set_token('ACCOUNT',l_account);
7349 l_error_code := fnd_message.get;
7350
7351 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7352 fnd_message.set_token('ACCOUNT',l_account);
7353 l_error_exp := fnd_message.get;
7354
7355 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7356 SET LAST_UPDATE_DATE = SYSDATE,
7357 LAST_UPDATED_BY = p_userid,
7358 LAST_UPDATE_LOGIN = p_loginid,
7359 PROGRAM_UPDATE_DATE = SYSDATE,
7360 PROCESS_FLAG = 3,
7361 LOCK_FLAG = 2,
7362 ERROR_CODE = substrb(l_error_code,1,240),
7363 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7364 WHERE TRANSACTION_HEADER_ID = l_header_id
7365 AND PROCESS_FLAG = 1
7366 AND OVERHEAD_ACCOUNT IS NOT NULL
7367 AND NOT EXISTS (
7368 SELECT NULL
7369 FROM GL_CODE_COMBINATIONS GCC
7370 WHERE GCC.CODE_COMBINATION_ID = MTI.OVERHEAD_ACCOUNT
7371 AND GCC.CHART_OF_ACCOUNTS_ID
7372 = (SELECT CHART_OF_ACCOUNTS_ID
7373 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7374 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7375 AND GCC.ENABLED_FLAG = 'Y'
7376 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7377 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7378
7379 l_count := SQL%ROWCOUNT;
7380 IF (l_debug = 1) THEN
7381 inv_log_util.trace('Validating overhead account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7382 END IF;
7383
7384 END IF; --J-dev
7385
7386 /*-----------------------------------------------------------+
7387 | Validate material expense account LCM changes
7388 +-----------------------------------------------------------*/
7389
7390 Begin
7391 select nvl(lcm_enabled_flag,'N')
7392 into l_lcm_enabled_org
7393 from mtl_parameters
7394 where organization_id = l_orgid;
7395 Exception
7396 when others then
7397 inv_log_util.trace('Error in obtaining LCM Enabled Flag ', 'INV_TXN_MANAGER_GRP', 9);
7398 RAISE fnd_api.g_exc_unexpected_error;
7399 End;
7400
7401 IF (l_debug = 1) THEN
7402 inv_log_util.trace('LCM Enabled : ' ||l_lcm_enabled_org, 'INV_TXN_MANAGER_GRP', 9);
7403 END IF;
7404
7405 IF l_lcm_enabled_org = 'Y' then
7406
7407 IF (l_validate_full) THEN --J-dev
7408 FND_MESSAGE.set_name('INV','INV_MATERIAL_EXP_ACCOUNT');
7409 l_account := FND_MESSAGE.get ;
7410
7411 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7412 fnd_message.set_token('ACCOUNT',l_account);
7413 l_error_code := fnd_message.get;
7414
7415 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7416 fnd_message.set_token('ACCOUNT',l_account);
7417 l_error_exp := fnd_message.get;
7418
7419 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7420 SET LAST_UPDATE_DATE = SYSDATE,
7421 LAST_UPDATED_BY = p_userid,
7422 LAST_UPDATE_LOGIN = p_loginid,
7423 PROGRAM_UPDATE_DATE = SYSDATE,
7424 PROCESS_FLAG = 3,
7425 LOCK_FLAG = 2,
7426 ERROR_CODE = substrb(l_error_code,1,240),
7427 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7428 WHERE TRANSACTION_HEADER_ID = l_header_id
7429 AND PROCESS_FLAG = 1
7430 AND MATERIAL_EXPENSE_ACCOUNT IS NOT NULL
7431 AND NOT EXISTS (
7432 SELECT NULL
7433 FROM GL_CODE_COMBINATIONS GCC
7434 WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_EXPENSE_ACCOUNT
7435 AND GCC.CHART_OF_ACCOUNTS_ID =
7436 (SELECT CHART_OF_ACCOUNTS_ID
7437 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7438 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7439 AND GCC.ENABLED_FLAG = 'Y'
7440 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7441 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7442
7443 l_count := SQL%ROWCOUNT;
7444 IF (l_debug = 1) THEN
7445 inv_log_util.trace('Validating material expense account (LCM changes) ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7446 END IF;
7447
7448 END IF; --J-dev
7449
7450 loaderrmsg('INV_GREATER_THAN_ZERO','INV_GREATER_THAN_ZERO');
7451
7452 /* We need to check if the quantity passed is zero when a Material Expense account is passed - LCM changes */
7453 IF (l_validate_full) THEN --J-dev
7454 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7455 SET LAST_UPDATE_DATE = SYSDATE,
7456 LAST_UPDATED_BY = p_userid,
7457 LAST_UPDATE_LOGIN = p_loginid,
7458 PROGRAM_UPDATE_DATE = SYSDATE,
7459 PROCESS_FLAG = 3,
7460 LOCK_FLAG = 2,
7461 ERROR_CODE = substrb(l_error_code,1,240),
7462 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7463 WHERE TRANSACTION_HEADER_ID = l_header_id
7464 AND PROCESS_FLAG = 1
7465 AND MATERIAL_EXPENSE_ACCOUNT IS NOT NULL
7466 AND TRANSACTION_QUANTITY <= 0 ;
7467 END IF;
7468
7469 END IF; -- If Org is LCM enabled
7470 -- End of LCM Changes
7471
7472 END IF; /* l_acttype = 24 AND (l_srctype = 14 or l_srctype = 15*/
7473 /* End of Bug# 6271039 */
7474
7475 /* for average cost update and layer cost update, validate rows in */
7476 /* mtl_txn_cost_det_interface table , if R10 avg cost profile is set */
7477
7478
7479 IF ( l_acttype = 24 AND ((l_srctype = INV_Globals.G_SourceType_Inventory)
7480 OR (l_srctype = 15)) ) THEN
7481 IF ( l_avg_cost_update = 2 ) THEN
7482
7483 /* should we check also if interface id is not null and
7484 generate an id if it is null before calling validate */
7485 CSTPACIT.cost_det_validate(l_intid,
7486 l_orgid,
7487 l_itemid,
7488 l_new_avg_cst,
7489 l_per_chng,
7490 l_val_chng,
7491 l_mat_accnt,
7492 l_mat_ovhd_accnt,
7493 l_res_accnt,
7494 l_osp_accnt,
7495 l_ovhd_accnt,
7496 l_error_num,
7497 l_error_code,
7498 l_error_exp);
7499 IF ( l_error_exp IS NOT NULL) THEN
7500 errupdate(l_rowid,null);
7501 l_count := l_count + 1;
7502 --exit;
7503 RAISE fnd_api.g_exc_error;
7504 END IF;
7505 END IF;
7506 END IF;
7507
7508 IF ( l_acttype = 24 AND l_srctype = 14 ) THEN /* PCST */
7509 CSTPPCIT.periodic_cost_validate(
7510 l_org_cost_group_id,
7511 l_cost_type_id,
7512 l_trxdate,--Bug #4156979 Removed the call to fnd_date.canonical_to_date
7513 l_intid,
7514 l_orgid,
7515 l_itemid,
7516 l_new_avg_cst,
7517 l_per_chng,
7518 l_val_chng,
7519 l_mat_accnt,
7520 l_mat_ovhd_accnt,
7521 l_res_accnt,
7522 l_osp_accnt,
7523 l_ovhd_accnt,
7524 l_error_num,
7525 l_error_code,
7526 l_error_exp) ;
7527 IF l_error_exp IS NOT NULL THEN
7528 errupdate(l_rowid,null);
7529 l_count := l_count + 1;
7530 --exit;
7531 RAISE fnd_api.g_exc_error;
7532 END IF;
7533 END IF;
7534
7535 /* Do this snapshot moves for non-CFM WIP completions,returns,
7536 /*scraps */
7537 /* In J WIP will do this. move snapshot.*/
7538 IF ( wip_constants.DMF_PATCHSET_LEVEL < wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
7539 IF ( ( (l_acttype =30)
7540 OR (l_acttype =31)
7541 OR (l_acttype =32) )
7542 AND l_srctype = 5 AND
7543 tev_flow_schedule = 0) THEN
7544
7545 SELECT PRIMARY_COST_METHOD
7546 INTO l_primary_cost_method
7547 FROM MTL_PARAMETERS
7548 WHERE ORGANIZATION_ID = l_orgid ;
7549
7550 IF ( l_avg_cost_update = 2 AND (l_primary_cost_method = 2 OR
7551 l_primary_cost_method = 5 OR
7552 l_primary_cost_method = 6 ) )
7553 THEN
7554 l_cst_temp := CSTPACMS.validate_move_snap_to_temp
7555 (l_intid,
7556 l_intid,
7557 1, -- for inventory l_interface_table=1
7558 l_priqty,
7559 l_error_num,
7560 l_error_code,
7561 l_error_exp) ;
7562 IF l_error_exp IS NOT NULL THEN
7563 errupdate(l_rowid,null);
7564 l_count := l_count + 1;
7565 --exit;
7566 RAISE fnd_api.g_exc_error;
7567 END IF;
7568 END IF;
7569 END IF;
7570 END IF; --J-dev
7571
7572 -- hjogleka
7573 -- Bug #5497519, Added code to validate lot quantity and serial count
7574 -- against quantities in MTI/MLTI.
7575 -- Bug #5566760, added ABS() while comparing the quantities.
7576 --Bug #5614139
7577 --Do not validate lot/serial quantity for lot split, merge and translate
7578 --The inv_lot_trx_validations_pub API would already have done it by the
7579 --time control comes here
7580 IF (l_validate_full AND l_acttype NOT IN (
7581 INV_GLOBALS.G_ACTION_COSTUPDATE
7582 , INV_GLOBALS.G_ACTION_INV_LOT_SPLIT
7583 , INV_GLOBALS.G_ACTION_INV_LOT_MERGE
7584 , INV_GLOBALS.G_ACTION_INV_LOT_TRANSLATE)
7585 ) THEN
7586 IF (l_lotctrl = 2 AND
7587 (l_serctrl = 2 OR l_serctrl = 5 OR
7588 (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
7589 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
7590 (l_serctrl = 6 AND l_srctype = 8 AND l_acttype IN (3,21)) )
7591 ) THEN
7592 -- lot and serial controlled item
7593 -- validate lot quantities and mmtt quantity.
7594 BEGIN
7595 IF (l_debug = 1) THEN
7596 inv_log_util.trace('validating lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7597 END IF;
7598
7599 SELECT NVL(SUM(ABS(NVL(mtli.transaction_quantity,0))), 0)
7600 INTO l_lot_ser_qty
7601 FROM mtl_transaction_lots_interface mtli
7602 WHERE mtli.transaction_interface_id =l_intid
7603 AND ABS(nvl(mtli.primary_quantity, inv_convert.inv_um_convert
7604 (l_itemid,5,mtli.transaction_quantity,l_trxuom,l_priuom,'','')))
7605 = (SELECT SUM(get_serial_diff_wrp
7606 (msni.fm_serial_number,nvl(msni.to_serial_number,msni.fm_serial_number)))
7607 FROM mtl_serial_numbers_interface msni
7608 WHERE msni.transaction_interface_id
7609 = mtli.serial_transaction_temp_id);
7610 EXCEPTION
7611 WHEN others THEN
7612 IF (l_debug = 1) THEN
7613 inv_log_util.trace('Ex.. while checking lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7614 END IF;
7615 l_lot_ser_qty := 0;
7616 END;
7617
7618 IF (ABS(l_trxqty) <> l_lot_ser_qty) THEN
7619 IF (l_debug = 1) THEN
7620 inv_log_util.trace('mismatch in lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7621 END IF;
7622 loaderrmsg('INV_INT_LOTCODE','INV_INVLTPU_LOTTRX_QTY');
7623 errupdate(l_rowid,null);
7624 l_count := l_count + 1;
7625 RAISE fnd_api.g_exc_error;
7626 ELSE
7627 IF (l_debug = 1) THEN
7628 inv_log_util.trace('no mismatch in lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7629 END IF;
7630 END IF;
7631
7632 ELSIF ( l_serctrl = 2 OR l_serctrl = 5 OR
7633 (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
7634 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
7635 (l_serctrl = 6 AND l_srctype = 8 AND l_acttype IN (3,21))
7636 ) THEN
7637 -- serial controlled item
7638 -- validate serial quantities only.
7639 BEGIN
7640 IF (l_debug = 1) THEN
7641 inv_log_util.trace('validating lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7642 END IF;
7643
7644 SELECT SUM(get_serial_diff_wrp
7645 (fm_serial_number,NVL(to_serial_number,fm_serial_number)))
7646 INTO l_lot_ser_qty
7647 FROM mtl_serial_numbers_interface msni
7648 WHERE msni.transaction_interface_id =l_intid;
7649 EXCEPTION
7650 WHEN others THEN
7651 IF (l_debug = 1) THEN
7652 inv_log_util.trace('Ex.. while checking lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7653 END IF;
7654 l_lot_ser_qty := 0;
7655 END;
7656 IF (ABS(l_priqty) <> l_lot_ser_qty) THEN
7657 IF (l_debug = 1) THEN
7658 inv_log_util.trace('mismatch in serial quantities','INV_TXN_MANAGER_GRP', 9);
7659 END IF;
7660 loaderrmsg('INV_INT_SERMISCODE','INV_INVLTPU_LOTTRX_QTY');
7661 errupdate(l_rowid,null);
7662 l_count := l_count + 1;
7663 RAISE fnd_api.g_exc_error;
7664 ELSE
7665 IF (l_debug = 1) THEN
7666 inv_log_util.trace('no mismatch in serial quantities','INV_TXN_MANAGER_GRP', 9);
7667 END IF;
7668 END IF;
7669 END IF;
7670 END IF;
7671
7672 -- SDPAUL
7673 -- Bug# 5710830 Added code to validate serials and lots and insert into the corresponding
7674 -- master tables. These validations are only needed for Receipt into stores transaction -> 27
7675 -- and for the transaction sources -> 3,6 and 13.
7676 IF (l_acttype = 27 AND l_srctype IN(3,6,13)) THEN
7677
7678 IF (l_debug = 1) THEN
7679 inv_log_util.trace('Before calling validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
7680 END IF;
7681 SAVEPOINT val_lot_serial_for_rcpt_sp;
7682 validate_lot_serial_for_rcpt( p_interface_id => l_intid
7683 , p_org_id => l_orgid
7684 , p_item_id => l_itemid
7685 , p_lotctrl => l_lotctrl
7686 , p_serctrl => l_serctrl
7687 , p_rev => l_revision
7688 , p_trx_src_id => l_srctype
7689 , p_trx_action_id => l_acttype
7690 , p_subinventory_code => l_subinv
7691 , p_locator_id => l_locid
7692 , x_proc_msg => l_msg_data
7693 , x_return_status => l_return_status );
7694 IF (l_debug = 1) THEN
7695 inv_log_util.trace('After call to validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
7696 END IF;
7697
7698 IF (l_return_status <> lg_ret_sts_success) THEN -- Failure from validate_lot_serial_for_rcpt
7699 IF (l_debug = 1) THEN
7700 inv_log_util.trace('Error from validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
7701 END IF;
7702 errupdate(l_rowid,null);
7703 l_count := l_count + 1;
7704 ROLLBACK TO val_lot_serial_for_rcpt_sp;
7705 RAISE fnd_api.g_exc_error;
7706 ELSE
7707 IF (l_debug = 1) THEN
7708 inv_log_util.trace('Call to validate_lot_serial_for_rcpt successful','INV_TXN_MANAGER_GRP', 9);
7709 END IF;
7710 END IF;
7711
7712 END IF; -- End of fix for Bug# 5710830
7713
7714 --J-dev, do not do lot and serial validations for WIP desktop
7715 --transactions
7716 IF (l_validate_full) then
7717 IF (l_lotctrl = 2 AND l_acttype <> 24)
7718 THEN
7719 IF l_intid IS NOT NULL THEN
7720 BEGIN
7721 SELECT 1
7722 into l_tnum
7723 FROM MTL_TRANSACTION_LOTS_INTERFACE
7724 WHERE TRANSACTION_INTERFACE_ID = l_intid
7725 AND ROWNUM < 2;
7726
7727 /**********************************************************
7728 * we cannot call lotcheck for lot split and lot translate
7729 * since the resultant lot can be a new lot
7730 **********************************************************/
7731 if( l_acttype not in (40, 42)) then
7732 /** end of change for lot transactions **/
7733 IF(NOT lotcheck(l_rowid,l_orgid,l_itemid,l_intid,l_priuom,
7734 l_trxuom,l_lotuniq,l_shlfcode,l_shlfdays,
7735 l_serctrl, l_srctype, l_acttype, l_is_wsm_enabled,
7736 -- INVCONV start fabdi
7737 l_trxtype, l_revision, l_subinv, l_locid))
7738 -- INVCONV end fabdi
7739 THEN
7740 l_count := l_count + 1;
7741 --exit;
7742 RAISE fnd_api.g_exc_error;
7743 END IF;
7744 end if;--action
7745 EXCEPTION
7746 WHEN NO_DATA_FOUND THEN
7747 loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
7748 errupdate(l_rowid,null);
7749 l_count := l_count + 1;
7750 --exit;
7751 RAISE fnd_api.g_exc_error;
7752 END;
7753 ELSE
7754 loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
7755 errupdate(l_rowid,null);
7756 l_count := l_count + 1;
7757 --exit;
7758 RAISE fnd_api.g_exc_error;
7759 END IF;--l_intid is null
7760 ELSE
7761 IF l_intid IS NOT NULL THEN
7762 DELETE FROM MTL_TRANSACTION_LOTS_INTERFACE
7763 WHERE TRANSACTION_INTERFACE_ID = l_intid;
7764 END IF;
7765
7766 /* Additional checking for Dynamic SerCtrl and srctype = 8
7767 /* Changed the if condition for contracts validation */
7768
7769 IF ( (l_serctrl = 2 OR l_serctrl = 5 OR
7770 (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
7771 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
7772 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1)OR
7773 (l_serctrl = 6 AND l_srctype = 8 ) ) AND
7774 l_acttype <> 24) THEN
7775
7776 IF (l_intid IS NULL) THEN
7777 loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
7778 errupdate(l_rowid,null);
7779 l_count := l_count + 1;
7780 --exit;
7781 RAISE fnd_api.g_exc_error;
7782 ELSE
7783 BEGIN
7784 SELECT 1
7785 into l_tnum
7786 FROM MTL_SERIAL_NUMBERS_INTERFACE
7787 WHERE TRANSACTION_INTERFACE_ID = l_intid
7788 AND ROWNUM < 2;
7789 EXCEPTION
7790 WHEN NO_DATA_FOUND THEN
7791 loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
7792 errupdate(l_rowid,null);
7793 l_count := l_count + 1;
7794 RAISE fnd_api.g_exc_error;
7795 --exit;
7796 END;
7797 END IF;--l_intid is null
7798 ELSE
7799 IF (l_intid IS NOT NULL) THEN
7800 DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
7801 WHERE TRANSACTION_INTERFACE_ID = l_intid;
7802 END IF;
7803 END IF; --actions for serials.
7804 END IF;--if check actions for lots
7805
7806 -- R12 Genealogy Enhancement : Start
7807 IF (l_srctype = INV_GLOBALS.G_SOURCETYPE_WIP AND l_acttype = INV_GLOBALS.G_ACTION_ISSUE) THEN
7808 IF ((l_lotctrl = 1 AND l_acttype <> 24) AND
7809 (l_lotctrl = 1 AND (l_serctrl = 2 OR l_serctrl = 5)) )
7810 THEN
7811 IF (l_debug = 1) THEN
7812 INV_log_util.trace('{{- It is serial controlled item. Call validate_serial_genealogy_data }}'
7813 , 'INV_TXN_MANAGER_GRP', 9);
7814 END IF;
7815 validate_serial_genealogy_data ( p_interface_id => l_intid
7816 , p_org_id => l_orgid
7817 , x_return_status => l_return_status
7818 , x_msg_count => l_msg_count
7819 , x_msg_data => l_msg_data);
7820 IF l_return_status <> lg_ret_sts_success THEN
7821 IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
7822 --RAISE lg_exc_error; ????
7823 END IF;
7824 END IF;
7825 ELSE
7826 IF (l_debug = 1) THEN
7827 inv_log_util.trace('{{-It is not a WIP issue transactioon, so no validation/derivation of }}' ||
7828 '{{ parent object details will not happen }}' , 'INV_TXN_MANAGER_GRP', 9);
7829 END IF;
7830 END IF;
7831 -- R12 Genealogy Enhancement : End
7832
7833 END IF;--l_validate_full
7834 /*Bug#5125632. Calling 'update_status_id_in_mtli' to update the 'status_id' column
7835 of the table, 'MTLI', for the row corrsponding to the currnet line */
7836
7837 IF (l_lotctrl = 2) THEN
7838 update_status_id_in_mtli(l_intid
7839 ,l_orgid
7840 ,l_itemid);
7841 END IF;
7842
7843 l_acctid_validated := FALSE; --Bug#4247753
7844
7845 IF (l_acct IS NULL) THEN
7846 IF (l_srctype = 3 OR l_srctype = 6) THEN
7847 IF (l_srctype = 6) THEN
7848 SELECT DISTRIBUTION_ACCOUNT
7849 INTO l_acct
7850 FROM MTL_GENERIC_DISPOSITIONS
7851 WHERE ORGANIZATION_ID = l_orgid
7852 AND DISPOSITION_ID = l_trxsrc;
7853 ELSE
7854 l_acct := l_trxsrc;
7855 END IF;
7856
7857 ELSE
7858 /***************************************************************
7859 * Lot transaction open interface changes
7860 * We need to bypass the validation of distribution accout for
7861 * lot split and lot merge transactions
7862 **************************************************************/
7863 IF( l_acttype not in (40,41)) THEN
7864 /** end of changes for lot transactions **/
7865 IF (NOT getacctid(l_acct, l_orgid, l_rowid)) THEN
7866 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
7867 l_error_code := FND_MESSAGE.get;
7868
7869 errupdate(l_rowid,null);
7870 --exit;
7871 RAISE fnd_api.g_exc_error;
7872 END IF;
7873 END IF;
7874 END IF;
7875
7876 END IF;--l_acct is null
7877
7878 -- Bug#4247753. Calling the functon, validate_acctid() for validating the Account combination ID
7879 IF ( l_acct IS NOT NULL AND (NOT l_acctid_validated)) THEN
7880 IF ( NOT validate_acctid(l_acct, l_orgid, l_trxdate)) THEN
7881 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
7882 l_error_code := FND_MESSAGE.get;
7883 errupdate(l_rowid,null);
7884 RAISE fnd_api.g_exc_error;
7885 END IF;
7886 END IF;
7887
7888 --J-dev
7889 /* Validate the unit number for unit_effectivity */
7890
7891 IF (NOT validate_unit_number(l_unit_number,l_orgid,l_itemid,l_srctype,l_acttype))
7892 THEN
7893 l_error_exp := FND_MESSAGE.get;
7894 l_error_exp := FND_MESSAGE.get;
7895
7896 FND_MESSAGE.set_name('INV', 'INV_INT_UNITNUMBER');
7897 l_error_code := FND_MESSAGE.get;
7898
7899 errupdate(l_rowid,null);
7900 l_count := l_count + 1;
7901 --exit;
7902 RAISE fnd_api.g_exc_error;
7903
7904 END IF;
7905
7906
7907 IF (l_overcomp_txn_qty IS NOT NULL) THEN /* Overcompletion Transactions */
7908 BEGIN
7909 IF (l_srctype=5)then
7910 l_overcomp_primary_qty := inv_convert.inv_um_convert(l_itemid,6,l_overcomp_txn_qty,
7911 l_trxuom,l_priuom,'','');
7912 ELSE
7913 l_overcomp_primary_qty := inv_convert.inv_um_convert(l_itemid,5,l_overcomp_txn_qty,
7914 l_trxuom,l_priuom,'','');
7915 END IF;
7916 EXCEPTION
7917 WHEN OTHERS THEN
7918 /*IF (NOT UomConvert(l_itemid,0,l_trxuom,'',l_priuom,'',
7919 l_overcomp_txn_qty, l_overcomp_primary_qty,0))
7920 THEN */
7921 l_error_exp := FND_MESSAGE.get;
7922
7923 FND_MESSAGE.set_name('INV', 'INV_INT_UOMCONVCODE');
7924 l_error_code := FND_MESSAGE.get;
7925
7926 errupdate(l_rowid,null);
7927 l_count := l_count + 1;
7928 END;
7929 END IF;
7930
7931 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7932 SET LAST_UPDATE_DATE = SYSDATE,
7933 LAST_UPDATED_BY = p_userid,
7934 LAST_UPDATE_LOGIN = p_loginid,
7935 PROGRAM_UPDATE_DATE = SYSDATE,
7936 INVENTORY_ITEM_ID = l_itemid,
7937 DISTRIBUTION_ACCOUNT_ID = l_acct,
7938 LOCATOR_ID = l_locid,
7939 TRANSACTION_SOURCE_ID = l_trxsrc,
7940 ACCT_PERIOD_ID = l_prdid,
7941 PRIMARY_QUANTITY = l_priqty,
7942 TRANSFER_ORGANIZATION = l_xorgid,
7943 TRANSFER_SUBINVENTORY = l_xsubinv,
7944 TRANSFER_LOCATOR = l_xlocid,
7945 TRANSACTION_INTERFACE_ID = l_intid,
7946 END_ITEM_UNIT_NUMBER = l_unit_number,
7947 OVERCOMPLETION_PRIMARY_QTY = l_overcomp_primary_qty
7948 WHERE ROWID = l_rowid;
7949
7950 --J-dev moving validate locators as version 115.80 incorrectly put
7951 --this validation IN outer validate_lines(). that would never get called.
7952 /* Moved the locator validation from validate_group to here
7953 /*So that the derived id's will get validated
7954 /*Begin changes for the bug 3015128 */
7955
7956 /* Bug 3703053 validation of locator and xfr locator was wrongly placed
7957 in the j-dev project.This validation should happen after populating
7958 the locator_id,trasfer_locator_id into MTI not before that .Moved it
7959 down so that the populated locators get validated. */
7960 /*-------------------------------------------------------------+
7961 | Validating locators
7962 +-------------------------------------------------------------*/
7963 loaderrmsg('INV_INT_LOCCODE','INV_INT_LOCEXP');
7964
7965 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7966 SET LAST_UPDATE_DATE = SYSDATE,
7967 LAST_UPDATED_BY = p_userid,
7968 LAST_UPDATE_LOGIN = p_loginid,
7969 PROGRAM_UPDATE_DATE = SYSDATE,
7970 PROCESS_FLAG = 3,
7971 LOCK_FLAG = 2,
7972 ERROR_CODE = substrb(l_error_code,1,240),
7973 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7974 WHERE rowid =l_rowid
7975 AND PROCESS_FLAG = 1
7976 AND LOCATOR_ID IS NOT NULL
7977 AND NOT EXISTS (
7978 SELECT NULL
7979 FROM MTL_ITEM_LOCATIONS MIL
7980 WHERE MIL.ORGANIZATION_ID = MTI.ORGANIZATION_ID
7981 AND MIL.SUBINVENTORY_CODE = MTI.SUBINVENTORY_CODE
7982 AND MIL.INVENTORY_LOCATION_ID = MTI.LOCATOR_ID
7983 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(MIL.DISABLE_DATE,
7984 MTI.TRANSACTION_DATE + 1));
7985
7986
7987 loaderrmsg('INV_INT_LOCCODE','INV_INT_RESLOCEXP');
7988
7989 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7990 SET LAST_UPDATE_DATE = SYSDATE,
7991 LAST_UPDATED_BY = p_userid,
7992 LAST_UPDATE_LOGIN = p_loginid,
7993 PROGRAM_UPDATE_DATE = SYSDATE,
7994 PROCESS_FLAG = 3,
7995 LOCK_FLAG = 2,
7996 ERROR_CODE = substrb(l_error_code,1,240),
7997 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7998 WHERE rowid =l_rowid
7999 AND PROCESS_FLAG = 1
8000 AND LOCATOR_ID IS NOT NULL
8001 AND NOT EXISTS (
8002 SELECT NULL
8003 FROM MTL_SECONDARY_LOCATORS MSL,
8004 MTL_SYSTEM_ITEMS MSI
8005 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8006 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8007 AND MSI.RESTRICT_LOCATORS_CODE = 1
8008 AND MSL.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8009 AND MSL.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8010 AND MSL.ORGANIZATION_ID = MSI.ORGANIZATION_ID
8011 AND MSL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
8012 AND MSL.SUBINVENTORY_CODE = MTI.SUBINVENTORY_CODE
8013 AND MSL.SECONDARY_LOCATOR = MTI.LOCATOR_ID
8014 UNION
8015 SELECT NULL
8016 FROM MTL_SYSTEM_ITEMS ITM
8017 WHERE ITM.RESTRICT_LOCATORS_CODE = 2
8018 AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8019 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID);
8020
8021 IF (l_debug = 1) THEN
8022 inv_log_util.trace('Validating locators','INV_TXN_MANAGER_GRP',9);
8023 END IF;
8024
8025
8026 /*-----------------------------------------------------------+
8027 | Validating transfer locators against transfer organization
8028 +-----------------------------------------------------------*/
8029
8030 loaderrmsg('INV_INT_XLOCCODE','INV_INT_XFRLOCEXP');
8031
8032 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8033 SET LAST_UPDATE_DATE = SYSDATE,
8034 LAST_UPDATED_BY = p_userid,
8035 LAST_UPDATE_LOGIN = p_loginid,
8036 PROGRAM_UPDATE_DATE = SYSDATE,
8037 PROCESS_FLAG = 3,
8038 LOCK_FLAG = 2,
8039 ERROR_CODE = substrb(l_error_code,1,240),
8040 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8041 WHERE ROWID = l_rowid
8042 AND PROCESS_FLAG = 1
8043 AND TRANSACTION_ACTION_ID IN (2,3,5)
8044 AND TRANSFER_LOCATOR IS NOT NULL
8045 AND NOT EXISTS (
8046 SELECT NULL
8047 FROM MTL_ITEM_LOCATIONS MIL
8048 WHERE MIL.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,3,
8049 MTI.TRANSFER_ORGANIZATION,MTI.ORGANIZATION_ID)
8050 AND MIL.SUBINVENTORY_CODE = MTI.TRANSFER_SUBINVENTORY
8051 AND MIL.INVENTORY_LOCATION_ID = MTI.TRANSFER_LOCATOR
8052 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(MIL.DISABLE_DATE,
8053 MTI.TRANSACTION_DATE + 1));
8054
8055
8056
8057 /*------------------------------------------------------+
8058 | Validating transfer locators for restricted list
8059 +------------------------------------------------------*/
8060 loaderrmsg('INV_INT_XLOCCODE','INV_INT_RESXFRLOCEXP');
8061
8062 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8063 SET LAST_UPDATE_DATE = SYSDATE,
8064 LAST_UPDATED_BY = p_userid,
8065 LAST_UPDATE_LOGIN = p_loginid,
8066 PROGRAM_UPDATE_DATE = SYSDATE,
8067 PROCESS_FLAG = 3,
8068 LOCK_FLAG = 2,
8069 ERROR_CODE = substrb(l_error_code,1,240),
8070 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8071 WHERE ROWID=l_rowid
8072 AND PROCESS_FLAG = 1
8073 AND TRANSACTION_ACTION_ID in (2,21,3,5)
8074 AND TRANSFER_LOCATOR IS NOT NULL
8075 AND NOT EXISTS (
8076 SELECT NULL
8077 FROM MTL_SECONDARY_LOCATORS MSL,
8078 MTL_SYSTEM_ITEMS MSI
8079 WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8080 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8081 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8082 AND MSI.RESTRICT_LOCATORS_CODE = 1
8083 AND MSL.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8084 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8085 AND MSL.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8086 AND MSL.ORGANIZATION_ID = MSI.ORGANIZATION_ID
8087 AND MSL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
8088 AND MSL.SUBINVENTORY_CODE = MTI.TRANSFER_SUBINVENTORY
8089 AND MSL.SECONDARY_LOCATOR = MTI.TRANSFER_LOCATOR
8090 UNION
8091 SELECT NULL
8092 FROM MTL_SYSTEM_ITEMS MSI
8093 WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8094 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8095 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8096 AND MSI.RESTRICT_LOCATORS_CODE = 2);
8097
8098
8099 IF (l_debug = 1) THEN
8100 inv_log_util.trace('Validating xfer locators ','INV_TXN_MANAGER_GRP',9);
8101 END IF;
8102 /* End changes for bug 3009135 */
8103
8104
8105 --============================================================
8106 -- Bug 4432078
8107 -- OPM INVCONV umoogala 05-Apr-2005
8108 -- For process-to-discrete call new transfer_price API.
8109 -- No change for discrete/discrete orders.
8110 --============================================================
8111
8112 --
8113 -- Bug 5230916: Added direct xfer txn
8114 -- Bug 5349860: Process/Discrete Xfer: stamp xfer price for internal order
8115 -- issues to expense destination also (src/act: 8/1)
8116 --
8117 IF (l_acttype = 21
8118 OR (l_acttype = 3 and l_trxqty < 0)
8119 OR (l_srctype = 8 and l_acttype = 1))
8120 THEN
8121
8122 --
8123 -- Get process mfg org flag for from and to orgs
8124 --
8125 SELECT mp_from.process_enabled_flag, mp_to.process_enabled_flag
8126 INTO l_process_enabled_flag_from, l_process_enabled_flag_to
8127 FROM mtl_parameters mp_from, mtl_parameters mp_to
8128 WHERE mp_from.organization_id = l_orgid
8129 AND mp_to.organization_id = l_xorgid;
8130
8131 --
8132 -- Get Operating Units for from and to orgs
8133 -- Bug 5240801: Was org_information2, which is legal entity.
8134 -- We need to get OU, so now using org_information3.
8135 --
8136 SELECT TO_NUMBER(src.org_information3) src_ou, TO_NUMBER(dest.org_information3) dest_ou
8137 INTO l_from_ou, l_to_ou
8138 FROM hr_organization_information src, hr_organization_information dest
8139 WHERE src.organization_id = l_orgid
8140 AND src.org_information_context = 'Accounting Information'
8141 AND dest.organization_id = l_xorgid
8142 AND dest.org_information_context = 'Accounting Information'
8143 ;
8144
8145 -- get transfer price for:
8146 -- 1. Process-Discrete Transfers
8147 -- 2. Process-to-Process Orgs transfer across OUs
8148 -- 3. Discrete-to-Discrete Orgs transfer across OUs with IC Invoicing enabled.
8149 --
8150 l_ic_invoicing_enabled := fnd_profile.value('INV_INTERCOMPANY_INVOICE_INTERNAL_ORDER');
8151
8152 IF (l_process_enabled_flag_from <> l_process_enabled_flag_to) OR
8153 (l_process_enabled_flag_from = 'Y' AND l_process_enabled_flag_to = 'Y' AND
8154 l_from_ou <> l_to_ou) OR
8155 (l_process_enabled_flag_from = 'N' AND l_process_enabled_flag_to = 'N' AND
8156 l_from_ou <> l_to_ou AND
8157 l_ic_invoicing_enabled = 1 AND
8158 l_srctype = 8 AND l_acttype = 21)
8159 THEN
8160
8161 IF (l_debug = 1) THEN
8162 IF (l_process_enabled_flag_from <> l_process_enabled_flag_to)
8163 THEN
8164 inv_log_util.trace('This is process-discrete xfer. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8165 ELSIF (l_process_enabled_flag_from = 'Y' AND
8166 l_process_enabled_flag_to = 'Y')
8167 THEN
8168 inv_log_util.trace('This is process-process xfer across OUs. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8169 ELSIF (l_process_enabled_flag_from = 'N' AND
8170 l_process_enabled_flag_to = 'N')
8171 THEN
8172 inv_log_util.trace('This is discrete-discrete xfer across OUs with IC enabled. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8173 END IF;
8174 END IF;
8175
8176 --
8177 -- For internal orders across OUs and IC Invoicing is enabled, then
8178 -- set transfer type to 'INTCOM'. IF transfer type is 'INTCOM' the
8179 -- API below calls INV_TRANSACTION_FLOW_PUB.get_transfer_price.
8180 --
8181 -- For INTORG transfers, new transfer price API is called.
8182 --
8183 IF l_from_ou <> l_to_ou
8184 AND l_srctype = 8
8185 -- Internal Orders across OUs
8186 THEN
8187 --
8188 -- Bug 5349354: direct xfers are not considered as inter-company txn.
8189 --
8190 IF l_ic_invoicing_enabled = 1 and l_acttype = 21
8191 THEN
8192 l_xfer_type := 'INTCOM';
8193 l_xfer_source := 'INTCOM';
8194 ELSE
8195 l_xfer_type := 'INTORD';
8196 l_xfer_source := 'INTORD';
8197 END IF;
8198 ELSIF l_from_ou = l_to_ou
8199 AND l_srctype = 8
8200 -- Internal Orders within same OUs
8201 THEN
8202 l_xfer_type := 'INTORD';
8203 l_xfer_source := 'INTORD';
8204 ELSE
8205 -- InterOrg xfers
8206 l_xfer_type := 'INTORG';
8207 l_xfer_source := 'INTORG';
8208 END IF;
8209
8210 -- call transfer price API
8211 GMF_get_transfer_price_PUB.get_transfer_price (
8212 p_api_version => 1.0
8213 , p_init_msg_list => 'FALSE'
8214
8215 , p_inventory_item_id => l_itemid
8216 , p_transaction_qty => l_trxqty
8217 , p_transaction_uom => l_trxuom
8218
8219 , p_transaction_id => l_order_line_id
8220 , p_global_procurement_flag => 'N'
8221 , p_drop_ship_flag => 'N'
8222
8223 , p_from_organization_id => l_orgid
8224 , p_from_ou => l_from_ou
8225 , p_to_organization_id => l_xorgid
8226 , p_to_ou => l_to_ou
8227
8228 , p_transfer_type => l_xfer_type -- INTORG or INTCOM
8229 , p_transfer_source => l_xfer_source
8230
8231 , x_return_status => x_return_status
8232 , x_msg_data => x_msg_data
8233 , x_msg_count => x_msg_count
8234
8235 , x_transfer_price => l_transfer_price -- in base currency txn uom
8236 , x_transfer_price_priuom => l_transfer_price_priuom -- in base currency
8237 , x_currency_code => x_currency_code
8238 , x_incr_transfer_price => x_incr_transfer_price
8239 , x_incr_currency_code => x_incr_currency_code
8240 );
8241
8242 IF (l_debug = 1) THEN
8243 inv_log_util.trace('After getting transfer price. Status: ' || x_return_status, 'INV_TXN_MANAGER_GRP','1');
8244 END IF;
8245
8246 IF x_return_status = FND_API.G_RET_STS_SUCCESS
8247 THEN
8248
8249 --
8250 -- Bug 5136335
8251 -- l_transfer_price_priuom can be NULL for discrete/discrete intercompany xfers.
8252 -- We need to ignore this error when intercompany setup is not done. This is handled
8253 -- in above GMF API call.
8254 -- So, moved this condition from above condition to not to raise any error.
8255 --
8256 IF l_transfer_price_priuom IS NOT NULL
8257 THEN
8258
8259 IF (l_debug = 1) THEN
8260 inv_log_util.trace('Updating MTI with transfer price: ' || l_transfer_price_priuom, 'INV_TXN_MANAGER_GRP','1');
8261 END IF;
8262
8263 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8264 SET LAST_UPDATE_DATE = SYSDATE,
8265 LAST_UPDATED_BY = p_userid,
8266 LAST_UPDATE_LOGIN = p_loginid,
8267 transfer_price = l_transfer_price_priuom
8268 WHERE ROWID = l_rowid;
8269 END IF;
8270 ELSE
8271 l_error_exp := x_msg_data;
8272 FND_MESSAGE.set_name('BOM', 'CST_XFER_PRICE_ERROR');
8273 l_error_code := FND_MESSAGE.get;
8274 errupdate(l_rowid,null);
8275 l_count := l_count + 1;
8276 RAISE fnd_api.g_exc_error;
8277 END IF;
8278
8279 ELSE
8280 IF (l_debug = 1) THEN
8281 inv_log_util.trace('InterOrg Xfer. Skipping transfer price API call as all conditions are not met.' ||
8282 ' From/To ProcessFlags: ' || l_process_enabled_flag_from ||'/'|| l_process_enabled_flag_to ||
8283 ' From/To OUs: ' || l_from_ou ||'/'|| l_to_ou ||
8284 ' l_ic_invoicing_enabled: ' || l_ic_invoicing_enabled,
8285 'INV_TXN_MANAGER_GRP',9);
8286 END IF;
8287 -- Not a process-discrete xfer. So, set xfer price to NULL
8288 l_transfer_price := NULL;
8289 END IF;
8290 END IF;
8291 --============================================================
8292 -- End OPM INVCONV changes by umoogala
8293 --============================================================
8294 IF (l_debug = 1) THEN
8295 inv_log_util.trace('end of validate lines inner sec uom code='||p_line_Rec_Type.secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
8296 inv_log_util.trace('end of validate lines inner lot control='||to_char(l_lotctrl), 'INV_TXN_MANAGER_GRP', 9);
8297 END IF;
8298 --Jalaj Srivastava Bug 4969885
8299 IF (l_lotctrl=2 AND p_line_Rec_Type.secondary_uom_code IS NOT NULL) THEN
8300 IF (l_debug = 1) THEN
8301 inv_log_util.trace('update secondary quantity on line as sum of lot level secondary quantities', 'INV_TXN_MANAGER_GRP', 9);
8302 END IF;
8303 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8304 SET secondary_transaction_quantity = (SELECT SUM(SECONDARY_TRANSACTION_QUANTITY)
8305 FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI
8306 WHERE MTLI.TRANSACTION_INTERFACE_ID = p_line_Rec_Type.TRANSACTION_INTERFACE_ID)
8307 WHERE ROWID = l_rowid;
8308 END IF;
8309
8310 /* Bug 6356567 Changes Starting */
8311 /*--------------------------------------------------------------+
8312 Validating Cost group
8313 +--------------------------------------------------------------*/
8314
8315 SELECT cost_group_id, transfer_cost_group_id
8316 INTO l_cost_group_id, l_xfer_cost_group_id
8317 FROM MTL_TRANSACTIONS_INTERFACE
8318 WHERE ROWID = l_rowid
8319 AND PROCESS_FLAG = 1;
8320
8321 IF l_cost_group_id is not null and l_acttype not in (5,6,24,30,50,51,52) THEN -- Modified 7025628
8322 l_temp_cost_group_id := get_costgrpid(l_orgid, l_subinv, l_locid);
8323 loaderrmsg('INV_INT_CSTGRP','INV_INT_CSTEXP');
8324
8325 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8326 SET LAST_UPDATE_DATE = SYSDATE,
8327 LAST_UPDATED_BY = p_userid,
8328 LAST_UPDATE_LOGIN = p_loginid,
8329 PROGRAM_UPDATE_DATE = SYSDATE,
8330 PROCESS_FLAG = 3,
8331 LOCK_FLAG = 2,
8332 ERROR_CODE = substrb(l_error_code,1,240),
8333 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8334 WHERE ROWID = l_rowid
8335 AND PROCESS_FLAG = 1
8336 AND TRANSACTION_ACTION_ID NOT IN (5,6,24,30,50,51,52) -- Added 7025628
8337 AND COST_GROUP_ID IS NOT NULL
8338 AND COST_GROUP_ID <> l_temp_cost_group_id;
8339
8340 IF (l_debug = 1) THEN
8341 inv_log_util.trace('Validating cost group ', 'INV_TXN_MANAGER_GRP', 9);
8342 END IF;
8343 END IF;
8344
8345 /*--------------------------------------------------------------+
8346 Validating Transfer Cost group
8347 +--------------------------------------------------------------*/
8348
8349 IF l_xfer_cost_group_id is not null and l_acttype in (2,5,3,21) THEN
8350 IF l_acttype in (2, 5) THEN
8351 l_cg_org := l_orgid;
8352 ELSIF l_acttype in (3, 21) THEN
8353 l_cg_org := l_xorgid;
8354 END IF;
8355
8356 l_temp_xfer_cost_group_id := get_costgrpid(l_cg_org, l_xsubinv, l_xlocid);
8357 loaderrmsg('INV_INT_XCSTGRP','INV_INT_XCSTEXP');
8358
8359 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8360 SET LAST_UPDATE_DATE = SYSDATE,
8361 LAST_UPDATED_BY = p_userid,
8362 LAST_UPDATE_LOGIN = p_loginid,
8363 PROGRAM_UPDATE_DATE = SYSDATE,
8364 PROCESS_FLAG = 3,
8365 LOCK_FLAG = 2,
8366 ERROR_CODE = substrb(l_error_code,1,240),
8367 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8368 WHERE ROWID = l_rowid
8369 AND PROCESS_FLAG = 1
8370 AND TRANSACTION_ACTION_ID IN (2,3,21,5)
8371 AND TRANSFER_COST_GROUP_ID IS NOT NULL
8372 AND TRANSFER_COST_GROUP_ID <> l_temp_xfer_cost_group_id;
8373
8374 IF (l_debug = 1) THEN
8375 inv_log_util.trace('Validating xfer cost group ', 'INV_TXN_MANAGER_GRP', 9);
8376 END IF;
8377 END IF;
8378
8379 /* Bug 6356567 Changes Ending */
8380
8381 /*---------------------------------------+
8382 | Commit work only if not a CFM WIP txn |
8383 +---------------------------------------*/
8384 IF (l_flow_schedule_children <> 1) AND FND_API.To_Boolean( p_commit ) THEN
8385 COMMIT WORK;
8386 END IF;
8387 -- END LOOP;
8388
8389 EXCEPTION
8390 WHEN OTHERS THEN
8391 p_error_flag:='Y';
8392 IF (l_debug = 1) THEN
8393 inv_log_util.trace('Error in validate_line : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
8394 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
8395 END IF;
8396
8397 UPDATE MTL_TRANSACTIONS_INTERFACE
8398 SET LAST_UPDATE_DATE = SYSDATE,
8399 LAST_UPDATED_BY = p_userid,
8400 LAST_UPDATE_LOGIN = p_loginid,
8401 PROGRAM_UPDATE_DATE = SYSDATE,
8402 PROCESS_FLAG = 3,
8403 LOCK_FLAG = 2,
8404 ERROR_CODE = substrb(l_error_code,1,240),
8405 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8406 WHERE ROWID = l_rowid
8407 AND PROCESS_FLAG = 1;
8408
8409 /*---------------------------------------+
8410 | Commit work only if not a CFM WIP txn |
8411 +---------------------------------------*/
8412 IF (l_flow_schedule_children <> 1) AND FND_API.To_Boolean( p_commit ) THEN
8413 COMMIT WORK;
8414 END IF;
8415
8416 l_error_exp := '';
8417 l_error_code := '';
8418 FND_MESSAGE.clear;
8419 return;
8420 END validate_lines;
8421
8422
8423 /******************************************************************
8424 *
8425 * get_open_period()
8426 *
8427 ******************************************************************/
8428 FUNCTION get_open_period(p_org_id NUMBER,p_trans_date DATE,p_chk_date NUMBER) RETURN NUMBER IS
8429
8430 chk_date NUMBER; /* 0 ignore date,1-return 0 if date doesn't fall in current
8431 period, -1 if Oracle error, otherwise period id*/
8432 trans_date DATE; /* transaction_date */
8433 acct_period_id NUMBER; /* period_close_id of current period */
8434
8435 BEGIN
8436 if ( l_debug is null) then
8437 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
8438 end if;
8439
8440 acct_period_id := 0; /* default value */
8441
8442 if (chk_date = 1) THEN
8443
8444 SELECT ACCT_PERIOD_ID
8445 INTO acct_period_id
8446 FROM ORG_ACCT_PERIODS
8447 WHERE PERIOD_CLOSE_DATE IS NULL
8448 AND ORGANIZATION_ID = p_org_id
8449 AND INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id)
8450 BETWEEN PERIOD_START_DATE and SCHEDULE_CLOSE_DATE
8451 ORDER BY PERIOD_START_DATE DESC, SCHEDULE_CLOSE_DATE ASC;
8452
8453 else
8454
8455 SELECT ACCT_PERIOD_ID
8456 INTO acct_period_id
8457 FROM ORG_ACCT_PERIODS
8458 WHERE PERIOD_CLOSE_DATE IS NULL
8459 AND ORGANIZATION_ID = p_org_id
8460 AND TRUNC(SCHEDULE_CLOSE_DATE) >=
8461 INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id)
8462 AND TRUNC(PERIOD_START_DATE) <=
8463 INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id);
8464 end if;
8465
8466 return(acct_period_id);
8467
8468 exception
8469 when NO_DATA_FOUND then
8470 acct_period_id := 0;
8471 return(acct_period_id);
8472 when OTHERS then
8473 acct_period_id := -1;
8474 return(acct_period_id);
8475
8476
8477 end get_open_period;
8478
8479
8480
8481 /******************************************************************
8482 *
8483 * tmpinsert()
8484 *
8485 ******************************************************************/
8486 FUNCTION tmpinsert(p_header_id IN NUMBER,
8487 p_validation_level IN NUMBER := fnd_api.g_valid_level_full )
8488 RETURN BOOLEAN
8489 IS
8490
8491 l_lt_flow_schedule NUMBER;
8492 l_count NUMBER := 0;
8493 l_patchset_j NUMBER := 0; /* 0 = No 1 = Yes */
8494
8495 BEGIN
8496 IF (l_debug is null) then
8497 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
8498 end if;
8499
8500 --bug 4574806. this will be used in the statements below for final
8501 --completion flag AS a decode
8502 IF (wip_constants.DMF_PATCHSET_LEVEL>=
8503 wip_constants.DMF_PATCHSET_J_VALUE) THEN
8504 l_patchset_j := 1;
8505 END IF;
8506
8507 --J-dev
8508 /** For patchset J.wip will do the computation for the
8509 /*completion_transaction_id. For J new colmns have been added
8510 /* move_transaction_id (new)
8511 /*completion_transaction_id (new)
8512 /*wip_supply_type (new)*/
8513
8514 l_lt_flow_schedule := gi_flow_schedule ;
8515
8516 /*OSFM Support for Serialized Lot Items*/
8517 IF (l_debug = 1)
8518 THEN
8519 inv_log_util.TRACE ( 'In tmpinsert '
8520 , 'INV_TXN_MANAGER_GRP'
8521 , '9'
8522 );
8523 END IF;
8524 /*********************************************************************
8525 * In case there are only Lot Split/Merge/Translate Transactions only*
8526 * we do a successful return *
8527 *********************************************************************/
8528 BEGIN
8529 SELECT 1
8530 INTO l_count
8531 FROM DUAL
8532 WHERE EXISTS (SELECT transaction_interface_id
8533 FROM mtl_transactions_interface
8534 WHERE transaction_header_id = p_header_id
8535 AND process_flag = 1
8536 AND transaction_type_id NOT IN
8537 (inv_globals.g_type_inv_lot_split
8538 , inv_globals.g_type_inv_lot_merge
8539 , inv_globals.g_type_inv_lot_translate));
8540 EXCEPTION
8541 WHEN OTHERS THEN
8542 l_count := 0;
8543 IF(l_debug = 1) THEN
8544 inv_log_util.TRACE ( 'Exce. Section l_count => ' || l_count
8545 , 'INV_TXN_MANAGER_GRP'
8546 , '9'
8547 );
8548 END IF;
8549 END;
8550 IF(l_count = 0 OR l_count IS NULL) THEN
8551 IF (l_debug = 1)
8552 THEN
8553 inv_log_util.TRACE ( 'Returning from tmpinsert '
8554 , 'INV_TXN_MANAGER_GRP'
8555 , '9'
8556 );
8557 END IF;
8558 RETURN TRUE;
8559 END IF;
8560
8561 /*OSFM Support for Serialized Lot Items*/
8562
8563 IF ( l_lt_flow_schedule = 0) THEN
8564
8565 INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
8566 TRANSACTION_HEADER_ID,
8567 TRANSACTION_TEMP_ID,
8568 SOURCE_CODE,
8569 SOURCE_LINE_ID,
8570 PROCESS_FLAG,
8571 CREATION_DATE,
8572 CREATED_BY,
8573 LAST_UPDATE_DATE,
8574 LAST_UPDATED_BY,
8575 LAST_UPDATE_LOGIN,
8576 PROGRAM_ID,
8577 PROGRAM_UPDATE_DATE,
8578 PROGRAM_APPLICATION_ID,
8579 REQUEST_ID,
8580 ORGANIZATION_ID,
8581 SUBINVENTORY_CODE,
8582 LOCATOR_ID,
8583 INVENTORY_ITEM_ID,
8584 REVISION,
8585 TRANSACTION_TYPE_ID,
8586 TRANSACTION_ACTION_ID,
8587 TRANSACTION_SOURCE_TYPE_ID,
8588 TRANSACTION_SOURCE_ID,
8589 TRANSACTION_SOURCE_NAME,
8590 TRANSACTION_REFERENCE,
8591 REASON_ID,
8592 TRANSACTION_DATE,
8593 ACCT_PERIOD_ID,
8594 TRANSACTION_QUANTITY,
8595 TRANSACTION_UOM,
8596 PRIMARY_QUANTITY,
8597 TRANSACTION_COST,
8598 DISTRIBUTION_ACCOUNT_ID,
8599 TRANSFER_SUBINVENTORY,
8600 TRANSFER_ORGANIZATION,
8601 TRANSFER_TO_LOCATION,
8602 SHIPMENT_NUMBER,
8603 TRANSPORTATION_COST,
8604 TRANSFER_COST,
8605 TRANSPORTATION_ACCOUNT,
8606 FREIGHT_CODE,
8607 CONTAINERS,
8608 WAYBILL_AIRBILL,
8609 EXPECTED_ARRIVAL_DATE,
8610 CURRENCY_CODE,
8611 CURRENCY_CONVERSION_DATE,
8612 CURRENCY_CONVERSION_TYPE,
8613 CURRENCY_CONVERSION_RATE,
8614 NEW_AVERAGE_COST,
8615 VALUE_CHANGE,
8616 PERCENTAGE_CHANGE,
8617 DEMAND_ID,
8618 DEMAND_SOURCE_HEADER_ID,
8619 DEMAND_SOURCE_LINE,
8620 DEMAND_SOURCE_DELIVERY,
8621 CUSTOMER_SHIP_ID,
8622 TRX_SOURCE_DELIVERY_ID,
8623 TRX_SOURCE_LINE_ID,
8624 PICKING_LINE_ID,
8625 REQUIRED_FLAG,
8626 NEGATIVE_REQ_FLAG,
8627 REPETITIVE_LINE_ID,
8628 PRIMARY_SWITCH,
8629 OPERATION_SEQ_NUM,
8630 SETUP_TEARDOWN_CODE,
8631 SCHEDULE_UPDATE_CODE,
8632 DEPARTMENT_ID,
8633 EMPLOYEE_CODE,
8634 SCHEDULE_ID,
8635 WIP_ENTITY_TYPE,
8636 ENCUMBRANCE_AMOUNT,
8637 ENCUMBRANCE_ACCOUNT,
8638 USSGL_TRANSACTION_CODE,
8639 SHIPPABLE_FLAG,
8640 REQUISITION_LINE_ID,
8641 REQUISITION_DISTRIBUTION_ID,
8642 SHIP_TO_LOCATION,
8643 COMPLETION_TRANSACTION_ID,
8644 ATTRIBUTE_CATEGORY,
8645 ATTRIBUTE1,
8646 ATTRIBUTE2,
8647 ATTRIBUTE3,
8648 ATTRIBUTE4,
8649 ATTRIBUTE5,
8650 ATTRIBUTE6,
8651 ATTRIBUTE7,
8652 ATTRIBUTE8,
8653 ATTRIBUTE9,
8654 ATTRIBUTE10,
8655 ATTRIBUTE11,
8656 ATTRIBUTE12,
8657 ATTRIBUTE13,
8658 ATTRIBUTE14,
8659 ATTRIBUTE15,
8660 MOVEMENT_ID,
8661 SOURCE_PROJECT_ID,
8662 SOURCE_TASK_ID,
8663 EXPENDITURE_TYPE,
8664 PA_EXPENDITURE_ORG_ID,
8665 PROJECT_ID,
8666 TASK_ID,
8667 TO_PROJECT_ID,
8668 TO_TASK_ID,
8669 POSTING_FLAG,
8670 FINAL_COMPLETION_FLAG,
8671 TRANSFER_PERCENTAGE,
8672 MATERIAL_ACCOUNT,
8673 MATERIAL_OVERHEAD_ACCOUNT,
8674 RESOURCE_ACCOUNT,
8675 OUTSIDE_PROCESSING_ACCOUNT,
8676 OVERHEAD_ACCOUNT,
8677 COST_GROUP_ID,
8678 FLOW_SCHEDULE,
8679 QA_COLLECTION_ID,
8680 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
8681 OVERCOMPLETION_PRIMARY_QTY,
8682 OVERCOMPLETION_TRANSACTION_ID,
8683 END_ITEM_UNIT_NUMBER,
8684 ORG_COST_GROUP_ID, /* PCST (Periodic Cost Update) */
8685 COST_TYPE_ID, /* PCST */
8686 MOVE_ORDER_LINE_ID,
8687 LPN_ID,
8688 CONTENT_LPN_ID,
8689 TRANSFER_LPN_ID,
8690 ORGANIZATION_TYPE,
8691 TRANSFER_ORGANIZATION_TYPE,
8692 OWNING_ORGANIZATION_ID,
8693 OWNING_TP_TYPE,
8694 XFR_OWNING_ORGANIZATION_ID,
8695 TRANSFER_OWNING_TP_TYPE,
8696 PLANNING_ORGANIZATION_ID,
8697 PLANNING_TP_TYPE,
8698 XFR_PLANNING_ORGANIZATION_ID,
8699 TRANSFER_PLANNING_TP_TYPE,
8700 TRANSACTION_BATCH_ID,
8701 TRANSACTION_BATCH_SEQ,
8702 TRANSFER_COST_GROUP_ID,
8703 TRANSACTION_MODE,
8704 -- start of fix for eam
8705 -- added following 4 columns
8706 REBUILD_ITEM_ID,
8707 REBUILD_ACTIVITY_ID,
8708 REBUILD_SERIAL_NUMBER,
8709 rebuild_job_name,
8710 kanban_card_id ,-- end of fix for eam
8711 class_code,--J dev (accounting_class in MTI)
8712 scheduled_flag,--J dev
8713 schedule_number,--J dev
8714 routing_revision_date,--J dev
8715 move_transaction_id,--J dev
8716 wip_supply_type,--J dev
8717 build_sequence,--J dev
8718 bom_revision,--J dev
8719 routing_revision,--J dev
8720 bom_revision_date,--J dev
8721 alternate_bom_designator,--J dev
8722 alternate_routing_designator, -- end of fix for eam
8723 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi start
8724 SECONDARY_UOM_CODE, -- INVCONV fabdi end
8725 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
8726 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
8727 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
8728 )
8729 SELECT
8730 TRANSACTION_HEADER_ID,
8731 TRANSACTION_INTERFACE_ID,
8732 SOURCE_CODE,
8733 SOURCE_LINE_ID,
8734 'Y',
8735 SYSDATE,
8736 CREATED_BY,
8737 SYSDATE,
8738 LAST_UPDATED_BY,
8739 LAST_UPDATE_LOGIN,
8740 PROGRAM_ID,
8741 SYSDATE,
8742 PROGRAM_APPLICATION_ID,
8743 REQUEST_ID,
8744 ORGANIZATION_ID,
8745 SUBINVENTORY_CODE,
8746 LOCATOR_ID,
8747 INVENTORY_ITEM_ID,
8748 REVISION,
8749 TRANSACTION_TYPE_ID,
8750 TRANSACTION_ACTION_ID,
8751 TRANSACTION_SOURCE_TYPE_ID,
8752 TRANSACTION_SOURCE_ID,
8753 TRANSACTION_SOURCE_NAME,
8754 TRANSACTION_REFERENCE,
8755 REASON_ID,
8756 TRANSACTION_DATE,
8757 ACCT_PERIOD_ID,
8758 TRANSACTION_QUANTITY,
8759 TRANSACTION_UOM,
8760 PRIMARY_QUANTITY,
8761 TRANSACTION_COST,
8762 DISTRIBUTION_ACCOUNT_ID,
8763 TRANSFER_SUBINVENTORY,
8764 TRANSFER_ORGANIZATION,
8765 TRANSFER_LOCATOR,
8766 SHIPMENT_NUMBER,
8767 TRANSPORTATION_COST,
8768 TRANSFER_COST,
8769 TRANSPORTATION_ACCOUNT,
8770 FREIGHT_CODE,
8771 CONTAINERS,
8772 WAYBILL_AIRBILL,
8773 EXPECTED_ARRIVAL_DATE,
8774 CURRENCY_CODE,
8775 CURRENCY_CONVERSION_DATE,
8776 CURRENCY_CONVERSION_TYPE,
8777 CURRENCY_CONVERSION_RATE,
8778 NEW_AVERAGE_COST,
8779 VALUE_CHANGE,
8780 PERCENTAGE_CHANGE,
8781 DEMAND_ID,
8782 DEMAND_SOURCE_HEADER_ID,
8783 DEMAND_SOURCE_LINE,
8784 DEMAND_SOURCE_DELIVERY,
8785 CUSTOMER_SHIP_ID,
8786 TRX_SOURCE_DELIVERY_ID,
8787 TRX_SOURCE_LINE_ID,
8788 PICKING_LINE_ID,
8789 REQUIRED_FLAG,
8790 NEGATIVE_REQ_FLAG,
8791 REPETITIVE_LINE_ID,
8792 PRIMARY_SWITCH,
8793 OPERATION_SEQ_NUM,
8794 SETUP_TEARDOWN_CODE,
8795 SCHEDULE_UPDATE_CODE,
8796 DEPARTMENT_ID,
8797 EMPLOYEE_CODE,
8798 SCHEDULE_ID,
8799 WIP_ENTITY_TYPE,
8800 ENCUMBRANCE_AMOUNT,
8801 ENCUMBRANCE_ACCOUNT,
8802 USSGL_TRANSACTION_CODE,
8803 SHIPPABLE_FLAG,
8804 REQUISITION_LINE_ID,
8805 REQUISITION_DISTRIBUTION_ID,
8806 SHIP_TO_LOCATION_ID,
8807 Nvl(completion_transaction_id,DECODE(TRANSACTION_ACTION_ID,31,
8808 MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL,32,MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL,NULL)),--J-dev as wip will pass this to us. For I we need the decode.
8809 ATTRIBUTE_CATEGORY,
8810 ATTRIBUTE1,
8811 ATTRIBUTE2,
8812 ATTRIBUTE3,
8813 ATTRIBUTE4,
8814 ATTRIBUTE5,
8815 ATTRIBUTE6,
8816 ATTRIBUTE7,
8817 ATTRIBUTE8,
8818 ATTRIBUTE9,
8819 ATTRIBUTE10,
8820 ATTRIBUTE11,
8821 ATTRIBUTE12,
8822 ATTRIBUTE13,
8823 ATTRIBUTE14,
8824 ATTRIBUTE15,
8825 MOVEMENT_ID,
8826 SOURCE_PROJECT_ID,
8827 SOURCE_TASK_ID,
8828 EXPENDITURE_TYPE,
8829 PA_EXPENDITURE_ORG_ID,
8830 PROJECT_ID,
8831 TASK_ID,
8832 TO_PROJECT_ID,
8833 TO_TASK_ID,
8834 'N',
8835 NVL(FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,FINAL_COMPLETION_FLAG,
8836 'N')),
8837 TRANSFER_PERCENTAGE,
8838 MATERIAL_ACCOUNT,
8839 MATERIAL_OVERHEAD_ACCOUNT,
8840 RESOURCE_ACCOUNT,
8841 OUTSIDE_PROCESSING_ACCOUNT,
8842 OVERHEAD_ACCOUNT,
8843 COST_GROUP_ID,
8844 FLOW_SCHEDULE,
8845 QA_COLLECTION_ID,
8846 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
8847 OVERCOMPLETION_PRIMARY_QTY,
8848 OVERCOMPLETION_TRANSACTION_ID,
8849 END_ITEM_UNIT_NUMBER,
8850 ORG_COST_GROUP_ID, /* PCST */
8851 COST_TYPE_ID,
8852 DECODE(TRANSACTION_SOURCE_TYPE_ID,4,SOURCE_LINE_ID,null), /* PCST */
8853 LPN_ID,
8854 CONTENT_LPN_ID,
8855 transfer_lpn_id,
8856 organization_type,
8857 transfer_organization_type,
8858 owning_organization_id,
8859 owning_tp_type,
8860 xfr_owning_organization_id,
8861 transfer_owning_tp_type,
8862 planning_organization_id,
8863 planning_tp_type,
8864 xfr_planning_organization_id,
8865 TRANSFER_PLANNING_TP_TYPE,
8866 TRANSACTION_BATCH_ID,
8867 TRANSACTION_BATCH_SEQ,
8868 TRANSFER_COST_GROUP_ID,
8869 Decode(p_validation_level,fnd_api.g_valid_level_none,transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
8870 -- start of fix for eam
8871 -- added following 4 columns
8872 REBUILD_ITEM_ID,
8873 REBUILD_ACTIVITY_ID,
8874 REBUILD_SERIAL_NUMBER,
8875 rebuild_job_name,
8876 -- end of fix for eam
8877 kanban_card_id,
8878 accounting_class,--J dev (class_code in mmtt)
8879 scheduled_flag,--J dev
8880 schedule_number,--J dev
8881 routing_revision_date,--J dev
8882 move_transaction_id,--J dev
8883 wip_supply_type , --J dev
8884 build_sequence,--J dev
8885 bom_revision,--J dev
8886 routing_revision,--J dev
8887 bom_revision_date,--J dev
8888 alternate_bom_designator,--J dev
8889 alternate_routing_designator, --J-dev
8890 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV start fabdi
8891 SECONDARY_UOM_CODE, -- INVCONV fabdi end
8892 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
8893 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
8894 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
8895 FROM MTL_TRANSACTIONS_INTERFACE
8896 --WHERE ROWID = p_rowid--J-dev
8897 WHERE transaction_header_id = p_header_id
8898 AND PROCESS_FLAG = 1
8899 AND transaction_type_id NOT IN /*OSFM Support for Lot Serialized Items*/
8900 (inv_globals.g_type_inv_lot_split
8901 , inv_globals.g_type_inv_lot_merge
8902 , inv_globals.g_type_inv_lot_translate
8903 );
8904
8905 ELSE
8906 IF ( l_lt_flow_schedule <> 0 ) THEN
8907 INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
8908 TRANSACTION_HEADER_ID,
8909 TRANSACTION_TEMP_ID,
8910 SOURCE_CODE,
8911 SOURCE_LINE_ID,
8912 PROCESS_FLAG,
8913 CREATION_DATE,
8914 CREATED_BY,
8915 LAST_UPDATE_DATE,
8916 LAST_UPDATED_BY,
8917 LAST_UPDATE_LOGIN,
8918 PROGRAM_ID,
8919 PROGRAM_UPDATE_DATE,
8920 PROGRAM_APPLICATION_ID,
8921 REQUEST_ID,
8922 ORGANIZATION_ID,
8923 SUBINVENTORY_CODE,
8924 LOCATOR_ID,
8925 INVENTORY_ITEM_ID,
8926 REVISION,
8927 TRANSACTION_TYPE_ID,
8928 TRANSACTION_ACTION_ID,
8929 TRANSACTION_SOURCE_TYPE_ID,
8930 TRANSACTION_SOURCE_ID,
8931 TRANSACTION_SOURCE_NAME,
8932 TRANSACTION_REFERENCE,
8933 REASON_ID,
8934 TRANSACTION_DATE,
8935 ACCT_PERIOD_ID,
8936 TRANSACTION_QUANTITY,
8937 TRANSACTION_UOM,
8938 PRIMARY_QUANTITY,
8939 TRANSACTION_COST,
8940 DISTRIBUTION_ACCOUNT_ID,
8941 TRANSFER_SUBINVENTORY,
8942 TRANSFER_ORGANIZATION,
8943 TRANSFER_TO_LOCATION,
8944 SHIPMENT_NUMBER,
8945 TRANSPORTATION_COST,
8946 TRANSFER_COST,
8947 TRANSPORTATION_ACCOUNT,
8948 FREIGHT_CODE,
8949 CONTAINERS,
8950 WAYBILL_AIRBILL,
8951 EXPECTED_ARRIVAL_DATE,
8952 CURRENCY_CODE,
8953 CURRENCY_CONVERSION_DATE,
8954 CURRENCY_CONVERSION_TYPE,
8955 CURRENCY_CONVERSION_RATE,
8956 NEW_AVERAGE_COST,
8957 VALUE_CHANGE,
8958 PERCENTAGE_CHANGE,
8959 DEMAND_ID,
8960 DEMAND_SOURCE_HEADER_ID,
8961 DEMAND_SOURCE_LINE,
8962 DEMAND_SOURCE_DELIVERY,
8963 DEMAND_CLASS,
8964 CUSTOMER_SHIP_ID,
8965 TRX_SOURCE_DELIVERY_ID,
8966 TRX_SOURCE_LINE_ID,
8967 PICKING_LINE_ID,
8968 REQUIRED_FLAG,
8969 NEGATIVE_REQ_FLAG,
8970 REPETITIVE_LINE_ID,
8971 PRIMARY_SWITCH,
8972 OPERATION_SEQ_NUM,
8973 SETUP_TEARDOWN_CODE,
8974 SCHEDULE_UPDATE_CODE,
8975 DEPARTMENT_ID,
8976 EMPLOYEE_CODE,
8977 SCHEDULE_ID,
8978 WIP_ENTITY_TYPE,
8979 ENCUMBRANCE_AMOUNT,
8980 ENCUMBRANCE_ACCOUNT,
8981 USSGL_TRANSACTION_CODE,
8982 SHIPPABLE_FLAG,
8983 REQUISITION_LINE_ID,
8984 REQUISITION_DISTRIBUTION_ID,
8985 SHIP_TO_LOCATION,
8986 COMPLETION_TRANSACTION_ID,
8987 ATTRIBUTE_CATEGORY,
8988 ATTRIBUTE1,
8989 ATTRIBUTE2,
8990 ATTRIBUTE3,
8991 ATTRIBUTE4,
8992 ATTRIBUTE5,
8993 ATTRIBUTE6,
8994 ATTRIBUTE7,
8995 ATTRIBUTE8,
8996 ATTRIBUTE9,
8997 ATTRIBUTE10,
8998 ATTRIBUTE11,
8999 ATTRIBUTE12,
9000 ATTRIBUTE13,
9001 ATTRIBUTE14,
9002 ATTRIBUTE15,
9003 MOVEMENT_ID,
9004 SOURCE_PROJECT_ID,
9005 SOURCE_TASK_ID,
9006 EXPENDITURE_TYPE,
9007 PA_EXPENDITURE_ORG_ID,
9008 PROJECT_ID,
9009 TASK_ID,
9010 TO_PROJECT_ID,
9011 TO_TASK_ID,
9012 POSTING_FLAG,
9013 FINAL_COMPLETION_FLAG,
9014 TRANSFER_PERCENTAGE,
9015 MATERIAL_ACCOUNT,
9016 MATERIAL_OVERHEAD_ACCOUNT,
9017 RESOURCE_ACCOUNT,
9018 OUTSIDE_PROCESSING_ACCOUNT,
9019 OVERHEAD_ACCOUNT,
9020 COST_GROUP_ID,
9021 FLOW_SCHEDULE,
9022 QA_COLLECTION_ID,
9023 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9024 OVERCOMPLETION_PRIMARY_QTY,
9025 OVERCOMPLETION_TRANSACTION_ID,
9026 END_ITEM_UNIT_NUMBER,
9027 COMMON_BOM_SEQ_ID,
9028 COMMON_ROUTING_SEQ_ID,
9029 ORG_COST_GROUP_ID, /* PCST */
9030 COST_TYPE_ID,
9031 LPN_ID,
9032 CONTENT_LPN_ID,
9033 transfer_lpn_id,
9034 organization_type,
9035 transfer_organization_type,
9036 owning_organization_id,
9037 owning_tp_type,
9038 xfr_owning_organization_id,
9039 transfer_owning_tp_type,
9040 planning_organization_id,
9041 planning_tp_type,
9042 xfr_planning_organization_id,
9043 TRANSFER_PLANNING_TP_TYPE,
9044 TRANSACTION_BATCH_ID,
9045 TRANSACTION_BATCH_SEQ,
9046 TRANSFER_COST_GROUP_ID,
9047 TRANSACTION_MODE,
9048 -- start of fix for eam
9049 -- added following 4 columns
9050 REBUILD_ITEM_ID,
9051 REBUILD_ACTIVITY_ID,
9052 REBUILD_SERIAL_NUMBER,
9053 rebuild_job_name,
9054 -- end of fix for eam
9055 kanban_card_id,
9056 class_code,--J dev (class_code in mmtt)
9057 scheduled_flag,--J dev
9058 schedule_number,--J dev
9059 routing_revision_date,--J dev
9060 move_transaction_id,--J dev
9061 wip_supply_type,
9062 build_sequence,--J dev
9063 bom_revision,--J dev
9064 routing_revision,--J dev
9065 bom_revision_date,--J dev
9066 alternate_bom_designator,--J dev
9067 alternate_routing_designator , --J dev
9068 SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi
9069 SECONDARY_UOM_CODE, -- INVCONV fabdi end
9070 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9071 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9072 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9073 )
9074 SELECT
9075 MTI.TRANSACTION_HEADER_ID,
9076 MTI.TRANSACTION_INTERFACE_ID,
9077 MTI.SOURCE_CODE,
9078 MTI.SOURCE_LINE_ID,
9079 'Y',
9080 SYSDATE,
9081 MTI.CREATED_BY,
9082 SYSDATE,
9083 MTI.LAST_UPDATED_BY,
9084 MTI.LAST_UPDATE_LOGIN,
9085 MTI.PROGRAM_ID,
9086 SYSDATE,
9087 MTI.PROGRAM_APPLICATION_ID,
9088 MTI.REQUEST_ID,
9089 MTI.ORGANIZATION_ID,
9090 MTI.SUBINVENTORY_CODE,
9091 MTI.LOCATOR_ID,
9092 MTI.INVENTORY_ITEM_ID,
9093 MTI.REVISION,
9094 MTI.TRANSACTION_TYPE_ID,
9095 MTI.TRANSACTION_ACTION_ID,
9096 MTI.TRANSACTION_SOURCE_TYPE_ID,
9097 MTI.TRANSACTION_SOURCE_ID,
9098 MTI.TRANSACTION_SOURCE_NAME,
9099 MTI.TRANSACTION_REFERENCE,
9100 MTI.REASON_ID,
9101 MTI.TRANSACTION_DATE,
9102 MTI.ACCT_PERIOD_ID,
9103 MTI.TRANSACTION_QUANTITY,
9104 MTI.TRANSACTION_UOM,
9105 MTI.PRIMARY_QUANTITY,
9106 MTI.TRANSACTION_COST,
9107 MTI.DISTRIBUTION_ACCOUNT_ID,
9108 MTI.TRANSFER_SUBINVENTORY,
9109 MTI.TRANSFER_ORGANIZATION,
9110 MTI.TRANSFER_LOCATOR,
9111 MTI.SHIPMENT_NUMBER,
9112 MTI.TRANSPORTATION_COST,
9113 MTI.TRANSFER_COST,
9114 MTI.TRANSPORTATION_ACCOUNT,
9115 MTI.FREIGHT_CODE,
9116 MTI.CONTAINERS,
9117 MTI.WAYBILL_AIRBILL,
9118 MTI.EXPECTED_ARRIVAL_DATE,
9119 MTI.CURRENCY_CODE,
9120 MTI.CURRENCY_CONVERSION_DATE,
9121 MTI.CURRENCY_CONVERSION_TYPE,
9122 MTI.CURRENCY_CONVERSION_RATE,
9123 MTI.NEW_AVERAGE_COST,
9124 MTI.VALUE_CHANGE,
9125 MTI.PERCENTAGE_CHANGE,
9126 MTI.DEMAND_ID,
9127 MTI.DEMAND_SOURCE_HEADER_ID,
9128 MTI.DEMAND_SOURCE_LINE,
9129 MTI.DEMAND_SOURCE_DELIVERY,
9130 MTI.DEMAND_CLASS,
9131 MTI.CUSTOMER_SHIP_ID,
9132 MTI.TRX_SOURCE_DELIVERY_ID,
9133 MTI.TRX_SOURCE_LINE_ID,
9134 MTI.PICKING_LINE_ID,
9135 MTI.REQUIRED_FLAG,
9136 MTI.NEGATIVE_REQ_FLAG,
9137 MTI.REPETITIVE_LINE_ID,
9138 MTI.PRIMARY_SWITCH,
9139 MTI.OPERATION_SEQ_NUM,
9140 MTI.SETUP_TEARDOWN_CODE,
9141 MTI.SCHEDULE_UPDATE_CODE,
9142 MTI.DEPARTMENT_ID,
9143 MTI.EMPLOYEE_CODE,
9144 MTI.SCHEDULE_ID,
9145 MTI.WIP_ENTITY_TYPE,
9146 MTI.ENCUMBRANCE_AMOUNT,
9147 MTI.ENCUMBRANCE_ACCOUNT,
9148 MTI.USSGL_TRANSACTION_CODE,
9149 MTI.SHIPPABLE_FLAG,
9150 MTI.REQUISITION_LINE_ID,
9151 MTI.REQUISITION_DISTRIBUTION_ID,
9152 MTI.SHIP_TO_LOCATION_ID,
9153 NVL(mti.completion_transaction_id,MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL),
9154 --J-dev as wip may pass this to us in J. NVL for I
9155 MTI.ATTRIBUTE_CATEGORY,
9156 MTI.ATTRIBUTE1,
9157 MTI.ATTRIBUTE2,
9158 MTI.ATTRIBUTE3,
9159 MTI.ATTRIBUTE4,
9160 MTI.ATTRIBUTE5,
9161 MTI.ATTRIBUTE6,
9162 MTI.ATTRIBUTE7,
9163 MTI.ATTRIBUTE8,
9164 MTI.ATTRIBUTE9,
9165 MTI.ATTRIBUTE10,
9166 MTI.ATTRIBUTE11,
9167 MTI.ATTRIBUTE12,
9168 MTI.ATTRIBUTE13,
9169 MTI.ATTRIBUTE14,
9170 MTI.ATTRIBUTE15,
9171 MTI.MOVEMENT_ID,
9172 MTI.SOURCE_PROJECT_ID,
9173 MTI.SOURCE_TASK_ID,
9174 MTI.EXPENDITURE_TYPE,
9175 MTI.PA_EXPENDITURE_ORG_ID,
9176 MTI.PROJECT_ID,
9177 MTI.TASK_ID,
9178 MTI.TO_PROJECT_ID,
9179 MTI.TO_TASK_ID,
9180 'Y',
9181 NVL(MTI.FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
9182 MTI.TRANSFER_PERCENTAGE,
9183 MTI.MATERIAL_ACCOUNT,
9184 MTI.MATERIAL_OVERHEAD_ACCOUNT,
9185 MTI.RESOURCE_ACCOUNT,
9186 MTI.OUTSIDE_PROCESSING_ACCOUNT,
9187 MTI.OVERHEAD_ACCOUNT,
9188 MTI.COST_GROUP_ID,
9189 MTI.FLOW_SCHEDULE,
9190 MTI.QA_COLLECTION_ID,
9191 MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9192 MTI.OVERCOMPLETION_PRIMARY_QTY,
9193 MTI.OVERCOMPLETION_TRANSACTION_ID,
9194 MTI.END_ITEM_UNIT_NUMBER,
9195 BOM.COMMON_BILL_SEQUENCE_ID,
9196 BOR.COMMON_ROUTING_SEQUENCE_ID,
9197 ORG_COST_GROUP_ID, /* PCST */
9198 COST_TYPE_ID, /* PCST */
9199 MTI.LPN_ID,
9200 MTI.CONTENT_LPN_ID,
9201 MTI.TRANSFER_LPN_ID,
9202 MTI.ORGANIZATION_TYPE,
9203 MTI.TRANSFER_ORGANIZATION_TYPE,
9204 MTI.OWNING_ORGANIZATION_ID,
9205 MTI.OWNING_TP_TYPE,
9206 MTI.XFR_OWNING_ORGANIZATION_ID,
9207 MTI.TRANSFER_OWNING_TP_TYPE,
9208 MTI.PLANNING_ORGANIZATION_ID,
9209 MTI.PLANNING_TP_TYPE,
9210 MTI.XFR_PLANNING_ORGANIZATION_ID,
9211 MTI.TRANSFER_PLANNING_TP_TYPE,
9212 MTI.TRANSACTION_BATCH_ID,
9213 MTI.TRANSACTION_BATCH_SEQ,
9214 MTI.TRANSFER_COST_GROUP_ID,
9215 Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9216 -- start of fix for eam
9217 -- added following 4 columns
9218 MTI.REBUILD_ITEM_ID,
9219 MTI.REBUILD_ACTIVITY_ID,
9220 MTI.REBUILD_SERIAL_NUMBER,
9221 MTI.rebuild_job_name,
9222 -- end of fix for eam
9223 mti.kanban_card_id,
9224 mti.accounting_class,--J dev (class_code in mmtt)
9225 mti.scheduled_flag,--J dev
9226 mti.schedule_number,--J dev
9227 mti.routing_revision_date,--J dev
9228 mti.move_transaction_id,--J dev
9229 mti.wip_supply_type,--J-dev
9230 mti.build_sequence,--J dev
9231 mti.bom_revision,--J dev
9232 mti.routing_revision,--J dev
9233 mti.bom_revision_date,--J dev
9234 mti.alternate_bom_designator,--J dev
9235 mti.alternate_routing_designator, --J dev
9236 mti.SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi
9237 mti.SECONDARY_UOM_CODE, -- INVCONV fabdi
9238 mti.RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9239 mti.RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9240 mti.TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9241 FROM MTL_TRANSACTIONS_INTERFACE MTI,
9242 BOM_BILL_OF_MATERIALS BOM,
9243 BOM_OPERATIONAL_ROUTINGS BOR
9244 WHERE TRANSACTION_HEADER_ID = p_header_id
9245 /*WHERE MTI.ROWID = p_rowid*/--J-dev
9246 AND PROCESS_FLAG = 1
9247 AND TRANSACTION_ACTION_ID IN (30,31, 32) /* CFM Scrap Transactions */
9248 AND BOM.ASSEMBLY_ITEM_ID(+) = MTI.INVENTORY_ITEM_ID
9249 AND BOM.ORGANIZATION_ID(+) = MTI.ORGANIZATION_ID
9250 AND ((BOM.ALTERNATE_BOM_DESIGNATOR is null AND
9251 MTI.ALTERNATE_BOM_DESIGNATOR is null) OR
9252 (BOM.ALTERNATE_BOM_DESIGNATOR = MTI.ALTERNATE_BOM_DESIGNATOR))
9253 AND BOR.ASSEMBLY_ITEM_ID(+) = MTI.INVENTORY_ITEM_ID
9254 AND BOR.ORGANIZATION_ID(+) = MTI.ORGANIZATION_ID
9255 AND ((BOR.ALTERNATE_ROUTING_DESIGNATOR is null AND
9256 MTI.ALTERNATE_ROUTING_DESIGNATOR is null) OR
9257 (BOR.ALTERNATE_ROUTING_DESIGNATOR = MTI.ALTERNATE_ROUTING_DESIGNATOR));
9258
9259
9260 --J-dev IF WIP J is installed, directly copy all records for
9261 --action 1, 27, 33, 34. The parnet will be in MTI and not in
9262 --MMTT
9263 --In case for I, use the current statement.
9264
9265 IF (wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE) THEN
9266 INSERT INTO mtl_material_transactions_temp
9267 (
9268 TRANSACTION_HEADER_ID,
9269 TRANSACTION_TEMP_ID,
9270 SOURCE_CODE,
9271 SOURCE_LINE_ID,
9272 PROCESS_FLAG,
9273 CREATION_DATE,
9274 CREATED_BY,
9275 LAST_UPDATE_DATE,
9276 LAST_UPDATED_BY,
9277 LAST_UPDATE_LOGIN,
9278 PROGRAM_ID,
9279 PROGRAM_UPDATE_DATE,
9280 PROGRAM_APPLICATION_ID,
9281 REQUEST_ID,
9282 ORGANIZATION_ID,
9283 SUBINVENTORY_CODE,
9284 LOCATOR_ID,
9285 INVENTORY_ITEM_ID,
9286 REVISION,
9287 TRANSACTION_TYPE_ID,
9288 TRANSACTION_ACTION_ID,
9289 TRANSACTION_SOURCE_TYPE_ID,
9290 TRANSACTION_SOURCE_ID,
9291 TRANSACTION_SOURCE_NAME,
9292 TRANSACTION_REFERENCE,
9293 REASON_ID,
9294 TRANSACTION_DATE,
9295 ACCT_PERIOD_ID,
9296 TRANSACTION_QUANTITY,
9297 TRANSACTION_UOM,
9298 PRIMARY_QUANTITY,
9299 TRANSACTION_COST,
9300 DISTRIBUTION_ACCOUNT_ID,
9301 TRANSFER_SUBINVENTORY,
9302 TRANSFER_ORGANIZATION,
9303 TRANSFER_TO_LOCATION,
9304 SHIPMENT_NUMBER,
9305 TRANSPORTATION_COST,
9306 TRANSFER_COST,
9307 TRANSPORTATION_ACCOUNT,
9308 FREIGHT_CODE,
9309 CONTAINERS,
9310 WAYBILL_AIRBILL,
9311 EXPECTED_ARRIVAL_DATE,
9312 CURRENCY_CODE,
9313 CURRENCY_CONVERSION_DATE,
9314 CURRENCY_CONVERSION_TYPE,
9315 CURRENCY_CONVERSION_RATE,
9316 NEW_AVERAGE_COST,
9317 VALUE_CHANGE,
9318 PERCENTAGE_CHANGE,
9319 DEMAND_ID,
9320 DEMAND_SOURCE_HEADER_ID,
9321 DEMAND_SOURCE_LINE,
9322 DEMAND_SOURCE_DELIVERY,
9323 DEMAND_CLASS,
9324 CUSTOMER_SHIP_ID,
9325 TRX_SOURCE_DELIVERY_ID,
9326 TRX_SOURCE_LINE_ID,
9327 PICKING_LINE_ID,
9328 REQUIRED_FLAG,
9329 NEGATIVE_REQ_FLAG,
9330 REPETITIVE_LINE_ID,
9331 PRIMARY_SWITCH,
9332 OPERATION_SEQ_NUM,
9333 SETUP_TEARDOWN_CODE,
9334 SCHEDULE_UPDATE_CODE,
9335 DEPARTMENT_ID,
9336 EMPLOYEE_CODE,
9337 SCHEDULE_ID,
9338 WIP_ENTITY_TYPE,
9339 ENCUMBRANCE_AMOUNT,
9340 ENCUMBRANCE_ACCOUNT,
9341 USSGL_TRANSACTION_CODE,
9342 SHIPPABLE_FLAG,
9343 REQUISITION_LINE_ID,
9344 REQUISITION_DISTRIBUTION_ID,
9345 SHIP_TO_LOCATION,
9346 COMPLETION_TRANSACTION_ID,
9347 ATTRIBUTE_CATEGORY,
9348 ATTRIBUTE1,
9349 ATTRIBUTE2,
9350 ATTRIBUTE3,
9351 ATTRIBUTE4,
9352 ATTRIBUTE5,
9353 ATTRIBUTE6,
9354 ATTRIBUTE7,
9355 ATTRIBUTE8,
9356 ATTRIBUTE9,
9357 ATTRIBUTE10,
9358 ATTRIBUTE11,
9359 ATTRIBUTE12,
9360 ATTRIBUTE13,
9361 ATTRIBUTE14,
9362 ATTRIBUTE15,
9363 MOVEMENT_ID,
9364 SOURCE_PROJECT_ID,
9365 SOURCE_TASK_ID,
9366 EXPENDITURE_TYPE,
9367 PA_EXPENDITURE_ORG_ID,
9368 PROJECT_ID,
9369 TASK_ID,
9370 TO_PROJECT_ID,
9371 TO_TASK_ID,
9372 POSTING_FLAG,
9373 FINAL_COMPLETION_FLAG,
9374 TRANSFER_PERCENTAGE,
9375 MATERIAL_ACCOUNT,
9376 MATERIAL_OVERHEAD_ACCOUNT,
9377 RESOURCE_ACCOUNT,
9378 OUTSIDE_PROCESSING_ACCOUNT,
9379 OVERHEAD_ACCOUNT,
9380 COST_GROUP_ID,
9381 FLOW_SCHEDULE,
9382 QA_COLLECTION_ID,
9383 OVERCOMPLETION_TRANSACTION_QTY, -- Overcompletion Transactions --
9384 OVERCOMPLETION_PRIMARY_QTY,
9385 OVERCOMPLETION_TRANSACTION_ID,
9386 END_ITEM_UNIT_NUMBER,
9387 ORG_COST_GROUP_ID, -- PCST --
9388 COST_TYPE_ID, /* PCST */
9389 LPN_ID,
9390 CONTENT_LPN_ID,
9391 transfer_lpn_id,
9392 organization_type,
9393 transfer_organization_type,
9394 owning_organization_id,
9395 owning_tp_type,
9396 xfr_owning_organization_id,
9397 transfer_owning_tp_type,
9398 planning_organization_id,
9399 planning_tp_type,
9400 xfr_planning_organization_id,
9401 TRANSFER_PLANNING_TP_TYPE,
9402 TRANSACTION_BATCH_ID,
9403 TRANSACTION_BATCH_SEQ,
9404 TRANSFER_COST_GROUP_ID,
9405 TRANSACTION_MODE,
9406 -- start of fix for eam
9407 -- added following 4 columns
9408 REBUILD_ITEM_ID,
9409 REBUILD_ACTIVITY_ID,
9410 REBUILD_SERIAL_NUMBER,
9411 rebuild_job_name,
9412 kanban_card_id,
9413 class_code,--J dev (class_code in mmtt)
9414 scheduled_flag,--J dev
9415 schedule_number,--J dev
9416 routing_revision_date,--J dev
9417 move_transaction_id,--J dev
9418 wip_supply_type,
9419 build_sequence,--J dev
9420 bom_revision,--J dev
9421 routing_revision,--J dev
9422 bom_revision_date,--J dev
9423 alternate_bom_designator,--J dev
9424 alternate_routing_designator , -- end of fix for eam
9425 SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi start
9426 SECONDARY_UOM_CODE, -- INVCONV fabdi end
9427 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9428 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9429 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9430 )
9431 SELECT
9432 MTI.TRANSACTION_HEADER_ID,
9433 MTI.TRANSACTION_INTERFACE_ID,
9434 MTI.SOURCE_CODE,
9435 MTI.SOURCE_LINE_ID,
9436 'Y',
9437 SYSDATE,
9438 MTI.CREATED_BY,
9439 SYSDATE,
9440 MTI.LAST_UPDATED_BY,
9441 MTI.LAST_UPDATE_LOGIN,
9442 MTI.PROGRAM_ID,
9443 SYSDATE,
9444 MTI.PROGRAM_APPLICATION_ID,
9445 MTI.REQUEST_ID,
9446 MTI.ORGANIZATION_ID,
9447 MTI.SUBINVENTORY_CODE,
9448 MTI.LOCATOR_ID,
9449 MTI.INVENTORY_ITEM_ID,
9450 MTI.REVISION,
9451 MTI.TRANSACTION_TYPE_ID,
9452 MTI.TRANSACTION_ACTION_ID,
9453 MTI.TRANSACTION_SOURCE_TYPE_ID,
9454 MTI.TRANSACTION_SOURCE_ID,
9455 MTI.TRANSACTION_SOURCE_NAME,
9456 MTI.TRANSACTION_REFERENCE,
9457 MTI.REASON_ID,
9458 MTI.TRANSACTION_DATE,
9459 MTI.ACCT_PERIOD_ID,
9460 MTI.TRANSACTION_QUANTITY,
9461 MTI.TRANSACTION_UOM,
9462 MTI.PRIMARY_QUANTITY,
9463 MTI.TRANSACTION_COST,
9464 MTI.DISTRIBUTION_ACCOUNT_ID,
9465 MTI.TRANSFER_SUBINVENTORY,
9466 MTI.TRANSFER_ORGANIZATION,
9467 MTI.TRANSFER_LOCATOR,
9468 MTI.SHIPMENT_NUMBER,
9469 MTI.TRANSPORTATION_COST,
9470 MTI.TRANSFER_COST,
9471 MTI.TRANSPORTATION_ACCOUNT,
9472 MTI.FREIGHT_CODE,
9473 MTI.CONTAINERS,
9474 MTI.WAYBILL_AIRBILL,
9475 MTI.EXPECTED_ARRIVAL_DATE,
9476 MTI.CURRENCY_CODE,
9477 MTI.CURRENCY_CONVERSION_DATE,
9478 MTI.CURRENCY_CONVERSION_TYPE,
9479 MTI.CURRENCY_CONVERSION_RATE,
9480 MTI.NEW_AVERAGE_COST,
9481 MTI.VALUE_CHANGE,
9482 MTI.PERCENTAGE_CHANGE,
9483 MTI.DEMAND_ID,
9484 MTI.DEMAND_SOURCE_HEADER_ID,
9485 MTI.DEMAND_SOURCE_LINE,
9486 MTI.DEMAND_SOURCE_DELIVERY,
9487 MTI.DEMAND_CLASS,
9488 MTI.CUSTOMER_SHIP_ID,
9489 MTI.TRX_SOURCE_DELIVERY_ID,
9490 MTI.TRX_SOURCE_LINE_ID,
9491 MTI.PICKING_LINE_ID,
9492 MTI.REQUIRED_FLAG,
9493 MTI.NEGATIVE_REQ_FLAG,
9494 MTI.REPETITIVE_LINE_ID,
9495 MTI.PRIMARY_SWITCH,
9496 MTI.OPERATION_SEQ_NUM,
9497 MTI.SETUP_TEARDOWN_CODE,
9498 MTI.SCHEDULE_UPDATE_CODE,
9499 MTI.DEPARTMENT_ID,
9500 MTI.EMPLOYEE_CODE,
9501 MTI.SCHEDULE_ID,
9502 MTI.WIP_ENTITY_TYPE,
9503 MTI.ENCUMBRANCE_AMOUNT,
9504 MTI.ENCUMBRANCE_ACCOUNT,
9505 MTI.USSGL_TRANSACTION_CODE,
9506 MTI.SHIPPABLE_FLAG,
9507 MTI.REQUISITION_LINE_ID,
9508 MTI.REQUISITION_DISTRIBUTION_ID,
9509 MTI.SHIP_TO_LOCATION_ID,
9510 MTI.COMPLETION_TRANSACTION_ID,
9511 MTI.ATTRIBUTE_CATEGORY,
9512 MTI.ATTRIBUTE1,
9513 MTI.ATTRIBUTE2,
9514 MTI.ATTRIBUTE3,
9515 MTI.ATTRIBUTE4,
9516 MTI.ATTRIBUTE5,
9517 MTI.ATTRIBUTE6,
9518 MTI.ATTRIBUTE7,
9519 MTI.ATTRIBUTE8,
9520 MTI.ATTRIBUTE9,
9521 MTI.ATTRIBUTE10,
9522 MTI.ATTRIBUTE11,
9523 MTI.ATTRIBUTE12,
9524 MTI.ATTRIBUTE13,
9525 MTI.ATTRIBUTE14,
9526 MTI.ATTRIBUTE15,
9527 MTI.MOVEMENT_ID,
9528 MTI.SOURCE_PROJECT_ID,
9529 MTI.SOURCE_TASK_ID,
9530 MTI.EXPENDITURE_TYPE,
9531 MTI.PA_EXPENDITURE_ORG_ID,
9532 MTI.PROJECT_ID,
9533 MTI.TASK_ID,
9534 MTI.TO_PROJECT_ID,
9535 MTI.TO_TASK_ID,
9536 'Y',
9537 NVL(MTI.FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
9538 MTI.TRANSFER_PERCENTAGE,
9539 MTI.MATERIAL_ACCOUNT,
9540 MTI.MATERIAL_OVERHEAD_ACCOUNT,
9541 MTI.RESOURCE_ACCOUNT,
9542 MTI.OUTSIDE_PROCESSING_ACCOUNT,
9543 MTI.OVERHEAD_ACCOUNT,
9544 MTI.COST_GROUP_ID,
9545 MTI.FLOW_SCHEDULE,
9546 MTI.QA_COLLECTION_ID,
9547 MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9548 MTI.OVERCOMPLETION_PRIMARY_QTY,
9549 MTI.OVERCOMPLETION_TRANSACTION_ID,
9550 MTI.END_ITEM_UNIT_NUMBER,
9551 MTI.ORG_COST_GROUP_ID, /* PCST */
9552 MTI.COST_TYPE_ID, /* PCST */
9553 MTI.LPN_ID,
9554 MTI.CONTENT_LPN_ID,
9555 MTI.TRANSFER_LPN_ID , /* PCST */
9556 mti.organization_type,
9557 mti.transfer_organization_type,
9558 mti.owning_organization_id,
9559 mti.owning_tp_type,
9560 mti.xfr_owning_organization_id,
9561 mti.transfer_owning_tp_type,
9562 mti.planning_organization_id,
9563 mti.planning_tp_type,
9564 mti.xfr_planning_organization_id,
9565 mti.TRANSFER_PLANNING_TP_TYPE,
9566 MTI.TRANSACTION_BATCH_ID,
9567 MTI.TRANSACTION_BATCH_SEQ,
9568 MTI.TRANSFER_COST_GROUP_ID,
9569 Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9570 -- start of fix for eam
9571 -- added following 4 columns
9572 MTI.REBUILD_ITEM_ID,
9573 MTI.REBUILD_ACTIVITY_ID,
9574 MTI.REBUILD_SERIAL_NUMBER,
9575 MTI.rebuild_job_name,
9576 -- end of fix for eam
9577 mti.kanban_card_id,
9578 mti.accounting_class,--J dev (class_code in mmtt)
9579 mti.scheduled_flag,--J dev
9580 mti.schedule_number,--J dev
9581 mti.routing_revision_date,--J dev
9582 mti.move_transaction_id,--J de
9583 mti.wip_supply_type,
9584 mti.build_sequence,--J dev
9585 mti.bom_revision,--J dev
9586 mti.routing_revision,--J dev
9587 mti.bom_revision_date,--J dev
9588 mti.alternate_bom_designator,--J dev
9589 mti.alternate_routing_designator ,
9590 mti.SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi start
9591 mti.SECONDARY_UOM_CODE, -- INVCONV fabdi end
9592 mti.RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9593 mti.RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9594 mti.TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9595 FROM MTL_TRANSACTIONS_INTERFACE MTI
9596 WHERE MTI.TRANSACTION_HEADER_ID = p_header_id
9597 and MTI.PROCESS_FLAG = 1
9598 and MTI.TRANSACTION_ACTION_ID IN (1, 27, 33, 34) ;
9599
9600 ELSE
9601
9602 INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
9603 TRANSACTION_HEADER_ID,
9604 TRANSACTION_TEMP_ID,
9605 SOURCE_CODE,
9606 SOURCE_LINE_ID,
9607 PROCESS_FLAG,
9608 CREATION_DATE,
9609 CREATED_BY,
9610 LAST_UPDATE_DATE,
9611 LAST_UPDATED_BY,
9612 LAST_UPDATE_LOGIN,
9613 PROGRAM_ID,
9614 PROGRAM_UPDATE_DATE,
9615 PROGRAM_APPLICATION_ID,
9616 REQUEST_ID,
9617 ORGANIZATION_ID,
9618 SUBINVENTORY_CODE,
9619 LOCATOR_ID,
9620 INVENTORY_ITEM_ID,
9621 REVISION,
9622 TRANSACTION_TYPE_ID,
9623 TRANSACTION_ACTION_ID,
9624 TRANSACTION_SOURCE_TYPE_ID,
9625 TRANSACTION_SOURCE_ID,
9626 TRANSACTION_SOURCE_NAME,
9627 TRANSACTION_REFERENCE,
9628 REASON_ID,
9629 TRANSACTION_DATE,
9630 ACCT_PERIOD_ID,
9631 TRANSACTION_QUANTITY,
9632 TRANSACTION_UOM,
9633 PRIMARY_QUANTITY,
9634 TRANSACTION_COST,
9635 DISTRIBUTION_ACCOUNT_ID,
9636 TRANSFER_SUBINVENTORY,
9637 TRANSFER_ORGANIZATION,
9638 TRANSFER_TO_LOCATION,
9639 SHIPMENT_NUMBER,
9640 TRANSPORTATION_COST,
9641 TRANSFER_COST,
9642 TRANSPORTATION_ACCOUNT,
9643 FREIGHT_CODE,
9644 CONTAINERS,
9645 WAYBILL_AIRBILL,
9646 EXPECTED_ARRIVAL_DATE,
9647 CURRENCY_CODE,
9648 CURRENCY_CONVERSION_DATE,
9649 CURRENCY_CONVERSION_TYPE,
9650 CURRENCY_CONVERSION_RATE,
9651 NEW_AVERAGE_COST,
9652 VALUE_CHANGE,
9653 PERCENTAGE_CHANGE,
9654 DEMAND_ID,
9655 DEMAND_SOURCE_HEADER_ID,
9656 DEMAND_SOURCE_LINE,
9657 DEMAND_SOURCE_DELIVERY,
9658 DEMAND_CLASS,
9659 CUSTOMER_SHIP_ID,
9660 TRX_SOURCE_DELIVERY_ID,
9661 TRX_SOURCE_LINE_ID,
9662 PICKING_LINE_ID,
9663 REQUIRED_FLAG,
9664 NEGATIVE_REQ_FLAG,
9665 REPETITIVE_LINE_ID,
9666 PRIMARY_SWITCH,
9667 OPERATION_SEQ_NUM,
9668 SETUP_TEARDOWN_CODE,
9669 SCHEDULE_UPDATE_CODE,
9670 DEPARTMENT_ID,
9671 EMPLOYEE_CODE,
9672 SCHEDULE_ID,
9673 WIP_ENTITY_TYPE,
9674 ENCUMBRANCE_AMOUNT,
9675 ENCUMBRANCE_ACCOUNT,
9676 USSGL_TRANSACTION_CODE,
9677 SHIPPABLE_FLAG,
9678 REQUISITION_LINE_ID,
9679 REQUISITION_DISTRIBUTION_ID,
9680 SHIP_TO_LOCATION,
9681 COMPLETION_TRANSACTION_ID,
9682 ATTRIBUTE_CATEGORY,
9683 ATTRIBUTE1,
9684 ATTRIBUTE2,
9685 ATTRIBUTE3,
9686 ATTRIBUTE4,
9687 ATTRIBUTE5,
9688 ATTRIBUTE6,
9689 ATTRIBUTE7,
9690 ATTRIBUTE8,
9691 ATTRIBUTE9,
9692 ATTRIBUTE10,
9693 ATTRIBUTE11,
9694 ATTRIBUTE12,
9695 ATTRIBUTE13,
9696 ATTRIBUTE14,
9697 ATTRIBUTE15,
9698 MOVEMENT_ID,
9699 SOURCE_PROJECT_ID,
9700 SOURCE_TASK_ID,
9701 EXPENDITURE_TYPE,
9702 PA_EXPENDITURE_ORG_ID,
9703 PROJECT_ID,
9704 TASK_ID,
9705 TO_PROJECT_ID,
9706 TO_TASK_ID,
9707 POSTING_FLAG,
9708 FINAL_COMPLETION_FLAG,
9709 TRANSFER_PERCENTAGE,
9710 MATERIAL_ACCOUNT,
9711 MATERIAL_OVERHEAD_ACCOUNT,
9712 RESOURCE_ACCOUNT,
9713 OUTSIDE_PROCESSING_ACCOUNT,
9714 OVERHEAD_ACCOUNT,
9715 COST_GROUP_ID,
9716 FLOW_SCHEDULE,
9717 QA_COLLECTION_ID,
9718 OVERCOMPLETION_TRANSACTION_QTY, -- Overcompletion Transactions --
9719 OVERCOMPLETION_PRIMARY_QTY,
9720 OVERCOMPLETION_TRANSACTION_ID,
9721 END_ITEM_UNIT_NUMBER,
9722 ORG_COST_GROUP_ID, -- PCST --
9723 COST_TYPE_ID, /* PCST */
9724 LPN_ID,
9725 CONTENT_LPN_ID,
9726 transfer_lpn_id,
9727 organization_type,
9728 transfer_organization_type,
9729 owning_organization_id,
9730 owning_tp_type,
9731 xfr_owning_organization_id,
9732 transfer_owning_tp_type,
9733 planning_organization_id,
9734 planning_tp_type,
9735 xfr_planning_organization_id,
9736 TRANSFER_PLANNING_TP_TYPE,
9737 TRANSACTION_BATCH_ID,
9738 TRANSACTION_BATCH_SEQ,
9739 TRANSFER_COST_GROUP_ID,
9740 TRANSACTION_MODE,
9741 -- start of fix for eam
9742 -- added following 4 columns
9743 REBUILD_ITEM_ID,
9744 REBUILD_ACTIVITY_ID,
9745 REBUILD_SERIAL_NUMBER,
9746 rebuild_job_name,
9747 kanban_card_id,
9748 build_sequence,--J dev
9749 bom_revision,--J dev
9750 routing_revision,--J dev
9751 bom_revision_date,--J dev
9752 alternate_bom_designator,--J dev
9753 alternate_routing_designator,-- end of fix for eam
9754 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi
9755 SECONDARY_UOM_CODE, -- INVCONV fabdi end
9756 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9757 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9758 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9759 )
9760 SELECT
9761 MTI.TRANSACTION_HEADER_ID,
9762 MTI.TRANSACTION_INTERFACE_ID,
9763 MTI.SOURCE_CODE,
9764 MTI.SOURCE_LINE_ID,
9765 'Y',
9766 SYSDATE,
9767 MTI.CREATED_BY,
9768 SYSDATE,
9769 MTI.LAST_UPDATED_BY,
9770 MTI.LAST_UPDATE_LOGIN,
9771 MTI.PROGRAM_ID,
9772 SYSDATE,
9773 MTI.PROGRAM_APPLICATION_ID,
9774 MTI.REQUEST_ID,
9775 MTI.ORGANIZATION_ID,
9776 MTI.SUBINVENTORY_CODE,
9777 MTI.LOCATOR_ID,
9778 MTI.INVENTORY_ITEM_ID,
9779 MTI.REVISION,
9780 MTI.TRANSACTION_TYPE_ID,
9781 MTI.TRANSACTION_ACTION_ID,
9782 MTI.TRANSACTION_SOURCE_TYPE_ID,
9783 MTI.TRANSACTION_SOURCE_ID,
9784 MTI.TRANSACTION_SOURCE_NAME,
9785 MTI.TRANSACTION_REFERENCE,
9786 MTI.REASON_ID,
9787 MTI.TRANSACTION_DATE,
9788 MTI.ACCT_PERIOD_ID,
9789 MTI.TRANSACTION_QUANTITY,
9790 MTI.TRANSACTION_UOM,
9791 MTI.PRIMARY_QUANTITY,
9792 MTI.TRANSACTION_COST,
9793 MTI.DISTRIBUTION_ACCOUNT_ID,
9794 MTI.TRANSFER_SUBINVENTORY,
9795 MTI.TRANSFER_ORGANIZATION,
9796 MTI.TRANSFER_LOCATOR,
9797 MTI.SHIPMENT_NUMBER,
9798 MTI.TRANSPORTATION_COST,
9799 MTI.TRANSFER_COST,
9800 MTI.TRANSPORTATION_ACCOUNT,
9801 MTI.FREIGHT_CODE,
9802 MTI.CONTAINERS,
9803 MTI.WAYBILL_AIRBILL,
9804 MTI.EXPECTED_ARRIVAL_DATE,
9805 MTI.CURRENCY_CODE,
9806 MTI.CURRENCY_CONVERSION_DATE,
9807 MTI.CURRENCY_CONVERSION_TYPE,
9808 MTI.CURRENCY_CONVERSION_RATE,
9809 MTI.NEW_AVERAGE_COST,
9810 MTI.VALUE_CHANGE,
9811 MTI.PERCENTAGE_CHANGE,
9812 MTI.DEMAND_ID,
9813 MTI.DEMAND_SOURCE_HEADER_ID,
9814 MTI.DEMAND_SOURCE_LINE,
9815 MTI.DEMAND_SOURCE_DELIVERY,
9816 MTI.DEMAND_CLASS,
9817 MTI.CUSTOMER_SHIP_ID,
9818 MTI.TRX_SOURCE_DELIVERY_ID,
9819 MTI.TRX_SOURCE_LINE_ID,
9820 MTI.PICKING_LINE_ID,
9821 MTI.REQUIRED_FLAG,
9822 MTI.NEGATIVE_REQ_FLAG,
9823 MTI.REPETITIVE_LINE_ID,
9824 MTI.PRIMARY_SWITCH,
9825 MTI.OPERATION_SEQ_NUM,
9826 MTI.SETUP_TEARDOWN_CODE,
9827 MTI.SCHEDULE_UPDATE_CODE,
9828 MTI.DEPARTMENT_ID,
9829 MTI.EMPLOYEE_CODE,
9830 MTI.SCHEDULE_ID,
9831 MTI.WIP_ENTITY_TYPE,
9832 MTI.ENCUMBRANCE_AMOUNT,
9833 MTI.ENCUMBRANCE_ACCOUNT,
9834 MTI.USSGL_TRANSACTION_CODE,
9835 MTI.SHIPPABLE_FLAG,
9836 MTI.REQUISITION_LINE_ID,
9837 MTI.REQUISITION_DISTRIBUTION_ID,
9838 MTI.SHIP_TO_LOCATION_ID,
9839 MMTT.COMPLETION_TRANSACTION_ID,
9840 MTI.ATTRIBUTE_CATEGORY,
9841 MTI.ATTRIBUTE1,
9842 MTI.ATTRIBUTE2,
9843 MTI.ATTRIBUTE3,
9844 MTI.ATTRIBUTE4,
9845 MTI.ATTRIBUTE5,
9846 MTI.ATTRIBUTE6,
9847 MTI.ATTRIBUTE7,
9848 MTI.ATTRIBUTE8,
9849 MTI.ATTRIBUTE9,
9850 MTI.ATTRIBUTE10,
9851 MTI.ATTRIBUTE11,
9852 MTI.ATTRIBUTE12,
9853 MTI.ATTRIBUTE13,
9854 MTI.ATTRIBUTE14,
9855 MTI.ATTRIBUTE15,
9856 MTI.MOVEMENT_ID,
9857 MTI.SOURCE_PROJECT_ID,
9858 MTI.SOURCE_TASK_ID,
9859 MTI.EXPENDITURE_TYPE,
9860 MTI.PA_EXPENDITURE_ORG_ID,
9861 MTI.PROJECT_ID,
9862 MTI.TASK_ID,
9863 MTI.TO_PROJECT_ID,
9864 MTI.TO_TASK_ID,
9865 'Y',
9866 NVL(MTI.FINAL_COMPLETION_FLAG,
9867 Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
9868 MTI.TRANSFER_PERCENTAGE,
9869 MTI.MATERIAL_ACCOUNT,
9870 MTI.MATERIAL_OVERHEAD_ACCOUNT,
9871 MTI.RESOURCE_ACCOUNT,
9872 MTI.OUTSIDE_PROCESSING_ACCOUNT,
9873 MTI.OVERHEAD_ACCOUNT,
9874 MTI.COST_GROUP_ID,
9875 MTI.FLOW_SCHEDULE,
9876 MTI.QA_COLLECTION_ID,
9877 MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9878 MTI.OVERCOMPLETION_PRIMARY_QTY,
9879 MTI.OVERCOMPLETION_TRANSACTION_ID,
9880 MTI.END_ITEM_UNIT_NUMBER,
9881 MTI.ORG_COST_GROUP_ID, /* PCST */
9882 MTI.COST_TYPE_ID, /* PCST */
9883 MTI.LPN_ID,
9884 MTI.CONTENT_LPN_ID,
9885 MTI.TRANSFER_LPN_ID , /* PCST */
9886 mti.organization_type,
9887 mti.transfer_organization_type,
9888 mti.owning_organization_id,
9889 mti.owning_tp_type,
9890 mti.xfr_owning_organization_id,
9891 mti.transfer_owning_tp_type,
9892 mti.planning_organization_id,
9893 mti.planning_tp_type,
9894 mti.xfr_planning_organization_id,
9895 mti.TRANSFER_PLANNING_TP_TYPE,
9896 MTI.TRANSACTION_BATCH_ID,
9897 MTI.TRANSACTION_BATCH_SEQ,
9898 MTI.TRANSFER_COST_GROUP_ID,
9899 Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9900 -- start of fix for eam
9901 -- added following 4 columns
9902 MTI.REBUILD_ITEM_ID,
9903 MTI.REBUILD_ACTIVITY_ID,
9904 MTI.REBUILD_SERIAL_NUMBER,
9905 MTI.rebuild_job_name,
9906 -- end of fix for eam
9907 mti.kanban_card_id,
9908 mti.build_sequence,--J dev
9909 mti.bom_revision,--J dev
9910 mti.routing_revision,--J dev
9911 mti.bom_revision_date,--J dev
9912 mti.alternate_bom_designator,--J dev
9913 mti.alternate_routing_designator,
9914 mti.SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi
9915 mti.SECONDARY_UOM_CODE, -- INVCONV fabdi end
9916 mti.RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9917 mti.RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9918 mti.TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9919 FROM MTL_TRANSACTIONS_INTERFACE MTI,
9920 MTL_MATERIAL_TRANSACTIONS_TEMP MMTT
9921 WHERE MTI.TRANSACTION_HEADER_ID = p_header_id
9922 /* WHERE MTI.ROWID = p_rowid J-dev*/
9923 and MTI.PROCESS_FLAG = 1
9924 and MTI.TRANSACTION_ACTION_ID IN (1, 27, 33, 34)
9925 and MTI.PARENT_ID = MMTT.TRANSACTION_TEMP_ID
9926 and MTI.TRANSACTION_HEADER_ID = MMTT.TRANSACTION_HEADER_ID;
9927 END IF;
9928 END IF;
9929 END IF;--J-dev
9930
9931
9932 IF (l_debug = 1) THEN
9933 inv_log_util.trace('going to insert lot'||p_header_id,'INV_TXN_MANAGER_GRP','9');
9934 END IF;
9935
9936 /* Inserting LOT transactions */
9937 INSERT INTO MTL_TRANSACTION_LOTS_TEMP
9938 (TRANSACTION_TEMP_ID,
9939 LOT_NUMBER,
9940 LOT_EXPIRATION_DATE,
9941 LAST_UPDATED_BY,
9942 LAST_UPDATE_DATE,
9943 CREATION_DATE,
9944 CREATED_BY,
9945 LAST_UPDATE_LOGIN,
9946 PROGRAM_APPLICATION_ID,
9947 PROGRAM_ID,
9948 PROGRAM_UPDATE_DATE,
9949 REQUEST_ID,
9950 PRIMARY_QUANTITY,
9951 TRANSACTION_QUANTITY,
9952 serial_transaction_temp_id,
9953 LOT_ATTRIBUTE_CATEGORY, --Bug #3841935
9954 C_ATTRIBUTE1,
9955 C_ATTRIBUTE2,
9956 C_ATTRIBUTE3,
9957 C_ATTRIBUTE4,
9958 C_ATTRIBUTE5,
9959 C_ATTRIBUTE6,
9960 C_ATTRIBUTE7,
9961 C_ATTRIBUTE8,
9962 C_ATTRIBUTE9,
9963 C_ATTRIBUTE10,
9964 C_ATTRIBUTE11,
9965 C_ATTRIBUTE12,
9966 C_ATTRIBUTE13,
9967 C_ATTRIBUTE14,
9968 C_ATTRIBUTE15,
9969 C_ATTRIBUTE16,
9970 C_ATTRIBUTE17,
9971 C_ATTRIBUTE18,
9972 C_ATTRIBUTE19,
9973 C_ATTRIBUTE20,
9974 D_ATTRIBUTE1,
9975 D_ATTRIBUTE2,
9976 D_ATTRIBUTE3,
9977 D_ATTRIBUTE4,
9978 D_ATTRIBUTE5,
9979 D_ATTRIBUTE6,
9980 D_ATTRIBUTE7,
9981 D_ATTRIBUTE8,
9982 D_ATTRIBUTE9,
9983 D_ATTRIBUTE10,
9984 N_ATTRIBUTE1,
9985 N_ATTRIBUTE2,
9986 N_ATTRIBUTE3,
9987 N_ATTRIBUTE4,
9988 N_ATTRIBUTE5,
9989 N_ATTRIBUTE6,
9990 N_ATTRIBUTE7,
9991 N_ATTRIBUTE8,
9992 N_ATTRIBUTE9,
9993 n_attribute10,
9994 ATTRIBUTE1,
9995 ATTRIBUTE2,
9996 ATTRIBUTE3,
9997 ATTRIBUTE4,
9998 ATTRIBUTE5,
9999 ATTRIBUTE6,
10000 ATTRIBUTE7,
10001 ATTRIBUTE8,
10002 ATTRIBUTE9,
10003 ATTRIBUTE10,
10004 ATTRIBUTE11,
10005 ATTRIBUTE12,
10006 ATTRIBUTE13,
10007 ATTRIBUTE14,
10008 ATTRIBUTE15,
10009 ATTRIBUTE_CATEGORY ,
10010 group_header_id,--added for J
10011 DESCRIPTION,
10012 VENDOR_NAME,
10013 SUPPLIER_LOT_NUMBER,
10014 ORIGINATION_DATE,
10015 DATE_CODE,
10016 GRADE_CODE,
10017 CHANGE_DATE,
10018 MATURITY_DATE,
10019 STATUS_ID,
10020 RETEST_DATE,
10021 AGE,
10022 ITEM_SIZE,
10023 COLOR,
10024 VOLUME,
10025 VOLUME_UOM,
10026 PLACE_OF_ORIGIN,
10027 BEST_BY_DATE,
10028 LENGTH,
10029 LENGTH_UOM,
10030 RECYCLED_CONTENT,
10031 THICKNESS,
10032 THICKNESS_UOM,
10033 WIDTH,
10034 WIDTH_UOM,
10035 CURL_WRINKLE_FOLD,
10036 VENDOR_ID,
10037 TERRITORY_CODE,
10038 PARENT_LOT_NUMBER , -- INVCONV start fabdi
10039 ORIGINATION_TYPE ,
10040 EXPIRATION_ACTION_DATE ,
10041 EXPIRATION_ACTION_CODE,
10042 HOLD_DATE ,
10043 REASON_ID,
10044 SECONDARY_QUANTITY, -- INVCONV start fabdi
10045 parent_object_type, --R12 Genealogy enhancements
10046 parent_object_id, --R12 Genealogy enhancements
10047 parent_object_number, --R12 Genealogy enhancements
10048 parent_item_id, --R12 Genealogy enhancements
10049 parent_object_type2, --R12 Genealogy enhancements
10050 parent_object_id2, --R12 Genealogy enhancements
10051 parent_object_number2 --R12 Genealogy enhancements
10052 )
10053 SELECT
10054 TRANSACTION_INTERFACE_ID,
10055 ltrim(rtrim(LOT_NUMBER)), /*Bug 6390860 added ltrim, rtrim*/
10056 LOT_EXPIRATION_DATE,
10057 LAST_UPDATED_BY,
10058 SYSDATE,
10059 SYSDATE,
10060 CREATED_BY,
10061 LAST_UPDATE_LOGIN,
10062 PROGRAM_APPLICATION_ID,
10063 PROGRAM_ID,
10064 SYSDATE,
10065 REQUEST_ID,
10066 PRIMARY_QUANTITY,
10067 TRANSACTION_QUANTITY,
10068 serial_transaction_temp_id,
10069 LOT_ATTRIBUTE_CATEGORY,
10070 C_ATTRIBUTE1,
10071 C_ATTRIBUTE2,
10072 C_ATTRIBUTE3,
10073 C_ATTRIBUTE4,
10074 C_ATTRIBUTE5,
10075 C_ATTRIBUTE6,
10076 C_ATTRIBUTE7,
10077 C_ATTRIBUTE8,
10078 C_ATTRIBUTE9,
10079 C_ATTRIBUTE10,
10080 C_ATTRIBUTE11,
10081 C_ATTRIBUTE12,
10082 C_ATTRIBUTE13,
10083 C_ATTRIBUTE14,
10084 C_ATTRIBUTE15,
10085 C_ATTRIBUTE16,
10086 C_ATTRIBUTE17,
10087 C_ATTRIBUTE18,
10088 C_ATTRIBUTE19,
10089 C_ATTRIBUTE20,
10090 D_ATTRIBUTE1,
10091 D_ATTRIBUTE2,
10092 D_ATTRIBUTE3,
10093 D_ATTRIBUTE4,
10094 D_ATTRIBUTE5,
10095 D_ATTRIBUTE6,
10096 D_ATTRIBUTE7,
10097 D_ATTRIBUTE8,
10098 D_ATTRIBUTE9,
10099 D_ATTRIBUTE10,
10100 N_ATTRIBUTE1,
10101 N_ATTRIBUTE2,
10102 N_ATTRIBUTE3,
10103 N_ATTRIBUTE4,
10104 N_ATTRIBUTE5,
10105 N_ATTRIBUTE6,
10106 N_ATTRIBUTE7,
10107 N_ATTRIBUTE8,
10108 N_ATTRIBUTE9,
10109 n_attribute10,
10110 ATTRIBUTE1,
10111 ATTRIBUTE2,
10112 ATTRIBUTE3,
10113 ATTRIBUTE4,
10114 ATTRIBUTE5,
10115 ATTRIBUTE6,
10116 ATTRIBUTE7,
10117 ATTRIBUTE8,
10118 ATTRIBUTE9,
10119 ATTRIBUTE10,
10120 ATTRIBUTE11,
10121 ATTRIBUTE12,
10122 ATTRIBUTE13,
10123 ATTRIBUTE14,
10124 ATTRIBUTE15,
10125 ATTRIBUTE_CATEGORY ,
10126 p_header_id ,--J dev corresponds to the header_id
10127 DESCRIPTION,
10128 VENDOR_NAME,
10129 SUPPLIER_LOT_NUMBER,
10130 ORIGINATION_DATE,
10131 DATE_CODE,
10132 GRADE_CODE,
10133 CHANGE_DATE,
10134 MATURITY_DATE,
10135 STATUS_ID,
10136 RETEST_DATE,
10137 AGE,
10138 ITEM_SIZE,
10139 COLOR,
10140 VOLUME,
10141 VOLUME_UOM,
10142 PLACE_OF_ORIGIN,
10143 BEST_BY_DATE,
10144 LENGTH,
10145 LENGTH_UOM,
10146 RECYCLED_CONTENT,
10147 THICKNESS,
10148 THICKNESS_UOM,
10149 WIDTH,
10150 WIDTH_UOM,
10151 CURL_WRINKLE_FOLD,
10152 VENDOR_ID,
10153 TERRITORY_CODE,
10154 PARENT_LOT_NUMBER , -- INVCONV start fabdi
10155 ORIGINATION_TYPE ,
10156 EXPIRATION_ACTION_DATE ,
10157 EXPIRATION_ACTION_CODE,
10158 HOLD_DATE ,
10159 REASON_ID,
10160 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV start fabdi
10161 parent_object_type, --R12 Genealogy enhancements
10162 parent_object_id, --R12 Genealogy enhancements
10163 parent_object_number, --R12 Genealogy enhancements
10164 parent_item_id, --R12 Genealogy enhancements
10165 parent_object_type2, --R12 Genealogy enhancements
10166 parent_object_id2, --R12 Genealogy enhancements
10167 parent_object_number2 --R12 Genealogy enhancements
10168 FROM MTL_TRANSACTION_LOTS_INTERFACE
10169 WHERE TRANSACTION_INTERFACE_ID IN (
10170 SELECT TRANSACTION_INTERFACE_ID
10171 FROM MTL_TRANSACTIONS_INTERFACE MTI
10172 WHERE mti.TRANSACTION_HEADER_ID = p_header_id
10173 /*WHERE MTI.ROWID = p_rowid J-dev*/
10174 AND mti.TRANSACTION_INTERFACE_ID IS NOT NULL
10175 AND mti.PROCESS_FLAG = 1
10176 AND transaction_type_id NOT IN /*OSFM Support for Lot Serialized Items*/
10177 (inv_globals.g_type_inv_lot_split
10178 , inv_globals.g_type_inv_lot_merge
10179 , inv_globals.g_type_inv_lot_translate
10180 ));
10181
10182
10183
10184 INSERT INTO MTL_SERIAL_NUMBERS_TEMP
10185 (TRANSACTION_TEMP_ID,
10186 LAST_UPDATE_DATE,
10187 LAST_UPDATED_BY,
10188 CREATION_DATE,
10189 CREATED_BY,
10190 LAST_UPDATE_LOGIN,
10191 REQUEST_ID,
10192 PROGRAM_APPLICATION_ID,
10193 PROGRAM_ID,
10194 PROGRAM_UPDATE_DATE,
10195 VENDOR_SERIAL_NUMBER,
10196 VENDOR_LOT_NUMBER,
10197 FM_SERIAL_NUMBER,
10198 TO_SERIAL_NUMBER,
10199 parent_serial_number,
10200 SERIAL_ATTRIBUTE_CATEGORY, --Bug #3841935
10201 C_ATTRIBUTE1,
10202 C_ATTRIBUTE2,
10203 C_ATTRIBUTE3,
10204 C_ATTRIBUTE4,
10205 C_ATTRIBUTE5,
10206 C_ATTRIBUTE6,
10207 C_ATTRIBUTE7,
10208 C_ATTRIBUTE8,
10209 C_ATTRIBUTE9,
10210 C_ATTRIBUTE10,
10211 C_ATTRIBUTE11,
10212 C_ATTRIBUTE12,
10213 C_ATTRIBUTE13,
10214 C_ATTRIBUTE14,
10215 C_ATTRIBUTE15,
10216 C_ATTRIBUTE16,
10217 C_ATTRIBUTE17,
10218 C_ATTRIBUTE18,
10219 C_ATTRIBUTE19,
10220 C_ATTRIBUTE20,
10221 D_ATTRIBUTE1,
10222 D_ATTRIBUTE2,
10223 D_ATTRIBUTE3,
10224 D_ATTRIBUTE4,
10225 D_ATTRIBUTE5,
10226 D_ATTRIBUTE6,
10227 D_ATTRIBUTE7,
10228 D_ATTRIBUTE8,
10229 D_ATTRIBUTE9,
10230 D_ATTRIBUTE10,
10231 N_ATTRIBUTE1,
10232 N_ATTRIBUTE2,
10233 N_ATTRIBUTE3,
10234 N_ATTRIBUTE4,
10235 N_ATTRIBUTE5,
10236 N_ATTRIBUTE6,
10237 N_ATTRIBUTE7,
10238 N_ATTRIBUTE8,
10239 N_ATTRIBUTE9,
10240 n_attribute10,
10241 group_header_id, --added for J
10242 attribute_category,
10243 attribute1,
10244 attribute2,
10245 attribute3,
10246 attribute4,
10247 attribute5,
10248 attribute6,
10249 attribute7,
10250 attribute8,
10251 attribute9,
10252 attribute10,
10253 attribute11,
10254 attribute12,
10255 attribute13,
10256 attribute14,
10257 attribute15,
10258 status_id, --Bug 5023244
10259 parent_object_type, --R12 Genealogy enhancements
10260 parent_object_id, --R12 Genealogy enhancements
10261 parent_object_number, --R12 Genealogy enhancements
10262 parent_item_id, --R12 Genealogy enhancements
10263 parent_object_type2, --R12 Genealogy enhancements
10264 parent_object_id2, --R12 Genealogy enhancements
10265 parent_object_number2) --R12 Genealogy enhancements
10266 SELECT
10267 TRANSACTION_INTERFACE_ID,
10268 LAST_UPDATE_DATE,
10269 LAST_UPDATED_BY,
10270 CREATION_DATE,
10271 CREATED_BY,
10272 LAST_UPDATE_LOGIN,
10273 REQUEST_ID,
10274 PROGRAM_APPLICATION_ID,
10275 PROGRAM_ID,
10276 PROGRAM_UPDATE_DATE,
10277 VENDOR_SERIAL_NUMBER,
10278 VENDOR_LOT_NUMBER,
10279 ltrim(rtrim(FM_SERIAL_NUMBER)),/*Bug 4764048 added ltrim,rtrim*/
10280 ltrim(rtrim(TO_SERIAL_NUMBER)),/*Bug 4764048 added ltrim,rtrim*/
10281 parent_serial_number,
10282 SERIAL_ATTRIBUTE_CATEGORY,
10283 C_ATTRIBUTE1,
10284 C_ATTRIBUTE2,
10285 C_ATTRIBUTE3,
10286 C_ATTRIBUTE4,
10287 C_ATTRIBUTE5,
10288 C_ATTRIBUTE6,
10289 C_ATTRIBUTE7,
10290 C_ATTRIBUTE8,
10291 C_ATTRIBUTE9,
10292 C_ATTRIBUTE10,
10293 C_ATTRIBUTE11,
10294 C_ATTRIBUTE12,
10295 C_ATTRIBUTE13,
10296 C_ATTRIBUTE14,
10297 C_ATTRIBUTE15,
10298 C_ATTRIBUTE16,
10299 C_ATTRIBUTE17,
10300 C_ATTRIBUTE18,
10301 C_ATTRIBUTE19,
10302 C_ATTRIBUTE20,
10303 D_ATTRIBUTE1,
10304 D_ATTRIBUTE2,
10305 D_ATTRIBUTE3,
10306 D_ATTRIBUTE4,
10307 D_ATTRIBUTE5,
10308 D_ATTRIBUTE6,
10309 D_ATTRIBUTE7,
10310 D_ATTRIBUTE8,
10311 D_ATTRIBUTE9,
10312 D_ATTRIBUTE10,
10313 N_ATTRIBUTE1,
10314 N_ATTRIBUTE2,
10315 N_ATTRIBUTE3,
10316 N_ATTRIBUTE4,
10317 N_ATTRIBUTE5,
10318 N_ATTRIBUTE6,
10319 N_ATTRIBUTE7,
10320 N_ATTRIBUTE8,
10321 N_ATTRIBUTE9,
10322 n_attribute10,
10323 p_header_id,
10324 attribute_category,
10325 attribute1,
10326 attribute2,
10327 attribute3,
10328 attribute4,
10329 attribute5,
10330 attribute6,
10331 attribute7,
10332 attribute8,
10333 attribute9,
10334 attribute10,
10335 attribute11,
10336 attribute12,
10337 attribute13,
10338 attribute14,
10339 attribute15,
10340 status_id, --Bug 5023244
10341 parent_object_type, --R12 Genealogy enhancements
10342 parent_object_id, --R12 Genealogy enhancements
10343 parent_object_number, --R12 Genealogy enhancements
10344 parent_item_id, --R12 Genealogy enhancements
10345 parent_object_type2, --R12 Genealogy enhancements
10346 parent_object_id2, --R12 Genealogy enhancements
10347 parent_object_number2 --R12 Genealogy enhancements
10348 FROM MTL_SERIAL_NUMBERS_INTERFACE
10349 WHERE (TRANSACTION_INTERFACE_ID IN (
10350 SELECT TRANSACTION_INTERFACE_ID
10351 FROM MTL_TRANSACTIONS_INTERFACE MTI
10352 WHERE TRANSACTION_HEADER_ID = p_header_id
10353 /*WHERE MTI.ROWID = p_rowid*/--J-dev
10354 AND TRANSACTION_INTERFACE_ID IS NOT NULL
10355 AND PROCESS_FLAG = 1
10356 AND transaction_type_id NOT IN
10357 (inv_globals.g_type_inv_lot_split
10358 , inv_globals.g_type_inv_lot_merge
10359 , inv_globals.g_type_inv_lot_translate
10360 )
10361 UNION ALL
10362 SELECT SERIAL_TRANSACTION_TEMP_ID
10363 FROM MTL_TRANSACTION_LOTS_INTERFACE
10364 WHERE TRANSACTION_INTERFACE_ID IN (
10365 SELECT TRANSACTION_INTERFACE_ID
10366 FROM MTL_TRANSACTIONS_INTERFACE
10367 WHERE TRANSACTION_HEADER_ID = p_header_id
10368 /*WHERE rowid = p_rowid J-dev*/
10369 AND TRANSACTION_INTERFACE_ID IS NOT NULL
10370 AND PROCESS_FLAG = 1
10371 AND transaction_type_id NOT IN
10372 (inv_globals.g_type_inv_lot_split
10373 , inv_globals.g_type_inv_lot_merge
10374 , inv_globals.g_type_inv_lot_translate
10375 )))
10376 );
10377
10378 RETURN TRUE;
10379
10380 EXCEPTION
10381 WHEN OTHERS THEN
10382 IF (l_debug = 1) THEN
10383 inv_log_util.trace('Error in tmpinsert: sqlerrm : ' || substr(sqlerrm, 1, 200),
10384 'INV_TXN_MANAGER_GRP','9');
10385 END IF;
10386 RETURN FALSE;
10387
10388 END tmpinsert;
10389
10390
10391 /*Bug:5408823. The following procedure populates the column name, data type
10392 and length of all the Serial Attributes into global table g_lot_ser_attr_tbl
10393 which will be later used in procedure get_serial_attr_record. */
10394
10395 PROCEDURE get_serial_attr_table
10396 IS
10397 l_lot_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
10398 l_debug NUMBER
10399 := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
10400
10401 BEGIN
10402
10403 inv_log_util.trace('Before setting all the column names and types' , 'get_serial_attr_table',9);
10404
10405
10406 l_lot_ser_attr_tbl (1).column_name := 'SERIAL_ATTRIBUTE_CATEGORY';
10407 l_lot_ser_attr_tbl (1).column_type := 'VARCHAR2';
10408 l_lot_ser_attr_tbl (1).column_length := 30;
10409 l_lot_ser_attr_tbl (2).column_name := 'C_ATTRIBUTE1';
10410 l_lot_ser_attr_tbl (2).column_type := 'VARCHAR2';
10411 l_lot_ser_attr_tbl (2).column_length := 150;
10412 l_lot_ser_attr_tbl (3).column_name := 'C_ATTRIBUTE2' ;
10413 l_lot_ser_attr_tbl (3).column_type := 'VARCHAR2';
10414 l_lot_ser_attr_tbl (3).column_length := 150;
10415 l_lot_ser_attr_tbl (4).column_name := 'C_ATTRIBUTE3';
10416 l_lot_ser_attr_tbl (4).column_type := 'VARCHAR2';
10417 l_lot_ser_attr_tbl (4).column_length := 150;
10418 l_lot_ser_attr_tbl (5).column_name := 'C_ATTRIBUTE4';
10419 l_lot_ser_attr_tbl (5).column_type := 'VARCHAR2';
10420 l_lot_ser_attr_tbl (5).column_length := 150;
10421 l_lot_ser_attr_tbl (6).column_name := 'C_ATTRIBUTE5';
10422 l_lot_ser_attr_tbl (6).column_type := 'VARCHAR2';
10423 l_lot_ser_attr_tbl (6).column_length := 150;
10424 l_lot_ser_attr_tbl (7).column_name := 'C_ATTRIBUTE6';
10425 l_lot_ser_attr_tbl (7).column_type := 'VARCHAR2';
10426 l_lot_ser_attr_tbl (7).column_length := 150;
10427 l_lot_ser_attr_tbl (8).column_name := 'C_ATTRIBUTE7';
10428 l_lot_ser_attr_tbl (8).column_type := 'VARCHAR2';
10429 l_lot_ser_attr_tbl (8).column_length := 150;
10430 l_lot_ser_attr_tbl (9).column_name := 'C_ATTRIBUTE8';
10431 l_lot_ser_attr_tbl (9).column_type := 'VARCHAR2';
10432 l_lot_ser_attr_tbl (9).column_length := 150;
10433 l_lot_ser_attr_tbl (10).column_name := 'C_ATTRIBUTE9';
10434 l_lot_ser_attr_tbl (10).column_type := 'VARCHAR2';
10435 l_lot_ser_attr_tbl (10).column_length := 150;
10436 l_lot_ser_attr_tbl (11).column_name := 'C_ATTRIBUTE10';
10437 l_lot_ser_attr_tbl (11).column_type := 'VARCHAR2';
10438 l_lot_ser_attr_tbl (11).column_length := 150;
10439 l_lot_ser_attr_tbl (12).column_name := 'C_ATTRIBUTE11';
10440 l_lot_ser_attr_tbl (12).column_type := 'VARCHAR2';
10441 l_lot_ser_attr_tbl (12).column_length := 150;
10442 l_lot_ser_attr_tbl (13).column_name := 'C_ATTRIBUTE12';
10443 l_lot_ser_attr_tbl (13).column_type := 'VARCHAR2';
10444 l_lot_ser_attr_tbl (13).column_length := 150;
10445 l_lot_ser_attr_tbl (14).column_name := 'C_ATTRIBUTE13';
10446 l_lot_ser_attr_tbl (14).column_type := 'VARCHAR2';
10447 l_lot_ser_attr_tbl (14).column_length := 150;
10448 l_lot_ser_attr_tbl (15).column_name := 'C_ATTRIBUTE14';
10449 l_lot_ser_attr_tbl (15).column_type := 'VARCHAR2';
10450 l_lot_ser_attr_tbl (15).column_length := 150;
10451 l_lot_ser_attr_tbl (16).column_name := 'C_ATTRIBUTE15';
10452 l_lot_ser_attr_tbl (16).column_type := 'VARCHAR2';
10453 l_lot_ser_attr_tbl (16).column_length := 150;
10454 l_lot_ser_attr_tbl (17).column_name := 'C_ATTRIBUTE16' ;
10455 l_lot_ser_attr_tbl (17).column_type := 'VARCHAR2';
10456 l_lot_ser_attr_tbl (17).column_length := 150;
10457 l_lot_ser_attr_tbl (18).column_name := 'C_ATTRIBUTE17';
10458 l_lot_ser_attr_tbl (18).column_type := 'VARCHAR2';
10459 l_lot_ser_attr_tbl (18).column_length := 150;
10460 l_lot_ser_attr_tbl (19).column_name := 'C_ATTRIBUTE18';
10461 l_lot_ser_attr_tbl (19).column_type := 'VARCHAR2';
10462 l_lot_ser_attr_tbl (19).column_length := 150;
10463 l_lot_ser_attr_tbl (20).column_name := 'C_ATTRIBUTE19';
10464 l_lot_ser_attr_tbl (20).column_type := 'VARCHAR2';
10465 l_lot_ser_attr_tbl (20).column_length := 150;
10466 l_lot_ser_attr_tbl (21).column_name := 'C_ATTRIBUTE20';
10467 l_lot_ser_attr_tbl (21).column_type := 'VARCHAR2';
10468 l_lot_ser_attr_tbl (21).column_length := 150;
10469 l_lot_ser_attr_tbl (22).column_name := 'D_ATTRIBUTE1';
10470 l_lot_ser_attr_tbl (22).column_type := 'DATE';
10471 l_lot_ser_attr_tbl (22).column_length := 11;
10472 l_lot_ser_attr_tbl (23).column_name := 'D_ATTRIBUTE2';
10473 l_lot_ser_attr_tbl (23).column_type := 'DATE';
10474 l_lot_ser_attr_tbl (23).column_length := 11;
10475 l_lot_ser_attr_tbl (24).column_name := 'D_ATTRIBUTE3';
10476 l_lot_ser_attr_tbl (24).column_type := 'DATE';
10477 l_lot_ser_attr_tbl (24).column_length := 11;
10478 l_lot_ser_attr_tbl (25).column_name := 'D_ATTRIBUTE4';
10479 l_lot_ser_attr_tbl (25).column_type := 'DATE';
10480 l_lot_ser_attr_tbl (25).column_length := 11;
10481 l_lot_ser_attr_tbl (26).column_name := 'D_ATTRIBUTE5';
10482 l_lot_ser_attr_tbl (26).column_type := 'DATE';
10483 l_lot_ser_attr_tbl (26).column_length := 11;
10484 l_lot_ser_attr_tbl (27).column_name := 'D_ATTRIBUTE6';
10485 l_lot_ser_attr_tbl (27).column_type := 'DATE';
10486 l_lot_ser_attr_tbl (27).column_length := 11;
10487 l_lot_ser_attr_tbl (28).column_name := 'D_ATTRIBUTE7';
10488 l_lot_ser_attr_tbl (28).column_type := 'DATE';
10489 l_lot_ser_attr_tbl (28).column_length := 11;
10490 l_lot_ser_attr_tbl (29).column_name := 'D_ATTRIBUTE8';
10491 l_lot_ser_attr_tbl (29).column_type := 'DATE';
10492 l_lot_ser_attr_tbl (29).column_length := 11;
10493 l_lot_ser_attr_tbl (30).column_name := 'D_ATTRIBUTE9';
10494 l_lot_ser_attr_tbl (30).column_type := 'DATE';
10495 l_lot_ser_attr_tbl (30).column_length := 11;
10496 l_lot_ser_attr_tbl (31).column_name := 'D_ATTRIBUTE10';
10497 l_lot_ser_attr_tbl (31).column_type := 'DATE';
10498 l_lot_ser_attr_tbl (31).column_length := 11;
10499 l_lot_ser_attr_tbl (32).column_name := 'N_ATTRIBUTE1';
10500 l_lot_ser_attr_tbl (32).column_type := 'NUMBER';
10501 l_lot_ser_attr_tbl (32).column_length := 38;
10502 l_lot_ser_attr_tbl (33).column_name := 'N_ATTRIBUTE2';
10503 l_lot_ser_attr_tbl (33).column_type := 'NUMBER';
10504 l_lot_ser_attr_tbl (33).column_length := 38;
10505 l_lot_ser_attr_tbl (34).column_name := 'N_ATTRIBUTE3';
10506 l_lot_ser_attr_tbl (34).column_type := 'NUMBER';
10507 l_lot_ser_attr_tbl (34).column_length := 38;
10508 l_lot_ser_attr_tbl (35).column_name := 'N_ATTRIBUTE4';
10509 l_lot_ser_attr_tbl (35).column_type := 'NUMBER';
10510 l_lot_ser_attr_tbl (35).column_length := 38;
10511 l_lot_ser_attr_tbl (36).column_name := 'N_ATTRIBUTE5';
10512 l_lot_ser_attr_tbl (36).column_type := 'NUMBER';
10513 l_lot_ser_attr_tbl (36).column_length := 38;
10514 l_lot_ser_attr_tbl (37).column_name := 'N_ATTRIBUTE6';
10515 l_lot_ser_attr_tbl (37).column_type := 'NUMBER';
10516 l_lot_ser_attr_tbl (37).column_length := 38;
10517 l_lot_ser_attr_tbl (38).column_name := 'N_ATTRIBUTE7';
10518 l_lot_ser_attr_tbl (38).column_type := 'NUMBER';
10519 l_lot_ser_attr_tbl (38).column_length := 38;
10520 l_lot_ser_attr_tbl (39).column_name := 'N_ATTRIBUTE8';
10521 l_lot_ser_attr_tbl (39).column_type := 'NUMBER';
10522 l_lot_ser_attr_tbl (39).column_length := 38;
10523 l_lot_ser_attr_tbl (40).column_name := 'N_ATTRIBUTE9';
10524 l_lot_ser_attr_tbl (40).column_type := 'NUMBER';
10525 l_lot_ser_attr_tbl (40).column_length := 38;
10526 l_lot_ser_attr_tbl (41).column_name := 'N_ATTRIBUTE10';
10527 l_lot_ser_attr_tbl (41).column_type := 'NUMBER';
10528 l_lot_ser_attr_tbl (41).column_length := 38;
10529 l_lot_ser_attr_tbl (42).column_name := 'TERRITORY_CODE';
10530 l_lot_ser_attr_tbl (42).column_type := 'VARCHAR2';
10531 l_lot_ser_attr_tbl (42).column_length := 30;
10532 l_lot_ser_attr_tbl (43).column_name := 'TIME_SINCE_NEW';
10533 l_lot_ser_attr_tbl (43).column_type := 'NUMBER';
10534 l_lot_ser_attr_tbl (43).column_length := 38;
10535 l_lot_ser_attr_tbl (44).column_name := 'CYCLES_SINCE_NEW';
10536 l_lot_ser_attr_tbl (44).column_type := 'NUMBER';
10537 l_lot_ser_attr_tbl (44).column_length := 38;
10538 l_lot_ser_attr_tbl (45).column_name := 'TIME_SINCE_OVERHAUL';
10539 l_lot_ser_attr_tbl (45).column_type := 'NUMBER';
10540 l_lot_ser_attr_tbl (45).column_length := 38;
10541 l_lot_ser_attr_tbl (46).column_name := 'CYCLES_SINCE_OVERHAUL';
10542 l_lot_ser_attr_tbl (46).column_type := 'NUMBER';
10543 l_lot_ser_attr_tbl (46).column_length := 38;
10544 l_lot_ser_attr_tbl (47).column_name := 'TIME_SINCE_REPAIR';
10545 l_lot_ser_attr_tbl (47).column_type := 'NUMBER';
10546 l_lot_ser_attr_tbl (47).column_length := 38;
10547 l_lot_ser_attr_tbl (48).column_name := 'CYCLES_SINCE_REPAIR';
10548 l_lot_ser_attr_tbl (48).column_type := 'NUMBER';
10549 l_lot_ser_attr_tbl (48).column_length := 38;
10550 l_lot_ser_attr_tbl (49).column_name := 'TIME_SINCE_VISIT';
10551 l_lot_ser_attr_tbl (49).column_type := 'NUMBER';
10552 l_lot_ser_attr_tbl (49).column_length := 38;
10553 l_lot_ser_attr_tbl (50).column_name := 'CYCLES_SINCE_VISIT';
10554 l_lot_ser_attr_tbl (50).column_type := 'NUMBER';
10555 l_lot_ser_attr_tbl (50).column_length := 38;
10556 l_lot_ser_attr_tbl (51).column_name := 'TIME_SINCE_MARK';
10557 l_lot_ser_attr_tbl (51).column_type := 'NUMBER';
10558 l_lot_ser_attr_tbl (51).column_length := 38;
10559 l_lot_ser_attr_tbl (52).column_name := 'CYCLES_SINCE_MARK';
10560 l_lot_ser_attr_tbl (52).column_type := 'NUMBER';
10561 l_lot_ser_attr_tbl (52).column_length := 38;
10562 l_lot_ser_attr_tbl (53).column_name := 'NUMBER_OF_REPAIRS';
10563 l_lot_ser_attr_tbl (53).column_type := 'NUMBER';
10564 l_lot_ser_attr_tbl (53).column_length := 38;
10565 l_lot_ser_attr_tbl (54).column_name := 'ATTRIBUTE_CATEGORY';
10566 l_lot_ser_attr_tbl (54).column_type := 'VARCHAR2';
10567 l_lot_ser_attr_tbl (54).column_length := 30;
10568 l_lot_ser_attr_tbl (55).column_name := 'ATTRIBUTE1';
10569 l_lot_ser_attr_tbl (55).column_type := 'VARCHAR2';
10570 l_lot_ser_attr_tbl (55).column_length := 150;
10571 l_lot_ser_attr_tbl (56).column_name := 'ATTRIBUTE2';
10572 l_lot_ser_attr_tbl (56).column_type := 'VARCHAR2';
10573 l_lot_ser_attr_tbl (56).column_length := 150;
10574 l_lot_ser_attr_tbl (57).column_name := 'ATTRIBUTE3';
10575 l_lot_ser_attr_tbl (57).column_type := 'VARCHAR2';
10576 l_lot_ser_attr_tbl (57).column_length := 150;
10577 l_lot_ser_attr_tbl (58).column_name := 'ATTRIBUTE4';
10578 l_lot_ser_attr_tbl (58).column_type := 'VARCHAR2';
10579 l_lot_ser_attr_tbl (58).column_length := 150;
10580 l_lot_ser_attr_tbl (59).column_name := 'ATTRIBUTE5';
10581 l_lot_ser_attr_tbl (59).column_type := 'VARCHAR2';
10582 l_lot_ser_attr_tbl (59).column_length := 150;
10583 l_lot_ser_attr_tbl (60).column_name := 'ATTRIBUTE6';
10584 l_lot_ser_attr_tbl (60).column_type := 'VARCHAR2';
10585 l_lot_ser_attr_tbl (60).column_length := 150;
10586 l_lot_ser_attr_tbl (61).column_name := 'ATTRIBUTE7';
10587 l_lot_ser_attr_tbl (61).column_type := 'VARCHAR2';
10588 l_lot_ser_attr_tbl (61).column_length := 150;
10589 l_lot_ser_attr_tbl (62).column_name := 'ATTRIBUTE8';
10590 l_lot_ser_attr_tbl (62).column_type := 'VARCHAR2';
10591 l_lot_ser_attr_tbl (62).column_length := 150;
10592 l_lot_ser_attr_tbl (63).column_name := 'ATTRIBUTE9';
10593 l_lot_ser_attr_tbl (63).column_type := 'VARCHAR2';
10594 l_lot_ser_attr_tbl (63).column_length := 150;
10595 l_lot_ser_attr_tbl (64).column_name := 'ATTRIBUTE10';
10596 l_lot_ser_attr_tbl (64).column_type := 'VARCHAR2';
10597 l_lot_ser_attr_tbl (64).column_length := 150;
10598 l_lot_ser_attr_tbl (65).column_name := 'ATTRIBUTE11';
10599 l_lot_ser_attr_tbl (65).column_type := 'VARCHAR2';
10600 l_lot_ser_attr_tbl (65).column_length := 150;
10601 l_lot_ser_attr_tbl (66).column_name := 'ATTRIBUTE12';
10602 l_lot_ser_attr_tbl (66).column_type := 'VARCHAR2';
10603 l_lot_ser_attr_tbl (66).column_length := 150;
10604 l_lot_ser_attr_tbl (67).column_name := 'ATTRIBUTE13';
10605 l_lot_ser_attr_tbl (67).column_type := 'VARCHAR2';
10606 l_lot_ser_attr_tbl (67).column_length := 150;
10607 l_lot_ser_attr_tbl (68).column_name := 'ATTRIBUTE14';
10608 l_lot_ser_attr_tbl (68).column_type := 'VARCHAR2';
10609 l_lot_ser_attr_tbl (68).column_length := 150;
10610 l_lot_ser_attr_tbl (69).column_name := 'ATTRIBUTE15';
10611 l_lot_ser_attr_tbl (69).column_type := 'VARCHAR2';
10612 l_lot_ser_attr_tbl (69).column_length := 150;
10613
10614 g_lot_ser_attr_tbl := l_lot_ser_attr_tbl;
10615
10616
10617 inv_log_util.trace('After setting all the column names and types' , 'get_serial_attr_table',9);
10618
10619 EXCEPTION
10620 WHEN OTHERS
10621 THEN
10622
10623 IF (l_debug = 1)
10624 THEN
10625 inv_log_util.trace('In Exception in get_serial_attr_table' , 'get_serial_attr_table',9);
10626 END IF;
10627
10628 END get_serial_attr_table;
10629
10630 /*****************************************************************************
10631 *Private procedure used in tmpinsert2(). This is used to get all the serial *
10632 *attributes from MSNI in x_lot_ser_attr_tbl which is then used for attr val.*
10633 *****************************************************************************/
10634
10635 PROCEDURE get_serial_attr_record (
10636 x_lot_ser_attr_tbl OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
10637 , p_transaction_interface_id IN NUMBER
10638 , p_fm_serial_number IN VARCHAR2
10639 , p_to_serial_number IN VARCHAR2
10640 , p_serial_number IN VARCHAR2
10641 , p_item_id IN NUMBER
10642 , p_org_id IN NUMBER
10643 , p_organization_id IN NUMBER
10644 , p_inventory_item_id IN NUMBER
10645 )
10646
10647 IS
10648 /*Bug:5408823.Commented out the following code as the code to
10649 populate metadata of the serial attributes is moved to
10650 get_serial_attr_table.
10651 */
10652 /*l_app_owner_schema VARCHAR2 (30);
10653 l_app_status VARCHAR2 (1);
10654 l_app_industry VARCHAR2 (1);
10655 l_app_info_status BOOLEAN
10656 := fnd_installation.get_app_info (application_short_name => 'INV'
10657 , status => l_app_status
10658 , industry => l_app_industry
10659 , oracle_schema => l_app_owner_schema
10660 );
10661
10662 CURSOR serial_column_csr (p_table_name VARCHAR2)
10663 IS
10664 SELECT column_name
10665 , data_type
10666 , data_length
10667 FROM all_tab_columns
10668 WHERE table_name = UPPER (p_table_name)
10669 AND owner = l_app_owner_schema
10670 Bug:4724150. Commented the following condition 1 as the attribute
10671 columns becomes out of range of 20 to 91 when some extraneous attributes are added
10672 --AND column_id BETWEEN 20 AND 101 --attribute columns.
10673 AND column_name NOT IN ('STATUS_ID','STATUS_NAME', 'ORIGINATION_DATE')
10674 ORDER BY column_id;
10675 */
10676
10677 l_column_id NUMBER;
10678 l_lot_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
10679 l_column_idx NUMBER;
10680 --l_select_stmt LONG;
10681 l_sql_p INTEGER;
10682 l_rows_processed INTEGER;
10683 l_line NUMBER;
10684 l_stmt LONG;
10685 l_debug NUMBER
10686 := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
10687 BEGIN
10688
10689 /*Bug:5408823. Copying the global table which is populated in get_serial_attr_table procedure. */
10690 l_lot_ser_attr_tbl := g_lot_ser_attr_tbl;
10691 l_sql_p := NULL;
10692 l_rows_processed := NULL;
10693 l_line := 1;
10694
10695
10696 IF (l_debug = 1)
10697 THEN
10698 mydebug ('breadcrumb 10', 'get_serial_attr_record');
10699 END IF;
10700
10701 /*Bug:5408823. Commenting the following code which popultes the column name,
10702 type and length of Serial Attributes, as this is being done in seperate procedure
10703 get_serial_attr_table. */
10704
10705 /*FOR l_lot_ser_column_csr IN
10706 serial_column_csr ('MTL_SERIAL_NUMBERS_INTERFACE')
10707 LOOP
10708 l_column_idx := l_column_idx + 1;
10709 l_lot_ser_attr_tbl (l_column_idx).column_name :=
10710 l_lot_ser_column_csr.column_name;
10711 l_lot_ser_attr_tbl (l_column_idx).column_type :=
10712 l_lot_ser_column_csr.data_type;
10713
10714 IF UPPER (l_lot_ser_column_csr.data_type) = 'DATE'
10715 THEN
10716 l_lot_ser_attr_tbl (l_column_idx).column_length := 11;
10717 ELSIF UPPER (l_lot_ser_column_csr.data_type) = 'NUMBER'
10718 THEN
10719 l_lot_ser_attr_tbl (l_column_idx).column_length := 38;
10720 ELSE
10721 l_lot_ser_attr_tbl (l_column_idx).column_length :=
10722 l_lot_ser_column_csr.data_length;
10723 END IF;
10724
10725 IF (l_column_idx = 1)
10726 THEN
10727 l_select_stmt :=
10728 l_select_stmt
10729 || ' NVL(MSNI.'
10730 || l_lot_ser_attr_tbl (l_column_idx).column_name
10731 || ', MSN.'
10732 || l_lot_ser_attr_tbl (l_column_idx).column_name
10733 || ')';
10734 ELSE
10735 l_select_stmt :=
10736 l_select_stmt
10737 || ', NVL(MSNI.'
10738 || l_lot_ser_attr_tbl (l_column_idx).column_name
10739 || ', MSN.'
10740 || l_lot_ser_attr_tbl (l_column_idx).column_name
10741 || ')';
10742 END IF;
10743
10744 END LOOP;*/
10745
10746 IF (l_debug = 1)
10747 THEN
10748 mydebug ('breadcrumb 20', 'get_serial_attr_record');
10749 END IF;
10750
10751
10752
10753 -- unlike lot case we do not need a condition for lot_number > 0 for the serials will exists
10754 -- in the system
10755 /*
10756 l_select_stmt :=
10757 l_select_stmt
10758 || ' from mtl_serial_numbers_interface msni,'
10759 || ' mtl_serial_numbers msn,'
10760 || ' mtl_transaction_lots_interface mtli,'
10761 || ' mtl_transactions_interface mti'
10762 || ' where mti.parent_id = :b_parent_id'
10763 || ' and mti.transaction_interface_id <> mti.parent_id'
10764 || ' and mtli.transaction_interface_id = mti.transaction_interface_id'
10765 || ' and msni.transaction_interface_id = mtli.serial_transaction_temp_id'
10766 || ' AND inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,:b_serial_number) <> -1'
10767 || ' and inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,nvl(msni.to_serial_number,msni.fm_serial_number)) >='
10768 || ' inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,:b_serial_number)'
10769 || ' AND msn.serial_number = :b_serial_number'
10770 || ' AND msn.inventory_item_id = mti.inventory_item_id '
10771 || ' AND msn.current_organization_id = mti.organization_id ';
10772 */
10773 l_sql_p := DBMS_SQL.open_cursor;
10774
10775 IF (l_debug = 1)
10776 THEN
10777 mydebug ('breadcrumb 30', 'get_serial_attr_record');
10778 END IF;
10779
10780 DBMS_SQL.parse (l_sql_p, g_select_stmt, DBMS_SQL.native);
10781
10782 IF (l_debug = 1)
10783 THEN
10784 mydebug ('breadcrumb 40', 'get_serial_attr_record');
10785 mydebug ('b_parent_id '|| p_transaction_interface_id, 'get_serial_attr_record');
10786 mydebug ('b_serial_number ' || p_serial_number, 'get_serial_attr_record');
10787 mydebug ('b_fm_serial_number ' ||p_fm_serial_number , 'get_serial_attr_record');
10788 mydebug ('b_to_serial_number ' ||p_to_serial_number , 'get_serial_attr_record');
10789 mydebug ('b_item_id ' ||p_item_id , 'get_serial_attr_record');
10790 mydebug ('b_org_id ' ||p_org_id , 'get_serial_attr_record');
10791 END IF;
10792
10793 DBMS_SQL.bind_variable (l_sql_p, 'B_PARENT_ID', p_transaction_interface_id);
10794 DBMS_SQL.bind_variable (l_sql_p, 'B_FM_SERIAL_NUMBER', p_fm_serial_number);
10795 DBMS_SQL.bind_variable (l_sql_p, 'B_TO_SERIAL_NUMBER', p_to_serial_number);
10796 DBMS_SQL.bind_variable (l_sql_p, 'B_SERIAL_NUMBER', p_serial_number);
10797 DBMS_SQL.bind_variable (l_sql_p, 'B_ITEM_ID', p_item_id);
10798 DBMS_SQL.bind_variable (l_sql_p, 'B_ORG_ID', p_org_id);
10799
10800 IF (l_debug = 1)
10801 THEN
10802 mydebug ('breadcrumb 50', 'get_serial_attr_record');
10803 END IF;
10804
10805 l_column_idx := 0;
10806
10807 FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
10808 LOOP
10809 l_column_idx := i;
10810 DBMS_SQL.define_column (l_sql_p
10811 , l_column_idx
10812 , l_lot_ser_attr_tbl (i).column_value
10813 , l_lot_ser_attr_tbl (i).column_length
10814 );
10815 END LOOP;
10816
10817 IF (l_debug = 1)
10818 THEN
10819 mydebug ('breadcrumb 60', 'get_serial_attr_record');
10820 END IF;
10821
10822 l_rows_processed := DBMS_SQL.EXECUTE (l_sql_p);
10823
10824 IF (l_debug = 1)
10825 THEN
10826 mydebug ('breadcrumb 70', 'get_serial_attr_record');
10827 END IF;
10828
10829 LOOP
10830 IF (DBMS_SQL.fetch_rows (l_sql_p) > 0)
10831 THEN
10832 l_column_idx := 0;
10833
10834 FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
10835 LOOP
10836 l_column_idx := i;
10837 DBMS_SQL.column_value (l_sql_p
10838 , l_column_idx
10839 , l_lot_ser_attr_tbl (i).column_value
10840 );
10841 END LOOP;
10842
10843 IF (l_debug = 1)
10844 THEN
10845 mydebug ('breadcrumb 80', 'get_serial_attr_record');
10846 END IF;
10847 ELSE
10848 EXIT;
10849 END IF;
10850
10851 EXIT;
10852 END LOOP;
10853
10854 DBMS_SQL.close_cursor (l_sql_p);
10855
10856 IF (l_debug = 1)
10857 THEN
10858 mydebug ('breadcrumb 90', 'get_serial_attr_record');
10859 mydebug ('l_lot_ser_attr_tbl.COUNT => ' || l_lot_ser_attr_tbl.COUNT
10860 , 'get_serial_attr_record'
10861 );
10862
10863 FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
10864 LOOP
10865 mydebug ( l_lot_ser_attr_tbl (i).column_name
10866 || ' => '
10867 || l_lot_ser_attr_tbl (i).column_value
10868 , 'get_serial_attr_record'
10869 );
10870 END LOOP;
10871 END IF;
10872
10873 x_lot_ser_attr_tbl := l_lot_ser_attr_tbl;
10874 EXCEPTION
10875 WHEN OTHERS
10876 THEN
10877 fnd_message.set_name ('WMS', 'WMS_GET_LOT_ATTR_ERROR');
10878 fnd_msg_pub.ADD;
10879
10880 IF (l_debug = 1)
10881 THEN
10882 mydebug ('Exception in get_serial_attr_record' || SQLERRM, 'get_lot_attr_record');
10883 END IF;
10884 END get_serial_attr_record;
10885
10886
10887 /***********************************************************************
10888 * tmpinsert2() : Procedure to insert records in to MMTT, MTLT and MSNT*
10889 * for lot split/merge/translate transactions *
10890 ***************************PSEUDO CODE*********************************
10891 * for each MTI fetched for the given header_id *
10892 * *
10893 * insert into MMTT *
10894 * fetch the MTLI corresponding to the MTI fetched above. *
10895 * insert into MTLT (there will be only one MTLI for a given MTI) *
10896 * if(Lot Split OR Lot Merge) then *
10897 * for each MSNI for the above MTLI *
10898 * Get the number of serials in MSNI (if frm_serial <> to_serial)*
10899 * Get the serial difference if serials present in range *
10900 * For each expanded serial Loop *
10901 * If Resulting Serial THEN *
10902 * Do Serial Attribute Validations *
10903 * Insert into MSNT *
10904 * Else IF Source Serial *
10905 * Insert into MSNT with serial attribts directly from MSNI*
10906 * End Loop *
10907 * Else If Lot Translate Then *
10908 * For each serial in MSN for the lot in MTI Loop *
10909 * Insert into MSNT *
10910 * End Loop *
10911 * Update the MTLT with the serial_txn_temp_id as txn_temp_id of *
10912 * the MSNTs inserted above. *
10913 * End If *
10914 * *
10915 * Populate the genealogy records for the MSNTs inserted. *
10916 * For lot split : populate the resulting MSNTs *
10917 * For lot merge : populate the source MSNTs *
10918 * For lot translate : populate the resulting MSNTs *
10919 ***********************************************************************/
10920 PROCEDURE tmpinsert2 (
10921 x_return_status OUT NOCOPY VARCHAR2
10922 , x_msg_count OUT NOCOPY NUMBER
10923 , x_msg_data OUT NOCOPY VARCHAR2
10924 , x_validation_status OUT NOCOPY VARCHAR2
10925 , p_header_id IN NUMBER
10926 , p_validation_level IN NUMBER
10927 := fnd_api.g_valid_level_full
10928 )
10929 IS
10930 /*Select only lot split/merge and translate transactions */
10931 CURSOR mti_csr(l_header_id IN NUMBER)
10932 IS
10933 SELECT mti.transaction_header_id
10934 , mti.parent_id
10935 , mti.transaction_interface_id
10936 , mti.source_code
10937 , mti.source_line_id
10938 , mti.created_by
10939 , mti.last_updated_by
10940 , mti.last_update_login
10941 , mti.program_id
10942 , mti.program_application_id
10943 , mti.request_id
10944 , mti.organization_id
10945 , mti.subinventory_code
10946 , mti.locator_id
10947 , mti.inventory_item_id
10948 , mti.revision
10949 , mti.transaction_type_id
10950 , mti.transaction_action_id
10951 , mti.transaction_source_type_id
10952 , mti.transaction_source_id
10953 , mti.transaction_source_name
10954 , mti.transaction_reference
10955 , mti.reason_id
10956 , mti.transaction_date
10957 , mti.acct_period_id
10958 , mti.transaction_quantity
10959 , mti.transaction_uom
10960 , mti.primary_quantity
10961 , mti.transaction_cost
10962 , mti.distribution_account_id
10963 , mti.transfer_subinventory
10964 , mti.transfer_organization
10965 , mti.transfer_locator
10966 , mti.shipment_number
10967 , mti.transportation_cost
10968 , mti.transfer_cost
10969 , mti.transportation_account
10970 , mti.freight_code
10971 , mti.containers
10972 , mti.waybill_airbill
10973 , mti.expected_arrival_date
10974 , mti.currency_code
10975 , mti.currency_conversion_date
10976 , mti.currency_conversion_type
10977 , mti.currency_conversion_rate
10978 , mti.new_average_cost
10979 , mti.value_change
10980 , mti.percentage_change
10981 , mti.demand_id
10982 , mti.demand_source_header_id
10983 , mti.demand_source_line
10984 , mti.demand_source_delivery
10985 , mti.customer_ship_id
10986 , mti.trx_source_delivery_id
10987 , mti.trx_source_line_id
10988 , mti.picking_line_id
10989 , mti.required_flag
10990 , mti.negative_req_flag
10991 , mti.repetitive_line_id
10992 , mti.primary_switch
10993 , mti.operation_seq_num
10994 , mti.setup_teardown_code
10995 , mti.schedule_update_code
10996 , mti.department_id
10997 , mti.employee_code
10998 , mti.schedule_id
10999 , mti.wip_entity_type
11000 , mti.encumbrance_amount
11001 , mti.encumbrance_account
11002 , mti.ussgl_transaction_code
11003 , mti.shippable_flag
11004 , mti.requisition_line_id
11005 , mti.requisition_distribution_id
11006 , mti.ship_to_location_id
11007 , mti.completion_transaction_id
11008 , mti.attribute_category
11009 , mti.attribute1
11010 , mti.attribute2
11011 , mti.attribute3
11012 , mti.attribute4
11013 , mti.attribute5
11014 , mti.attribute6
11015 , mti.attribute7
11016 , mti.attribute8
11017 , mti.attribute9
11018 , mti.attribute10
11019 , mti.attribute11
11020 , mti.attribute12
11021 , mti.attribute13
11022 , mti.attribute14
11023 , mti.attribute15
11024 , mti.movement_id
11025 , mti.source_project_id
11026 , mti.source_task_id
11027 , mti.expenditure_type
11028 , mti.pa_expenditure_org_id
11029 , mti.project_id
11030 , mti.task_id
11031 , mti.to_project_id
11032 , mti.to_task_id
11033 , mti.final_completion_flag
11034 , mti.transfer_percentage
11035 , mti.material_account
11036 , mti.material_overhead_account
11037 , mti.resource_account
11038 , mti.outside_processing_account
11039 , mti.overhead_account
11040 , mti.cost_group_id
11041 , mti.flow_schedule
11042 , mti.qa_collection_id
11043 , mti.overcompletion_transaction_qty
11044 , mti.overcompletion_primary_qty
11045 , mti.overcompletion_transaction_id
11046 , mti.end_item_unit_number
11047 , mti.org_cost_group_id
11048 , mti.cost_type_id
11049 , mti.lpn_id
11050 , mti.content_lpn_id
11051 , mti.transfer_lpn_id
11052 , mti.organization_type
11053 , mti.transfer_organization_type
11054 , mti.owning_organization_id
11055 , mti.owning_tp_type
11056 , mti.xfr_owning_organization_id
11057 , mti.transfer_owning_tp_type
11058 , mti.planning_organization_id
11059 , mti.planning_tp_type
11060 , mti.xfr_planning_organization_id
11061 , mti.transfer_planning_tp_type
11062 , mti.transaction_batch_id
11063 , mti.transaction_batch_seq
11064 , mti.transfer_cost_group_id
11065 , mti.transaction_mode
11066 , mti.rebuild_item_id
11067 , mti.rebuild_activity_id
11068 , mti.rebuild_serial_number
11069 , mti.rebuild_job_name
11070 , mti.kanban_card_id
11071 , mti.accounting_class
11072 , mti.scheduled_flag
11073 , mti.schedule_number
11074 , mti.routing_revision_date
11075 , mti.move_transaction_id
11076 , mti.wip_supply_type
11077 , mti.build_sequence
11078 , mti.bom_revision
11079 , mti.routing_revision
11080 , mti.bom_revision_date
11081 , mti.alternate_bom_designator
11082 , mti.alternate_routing_designator
11083 , mti.secondary_transaction_quantity
11084 , mti.secondary_uom_code
11085 , mti.relieve_reservations_flag /*** {{ R12 Enhanced reservations code changes ***/
11086 , mti.relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
11087 FROM mtl_transactions_interface mti
11088 WHERE mti.transaction_header_id = l_header_id
11089 AND mti.transaction_action_id IN
11090 (inv_globals.g_action_inv_lot_split
11091 , inv_globals.g_action_inv_lot_merge
11092 , inv_globals.g_action_inv_lot_translate
11093 )
11094 AND mti.transaction_source_type_id = 13
11095 AND mti.process_flag = 1
11096 ORDER BY mti.transaction_batch_id
11097 , mti.transaction_batch_seq
11098 , mti.organization_id
11099 , mti.inventory_item_id
11100 , mti.revision
11101 , mti.subinventory_code
11102 , mti.locator_id;
11103
11104 /*To this cursor we would pass the parent_id from each mti fetched frm the cursor MTI_CSR*/
11105 CURSOR mtli_csr (p_transaction_interface_id IN NUMBER)
11106 IS
11107 SELECT transaction_interface_id
11108 , ltrim(rtrim(lot_number)) lot_number /*Bug 6390860 added ltrim, rtrim and alias*/
11109 , lot_expiration_date
11110 , last_updated_by
11111 , created_by
11112 , last_update_login
11113 , program_update_date
11114 , program_application_id
11115 , program_id
11116 , request_id
11117 , primary_quantity
11118 , transaction_quantity
11119 , serial_transaction_temp_id
11120 , lot_attribute_category
11121 , c_attribute1
11122 , c_attribute2
11123 , c_attribute3
11124 , c_attribute4
11125 , c_attribute5
11126 , c_attribute6
11127 , c_attribute7
11128 , c_attribute8
11129 , c_attribute9
11130 , c_attribute10
11131 , c_attribute11
11132 , c_attribute12
11133 , c_attribute13
11134 , c_attribute14
11135 , c_attribute15
11136 , c_attribute16
11137 , c_attribute17
11138 , c_attribute18
11139 , c_attribute19
11140 , c_attribute20
11141 , d_attribute1
11142 , d_attribute2
11143 , d_attribute3
11144 , d_attribute4
11145 , d_attribute5
11146 , d_attribute6
11147 , d_attribute7
11148 , d_attribute8
11149 , d_attribute9
11150 , d_attribute10
11151 , n_attribute1
11152 , n_attribute2
11153 , n_attribute3
11154 , n_attribute4
11155 , n_attribute5
11156 , n_attribute6
11157 , n_attribute7
11158 , n_attribute8
11159 , n_attribute9
11160 , n_attribute10
11161 , attribute1
11162 , attribute2
11163 , attribute3
11164 , attribute4
11165 , attribute5
11166 , attribute6
11167 , attribute7
11168 , attribute8
11169 , attribute9
11170 , attribute10
11171 , attribute11
11172 , attribute12
11173 , attribute13
11174 , attribute14
11175 , attribute15
11176 , attribute_category
11177 , p_header_id
11178 , description
11179 , vendor_name
11180 , supplier_lot_number
11181 , origination_date
11182 , date_code
11183 , grade_code
11184 , change_date
11185 , maturity_date
11186 , status_id
11187 , retest_date
11188 , age
11189 , item_size
11190 , color
11191 , volume
11192 , volume_uom
11193 , place_of_origin
11194 , best_by_date
11195 , LENGTH
11196 , length_uom
11197 , recycled_content
11198 , thickness
11199 , thickness_uom
11200 , width
11201 , width_uom
11202 , curl_wrinkle_fold
11203 , vendor_id
11204 , territory_code
11205 , parent_lot_number
11206 , origination_type
11207 , expiration_action_date
11208 , expiration_action_code
11209 , hold_date
11210 , reason_id
11211 , secondary_transaction_quantity
11212 --R12 Genealogy enhancements
11213 , parent_object_type
11214 , parent_object_id
11215 , parent_object_number
11216 , parent_item_id
11217 , parent_object_type2
11218 , parent_object_id2
11219 , parent_object_number2 --R12 Genealogy enhancements
11220 FROM mtl_transaction_lots_interface
11221 WHERE transaction_interface_id = p_transaction_interface_id;
11222
11223 CURSOR msni_csr (l_serial_transaction_temp_id IN NUMBER)
11224 IS
11225 SELECT transaction_interface_id
11226 , last_update_date
11227 , last_updated_by
11228 , creation_date
11229 , created_by
11230 , last_update_login
11231 , request_id
11232 , program_application_id
11233 , program_id
11234 , program_update_date
11235 , vendor_serial_number
11236 , vendor_lot_number
11237 , ltrim(rtrim(fm_serial_number)) fm_serial_number /*Bug 4764048 added ltrim,rtrim*/
11238 , ltrim(rtrim(to_serial_number)) to_serial_number /*Bug 4764048 added ltrim,rtrim*/
11239 , parent_serial_number
11240 , serial_attribute_category
11241 , c_attribute1
11242 , c_attribute2
11243 , c_attribute3
11244 , c_attribute4
11245 , c_attribute5
11246 , c_attribute6
11247 , c_attribute7
11248 , c_attribute8
11249 , c_attribute9
11250 , c_attribute10
11251 , c_attribute11
11252 , c_attribute12
11253 , c_attribute13
11254 , c_attribute14
11255 , c_attribute15
11256 , c_attribute16
11257 , c_attribute17
11258 , c_attribute18
11259 , c_attribute19
11260 , c_attribute20
11261 , d_attribute1
11262 , d_attribute2
11263 , d_attribute3
11264 , d_attribute4
11265 , d_attribute5
11266 , d_attribute6
11267 , d_attribute7
11268 , d_attribute8
11269 , d_attribute9
11270 , d_attribute10
11271 , n_attribute1
11272 , n_attribute2
11273 , n_attribute3
11274 , n_attribute4
11275 , n_attribute5
11276 , n_attribute6
11277 , n_attribute7
11278 , n_attribute8
11279 , n_attribute9
11280 , n_attribute10
11281 , attribute_category
11282 , attribute1
11283 , attribute2
11284 , attribute3
11285 , attribute4
11286 , attribute5
11287 , attribute6
11288 , attribute7
11289 , attribute8
11290 , attribute9
11291 , attribute10
11292 , attribute11
11293 , attribute12
11294 , attribute13
11295 , attribute14
11296 , attribute15
11297 , status_id
11298 , territory_code
11299 , time_since_new
11300 , cycles_since_new
11301 , time_since_overhaul
11302 , cycles_since_overhaul
11303 , time_since_repair
11304 , cycles_since_repair
11305 , time_since_visit
11306 , cycles_since_visit
11307 , time_since_mark
11308 , cycles_since_mark
11309 , number_of_repairs
11310 FROM mtl_serial_numbers_interface msni
11311 WHERE transaction_interface_id = l_serial_transaction_temp_id;
11312
11313 CURSOR msn_serial_attributes_csr (
11314 l_serial_number IN VARCHAR2
11315 , l_inventory_item_id IN NUMBER
11316 , l_organization_id IN NUMBER
11317 )
11318 IS
11319 SELECT serial_attribute_category
11320 , c_attribute1
11321 , c_attribute2
11322 , c_attribute3
11323 , c_attribute4
11324 , c_attribute5
11325 , c_attribute6
11326 , c_attribute7
11327 , c_attribute8
11328 , c_attribute9
11329 , c_attribute10
11330 , c_attribute11
11331 , c_attribute12
11332 , c_attribute13
11333 , c_attribute14
11334 , c_attribute15
11335 , c_attribute16
11336 , c_attribute17
11337 , c_attribute18
11338 , c_attribute19
11339 , c_attribute20
11340 , d_attribute1
11341 , d_attribute2
11342 , d_attribute3
11343 , d_attribute4
11344 , d_attribute5
11345 , d_attribute6
11346 , d_attribute7
11347 , d_attribute8
11348 , d_attribute9
11349 , d_attribute10
11350 , n_attribute1
11351 , n_attribute2
11352 , n_attribute3
11353 , n_attribute4
11354 , n_attribute5
11355 , n_attribute6
11356 , n_attribute7
11357 , n_attribute8
11358 , n_attribute9
11359 , n_attribute10
11360 , attribute_category
11361 , attribute1
11362 , attribute2
11363 , attribute3
11364 , attribute4
11365 , attribute5
11366 , attribute6
11367 , attribute7
11368 , attribute8
11369 , attribute9
11370 , attribute10
11371 , attribute11
11372 , attribute12
11373 , attribute13
11374 , attribute14
11375 , attribute15
11376 , status_id
11377 , territory_code
11378 , time_since_new
11379 , cycles_since_new
11380 , time_since_overhaul
11381 , cycles_since_overhaul
11382 , time_since_repair
11383 , cycles_since_repair
11384 , time_since_visit
11385 , cycles_since_visit
11386 , time_since_mark
11387 , cycles_since_mark
11388 , number_of_repairs
11389 FROM mtl_serial_numbers msn
11390 WHERE msn.serial_number = l_serial_number
11391 AND msn.inventory_item_id = l_inventory_item_id
11392 AND msn.current_organization_id = l_organization_id;
11393
11394 /*Bug:5408823. Modified the where condition of the following cursor
11395 to add NVL to locator_id column and add a new parameter p_lpn_id which is
11396 used in the WHERE clause. */
11397 CURSOR msn_csr (
11398 p_lot_number IN VARCHAR2
11399 , p_inventory_item_id IN NUMBER
11400 , p_subinventory_code IN VARCHAR2
11401 , p_locator_id IN NUMBER
11402 , p_organization_id IN NUMBER
11403 , p_lpn_id IN NUMBER
11404 )
11405 IS
11406 SELECT last_update_date
11407 , last_updated_by
11408 , creation_date
11409 , created_by
11410 , last_update_login
11411 , request_id
11412 , program_application_id
11413 , program_id
11414 , program_update_date
11415 , vendor_serial_number
11416 , vendor_lot_number
11417 , serial_number
11418 , parent_serial_number
11419 , serial_attribute_category
11420 , c_attribute1
11421 , c_attribute2
11422 , c_attribute3
11423 , c_attribute4
11424 , c_attribute5
11425 , c_attribute6
11426 , c_attribute7
11427 , c_attribute8
11428 , c_attribute9
11429 , c_attribute10
11430 , c_attribute11
11431 , c_attribute12
11432 , c_attribute13
11433 , c_attribute14
11434 , c_attribute15
11435 , c_attribute16
11436 , c_attribute17
11437 , c_attribute18
11438 , c_attribute19
11439 , c_attribute20
11440 , d_attribute1
11441 , d_attribute2
11442 , d_attribute3
11443 , d_attribute4
11444 , d_attribute5
11445 , d_attribute6
11446 , d_attribute7
11447 , d_attribute8
11448 , d_attribute9
11449 , d_attribute10
11450 , n_attribute1
11451 , n_attribute2
11452 , n_attribute3
11453 , n_attribute4
11454 , n_attribute5
11455 , n_attribute6
11456 , n_attribute7
11457 , n_attribute8
11458 , n_attribute9
11459 , n_attribute10
11460 , p_header_id
11461 , attribute_category
11462 , attribute1
11463 , attribute2
11464 , attribute3
11465 , attribute4
11466 , attribute5
11467 , attribute6
11468 , attribute7
11469 , attribute8
11470 , attribute9
11471 , attribute10
11472 , attribute11
11473 , attribute12
11474 , attribute13
11475 , attribute14
11476 , attribute15
11477 , status_id
11478 , territory_code
11479 , time_since_new
11480 , cycles_since_new
11481 , time_since_overhaul
11482 , cycles_since_overhaul
11483 , time_since_repair
11484 , cycles_since_repair
11485 , time_since_visit
11486 , cycles_since_visit
11487 , time_since_mark
11488 , cycles_since_mark
11489 , number_of_repairs
11490 FROM mtl_serial_numbers
11491 WHERE inventory_item_id = p_inventory_item_id
11492 AND current_organization_id = p_organization_id
11493 AND current_status = 3
11494 AND current_subinventory_code = p_subinventory_code
11495 AND NVL(current_locator_id,-1) = NVL(p_locator_id, -1)
11496 AND NVL(lpn_id, -1) = NVL(p_lpn_id, -1)
11497 AND lot_number = p_lot_number ;
11498
11499 /*This cursor is used to get the serials in lot merge transaction for which the genealogy
11500 *columns need to be populated/updated. We will pass the serial_transaction_temp_id of the
11501 *resultant lot(l_mtli_csr.serial_transaction_temp_id)
11502 */
11503 CURSOR msnt_serials_csr (l_serial_transaction_temp_id IN NUMBER)
11504 IS
11505 SELECT fm_serial_number
11506 , transaction_temp_id
11507 FROM mtl_serial_numbers_temp
11508 WHERE transaction_temp_id = l_serial_transaction_temp_id
11509 FOR UPDATE NOWAIT;
11510
11511 CURSOR mtli_parent_lots_csr (l_transaction_interface_id IN NUMBER)
11512 IS
11513 SELECT mtli.lot_number
11514 , mtli.serial_transaction_temp_id
11515 FROM mtl_transaction_lots_interface mtli
11516 WHERE mtli.transaction_interface_id =
11517 (SELECT mti.transaction_interface_id
11518 FROM mtl_transactions_interface mti
11519 WHERE mti.parent_id = l_transaction_interface_id
11520 AND mti.transaction_interface_id <> mti.parent_id);
11521
11522 l_parent_id NUMBER;
11523 l_transaction_interface_id NUMBER;
11524 l_next_serial VARCHAR2(30);
11525 l_old_serial VARCHAR2(30);
11526 l_serial_diff NUMBER;
11527 l_serial_code NUMBER;
11528 l_parent_object_number2 VARCHAR2 (80);
11529 l_current_serial VARCHAR2 (30);
11530 l_is_parent_lot NUMBER;
11531 l_serial_temp_id NUMBER;
11532 l_current_parent_lot VARCHAR2 (30);
11533 l_current_serial_txn_temp_id NUMBER;
11534 l_user_id NUMBER;
11535 l_login_id NUMBER;
11536 l_sysdate DATE;
11537 l_mtli_csr mtli_csr%ROWTYPE;
11538 l_serial_attributes_csr msn_serial_attributes_csr%ROWTYPE;
11539 l_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
11540 l_validated_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
11541 l_debug NUMBER;
11542 l_indexed_ser_attr_tbl lot_sel_index_attr_tbl_type;
11543 l_sequence NUMBER;
11544 l_validation_status VARCHAR2 (1);
11545 l_old_item_id NUMBER;
11546 l_old_lot_num VARCHAR2(80);
11547 l_old_sub_code VARCHAR2(10);
11548 l_old_locator_id NUMBER;
11549 l_old_lpn_id NUMBER; --Bug 5408823
11550 l_context_value_dst mtl_flex_context.descriptive_flex_context_code%TYPE;
11551 l_context_value_src mtl_flex_context.descriptive_flex_context_code%TYPE;
11552 l_patchset_j NUMBER := 0; /* 0 = No 1 = Yes */
11553
11554 BEGIN
11555
11556 l_debug := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
11557
11558 IF (l_debug = 1)
11559 THEN
11560 mydebug ('breadcrumb 10', 'tmpinsert2');
11561 END IF;
11562
11563 l_validation_status := 'Y';
11564 x_return_status := fnd_api.g_ret_sts_success;
11565 l_sysdate := SYSDATE;
11566 l_user_id := fnd_global.user_id;
11567 l_login_id := fnd_global.login_id;
11568
11569 --bug 4574806. this will be used in the statements below for final
11570 --completion flag AS a decode
11571 IF (wip_constants.DMF_PATCHSET_LEVEL>=
11572 wip_constants.DMF_PATCHSET_J_VALUE) THEN
11573 l_patchset_j := 1;
11574 END IF;
11575
11576 /*Bug:5408823. The following procedure populates the column name, data type
11577 and length of all the Serial Attributes into global table g_lot_ser_attr_tbl
11578 which will be later used in procedure get_serial_attr_record. */
11579 get_serial_attr_table;
11580
11581 /* Insert the MMTT for each MTI. For each MTI insert the corresponding MTLT.
11582 * For each MTLT there might be several MSNIs. Populate these into MSNTs .
11583 * For lot translate there will be no MSNIs. In this case we have to get the
11584 * values from the MTLT and MSN.
11585 */
11586 BEGIN
11587 IF (l_debug = 1)
11588 THEN
11589 mydebug ('breadcrumb 20 header id ' || p_header_id, 'tmpinsert2');
11590 END IF;
11591
11592 FOR l_mti_csr IN mti_csr(p_header_id)
11593 LOOP
11594 l_parent_id := l_mti_csr.parent_id;
11595 l_transaction_interface_id := l_mti_csr.transaction_interface_id;
11596
11597 IF (l_debug = 1)
11598 THEN
11599 mydebug ('Inserting into MMTT',
11600 'tmpinsert2');
11601 mydebug ('l_parent_id => '|| l_parent_id,
11602 'tmpinsert2');
11603 mydebug ('l_transaction_interface_id => '|| l_transaction_interface_id
11604 , 'tmpinsert2'
11605 );
11606 END IF;
11607
11608 IF (l_debug = 1)
11609 THEN
11610 mydebug ('breadcrumb 30','tmpinsert2');
11611 END IF;
11612
11613 INSERT INTO mtl_material_transactions_temp
11614 (transaction_header_id
11615 , transaction_temp_id
11616 , source_code
11617 , source_line_id
11618 , process_flag
11619 , creation_date
11620 , created_by
11621 , last_update_date
11622 , last_updated_by
11623 , last_update_login
11624 , program_id
11625 , program_update_date
11626 , program_application_id
11627 , request_id
11628 , organization_id
11629 , subinventory_code
11630 , locator_id
11631 , inventory_item_id
11632 , revision
11633 , transaction_type_id
11634 , transaction_action_id
11635 , transaction_source_type_id
11636 , transaction_source_id
11637 , transaction_source_name
11638 , transaction_reference
11639 , reason_id
11640 , transaction_date
11641 , acct_period_id
11642 , transaction_quantity
11643 , transaction_uom
11644 , primary_quantity
11645 , transaction_cost
11646 , distribution_account_id
11647 , transfer_subinventory
11648 , transfer_organization
11649 , transfer_to_location
11650 , shipment_number
11651 , transportation_cost
11652 , transfer_cost
11653 , transportation_account
11654 , freight_code
11655 , containers
11656 , waybill_airbill
11657 , expected_arrival_date
11658 , currency_code
11659 , currency_conversion_date
11660 , currency_conversion_type
11661 , currency_conversion_rate
11662 , new_average_cost
11663 , value_change
11664 , percentage_change
11665 , demand_id
11666 , demand_source_header_id
11667 , demand_source_line
11668 , demand_source_delivery
11669 , customer_ship_id
11670 , trx_source_delivery_id
11671 , trx_source_line_id
11672 , picking_line_id
11673 , required_flag
11674 , negative_req_flag
11675 , repetitive_line_id
11676 , primary_switch
11677 , operation_seq_num
11678 , setup_teardown_code
11679 , schedule_update_code
11680 , department_id
11681 , employee_code
11682 , schedule_id
11683 , wip_entity_type
11684 , encumbrance_amount
11685 , encumbrance_account
11686 , ussgl_transaction_code
11687 , shippable_flag
11688 , requisition_line_id
11689 , requisition_distribution_id
11690 , ship_to_location
11691 , completion_transaction_id
11692 , attribute_category
11693 , attribute1
11694 , attribute2
11695 , attribute3
11696 , attribute4
11697 , attribute5
11698 , attribute6
11699 , attribute7
11700 , attribute8
11701 , attribute9
11702 , attribute10
11703 , attribute11
11704 , attribute12
11705 , attribute13
11706 , attribute14
11707 , attribute15
11708 , movement_id
11709 , source_project_id
11710 , source_task_id
11711 , expenditure_type
11712 , pa_expenditure_org_id
11713 , project_id
11714 , task_id
11715 , to_project_id
11716 , to_task_id
11717 , posting_flag
11718 , final_completion_flag
11719 , transfer_percentage
11720 , material_account
11721 , material_overhead_account
11722 , resource_account
11723 , outside_processing_account
11724 , overhead_account
11725 , cost_group_id
11726 , flow_schedule
11727 , qa_collection_id
11728 , overcompletion_transaction_qty
11729 , overcompletion_primary_qty
11730 , overcompletion_transaction_id
11731 , end_item_unit_number
11732 , org_cost_group_id
11733 , cost_type_id
11734 , move_order_line_id
11735 , lpn_id
11736 , content_lpn_id
11737 , transfer_lpn_id
11738 , organization_type
11739 , transfer_organization_type
11740 , owning_organization_id
11741 , owning_tp_type
11742 , xfr_owning_organization_id
11743 , transfer_owning_tp_type
11744 , planning_organization_id
11745 , planning_tp_type
11746 , xfr_planning_organization_id
11747 , transfer_planning_tp_type
11748 , transaction_batch_id
11749 , transaction_batch_seq
11750 , transfer_cost_group_id
11751 , transaction_mode
11752 , rebuild_item_id
11753 , rebuild_activity_id
11754 , rebuild_serial_number
11755 , rebuild_job_name
11756 , kanban_card_id
11757 , class_code
11758 , scheduled_flag
11759 , schedule_number
11760 , routing_revision_date
11761 , move_transaction_id
11762 , wip_supply_type
11763 , build_sequence
11764 , bom_revision
11765 , routing_revision
11766 , bom_revision_date
11767 , alternate_bom_designator
11768 , alternate_routing_designator
11769 , secondary_transaction_quantity
11770 , secondary_uom_code
11771 , parent_transaction_temp_id
11772 , relieve_reservations_flag /*** {{ R12 Enhanced reservations code changes ***/
11773 , relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
11774 )
11775 VALUES (l_mti_csr.transaction_header_id
11776 , l_mti_csr.transaction_interface_id
11777 , l_mti_csr.source_code
11778 , l_mti_csr.source_line_id
11779 , 'Y'
11780 , l_sysdate
11781 , l_user_id
11782 , l_sysdate
11783 , l_user_id
11784 , l_login_id
11785 , l_mti_csr.program_id
11786 , l_sysdate
11787 , l_mti_csr.program_application_id
11788 , l_mti_csr.request_id
11789 , l_mti_csr.organization_id
11790 , l_mti_csr.subinventory_code
11791 , l_mti_csr.locator_id
11792 , l_mti_csr.inventory_item_id
11793 , l_mti_csr.revision
11794 , l_mti_csr.transaction_type_id
11795 , l_mti_csr.transaction_action_id
11796 , l_mti_csr.transaction_source_type_id
11797 , l_mti_csr.transaction_source_id
11798 , l_mti_csr.transaction_source_name
11799 , l_mti_csr.transaction_reference
11800 , l_mti_csr.reason_id
11801 , l_mti_csr.transaction_date
11802 , l_mti_csr.acct_period_id
11803 , l_mti_csr.transaction_quantity
11804 , l_mti_csr.transaction_uom
11805 , l_mti_csr.primary_quantity
11806 , l_mti_csr.transaction_cost
11807 , l_mti_csr.distribution_account_id
11808 , l_mti_csr.transfer_subinventory
11809 , l_mti_csr.transfer_organization
11810 , l_mti_csr.transfer_locator
11811 , l_mti_csr.shipment_number
11812 , l_mti_csr.transportation_cost
11813 , l_mti_csr.transfer_cost
11814 , l_mti_csr.transportation_account
11815 , l_mti_csr.freight_code
11816 , l_mti_csr.containers
11817 , l_mti_csr.waybill_airbill
11818 , l_mti_csr.expected_arrival_date
11819 , l_mti_csr.currency_code
11820 , l_mti_csr.currency_conversion_date
11821 , l_mti_csr.currency_conversion_type
11822 , l_mti_csr.currency_conversion_rate
11823 , l_mti_csr.new_average_cost
11824 , l_mti_csr.value_change
11825 , l_mti_csr.percentage_change
11826 , l_mti_csr.demand_id
11827 , l_mti_csr.demand_source_header_id
11828 , l_mti_csr.demand_source_line
11829 , l_mti_csr.demand_source_delivery
11830 , l_mti_csr.customer_ship_id
11831 , l_mti_csr.trx_source_delivery_id
11832 , l_mti_csr.trx_source_line_id
11833 , l_mti_csr.picking_line_id
11834 , l_mti_csr.required_flag
11835 , l_mti_csr.negative_req_flag
11836 , l_mti_csr.repetitive_line_id
11837 , l_mti_csr.primary_switch
11838 , l_mti_csr.operation_seq_num
11839 , l_mti_csr.setup_teardown_code
11840 , l_mti_csr.schedule_update_code
11841 , l_mti_csr.department_id
11842 , l_mti_csr.employee_code
11843 , l_mti_csr.schedule_id
11844 , l_mti_csr.wip_entity_type
11845 , l_mti_csr.encumbrance_amount
11846 , l_mti_csr.encumbrance_account
11847 , l_mti_csr.ussgl_transaction_code
11848 , l_mti_csr.shippable_flag
11849 , l_mti_csr.requisition_line_id
11850 , l_mti_csr.requisition_distribution_id
11851 , l_mti_csr.ship_to_location_id
11852 , NVL (l_mti_csr.completion_transaction_id
11853 , DECODE (l_mti_csr.transaction_action_id
11854 , 31, mtl_material_transactions_s.NEXTVAL
11855 , 32, mtl_material_transactions_s.NEXTVAL
11856 , NULL
11857 )
11858 )
11859 , l_mti_csr.attribute_category
11860 , l_mti_csr.attribute1
11861 , l_mti_csr.attribute2
11862 , l_mti_csr.attribute3
11863 , l_mti_csr.attribute4
11864 , l_mti_csr.attribute5
11865 , l_mti_csr.attribute6
11866 , l_mti_csr.attribute7
11867 , l_mti_csr.attribute8
11868 , l_mti_csr.attribute9
11869 , l_mti_csr.attribute10
11870 , l_mti_csr.attribute11
11871 , l_mti_csr.attribute12
11872 , l_mti_csr.attribute13
11873 , l_mti_csr.attribute14
11874 , l_mti_csr.attribute15
11875 , l_mti_csr.movement_id
11876 , l_mti_csr.source_project_id
11877 , l_mti_csr.source_task_id
11878 , l_mti_csr.expenditure_type
11879 , l_mti_csr.pa_expenditure_org_id
11880 , l_mti_csr.project_id
11881 , l_mti_csr.task_id
11882 , l_mti_csr.to_project_id
11883 , l_mti_csr.to_task_id
11884 , 'N'
11885 , NVL(l_mti_csr.final_completion_flag,Decode(l_patchset_j,1,l_mti_csr.final_completion_flag,'N'))
11886 , l_mti_csr.transfer_percentage
11887 , l_mti_csr.material_account
11888 , l_mti_csr.material_overhead_account
11889 , l_mti_csr.resource_account
11890 , l_mti_csr.outside_processing_account
11891 , l_mti_csr.overhead_account
11892 , l_mti_csr.cost_group_id
11893 , l_mti_csr.flow_schedule
11894 , l_mti_csr.qa_collection_id
11895 , l_mti_csr.overcompletion_transaction_qty
11896 , /* Overcompletion Transactions */
11897 l_mti_csr.overcompletion_primary_qty
11898 , l_mti_csr.overcompletion_transaction_id
11899 , l_mti_csr.end_item_unit_number
11900 , l_mti_csr.org_cost_group_id
11901 , l_mti_csr.cost_type_id
11902 , DECODE (l_mti_csr.transaction_source_type_id
11903 , 4, l_mti_csr.source_line_id
11904 , NULL
11905 )
11906 , l_mti_csr.lpn_id
11907 , l_mti_csr.content_lpn_id
11908 , l_mti_csr.transfer_lpn_id
11909 , l_mti_csr.organization_type
11910 , l_mti_csr.transfer_organization_type
11911 , l_mti_csr.owning_organization_id
11912 , l_mti_csr.owning_tp_type
11913 , l_mti_csr.xfr_owning_organization_id
11914 , l_mti_csr.transfer_owning_tp_type
11915 , l_mti_csr.planning_organization_id
11916 , l_mti_csr.planning_tp_type
11917 , l_mti_csr.xfr_planning_organization_id
11918 , l_mti_csr.transfer_planning_tp_type
11919 , l_mti_csr.transaction_batch_id
11920 , l_mti_csr.transaction_batch_seq
11921 , l_mti_csr.transfer_cost_group_id
11922 ,
11923 --this goes into transaction_mode
11924 DECODE (p_validation_level
11925 , fnd_api.g_valid_level_none, l_mti_csr.transaction_mode
11926 , inv_txn_manager_grp.proc_mode_mti
11927 )
11928 , l_mti_csr.rebuild_item_id
11929 , l_mti_csr.rebuild_activity_id
11930 , l_mti_csr.rebuild_serial_number
11931 , l_mti_csr.rebuild_job_name
11932 , l_mti_csr.kanban_card_id
11933 , l_mti_csr.accounting_class
11934 , l_mti_csr.scheduled_flag
11935 , l_mti_csr.schedule_number
11936 , l_mti_csr.routing_revision_date
11937 , l_mti_csr.move_transaction_id
11938 , l_mti_csr.wip_supply_type
11939 , l_mti_csr.build_sequence
11940 , l_mti_csr.bom_revision
11941 , l_mti_csr.routing_revision
11942 , l_mti_csr.bom_revision_date
11943 , l_mti_csr.alternate_bom_designator
11944 , l_mti_csr.alternate_routing_designator
11945 , l_mti_csr.secondary_transaction_quantity
11946 , l_mti_csr.secondary_uom_code
11947 , l_mti_csr.parent_id
11948 , l_mti_csr.relieve_reservations_flag /*** {{ R12 Enhanced reservations code changes ***/
11949 , l_mti_csr.relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
11950 );
11951
11952 IF (l_debug = 1)
11953 THEN
11954 mydebug ('breadcrumb 40', 'tmpinsert2');
11955 END IF;
11956
11957
11958 --For each MTI there will be a corresponding only one MTLI
11959 FOR l_mtli_csr IN mtli_csr(l_transaction_interface_id) LOOP
11960
11961 IF (l_debug = 1)
11962 THEN
11963 mydebug ('breadcrumb 50', 'tmpinsert2');
11964 mydebug ('Inserting into MTLI', 'tmpinsert2');
11965 END IF;
11966
11967 INSERT INTO mtl_transaction_lots_temp
11968 (transaction_temp_id
11969 , lot_number
11970 , lot_expiration_date
11971 , last_updated_by
11972 , last_update_date
11973 , creation_date
11974 , created_by
11975 , last_update_login
11976 , program_application_id
11977 , program_id
11978 , program_update_date
11979 , request_id
11980 , primary_quantity
11981 , transaction_quantity
11982 , serial_transaction_temp_id
11983 , lot_attribute_category
11984 , c_attribute1
11985 , c_attribute2
11986 , c_attribute3
11987 , c_attribute4
11988 , c_attribute5
11989 , c_attribute6
11990 , c_attribute7
11991 , c_attribute8
11992 , c_attribute9
11993 , c_attribute10
11994 , c_attribute11
11995 , c_attribute12
11996 , c_attribute13
11997 , c_attribute14
11998 , c_attribute15
11999 , c_attribute16
12000 , c_attribute17
12001 , c_attribute18
12002 , c_attribute19
12003 , c_attribute20
12004 , d_attribute1
12005 , d_attribute2
12006 , d_attribute3
12007 , d_attribute4
12008 , d_attribute5
12009 , d_attribute6
12010 , d_attribute7
12011 , d_attribute8
12012 , d_attribute9
12013 , d_attribute10
12014 , n_attribute1
12015 , n_attribute2
12016 , n_attribute3
12017 , n_attribute4
12018 , n_attribute5
12019 , n_attribute6
12020 , n_attribute7
12021 , n_attribute8
12022 , n_attribute9
12023 , n_attribute10
12024 , attribute1
12025 , attribute2
12026 , attribute3
12027 , attribute4
12028 , attribute5
12029 , attribute6
12030 , attribute7
12031 , attribute8
12032 , attribute9
12033 , attribute10
12034 , attribute11
12035 , attribute12
12036 , attribute13
12037 , attribute14
12038 , attribute15
12039 , attribute_category
12040 , group_header_id
12041 , description
12042 , vendor_name
12043 , supplier_lot_number
12044 , origination_date
12045 , date_code
12046 , grade_code
12047 , change_date
12048 , maturity_date
12049 , status_id
12050 , retest_date
12051 , age
12052 , item_size
12053 , color
12054 , volume
12055 , volume_uom
12056 , place_of_origin
12057 , best_by_date
12058 , LENGTH
12059 , length_uom
12060 , recycled_content
12061 , thickness
12062 , thickness_uom
12063 , width
12064 , width_uom
12065 , curl_wrinkle_fold
12066 , vendor_id
12067 , territory_code
12068 , parent_lot_number
12069 , origination_type
12070 , expiration_action_date
12071 , expiration_action_code
12072 , hold_date
12073 , reason_id
12074 , secondary_quantity
12075 --R12 Genealogy enhancements
12076 , parent_object_type
12077 , parent_object_id
12078 , parent_object_number
12079 , parent_item_id
12080 , parent_object_type2
12081 , parent_object_id2
12082 , parent_object_number2
12083 --R12 Genealogy enhancements
12084 )
12085 VALUES (l_mtli_csr.transaction_interface_id
12086 , l_mtli_csr.lot_number
12087 , l_mtli_csr.lot_expiration_date
12088 , l_user_id
12089 , l_sysdate
12090 , l_sysdate
12091 , l_user_id
12092 , l_login_id
12093 , l_mtli_csr.program_application_id
12094 , l_mtli_csr.program_id
12095 , l_mtli_csr.program_update_date
12096 , l_mtli_csr.request_id
12097 , l_mtli_csr.primary_quantity
12098 , l_mtli_csr.transaction_quantity
12099 , l_mtli_csr.serial_transaction_temp_id
12100 , l_mtli_csr.lot_attribute_category
12101 , l_mtli_csr.c_attribute1
12102 , l_mtli_csr.c_attribute2
12103 , l_mtli_csr.c_attribute3
12104 , l_mtli_csr.c_attribute4
12105 , l_mtli_csr.c_attribute5
12106 , l_mtli_csr.c_attribute6
12107 , l_mtli_csr.c_attribute7
12108 , l_mtli_csr.c_attribute8
12109 , l_mtli_csr.c_attribute9
12110 , l_mtli_csr.c_attribute10
12111 , l_mtli_csr.c_attribute11
12112 , l_mtli_csr.c_attribute12
12113 , l_mtli_csr.c_attribute13
12114 , l_mtli_csr.c_attribute14
12115 , l_mtli_csr.c_attribute15
12116 , l_mtli_csr.c_attribute16
12117 , l_mtli_csr.c_attribute17
12118 , l_mtli_csr.c_attribute18
12119 , l_mtli_csr.c_attribute19
12120 , l_mtli_csr.c_attribute20
12121 , l_mtli_csr.d_attribute1
12122 , l_mtli_csr.d_attribute2
12123 , l_mtli_csr.d_attribute3
12124 , l_mtli_csr.d_attribute4
12125 , l_mtli_csr.d_attribute5
12126 , l_mtli_csr.d_attribute6
12127 , l_mtli_csr.d_attribute7
12128 , l_mtli_csr.d_attribute8
12129 , l_mtli_csr.d_attribute9
12130 , l_mtli_csr.d_attribute10
12131 , l_mtli_csr.n_attribute1
12132 , l_mtli_csr.n_attribute2
12133 , l_mtli_csr.n_attribute3
12134 , l_mtli_csr.n_attribute4
12135 , l_mtli_csr.n_attribute5
12136 , l_mtli_csr.n_attribute6
12137 , l_mtli_csr.n_attribute7
12138 , l_mtli_csr.n_attribute8
12139 , l_mtli_csr.n_attribute9
12140 , l_mtli_csr.n_attribute10
12141 , l_mtli_csr.attribute1
12142 , l_mtli_csr.attribute2
12143 , l_mtli_csr.attribute3
12144 , l_mtli_csr.attribute4
12145 , l_mtli_csr.attribute5
12146 , l_mtli_csr.attribute6
12147 , l_mtli_csr.attribute7
12148 , l_mtli_csr.attribute8
12149 , l_mtli_csr.attribute9
12150 , l_mtli_csr.attribute10
12151 , l_mtli_csr.attribute11
12152 , l_mtli_csr.attribute12
12153 , l_mtli_csr.attribute13
12154 , l_mtli_csr.attribute14
12155 , l_mtli_csr.attribute15
12156 , l_mtli_csr.attribute_category
12157 , l_mtli_csr.p_header_id
12158 , l_mtli_csr.description
12159 , l_mtli_csr.vendor_name
12160 , l_mtli_csr.supplier_lot_number
12161 , l_mtli_csr.origination_date
12162 , l_mtli_csr.date_code
12163 , l_mtli_csr.grade_code
12164 , l_mtli_csr.change_date
12165 , l_mtli_csr.maturity_date
12166 , l_mtli_csr.status_id
12167 , l_mtli_csr.retest_date
12168 , l_mtli_csr.age
12169 , l_mtli_csr.item_size
12170 , l_mtli_csr.color
12171 , l_mtli_csr.volume
12172 , l_mtli_csr.volume_uom
12173 , l_mtli_csr.place_of_origin
12174 , l_mtli_csr.best_by_date
12175 , l_mtli_csr.LENGTH
12176 , l_mtli_csr.length_uom
12177 , l_mtli_csr.recycled_content
12178 , l_mtli_csr.thickness
12179 , l_mtli_csr.thickness_uom
12180 , l_mtli_csr.width
12181 , l_mtli_csr.width_uom
12182 , l_mtli_csr.curl_wrinkle_fold
12183 , l_mtli_csr.vendor_id
12184 , l_mtli_csr.territory_code
12185 , l_mtli_csr.parent_lot_number
12186 , l_mtli_csr.origination_type
12187 , l_mtli_csr.expiration_action_date
12188 , l_mtli_csr.expiration_action_code
12189 , l_mtli_csr.hold_date
12190 , l_mtli_csr.reason_id
12191 , l_mtli_csr.secondary_transaction_quantity
12192 --R12 Genealogy enhancements
12193 , l_mtli_csr.parent_object_type
12194 , l_mtli_csr.parent_object_id
12195 , l_mtli_csr.parent_object_number
12196 , l_mtli_csr.parent_item_id
12197 , l_mtli_csr.parent_object_type2
12198 , l_mtli_csr.parent_object_id2
12199 , l_mtli_csr.parent_object_number2
12200 --R12 Genealogy enhancements
12201 );
12202
12203 IF (l_debug = 1)
12204 THEN
12205 mydebug ('breadcrumb 60', 'tmpinsert2');
12206 END IF;
12207
12208 /* Need to insert the MSNTs if the item is serial controlled as well */
12209 BEGIN
12210 IF (l_debug = 1)
12211 THEN
12212 mydebug ('Determine the serial control code', 'tmpinsert2');
12213 END IF;
12214
12215 SELECT serial_number_control_code
12216 INTO l_serial_code
12217 FROM mtl_system_items
12218 WHERE inventory_item_id = l_mti_csr.inventory_item_id
12219 AND organization_id = l_mti_csr.organization_id;
12220 EXCEPTION
12221 WHEN OTHERS
12222 THEN
12223 IF (l_debug = 1)
12224 THEN
12225 mydebug
12226 ('Cannot fetch the serial control code for the item'
12227 , 'tmpinsert2'
12228 );
12229 END IF;
12230
12231 x_validation_status := 'N';
12232 RAISE fnd_api.g_exc_unexpected_error;
12233 END;
12234
12235 IF (l_debug = 1)
12236 THEN
12237 mydebug ('breadcrumb 70', 'tmpinsert2');
12238 mydebug ('Serial control code is ' || l_serial_code
12239 , 'tmpinsert2'
12240 );
12241 END IF;
12242
12243 IF (l_serial_code IN (2, 5))
12244 THEN
12245 IF ( l_mti_csr.transaction_action_id =
12246 inv_globals.g_action_inv_lot_split
12247 OR l_mti_csr.transaction_action_id =
12248 inv_globals.g_action_inv_lot_merge
12249 )
12250 THEN
12251 BEGIN
12252 IF (l_debug = 1)
12253 THEN
12254 mydebug ('breadcrumb 80', 'tmpinsert2');
12255 mydebug ('Lot Split/merge transaction', 'tmpinsert2');
12256 mydebug ('l_mti_csr.transaction_action_id => ' || l_mti_csr.transaction_action_id
12257 , 'tmpinsert2'
12258 );
12259 mydebug ( 'l_mtli_csr.serial_transaction_temp_id => '|| l_mtli_csr.serial_transaction_temp_id
12260 , 'tmpinsert2'
12261 );
12262 END IF;
12263
12264
12265 FOR l_ser_csr IN msni_csr (l_mtli_csr.serial_transaction_temp_id)
12266 LOOP
12267 l_next_serial := l_ser_csr.fm_serial_number;
12268 l_serial_diff :=
12269 inv_serial_number_pub.get_serial_diff
12270 (l_ser_csr.fm_serial_number
12271 , l_ser_csr.to_serial_number
12272 );
12273
12274 IF (l_debug = 1)
12275 THEN
12276 mydebug ('breadcrumb 90', 'tmpinsert2');
12277 mydebug ('l_next_serial => ' || l_next_serial
12278 , 'tmpinsert2'
12279 );
12280 mydebug ('l_serial_diff => ' || l_serial_diff
12281 , 'tmpinsert2'
12282 );
12283 END IF;
12284
12285 IF (l_serial_diff = -1)
12286 THEN
12287 fnd_message.set_name ('INV', 'INV_INVALID_SERIAL_RANGE');
12288 fnd_msg_pub.ADD;
12289 l_validation_status := 'N';
12290 RAISE fnd_api.g_exc_error;
12291 END IF;
12292
12293 /***********************************************************************
12294 * Each MSNI can have a range of serials. Need to expand them and *
12295 * process each one individually. *
12296 ***********************************************************************/
12297
12298
12299 l_next_serial := l_ser_csr.fm_serial_number;
12300 FOR i IN 1 .. l_serial_diff
12301 LOOP
12302 IF (l_debug = 1)
12303 THEN
12304 mydebug ('breadcrumb 100', 'tmpinsert2');
12305 END IF;
12306 l_old_serial := l_next_serial;
12307
12308
12309 IF (l_debug = 1)
12310 THEN
12311 mydebug ('processing serial => ' || l_next_serial
12312 , 'tmpinsert2'
12313 );
12314 mydebug ('breadcrumb 110', 'tmpinsert2');
12315 END IF;
12316
12317 /************************************************************************************
12318 * Need to see wether the attributes are present in the MSNI. If yes copy from there*
12319 * ..if not copy from MSN...then call validate_serial_attributes.... *
12320 * Will validate only the resulting MSNTs while for the source MSNTs we will *
12321 * just copy the serial attributes from the MSNI to MSNT. *
12322 ************************************************************************************/
12323 IF ( ( l_mtli_csr.transaction_interface_id <>
12324 l_mti_csr.parent_id
12325 AND l_mti_csr.transaction_action_id =
12326 inv_globals.g_action_inv_lot_split
12327 )
12328 OR ( l_mtli_csr.transaction_interface_id =
12329 l_mti_csr.parent_id
12330 AND l_mti_csr.transaction_action_id =
12331 inv_globals.g_action_inv_lot_merge
12332 )
12333 )
12334 THEN
12335 BEGIN
12336 IF (l_debug = 1)
12337 THEN
12338 mydebug ('breadcrumb 120', 'tmpinsert2');
12339 mydebug
12340 ('Processing the child record attrs for split/merge'
12341 , 'tmpinsert2'
12342 );
12343 mydebug ('Calling get_serial_attr_record'
12344 , 'tmpinsert2'
12345 );
12346 END IF;
12347
12348 get_serial_attr_record
12349 (x_lot_ser_attr_tbl => l_ser_attr_tbl
12350 , p_transaction_interface_id => l_ser_csr.transaction_interface_id
12351 , p_serial_number => l_next_serial
12352 , p_item_id => l_mti_csr.inventory_item_id
12353 , p_org_id => l_mti_csr.organization_id
12354 , p_fm_serial_number => l_ser_csr.fm_serial_number
12355 , p_to_serial_number => l_ser_csr.to_serial_number
12356 , p_organization_id => l_mti_csr.organization_id
12357 , p_inventory_item_id => l_mti_csr.inventory_item_id
12358 );
12359 IF(l_debug = 1) THEN
12360 mydebug ('Done with get_serial_attr_record'
12361 , 'tmpinsert2'
12362 );
12363 mydebug ('l_ser_attr_tbl.count => ' || l_ser_attr_tbl.COUNT
12364 , 'tmpinsert2'
12365 );
12366 END IF;
12367
12368
12369 EXCEPTION
12370 WHEN OTHERS
12371 THEN
12372 IF (l_debug = 1)
12373 THEN
12374 mydebug
12375 ('Exception while calling get_Serial_attr_record'
12376 , 'tmpinsert2'
12377 );
12378 END IF;
12379
12380 fnd_message.set_name ('WMS', 'WMS_GET_LOT_ATTR_ERROR');
12381 fnd_msg_pub.ADD;
12382 l_validation_status := 'N';
12383 RAISE fnd_api.g_exc_unexpected_error;
12384 END;
12385
12386 BEGIN
12387 IF (l_debug = 1)
12388 THEN
12389 mydebug ('breadcrumb 130', 'tmpinsert2');
12390 mydebug ('Calling validate_serial_attributes'
12391 , 'tmpinsert2'
12392 );
12393 END IF;
12394
12395 inv_lot_trx_validation_pub.validate_serial_attributes
12396 (x_return_status => x_return_status
12397 , x_msg_count => x_msg_count
12398 , x_msg_data => x_msg_data
12399 , x_validation_status => x_validation_status
12400 , x_ser_attr_tbl => l_validated_ser_attr_tbl
12401 , p_ser_number => l_next_serial
12402 , p_organization_id => l_mti_csr.organization_id
12403 , p_inventory_item_id => l_mti_csr.inventory_item_id
12404 , p_result_ser_attr_tbl => l_ser_attr_tbl
12405 );
12406 EXCEPTION
12407 WHEN OTHERS
12408 THEN
12409 IF (l_debug = 1)
12410 THEN
12411 mydebug
12412 ('validate_serial_attributes rasied exception'
12413 , 'tmpinsert2'
12414 );
12415 END IF;
12416
12417 fnd_message.set_name ('WMS'
12418 , 'WMS_VALIDATE_ATTR_ERROR');
12419 fnd_msg_pub.ADD;
12420 l_validation_status := 'N';
12421 RAISE fnd_api.g_exc_unexpected_error;
12422 END;
12423
12424 IF ( x_return_status <> fnd_api.g_ret_sts_success
12425 OR x_validation_status <> 'Y'
12426 )
12427 THEN
12428 IF (l_debug = 1)
12429 THEN
12430 mydebug
12431 ('validate_serial_attributes returned with error'
12432 , 'tmpinsert2'
12433 );
12434 END IF;
12435 l_validation_status := 'N';
12436 RAISE fnd_api.g_exc_error;
12437 END IF;
12438
12439 IF (l_debug = 1)
12440 THEN
12441 mydebug ('breadcrumb 140', 'tmpinsert2');
12442 mydebug ('l_validated_ser_attr_tbl.COUNT => ' || l_validated_ser_attr_tbl.COUNT, 'tmpinsert2');
12443 END IF;
12444
12445 FOR j IN 1 .. l_validated_ser_attr_tbl.COUNT
12446 LOOP
12447 l_indexed_ser_attr_tbl
12448 (l_validated_ser_attr_tbl (j).column_name
12449 ).column_value :=
12450 l_validated_ser_attr_tbl (j).column_value;
12451 --mydebug (l_validated_ser_attr_tbl (j).column_name || ' => ' || l_validated_ser_attr_tbl (j).column_value, 'tmpinsert2');
12452 END LOOP;
12453
12454 IF (l_debug = 1)
12455 THEN
12456 mydebug ('Inserting into MSNT', 'tmpinsert2');
12457 END IF;
12458
12459 INSERT INTO mtl_serial_numbers_temp
12460 (transaction_temp_id
12461 , last_update_date
12462 , last_updated_by
12463 , creation_date
12464 , created_by
12465 , last_update_login
12466 , request_id
12467 , program_application_id
12468 , program_id
12469 , program_update_date
12470 , vendor_serial_number
12471 , vendor_lot_number
12472 , fm_serial_number
12473 , to_serial_number
12474 , parent_serial_number
12475 , dff_updated_flag
12476 , serial_attribute_category
12477 , c_attribute1
12478 , c_attribute2
12479 , c_attribute3
12480 , c_attribute4
12481 , c_attribute5
12482 , c_attribute6
12483 , c_attribute7
12484 , c_attribute8
12485 , c_attribute9
12486 , c_attribute10
12487 , c_attribute11
12488 , c_attribute12
12489 , c_attribute13
12490 , c_attribute14
12491 , c_attribute15
12492 , c_attribute16
12493 , c_attribute17
12494 , c_attribute18
12495 , c_attribute19
12496 , c_attribute20
12497 , d_attribute1
12498 , d_attribute2
12499 , d_attribute3
12500 , d_attribute4
12501 , d_attribute5
12502 , d_attribute6
12503 , d_attribute7
12504 , d_attribute8
12505 , d_attribute9
12506 , d_attribute10
12507 , n_attribute1
12508 , n_attribute2
12509 , n_attribute3
12510 , n_attribute4
12511 , n_attribute5
12512 , n_attribute6
12513 , n_attribute7
12514 , n_attribute8
12515 , n_attribute9
12516 , n_attribute10
12517 , group_header_id
12518 , attribute_category
12519 , attribute1
12520 , attribute2
12521 , attribute3
12522 , attribute4
12523 , attribute5
12524 , attribute6
12525 , attribute7
12526 , attribute8
12527 , attribute9
12528 , attribute10
12529 , attribute11
12530 , attribute12
12531 , attribute13
12532 , attribute14
12533 , attribute15
12534 , status_id
12535 , territory_code
12536 , time_since_new
12537 , cycles_since_new
12538 , time_since_overhaul
12539 , cycles_since_overhaul
12540 , time_since_repair
12541 , cycles_since_repair
12542 , time_since_visit
12543 , cycles_since_visit
12544 , time_since_mark
12545 , cycles_since_mark
12546 , number_of_repairs
12547 )
12548 VALUES (l_ser_csr.transaction_interface_id
12549 , l_sysdate
12550 , l_ser_csr.last_updated_by
12551 , l_sysdate
12552 , l_ser_csr.created_by
12553 , l_ser_csr.last_update_login
12554 , l_ser_csr.request_id
12555 , l_ser_csr.program_application_id
12556 , l_ser_csr.program_id
12557 , l_ser_csr.program_update_date
12558 , l_ser_csr.vendor_serial_number
12559 , l_ser_csr.vendor_lot_number
12560 , l_next_serial
12561 , l_next_serial
12562 , l_ser_csr.parent_serial_number
12563 , 'Y'
12564 , l_indexed_ser_attr_tbl('SERIAL_ATTRIBUTE_CATEGORY').column_value
12565 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE1').column_value
12566 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE2').column_value
12567 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE3').column_value
12568 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE4').column_value
12569 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE5').column_value
12570 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE6').column_value
12571 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE7').column_value
12572 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE8').column_value
12573 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE9').column_value
12574 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE10').column_value
12575 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE11').column_value
12576 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE12').column_value
12577 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE13').column_value
12578 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE14').column_value
12579 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE15').column_value
12580 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE16').column_value
12581 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE17').column_value
12582 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE18').column_value
12583 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE19').column_value
12584 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE20').column_value
12585 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE1').column_value
12586 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE2').column_value
12587 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE3').column_value
12588 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE4').column_value
12589 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE5').column_value
12590 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE6').column_value
12591 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE7').column_value
12592 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE8').column_value
12593 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE9').column_value
12594 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE10').column_value
12595 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE1').column_value
12596 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE2').column_value
12597 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE3').column_value
12598 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE4').column_value
12599 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE5').column_value
12600 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE6').column_value
12601 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE7').column_value
12602 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE8').column_value
12603 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE9').column_value
12604 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE10').column_value
12605 , p_header_id -- Added for J
12606 , l_indexed_ser_attr_tbl ('ATTRIBUTE_CATEGORY').column_value
12607 , l_indexed_ser_attr_tbl ('ATTRIBUTE1').column_value
12608 , l_indexed_ser_attr_tbl ('ATTRIBUTE2').column_value
12609 , l_indexed_ser_attr_tbl ('ATTRIBUTE3').column_value
12610 , l_indexed_ser_attr_tbl ('ATTRIBUTE4').column_value
12611 , l_indexed_ser_attr_tbl ('ATTRIBUTE5').column_value
12612 , l_indexed_ser_attr_tbl ('ATTRIBUTE6').column_value
12613 , l_indexed_ser_attr_tbl ('ATTRIBUTE7').column_value
12614 , l_indexed_ser_attr_tbl ('ATTRIBUTE8').column_value
12615 , l_indexed_ser_attr_tbl ('ATTRIBUTE9').column_value
12616 , l_indexed_ser_attr_tbl ('ATTRIBUTE10').column_value
12617 , l_indexed_ser_attr_tbl ('ATTRIBUTE11').column_value
12618 , l_indexed_ser_attr_tbl ('ATTRIBUTE12').column_value
12619 , l_indexed_ser_attr_tbl ('ATTRIBUTE13').column_value
12620 , l_indexed_ser_attr_tbl ('ATTRIBUTE14').column_value
12621 , l_indexed_ser_attr_tbl ('ATTRIBUTE15').column_value
12622 , l_ser_csr.status_id
12623 , l_indexed_ser_attr_tbl ('TERRITORY_CODE').column_value
12624 , l_indexed_ser_attr_tbl ('TIME_SINCE_NEW').column_value
12625 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_NEW').column_value
12626 , l_indexed_ser_attr_tbl ('TIME_SINCE_OVERHAUL').column_value
12627 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_OVERHAUL').column_value
12628 , l_indexed_ser_attr_tbl ('TIME_SINCE_REPAIR').column_value
12629 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_REPAIR').column_value
12630 , l_indexed_ser_attr_tbl ('TIME_SINCE_VISIT').column_value
12631 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_VISIT').column_value
12632 , l_indexed_ser_attr_tbl ('TIME_SINCE_MARK').column_value
12633 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_MARK').column_value
12634 , l_indexed_ser_attr_tbl ('NUMBER_OF_REPAIRS').column_value
12635 );
12636
12637 IF (l_debug = 1)
12638 THEN
12639 mydebug ('breadcrumb 150', 'tmpinsert2');
12640 END IF;
12641 ELSE
12642 /*These are the source MSNTs ...no need to validate the source MSNT attrs*/
12643 IF (l_debug = 1)
12644 THEN
12645 mydebug ('breadcrumb 160', 'tmpinsert2');
12646 mydebug
12647 ('Inserting MSNTs for the source for split/merge'
12648 , 'tmpinsert2'
12649 );
12650 END IF;
12651
12652 INSERT INTO mtl_serial_numbers_temp
12653 (transaction_temp_id
12654 , last_update_date
12655 , last_updated_by
12656 , creation_date
12657 , created_by
12658 , last_update_login
12659 , request_id
12660 , program_application_id
12661 , program_id
12662 , program_update_date
12663 , vendor_serial_number
12664 , vendor_lot_number
12665 , fm_serial_number
12666 , to_serial_number
12667 , parent_serial_number
12668 , dff_updated_flag
12669 , serial_attribute_category
12670 , c_attribute1
12671 , c_attribute2
12672 , c_attribute3
12673 , c_attribute4
12674 , c_attribute5
12675 , c_attribute6
12676 , c_attribute7
12677 , c_attribute8
12678 , c_attribute9
12679 , c_attribute10
12680 , c_attribute11
12681 , c_attribute12
12682 , c_attribute13
12683 , c_attribute14
12684 , c_attribute15
12685 , c_attribute16
12686 , c_attribute17
12687 , c_attribute18
12688 , c_attribute19
12689 , c_attribute20
12690 , d_attribute1
12691 , d_attribute2
12692 , d_attribute3
12693 , d_attribute4
12694 , d_attribute5
12695 , d_attribute6
12696 , d_attribute7
12697 , d_attribute8
12698 , d_attribute9
12699 , d_attribute10
12700 , n_attribute1
12701 , n_attribute2
12702 , n_attribute3
12703 , n_attribute4
12704 , n_attribute5
12705 , n_attribute6
12706 , n_attribute7
12707 , n_attribute8
12708 , n_attribute9
12709 , n_attribute10
12710 , group_header_id
12711 , attribute_category
12712 , attribute1
12713 , attribute2
12714 , attribute3
12715 , attribute4
12716 , attribute5
12717 , attribute6
12718 , attribute7
12719 , attribute8
12720 , attribute9
12721 , attribute10
12722 , attribute11
12723 , attribute12
12724 , attribute13
12725 , attribute14
12726 , attribute15
12727 , status_id
12728 , territory_code
12729 , time_since_new
12730 , cycles_since_new
12731 , time_since_overhaul
12732 , cycles_since_overhaul
12733 , time_since_repair
12734 , cycles_since_repair
12735 , time_since_visit
12736 , cycles_since_visit
12737 , time_since_mark
12738 , cycles_since_mark
12739 , number_of_repairs
12740 )
12741 VALUES (l_ser_csr.transaction_interface_id
12742 , l_sysdate
12743 , l_user_id
12744 , l_sysdate
12745 , l_user_id
12746 , l_login_id
12747 , l_ser_csr.request_id
12748 , l_ser_csr.program_application_id
12749 , l_ser_csr.program_id
12750 , l_ser_csr.program_update_date
12751 , l_ser_csr.vendor_serial_number
12752 , l_ser_csr.vendor_lot_number
12753 , l_next_serial
12754 , l_next_serial
12755 , l_ser_csr.parent_serial_number
12756 , 'Y'
12757 , l_ser_csr.serial_attribute_category
12758 , l_ser_csr.c_attribute1
12759 , l_ser_csr.c_attribute2
12760 , l_ser_csr.c_attribute3
12761 , l_ser_csr.c_attribute4
12762 , l_ser_csr.c_attribute5
12763 , l_ser_csr.c_attribute6
12764 , l_ser_csr.c_attribute7
12765 , l_ser_csr.c_attribute8
12766 , l_ser_csr.c_attribute9
12767 , l_ser_csr.c_attribute10
12768 , l_ser_csr.c_attribute11
12769 , l_ser_csr.c_attribute12
12770 , l_ser_csr.c_attribute13
12771 , l_ser_csr.c_attribute14
12772 , l_ser_csr.c_attribute15
12773 , l_ser_csr.c_attribute16
12774 , l_ser_csr.c_attribute17
12775 , l_ser_csr.c_attribute18
12776 , l_ser_csr.c_attribute19
12777 , l_ser_csr.c_attribute20
12778 , l_ser_csr.d_attribute1
12779 , l_ser_csr.d_attribute2
12780 , l_ser_csr.d_attribute3
12781 , l_ser_csr.d_attribute4
12782 , l_ser_csr.d_attribute5
12783 , l_ser_csr.d_attribute6
12784 , l_ser_csr.d_attribute7
12785 , l_ser_csr.d_attribute8
12786 , l_ser_csr.d_attribute9
12787 , l_ser_csr.d_attribute10
12788 , l_ser_csr.n_attribute1
12789 , l_ser_csr.n_attribute2
12790 , l_ser_csr.n_attribute3
12791 , l_ser_csr.n_attribute4
12792 , l_ser_csr.n_attribute5
12793 , l_ser_csr.n_attribute6
12794 , l_ser_csr.n_attribute7
12795 , l_ser_csr.n_attribute8
12796 , l_ser_csr.n_attribute9
12797 , l_ser_csr.n_attribute10
12798 , p_header_id
12799 , l_ser_csr.attribute_category
12800 , l_ser_csr.attribute1
12801 , l_ser_csr.attribute2
12802 , l_ser_csr.attribute3
12803 , l_ser_csr.attribute4
12804 , l_ser_csr.attribute5
12805 , l_ser_csr.attribute6
12806 , l_ser_csr.attribute7
12807 , l_ser_csr.attribute8
12808 , l_ser_csr.attribute9
12809 , l_ser_csr.attribute10
12810 , l_ser_csr.attribute11
12811 , l_ser_csr.attribute12
12812 , l_ser_csr.attribute13
12813 , l_ser_csr.attribute14
12814 , l_ser_csr.attribute15
12815 , l_ser_csr.status_id
12816 , l_ser_csr.territory_code
12817 , l_ser_csr.time_since_new
12818 , l_ser_csr.cycles_since_new
12819 , l_ser_csr.time_since_overhaul
12820 , l_ser_csr.cycles_since_overhaul
12821 , l_ser_csr.time_since_repair
12822 , l_ser_csr.cycles_since_repair
12823 , l_ser_csr.time_since_visit
12824 , l_ser_csr.cycles_since_visit
12825 , l_ser_csr.time_since_mark
12826 , l_ser_csr.cycles_since_mark
12827 , l_ser_csr.number_of_repairs
12828 );
12829 END IF;
12830 l_next_serial :=
12831 inv_serial_number_pub.increment_ser_num
12832 (l_old_serial
12833 , 1
12834 );
12835
12836 IF (l_next_serial = l_old_serial)
12837 THEN
12838 IF (l_debug = 1)
12839 THEN
12840 mydebug ('Error in increment_serial_number '
12841 , 'tmpinsert2'
12842 );
12843 END IF;
12844
12845 fnd_message.set_name ('INV', 'INVALID_SERIAL_NUMBER');
12846 fnd_msg_pub.ADD;
12847 l_validation_status := 'N';
12848 RAISE fnd_api.g_exc_error;
12849 END IF;
12850
12851 END LOOP;
12852 END LOOP;
12853
12854 IF (l_debug = 1)
12855 THEN
12856 mydebug ('breadcrumb 170', 'tmpinsert2');
12857 END IF;
12858 EXCEPTION
12859 WHEN NO_DATA_FOUND
12860 THEN
12861 IF (l_debug = 1)
12862 THEN
12863 mydebug
12864 ('NO_DATA_FOUND while inserting into MSNT for lot /split'
12865 , ''
12866 );
12867 END IF;
12868
12869 l_validation_status := 'N';
12870 RAISE fnd_api.g_exc_unexpected_error;
12871 WHEN OTHERS
12872 THEN
12873 IF (l_debug = 1)
12874 THEN
12875 mydebug
12876 ('exception raised while inserting into MSNT for lot split/merge'
12877 , SQLERRM
12878 );
12879 END IF;
12880 RAISE fnd_api.g_exc_unexpected_error;
12881 END;
12882 ELSE
12883 IF (l_debug = 1)
12884 THEN
12885 mydebug ('This is lot translate transaction', 'tmpinsert2');
12886 mydebug ('breadcrumb 180', 'tmpinsert2');
12887 END IF;
12888
12889 /******************************************************************************
12890 *Lot translate transaction. Users are not expected to populate the MSNIs for *
12891 *Lot Translate txns. We need to generate the MSNTs based on MTLIs and MSN. *
12892 ******************************************************************************/
12893 SELECT mtl_material_transactions_s.NEXTVAL
12894 INTO l_sequence
12895 FROM DUAL;
12896 /******************************************************************************
12897 *If this is the resulting MTIs then we need to query the against the source *
12898 *item, lot and subinventory because after lot translate these may get changed*
12899 *and there wil be no record in the MSN for the new lot etc. *
12900 ******************************************************************************/
12901
12902 /* Bug:5408823. Also fetching lpn_id column from MTI. */
12903 IF(l_mti_csr.transaction_interface_id <> l_mti_csr.parent_id) THEN
12904 SELECT mti.inventory_item_id
12905 , mtli.lot_number
12906 , mti.subinventory_code
12907 , mti.locator_id
12908 , mti.lpn_id
12909 INTO l_old_item_id
12910 ,l_old_lot_num
12911 ,l_old_sub_code
12912 ,l_old_locator_id
12913 ,l_old_lpn_id
12914 FROM mtl_transactions_interface mti
12915 ,mtl_transaction_lots_interface mtli
12916 WHERE mti.transaction_interface_id = mtli.transaction_interface_id
12917 AND mti.transaction_interface_id = mti.parent_id
12918 AND mti.transaction_interface_id = l_mti_csr.parent_id;
12919 IF(l_old_item_id <> l_mti_csr.inventory_item_id) THEN
12920 --Check if the source and destination Items have the attribute context.
12921 IF(l_debug = 1) THEN
12922 mydebug('In Lot translate : dest Records : checking DFF context', 'tmpinsert2');
12923 END IF;
12924 inv_lot_sel_attr.get_context_code(
12925 context_value => l_context_value_src
12926 ,org_id => l_mti_csr.organization_id
12927 ,item_id => l_old_item_id
12928 ,flex_name => 'Serial Attributes'
12929 ,p_lot_serial_number => null);
12930
12931 IF(l_debug = 1) THEN
12932 mydebug('l_context_value_src => '|| l_context_value_src, 'tmpinsert2');
12933 END IF;
12934
12935 inv_lot_sel_attr.get_context_code(
12936 context_value => l_context_value_dst
12937 ,org_id => l_mti_csr.organization_id
12938 ,item_id => l_mti_csr.inventory_item_id
12939 ,flex_name => 'Serial Attributes'
12940 ,p_lot_serial_number => null);
12941
12942 IF(l_debug = 1) THEN
12943 mydebug('l_context_value_dst => '|| l_context_value_dst, 'tmpinsert2');
12944 END IF;
12945
12946 IF( NOT(
12947 (l_context_value_src IS NULL AND l_context_value_dst IS NULL) OR
12948 (l_context_value_src = l_context_value_dst)
12949 )
12950 ) THEN
12951 IF(l_debug = 1) THEN
12952 mydebug('breadcrumb 185', 'tmpinsert2');
12953 mydebug('Lot translate : Items have different Serial Attr Context', 'tmpinsert2');
12954 END IF;
12955 fnd_message.set_name ('INV', 'INV_SERIAL_CONTEXT_DIFF');
12956 fnd_msg_pub.ADD;
12957 RAISE fnd_api.g_exc_error;
12958 l_validation_status := 'N';
12959 END IF;
12960 END IF;
12961 ELSE /*Source MTIs*/
12962 l_old_item_id := l_mti_csr.inventory_item_id;
12963 l_old_lot_num := l_mtli_csr.lot_number;
12964 l_old_sub_code := l_mti_csr.subinventory_code;
12965 l_old_locator_id := l_mti_csr.locator_id;
12966 l_old_lpn_id := l_mti_csr.lpn_id; --Bug 5408823
12967 END IF;
12968
12969 /*Bug:5408823. Added new parameter l_old_lpn_id to pass lpn_id. */
12970 FOR l_ser_csr IN msn_csr (l_old_lot_num
12971 , l_old_item_id
12972 , l_old_sub_code
12973 , l_old_locator_id
12974 , l_mti_csr.organization_id
12975 , l_old_lpn_id
12976 )
12977 LOOP
12978 IF (l_debug = 1)
12979 THEN
12980 mydebug ('breadcrumb 190', 'tmpinsert2');
12981 mydebug ('In loop Inserting MSNT for serial => ' || l_ser_csr.serial_number
12982 , 'tmpinsert2'
12983 );
12984 END IF;
12985
12986 INSERT INTO mtl_serial_numbers_temp
12987 (transaction_temp_id
12988 , last_update_date
12989 , last_updated_by
12990 , creation_date
12991 , created_by
12992 , last_update_login
12993 , request_id
12994 , program_application_id
12995 , program_id
12996 , program_update_date
12997 , vendor_serial_number
12998 , vendor_lot_number
12999 , fm_serial_number
13000 , to_serial_number
13001 , parent_serial_number
13002 , serial_attribute_category
13003 , c_attribute1
13004 , c_attribute2
13005 , c_attribute3
13006 , c_attribute4
13007 , c_attribute5
13008 , c_attribute6
13009 , c_attribute7
13010 , c_attribute8
13011 , c_attribute9
13012 , c_attribute10
13013 , c_attribute11
13014 , c_attribute12
13015 , c_attribute13
13016 , c_attribute14
13017 , c_attribute15
13018 , c_attribute16
13019 , c_attribute17
13020 , c_attribute18
13021 , c_attribute19
13022 , c_attribute20
13023 , d_attribute1
13024 , d_attribute2
13025 , d_attribute3
13026 , d_attribute4
13027 , d_attribute5
13028 , d_attribute6
13029 , d_attribute7
13030 , d_attribute8
13031 , d_attribute9
13032 , d_attribute10
13033 , n_attribute1
13034 , n_attribute2
13035 , n_attribute3
13036 , n_attribute4
13037 , n_attribute5
13038 , n_attribute6
13039 , n_attribute7
13040 , n_attribute8
13041 , n_attribute9
13042 , n_attribute10
13043 , group_header_id
13044 , attribute_category
13045 , attribute1
13046 , attribute2
13047 , attribute3
13048 , attribute4
13049 , attribute5
13050 , attribute6
13051 , attribute7
13052 , attribute8
13053 , attribute9
13054 , attribute10
13055 , attribute11
13056 , attribute12
13057 , attribute13
13058 , attribute14
13059 , attribute15
13060 , status_id
13061 , territory_code
13062 , time_since_new
13063 , cycles_since_new
13064 , time_since_overhaul
13065 , cycles_since_overhaul
13066 , time_since_repair
13067 , cycles_since_repair
13068 , time_since_visit
13069 , cycles_since_visit
13070 , time_since_mark
13071 , cycles_since_mark
13072 , number_of_repairs
13073 )
13074 VALUES (l_sequence
13075 , l_sysdate
13076 , l_user_id
13077 , l_sysdate
13078 , l_user_id
13079 , l_login_id
13080 , l_ser_csr.request_id
13081 , l_ser_csr.program_application_id
13082 , l_ser_csr.program_id
13083 , l_ser_csr.program_update_date
13084 , l_ser_csr.vendor_serial_number
13085 , l_ser_csr.vendor_lot_number
13086 , l_ser_csr.serial_number
13087 , l_ser_csr.serial_number
13088 , l_ser_csr.parent_serial_number
13089 , l_ser_csr.serial_attribute_category
13090 , l_ser_csr.c_attribute1
13091 , l_ser_csr.c_attribute2
13092 , l_ser_csr.c_attribute3
13093 , l_ser_csr.c_attribute4
13094 , l_ser_csr.c_attribute5
13095 , l_ser_csr.c_attribute6
13096 , l_ser_csr.c_attribute7
13097 , l_ser_csr.c_attribute8
13098 , l_ser_csr.c_attribute9
13099 , l_ser_csr.c_attribute10
13100 , l_ser_csr.c_attribute11
13101 , l_ser_csr.c_attribute12
13102 , l_ser_csr.c_attribute13
13103 , l_ser_csr.c_attribute14
13104 , l_ser_csr.c_attribute15
13105 , l_ser_csr.c_attribute16
13106 , l_ser_csr.c_attribute17
13107 , l_ser_csr.c_attribute18
13108 , l_ser_csr.c_attribute19
13109 , l_ser_csr.c_attribute20
13110 , l_ser_csr.d_attribute1
13111 , l_ser_csr.d_attribute2
13112 , l_ser_csr.d_attribute3
13113 , l_ser_csr.d_attribute4
13114 , l_ser_csr.d_attribute5
13115 , l_ser_csr.d_attribute6
13116 , l_ser_csr.d_attribute7
13117 , l_ser_csr.d_attribute8
13118 , l_ser_csr.d_attribute9
13119 , l_ser_csr.d_attribute10
13120 , l_ser_csr.n_attribute1
13121 , l_ser_csr.n_attribute2
13122 , l_ser_csr.n_attribute3
13123 , l_ser_csr.n_attribute4
13124 , l_ser_csr.n_attribute5
13125 , l_ser_csr.n_attribute6
13126 , l_ser_csr.n_attribute7
13127 , l_ser_csr.n_attribute8
13128 , l_ser_csr.n_attribute9
13129 , l_ser_csr.n_attribute10
13130 , p_header_id
13131 , l_ser_csr.attribute_category
13132 , l_ser_csr.attribute1
13133 , l_ser_csr.attribute2
13134 , l_ser_csr.attribute3
13135 , l_ser_csr.attribute4
13136 , l_ser_csr.attribute5
13137 , l_ser_csr.attribute6
13138 , l_ser_csr.attribute7
13139 , l_ser_csr.attribute8
13140 , l_ser_csr.attribute9
13141 , l_ser_csr.attribute10
13142 , l_ser_csr.attribute11
13143 , l_ser_csr.attribute12
13144 , l_ser_csr.attribute13
13145 , l_ser_csr.attribute14
13146 , l_ser_csr.attribute15
13147 , l_ser_csr.status_id
13148 , l_ser_csr.territory_code
13149 , l_ser_csr.time_since_new
13150 , l_ser_csr.cycles_since_new
13151 , l_ser_csr.time_since_overhaul
13152 , l_ser_csr.cycles_since_overhaul
13153 , l_ser_csr.time_since_repair
13154 , l_ser_csr.cycles_since_repair
13155 , l_ser_csr.time_since_visit
13156 , l_ser_csr.cycles_since_visit
13157 , l_ser_csr.time_since_mark
13158 , l_ser_csr.cycles_since_mark
13159 , l_ser_csr.number_of_repairs
13160 );
13161
13162 IF (l_debug = 1)
13163 THEN
13164 mydebug ('breadcrumb 200', 'tmpinsert2');
13165 END IF;
13166 END LOOP;
13167
13168 /*Need to update the MTLT with the serial_transaction_temp_id generated above */
13169 IF (l_debug = 1)
13170 THEN
13171 mydebug
13172 (' update the MTLT with the serial transaction temp_id '
13173 , 'tmpinsert2'
13174 );
13175 mydebug (' serial_txn_temp_id => ' || l_sequence
13176 , 'tmpinsert2'
13177 );
13178 END IF;
13179
13180 UPDATE mtl_transaction_lots_temp
13181 SET serial_transaction_temp_id = l_sequence
13182 WHERE transaction_temp_id = l_mtli_csr.transaction_interface_id;
13183 END IF; --if transaction lot split/merge
13184
13185 IF (l_debug = 1)
13186 THEN
13187 mydebug ('Abt to populate the genealogy columns '
13188 , 'tmpinsert2'
13189 );
13190 mydebug ('breadcrumb 210', 'tmpinsert2');
13191 END IF;
13192
13193 /*****************************************************************************************
13194 * Following genealogy columns need to be populated :- *
13195 * parent_object_number : parent_serial_number *
13196 * object_number2 : current lot to which the serial number belong to *
13197 * parent_object_number2 : previous lot to which the serial number belonged to*
13198 * Object_type2/parent_object_type2 : The type of object *
13199 * This is how the colums are populated:- *
13200 * For lot split : populate the resulting MSNTs *
13201 * For lot merge : populate the source MSNTs *
13202 * For lot translate : populate the resulting MSNTs *
13203 *****************************************************************************************/
13204 IF (l_mtli_csr.transaction_interface_id <> l_mti_csr.parent_id)
13205 THEN
13206 BEGIN
13207 IF (l_debug = 1)
13208 THEN
13209 mydebug ('breadcrumb 220', 'tmpinsert2');
13210 END IF;
13211
13212 SELECT lot_number
13213 INTO l_parent_object_number2
13214 FROM mtl_transaction_lots_interface
13215 WHERE transaction_interface_id = l_mti_csr.parent_id;
13216
13217 SELECT serial_transaction_temp_id
13218 INTO l_serial_temp_id
13219 FROM mtl_transaction_lots_temp
13220 WHERE transaction_temp_id = l_mtli_csr.transaction_interface_id;
13221
13222 IF (l_debug = 1)
13223 THEN
13224 mydebug ( 'l_parent_object_number2 => '
13225 || l_parent_object_number2
13226 , 'tmpinsert2'
13227 );
13228 mydebug ('l_serial_temp_id => ' || l_serial_temp_id
13229 , 'tmpinsert2'
13230 );
13231 END IF;
13232
13233 IF (( l_mti_csr.transaction_action_id =
13234 inv_globals.g_action_inv_lot_split
13235 OR l_mti_csr.transaction_action_id =
13236 inv_globals.g_action_inv_lot_translate
13237 )
13238 )
13239 THEN
13240 IF (l_debug = 1)
13241 THEN
13242 mydebug ('breadcrumb 230', 'tmpinsert2');
13243 mydebug (' Genealogy columns for lot split/translate '
13244 , 'tmpinsert2'
13245 );
13246 mydebug ( 'parent_object_number2 => '
13247 || l_mtli_csr.lot_number
13248 , 'tmpinsert2'
13249 );
13250 mydebug ('object_number2 => ' || l_parent_object_number2
13251 , 'tmpinsert2'
13252 );
13253 END IF;
13254 /*The behaviour here is taken from LotTrxManager.Bit Strange!*/
13255 UPDATE mtl_serial_numbers_temp
13256 SET parent_object_number2 = l_mtli_csr.lot_number
13257 , parent_object_number = fm_serial_number
13258 , object_number2 = l_parent_object_number2
13259 , object_type2 = 1
13260 , parent_object_type2 = 1
13261 WHERE transaction_temp_id =
13262 NVL (l_mtli_csr.serial_transaction_temp_id --For Lot translate
13263 , l_serial_temp_id
13264 );
13265 ELSIF (l_mti_csr.transaction_action_id =
13266 inv_globals.g_action_inv_lot_merge
13267 )
13268 THEN
13269 IF (l_debug = 1)
13270 THEN
13271 mydebug ('breadcrumb 240', 'tmpinsert2');
13272 mydebug (' Genealogy columns for lot merge '
13273 , 'tmpinsert2'
13274 );
13275 mydebug ( 'parent_object_number2 => '|| l_parent_object_number2
13276 , 'tmpinsert2'
13277 );
13278 mydebug ('object_number2 => '|| l_mtli_csr.lot_number
13279 , 'tmpinsert2'
13280 );
13281 END IF;
13282
13283 UPDATE mtl_serial_numbers_temp
13284 SET parent_object_number2 = l_parent_object_number2
13285 , parent_object_number = fm_serial_number
13286 , object_number2 = l_mtli_csr.lot_number
13287 , object_type2 = 1
13288 , parent_object_type2 = 1
13289 WHERE transaction_temp_id =
13290 l_mtli_csr.serial_transaction_temp_id;
13291 END IF;
13292
13293 IF (l_debug = 1)
13294 THEN
13295 mydebug ('breadcrumb 250', 'tmpinsert2');
13296 END IF;
13297 EXCEPTION
13298 WHEN NO_DATA_FOUND
13299 THEN
13300 IF (l_debug = 1)
13301 THEN
13302 mydebug ('breadcrumb 260', 'tmpinsert2');
13303 mydebug
13304 ('NO_DATA_FOUND while fetching the genealogy columns'
13305 , 'tmpinsert2'
13306 );
13307 END IF;
13308
13309 l_validation_status := 'N';
13310 RAISE fnd_api.g_exc_unexpected_error;
13311 WHEN OTHERS
13312 THEN
13313 IF (l_debug = 1)
13314 THEN
13315 mydebug ('breadcrumb 270', 'tmpinsert2');
13316 mydebug
13317 ('exception while fetching the genealogy columns'
13318 , 'tmpinsert2'
13319 );
13320 END IF;
13321
13322 l_validation_status := 'N';
13323 RAISE fnd_api.g_exc_unexpected_error;
13324 END;
13325 END IF;
13326 END IF; --if serial_controlled
13327 END LOOP;--loop of MTLI
13328 END LOOP; --loop of MTI
13329 EXCEPTION
13330 WHEN OTHERS
13331 THEN
13332 IF (l_debug = 1)
13333 THEN
13334 mydebug ('breadcrumb 280', 'tmpinsert2');
13335 mydebug (' exception happened in tmpinsert2 ' || SQLERRM, 'tmpinsert2');
13336 END IF;
13337
13338 l_validation_status := 'N';
13339 RAISE fnd_api.g_exc_unexpected_error;
13340 END;
13341
13342 /*All records processed successfully*/
13343 IF (l_debug = 1)
13344 THEN
13345 mydebug (' insertions done .. !! ', 'tmpinsert2');
13346 END IF;
13347
13348 x_validation_status := 'Y';
13349 x_return_status := fnd_api.g_ret_sts_success;
13350 EXCEPTION
13351 WHEN fnd_api.g_exc_error
13352 THEN
13353 IF (l_debug = 1)
13354 THEN
13355 mydebug ('breadcrumb 290', 'tmpinsert2');
13356 END IF;
13357
13358 x_validation_status := l_validation_status;
13359 x_return_status := fnd_api.g_ret_sts_error;
13360 fnd_msg_pub.count_and_get (p_count => x_msg_count
13361 , p_data => x_msg_data);
13362 WHEN fnd_api.g_exc_unexpected_error
13363 THEN
13364 x_validation_status := l_validation_status;
13365 x_return_status := fnd_api.g_ret_sts_unexp_error;
13366 fnd_msg_pub.count_and_get (p_count => x_msg_count
13367 , p_data => x_msg_data);
13368 WHEN OTHERS
13369 THEN
13370 x_validation_status := l_validation_status;
13371 x_return_status := fnd_api.g_ret_sts_unexp_error;
13372
13373 IF fnd_msg_pub.check_msg_level (fnd_msg_pub.g_msg_lvl_unexp_error)
13374 THEN
13375 fnd_msg_pub.add_exc_msg (g_pkg_name, 'tmpinert2');
13376 END IF;
13377
13378 fnd_msg_pub.count_and_get (p_count => x_msg_count
13379 , p_data => x_msg_data);
13380 END tmpinsert2;
13381
13382
13383
13384
13385
13386
13387
13388
13389 /******************************************************************
13390 *
13391 * poget()
13392 *
13393 ******************************************************************/
13394 PROCEDURE poget(p_prof IN VARCHAR2, x_ret OUT NOCOPY VARCHAR2)
13395 IS
13396 BEGIN
13397 SELECT FND_PROFILE.value(p_prof)
13398 INTO x_ret
13399 FROM dual;
13400 END poget;
13401
13402
13403
13404
13405
13406
13407
13408 -----------------------------------------------------------------------
13409 -- Name : Validate_Transactions
13410 -- Desc : This procedure is used ot validate record inserted in MYI
13411 --through desktop forms AND moved TO mmtt. it does NOT call the
13412 -- transaction manager TO process the transactions.
13413 -- It is called to validate a batch of transaction_records .
13414 --
13415 -- I/P Params :
13416 -- p_header_id : Transaction Header Id
13417 -- O/P Params :
13418 -- x_trans_count : count of transaction records validate
13419 --History
13420 -- Jalaj Srivastava Bug 5155661
13421 -- Add new parameter p_free_tree
13422 -- Namit Singhi Bug 5286961.
13423 -- Do not call the query_tree for gme yield transactions.
13424 -----------------------------------------------------------------------
13425 FUNCTION Validate_Transactions(
13426 p_api_version IN NUMBER ,
13427 p_init_msg_list IN VARCHAR2 := fnd_api.g_false ,
13428 p_validation_level IN NUMBER := fnd_api.g_valid_level_full ,
13429 p_header_id IN NUMBER,
13430 x_return_status OUT NOCOPY VARCHAR2 ,
13431 x_msg_count OUT NOCOPY NUMBER ,
13432 x_msg_data OUT NOCOPY VARCHAR2 ,
13433 x_trans_count OUT NOCOPY NUMBER ,
13434 p_free_tree IN VARCHAR2 := fnd_api.g_true)
13435
13436 RETURN NUMBER
13437 IS
13438 l_header_id NUMBER;
13439 l_source_header_id NUMBER;
13440 l_totrows NUMBER;
13441 l_initotrows NUMBER;
13442 l_midtotrows NUMBER;
13443 l_userid NUMBER;
13444 l_loginid NUMBER;
13445 l_progid NUMBER;
13446 l_applid NUMBER;
13447 l_reqstid NUMBER;
13448 l_trx_batch_id NUMBER;
13449 batch_error BOOLEAN;
13450 l_last_trx_batch_id NUMBER;
13451 line_vldn_error_flag VARCHAR(1);
13452 l_Line_Rec_Type inv_txn_manager_pub.Line_Rec_Type;
13453
13454 l_tempid NUMBER;
13455 l_item_id NUMBER;
13456 l_org_id NUMBER;
13457 l_locid NUMBER;
13458 l_srctypeid NUMBER;
13459 l_actid NUMBER;
13460 l_srcid NUMBER;
13461 l_xlocid NUMBER;
13462 l_temp_rowid VARCHAR2(21);
13463 l_sub_code VARCHAR2(11);
13464 -- Increased lot size to 80 Char - Mercy Thomas - B4625329
13465 l_lotnum VARCHAR2(80);
13466 l_src_code VARCHAR2(30);
13467 l_xfrsub VARCHAR2(11);
13468 l_rev VARCHAR2(4);
13469 l_srclineid VARCHAR2(40);
13470 l_trxdate DATE;
13471 l_qoh NUMBER;
13472 l_rqoh NUMBER;
13473 l_pqoh NUMBER;
13474 l_qr NUMBER;
13475 l_qs NUMBER;
13476 l_att NUMBER;
13477 l_atr NUMBER;
13478
13479 /* Added the following variables for Bug 3679189 */
13480 l_neg_inv_rcpt number;
13481 l_cnt_res number;
13482 l_item_qoh NUMBER;
13483 l_item_rqoh NUMBER;
13484 l_item_pqoh NUMBER;
13485 l_item_qr NUMBER;
13486 l_item_qs NUMBER;
13487 l_item_att NUMBER;
13488 l_item_atr NUMBER;
13489
13490 /*Added following variables for Bug 4194323 */
13491 l_dem_hdr_id NUMBER ;
13492 l_dem_line_id NUMBER ;
13493
13494
13495 l_rctrl NUMBER;
13496 l_lctrl NUMBER;
13497 l_flow_schedule NUMBER;
13498 l_trx_qty NUMBER;
13499 l_qty NUMBER := 0;
13500 tree_exists BOOLEAN;
13501 l_revision_control BOOLEAN;
13502 l_lot_control BOOLEAN;
13503 l_disp VARCHAR2(3000);
13504 l_msg_count NUMBER;
13505 l_msg_data VARCHAR2(2000);
13506 l_return_status VARCHAR2(1);
13507 l_tree_id NUMBER;
13508 l_override_neg_for_backflush NUMBER := 0;
13509 l_override_rsv_for_backflush NUMBER := 2; --Bug 4764343 Base 4645686.Added for a specific customer.Default value is set to 'NO'(value 2)
13510 l_translate BOOLEAN := TRUE;
13511 /*Bug#5075521. Added the below 3 variables.*/
13512 l_current_batch_failed BOOLEAN := FALSE;
13513 l_current_err_batch_id NUMBER;
13514 l_count_success NUMBER;
13515
13516
13517 CURSOR AA1 IS
13518 SELECT
13519 TRANSACTION_INTERFACE_ID,
13520 TRANSACTION_HEADER_ID,
13521 REQUEST_ID,
13522 INVENTORY_ITEM_ID,
13523 ORGANIZATION_ID,
13524 SUBINVENTORY_CODE,
13525 TRANSFER_ORGANIZATION,
13526 TRANSFER_SUBINVENTORY,
13527 TRANSACTION_UOM,
13528 TRANSACTION_DATE,
13529 TRANSACTION_QUANTITY,
13530 LOCATOR_ID,
13531 TRANSFER_LOCATOR,
13532 TRANSACTION_SOURCE_ID,
13533 TRANSACTION_SOURCE_TYPE_ID,
13534 TRANSACTION_ACTION_ID,
13535 TRANSACTION_TYPE_ID,
13536 DISTRIBUTION_ACCOUNT_ID,
13537 NVL(SHIPPABLE_FLAG,'Y'),
13538 ROWID,
13539 NEW_AVERAGE_COST,
13540 VALUE_CHANGE,
13541 PERCENTAGE_CHANGE,
13542 MATERIAL_ACCOUNT,
13543 MATERIAL_OVERHEAD_ACCOUNT,
13544 RESOURCE_ACCOUNT,
13545 OUTSIDE_PROCESSING_ACCOUNT,
13546 OVERHEAD_ACCOUNT,
13547 REQUISITION_LINE_ID,
13548 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
13549 END_ITEM_UNIT_NUMBER,
13550 SCHEDULED_PAYBACK_DATE, /* Borrow Payback */
13551 REVISION, /* Borrow Payback */
13552 ORG_COST_GROUP_ID, /* PCST */
13553 COST_TYPE_ID, /* PCST */
13554 PRIMARY_QUANTITY,
13555 SOURCE_LINE_ID,
13556 PROCESS_FLAG,
13557 TRANSACTION_SOURCE_NAME,
13558 TRX_SOURCE_DELIVERY_ID,
13559 TRX_SOURCE_LINE_ID,
13560 PARENT_ID,
13561 TRANSACTION_BATCH_ID,
13562 TRANSACTION_BATCH_SEQ,
13563 -- INVCONV start fabdi
13564 SECONDARY_TRANSACTION_QUANTITY,
13565 SECONDARY_UOM_CODE
13566 -- INVCONV end fabdi
13567 ,SHIP_TO_LOCATION_ID -- eIB Build; Bug# 4348541
13568 ,TRANSFER_PRICE -- OPM INVCONV umoogala Process-Discrete Xfers Enh.
13569 ,WIP_ENTITY_TYPE -- Pawan 11th july added for subinventory issue
13570 /*Bug:5392366. Added following two columns. */
13571 ,COMPLETION_TRANSACTION_ID
13572 ,MOVE_TRANSACTION_ID
13573 FROM MTL_TRANSACTIONS_INTERFACE
13574 WHERE TRANSACTION_HEADER_ID = p_header_id
13575 AND PROCESS_FLAG = 1
13576 /* added for bug 4634810 */
13577 AND NOT( transaction_source_type_id = 5 AND
13578 NVL(operation_seq_num, 1) < 0 AND
13579 NVL(wip_supply_type, 0) = 6
13580 )
13581 ORDER BY TRANSACTION_BATCH_ID,TRANSACTION_BATCH_SEQ,ORGANIZATION_ID,
13582 INVENTORY_ITEM_ID,REVISION,SUBINVENTORY_CODE,LOCATOR_ID;
13583
13584
13585
13586 CURSOR Z1 (p_flow_sch NUMBER,p_line_rec_type inv_txn_manager_pub.line_rec_type) IS
13587 SELECT
13588 p_line_rec_type.ROWID,
13589 p_line_rec_type.INVENTORY_ITEM_ID,
13590 p_line_rec_type.REVISION,
13591 p_line_rec_type.ORGANIZATION_ID,
13592 p_line_rec_type.SUBINVENTORY_CODE,
13593 p_line_rec_type.LOCATOR_ID,
13594 ABS(p_line_rec_type.PRIMARY_QUANTITY) PRIMARY_QUANTITY,
13595 NULL LOT_NUMBER,
13596 p_line_rec_type.TRANSACTION_SOURCE_TYPE_ID,
13597 p_line_rec_type.TRANSACTION_ACTION_ID,
13598 p_line_rec_type.TRANSACTION_SOURCE_ID,
13599 p_line_rec_type.TRANSACTION_SOURCE_NAME,
13600 --Jalaj Srivastava 5010595
13601 --for GME (wip_enity_type=10) select trx_source_line_id as source_line_id
13602 decode(p_line_rec_type.transaction_source_type_id,5,decode(p_line_rec_type.wip_entity_type,10,p_line_rec_type.TRX_SOURCE_LINE_ID,p_line_rec_type.SOURCE_LINE_ID),p_line_rec_type.SOURCE_LINE_ID) SOURCE_LINE_ID,
13603 MSI.REVISION_QTY_CONTROL_CODE,
13604 decode(p_line_rec_type.transaction_source_type_id,5,1,MSI.lot_control_code) lot_control_code,--j-dev
13605 decode(p_line_rec_type.TRANSACTION_ACTION_ID,2,p_line_rec_type.TRANSFER_SUBINVENTORY,28,p_line_rec_type.TRANSFER_SUBINVENTORY,null) TRANSFER_SUBINVENTORY,
13606 p_line_rec_type.TRANSFER_LOCATOR,
13607 p_line_rec_type.transaction_date,
13608 MP.NEGATIVE_INV_RECEIPT_CODE
13609 FROM MTL_PARAMETERS MP,
13610 MTL_SYSTEM_ITEMS MSI
13611 WHERE MP.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13612 -- AND MP.NEGATIVE_INV_RECEIPT_CODE = 2 'bug 3679189'
13613 AND p_line_rec_type.PROCESS_FLAG = 1
13614 --Jalaj Srivastava 5010595
13615 --for GME (wip_enity_type=10) select only non lot controlled items
13616 AND ((MSI.LOT_CONTROL_CODE = 1) OR (p_line_rec_type.transaction_source_type_id=5 and p_line_rec_type.wip_entity_type <> 10))--J-dev--verify this
13617 AND ( ( (p_line_rec_type.wip_entity_type <> 10)
13618 AND ( (p_flow_sch <> 1
13619 AND p_line_rec_type.TRANSACTION_ACTION_ID IN (1,2,3,21,32,34,5) )
13620 OR (p_flow_sch = 1
13621 AND p_line_rec_type.TRANSACTION_ACTION_ID = 32 )
13622 )
13623 )
13624 --Jalaj Srivastava 5232394
13625 --select all transactions for GME
13626 OR (p_line_rec_type.wip_entity_type = 10)
13627 )
13628 AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
13629 AND MSI.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13630 AND MSI.INVENTORY_ITEM_ID = p_line_rec_type.INVENTORY_ITEM_ID
13631 UNION
13632 SELECT
13633 p_line_rec_type.ROWID,
13634 p_line_rec_type.INVENTORY_ITEM_ID,
13635 p_line_rec_type.REVISION,
13636 p_line_rec_type.ORGANIZATION_ID,
13637 p_line_rec_type.SUBINVENTORY_CODE,
13638 p_line_rec_type.LOCATOR_ID,
13639 ABS(MTLI.PRIMARY_QUANTITY) PRIMARY_QUANTITY,
13640 MTLI.lot_number LOT_NUMBER,
13641 p_line_rec_type.TRANSACTION_SOURCE_TYPE_ID,
13642 p_line_rec_type.TRANSACTION_ACTION_ID,
13643 p_line_rec_type.TRANSACTION_SOURCE_ID,
13644 p_line_rec_type.TRANSACTION_SOURCE_NAME,
13645 --Jalaj Srivastava 5010595
13646 --for GME (wip_enity_type=10) select trx_source_line_id as source_line_id
13647 decode(p_line_rec_type.wip_entity_type,10,p_line_rec_type.TRX_SOURCE_LINE_ID,p_line_rec_type.SOURCE_LINE_ID) SOURCE_LINE_ID,
13648 MSI.REVISION_QTY_CONTROL_CODE,
13649 MSI.lot_control_code lot_control_code,
13650 decode(p_line_rec_type.TRANSACTION_ACTION_ID,2,p_line_rec_type.TRANSFER_SUBINVENTORY,28,p_line_rec_type.TRANSFER_SUBINVENTORY,5,p_line_rec_type.transfer_subinventory,null) TRANSFER_SUBINVENTORY,
13651 p_line_rec_type.TRANSFER_LOCATOR,
13652 p_line_rec_type.transaction_date,
13653 MP.NEGATIVE_INV_RECEIPT_CODE
13654 FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI,
13655 MTL_PARAMETERS MP,
13656 MTL_SYSTEM_ITEMS MSI
13657 WHERE MP.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13658 --AND MP.NEGATIVE_INV_RECEIPT_CODE = 2 'bug 3679189'
13659 AND MTLI.TRANSACTION_INTERFACE_ID = p_line_rec_type.TRANSACTION_INTERFACE_ID
13660 AND p_line_rec_type.PROCESS_FLAG = 1
13661 AND MSI.LOT_CONTROL_CODE = 2
13662 AND ( ( (p_line_rec_type.wip_entity_type <> 10)
13663 AND ( (p_flow_sch <> 1
13664 AND p_line_rec_type.TRANSACTION_ACTION_ID IN (1,2,3,21,32,34,5) )
13665 OR (p_flow_sch = 1
13666 AND p_line_rec_type.TRANSACTION_ACTION_ID = 32 )
13667 )
13668 )
13669 --Jalaj Srivastava 5232394
13670 --select all transactions for GME
13671 OR (p_line_rec_type.wip_entity_type = 10)
13672 )
13673 AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
13674 AND MSI.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13675 AND MSI.INVENTORY_ITEM_ID = p_line_rec_type.INVENTORY_ITEM_ID
13676 -- Pawan 11th july added this for validation of lot for GME only
13677 AND ((p_line_rec_type.transaction_source_type_id <> 5) OR
13678 (p_line_rec_type.transaction_source_type_id = 5 AND
13679 p_line_rec_type.wip_entity_type = 10 ));--J-dev verify
13680
13681 BEGIN
13682 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
13683
13684 l_header_id := p_header_id;
13685
13686 IF (l_debug = 1)
13687 THEN
13688 inv_log_util.trace('-----Inside validate_Transactions-------.trxhdr='||p_header_id, 'INV_TXN_MANAGER_GRP', 9);
13689 END IF;
13690
13691
13692 /*----------------------------------------------------------+
13693 | retrieving information
13694 +----------------------------------------------------------*/
13695
13696 poget('LOGIN_ID', l_loginid);
13697 poget('USER_ID', l_userid);
13698 poget('CONC_PROGRAM_ID', l_progid);
13699 poget('CONC_REQUEST_ID', l_reqstid);
13700 poget('PROG_APPL_ID', l_applid);
13701
13702 IF l_loginid is NULL THEN
13703 l_loginid := -1;
13704 END IF;
13705 IF l_userid is NULL THEN
13706 l_userid := -1;
13707 END IF;
13708
13709 x_return_status := FND_API.G_RET_STS_ERROR;
13710 x_msg_count := 0;
13711 x_msg_data := '';
13712 x_trans_count := 0;
13713
13714
13715 /*+--------------------------------------------------------------+
13716 | The global gi_flow_schedule will be '1' (or true) for |
13717 | WIP flow schedules ONLY. |
13718 +--------------------------------------------------------------+ */
13719 BEGIN
13720 SELECT DECODE(UPPER(FLOW_SCHEDULE),'Y', 1, 0)
13721 INTO gi_flow_schedule
13722 FROM MTL_TRANSACTIONS_INTERFACE
13723 WHERE TRANSACTION_HEADER_ID = l_header_id
13724 AND TRANSACTION_SOURCE_TYPE_ID = 5
13725 AND TRANSACTION_ACTION_ID IN (30,31, 32) --CFM Scrap Transactions
13726 AND PROCESS_FLAG = 1
13727 AND ROWNUM < 2 ;
13728 EXCEPTION
13729 WHEN NO_DATA_FOUND THEN
13730 gi_flow_schedule := 0;
13731 END;
13732
13733 --Group Validate
13734 /***** Group Validation *******************************/
13735 validate_group(l_header_id,
13736 x_return_status,
13737 x_msg_count,
13738 x_msg_data,
13739 l_userid,
13740 l_loginid,
13741 p_validation_level);
13742
13743 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
13744 IF (l_debug = 1) THEN
13745 inv_log_util.trace('Unexpected Error in Validate Group : ' || x_msg_data,'INV_TXN_MANAGER_GRP', 9);
13746 END IF;
13747 RAISE fnd_api.g_exc_unexpected_error;
13748 END IF;
13749
13750 batch_error := FALSE;
13751
13752 FOR l_Line_rec_Type IN AA1 LOOP
13753
13754 l_trx_batch_id := l_Line_rec_Type.TRANSACTION_BATCH_ID;
13755 IF batch_error AND l_trx_batch_id = l_last_trx_batch_id THEN
13756 /** This group of transactions has failed move on to next **/
13757 /** UPDATE MTI row with Group Failure Message **/
13758 null;
13759 ELSE
13760 batch_error := FALSE;
13761 l_last_trx_batch_id := l_trx_batch_id;
13762
13763 /* Bug 6679112, adding BEGIN-EXCEPTION-END */
13764 BEGIN --validate_lines block
13765
13766 validate_lines( p_line_Rec_Type =>l_Line_rec_type,
13767 p_validation_level =>p_validation_level,
13768 p_error_flag =>line_vldn_error_flag,
13769 p_userid => l_userid,
13770 p_loginid => l_loginid,
13771 p_applid => l_applid,
13772 p_progid => l_progid
13773 );
13774 IF (line_vldn_error_flag = 'Y') then
13775 IF (l_debug = 1) THEN
13776 inv_log_util.trace('Error in Line Validatin', 'INV_TXN_MANAGER_GRP', 9);
13777 END IF;
13778 RAISE fnd_api.g_exc_unexpected_error;
13779 --SQL error
13780 END IF;
13781 EXCEPTION
13782 /* Added for Bug 6679112 */
13783 WHEN others THEN
13784 batch_error := TRUE;
13785 IF (l_debug = 1) THEN
13786 inv_log_util.trace('Error:'||sqlerrm,'INV_TXN_MANAGER_GRP', 9);
13787 END IF;
13788 END; --validate_lines block
13789 /* Changes for bug 6679112 end */
13790
13791 END IF;--BatchId
13792 END LOOP;--AA1
13793
13794
13795 /*-------------------------------------------------------------+
13796 | If a single transaction within a group fails all transactions
13797 | in that group should not be processed.
13798 +--------------------------------------------------------------*/
13799
13800
13801 --check for batch error at line validation
13802 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
13803
13804 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
13805 SET LAST_UPDATE_DATE = SYSDATE,
13806 LAST_UPDATED_BY = l_userid,
13807 LAST_UPDATE_LOGIN = l_loginid,
13808 PROGRAM_UPDATE_DATE = SYSDATE,
13809 PROCESS_FLAG = 3,
13810 LOCK_FLAG = 2,
13811 ERROR_CODE = substrb(l_error_code,1,240)
13812 WHERE TRANSACTION_HEADER_ID = l_header_id
13813 AND PROCESS_FLAG = 1
13814 AND TRANSACTION_BATCH_ID IN
13815 (SELECT DISTINCT MTI2.TRANSACTION_BATCH_ID
13816 FROM MTL_TRANSACTIONS_INTERFACE MTI2
13817 WHERE MTI2.TRANSACTION_HEADER_ID = l_header_id
13818 AND MTI2.PROCESS_FLAG = 3
13819 AND MTI2.ERROR_CODE IS NOT NULL);
13820 -- group error changes.
13821
13822
13823
13824 --Need to call the qty tree.
13825 --LOOP for each record
13826 --create tree
13827 --query tree
13828 --compare qty
13829 --UPDATE tree
13830 --END LOOP
13831 --clear all tree cache.
13832
13833 IF (l_debug = 1) THEN
13834 inv_log_util.trace('Going to open cursor AA1', 'INV_TXN_MANAGER_GRP', 9);
13835 END IF;
13836
13837 FOR l_Line_rec_Type IN AA1 LOOP
13838 /*Bug#5075521. Moved all the validation code inside the below IF condition so that
13839 the validation is done only if the current record does not belong to an errored
13840 batch.*/
13841 IF ( l_current_err_batch_id IS NULL
13842 OR l_Line_rec_Type.transaction_batch_id IS NULL
13843 OR l_current_err_batch_id <> l_Line_rec_Type.transaction_batch_id )THEN --050
13844 l_current_batch_failed := FALSE;
13845 FOR z1_rec IN
13846 Z1(gi_flow_schedule,l_Line_rec_type) LOOP
13847
13848 tree_exists := FALSE;
13849
13850 IF (l_debug = 1) THEN
13851 inv_log_util.trace('Getting values from Z1 cursor', 'INV_TXN_MANAGER_GRP', 9);
13852 END IF;
13853
13854 l_temp_rowid :=z1_rec.ROWID;
13855 l_item_id:=z1_rec.inventory_item_id;
13856 l_rev:=z1_rec.revision;
13857 l_org_id:=z1_rec.organization_id;
13858 l_sub_code:=z1_rec.subinventory_code;
13859 l_locid :=z1_rec.locator_id;
13860 l_trx_qty:=z1_rec.primary_quantity;
13861 l_lotnum:=z1_rec.lot_number;
13862 l_srctypeid:=z1_rec.transaction_source_type_id;
13863 l_actid:=z1_rec.transaction_action_id;
13864 l_srcid:=z1_rec.transaction_source_id;
13865 l_src_code:=z1_rec.transaction_source_name;
13866 l_srclineid:=z1_rec.source_line_id;
13867 l_rctrl:=z1_rec.revision_qty_control_code;
13868 l_lctrl:=z1_rec.lot_control_code;
13869 l_xfrsub:=z1_rec.transfer_subinventory;
13870 l_xlocid:=z1_rec.transfer_locator;
13871 l_trxdate:=z1_rec.TRANSACTION_DATE;
13872 l_neg_inv_rcpt:=z1_rec.negative_inv_receipt_code;
13873
13874
13875 IF l_rctrl = 1 THEN
13876 l_revision_control := FALSE;
13877 ELSE
13878 l_revision_control := TRUE;
13879 END IF;
13880
13881 IF l_lctrl = 1 THEN
13882 l_lot_control := FALSE;
13883 ELSE
13884 l_lot_control := TRUE;
13885 END IF;
13886
13887 IF (l_debug = 1) THEN
13888 inv_log_util.trace('Calling Create tree', 'INV_TXN_MANAGER_GRP', 9);
13889 END IF;
13890
13891 -- Bug 4194323 WIP Assembly Return transactions need to look for Available Quantity against the Sales Order
13892 -- if it's linked to job
13893
13894 IF ( NOT l_current_batch_failed) THEN --350
13895 BEGIN
13896 SELECT demand_source_header_id , demand_source_line
13897 INTO l_dem_hdr_id,l_dem_line_id
13898 FROM mtl_transactions_interface
13899 WHERE
13900 ROWID = l_temp_rowid ;
13901 EXCEPTION
13902 WHEN OTHERS THEN
13903 IF (l_debug = 1) THEN
13904 inv_log_util.trace('Error in getting Demand Info : '
13905 || x_msg_data,'INV_TXN_MANAGER_GRP', 9);
13906 END IF;
13907 l_error_code := 'Error in getting Demand Info';
13908 l_error_exp := 'Error in getting Demand Info';
13909
13910 UPDATE MTL_TRANSACTIONS_INTERFACE
13911 SET LAST_UPDATE_DATE = SYSDATE,
13912 LAST_UPDATED_BY = l_userid,
13913 LAST_UPDATE_LOGIN = l_loginid,
13914 PROGRAM_UPDATE_DATE = SYSDATE,
13915 PROCESS_FLAG = 3,
13916 LOCK_FLAG = 2,
13917 ERROR_CODE = substrb(l_error_code,1,240),
13918 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
13919 WHERE ROWID = l_temp_rowid
13920 AND PROCESS_FLAG = 1;
13921
13922 --check for batch error
13923 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
13924
13925 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
13926 SET LAST_UPDATE_DATE = SYSDATE,
13927 LAST_UPDATED_BY = l_userid,
13928 LAST_UPDATE_LOGIN = l_loginid,
13929 PROGRAM_UPDATE_DATE = SYSDATE,
13930 PROCESS_FLAG = 3,
13931 LOCK_FLAG = 2,
13932 ERROR_CODE = substrb(l_error_code,1,240)
13933 WHERE TRANSACTION_HEADER_ID = l_header_id
13934 AND PROCESS_FLAG = 1
13935 AND TRANSACTION_BATCH_ID =l_Line_rec_Type.transaction_batch_id;
13936
13937 l_current_batch_failed := TRUE;--Bug#5075521
13938 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
13939 END ;
13940
13941 IF ( NOT l_current_batch_failed) THEN --400
13942 IF ( l_srctypeid = INv_GLOBALS.G_SOURCETYPE_WIP AND
13943 l_actid = INV_GLOBALS.G_ACTION_ASSYRETURN AND l_dem_hdr_id IS NOT NULL ) then
13944
13945 INV_QUANTITY_TREE_PVT.create_tree
13946 ( p_api_version_number => 1.0
13947 , p_init_msg_lst => fnd_api.g_false
13948 , x_return_status => l_return_status
13949 , x_msg_count => l_msg_count
13950 , x_msg_data => l_msg_data
13951 , p_organization_id => l_org_id
13952 , p_inventory_item_id => l_item_id
13953 , p_tree_mode => 2
13954 , p_is_revision_control => l_revision_control
13955 , p_is_lot_control => l_lot_control
13956 , p_is_serial_control => FALSE
13957 , p_include_suggestion => FALSE
13958 , p_demand_source_type_id => 2
13959 , p_demand_source_header_id => nvl(l_dem_hdr_id,-9999)
13960 , p_demand_source_line_id => nvl(l_dem_line_id,-9999)
13961 , p_demand_source_name => l_src_code
13962 , p_demand_source_delivery => NULL
13963 , p_lot_expiration_date => NULL
13964 , x_tree_id => l_tree_id
13965 , p_onhand_source => 3 --g_all_subs
13966 , p_exclusive => 0 --g_non_exclusive
13967 , p_pick_release => 0 --g_pick_release_no
13968 ) ;
13969 ELSE
13970
13971 INV_QUANTITY_TREE_PVT.create_tree
13972 ( p_api_version_number => 1.0
13973 , p_init_msg_lst => fnd_api.g_false
13974 , x_return_status => l_return_status
13975 , x_msg_count => l_msg_count
13976 , x_msg_data => l_msg_data
13977 , p_organization_id => l_org_id
13978 , p_inventory_item_id => l_item_id
13979 , p_tree_mode => 2
13980 , p_is_revision_control => l_revision_control
13981 , p_is_lot_control => l_lot_control
13982 , p_is_serial_control => FALSE
13983 , p_include_suggestion => FALSE
13984 , p_demand_source_type_id => nvl(l_srctypeid,-9999)
13985 , p_demand_source_header_id => nvl(l_srcid,-9999)
13986 , p_demand_source_line_id => nvl(l_srclineid,-9999)
13987 , p_demand_source_name => l_src_code
13988 , p_demand_source_delivery => NULL
13989 , p_lot_expiration_date => NULL
13990 , x_tree_id => l_tree_id
13991 , p_onhand_source => 3 --g_all_subs
13992 , p_exclusive => 0 --g_non_exclusive
13993 , p_pick_release => 0 --g_pick_release_no
13994 ) ;
13995 END IF;
13996 -- Bug 4194323 Ends
13997
13998 IF (l_debug = 1) THEN
13999 inv_log_util.trace('After create tree tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14000 END IF;
14001
14002
14003
14004 IF l_return_status IN (fnd_api.g_ret_sts_error, fnd_api.g_ret_sts_unexp_error) THEN
14005 IF (l_debug = 1) THEN
14006 inv_log_util.trace('Error while creating tree : x_msg_data = ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14007 END IF;
14008 FND_MESSAGE.set_name('INV','INV_ERR_CREATETREE');
14009 FND_MESSAGE.set_token('ROUTINE','UE:AVAIL_TO_TRX');
14010 l_error_code := FND_MESSAGE.get;
14011 l_error_exp := l_msg_data;
14012 x_msg_data := l_msg_data;
14013 UPDATE MTL_TRANSACTIONS_INTERFACE
14014 SET LAST_UPDATE_DATE = SYSDATE,
14015 LAST_UPDATED_BY = l_userid,
14016 LAST_UPDATE_LOGIN = l_loginid,
14017 PROGRAM_UPDATE_DATE = SYSDATE,
14018 PROCESS_FLAG = 3,
14019 LOCK_FLAG = 2,
14020 ERROR_CODE = substrb(l_error_code,1,240),
14021 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14022 WHERE ROWID = l_temp_rowid
14023 AND PROCESS_FLAG = 1;
14024
14025 --check for batch error
14026 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14027
14028 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14029 SET LAST_UPDATE_DATE = SYSDATE,
14030 LAST_UPDATED_BY = l_userid,
14031 LAST_UPDATE_LOGIN = l_loginid,
14032 PROGRAM_UPDATE_DATE = SYSDATE,
14033 PROCESS_FLAG = 3,
14034 LOCK_FLAG = 2,
14035 ERROR_CODE = substrb(l_error_code,1,240)
14036 WHERE TRANSACTION_HEADER_ID = l_header_id
14037 AND PROCESS_FLAG = 1
14038 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id; --Bug#5075521
14039 -- group error changes.
14040
14041 l_current_batch_failed := TRUE;--Bug#5075521
14042 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14043 END IF ;
14044 END IF; --400
14045 END IF;--350
14046
14047 IF ( NOT l_current_batch_failed) THEN --100
14048
14049 INV_QUANTITY_TREE_PVT.query_tree
14050 ( p_api_version_number => 1.0
14051 , p_init_msg_lst => fnd_api.g_false
14052 , x_return_status => l_return_status
14053 , x_msg_count => l_msg_count
14054 , x_msg_data => l_msg_data
14055 , p_tree_id => l_tree_id
14056 , p_revision => l_rev
14057 , p_lot_number => l_lotnum
14058 , p_subinventory_code => l_sub_code
14059 , p_transfer_subinventory_code => l_xfrsub
14060 , p_locator_id => l_locid
14061 , x_qoh => l_qoh
14062 , x_rqoh => l_rqoh
14063 , x_pqoh => l_pqoh
14064 , x_qr => l_qr
14065 , x_qs => l_qs
14066 , x_att => l_att
14067 , x_atr => l_atr
14068 );
14069
14070 IF l_return_status = fnd_api.g_ret_sts_error THEN
14071 IF (l_debug = 1) THEN
14072 inv_log_util.trace('Expected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14073 END IF;
14074
14075 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14076 FND_MESSAGE.set_token('token1','XACT_QTY1');
14077 l_error_code := FND_MESSAGE.get;
14078 l_error_exp := l_msg_data;
14079 x_msg_data := l_msg_data;
14080 UPDATE MTL_TRANSACTIONS_INTERFACE
14081 SET LAST_UPDATE_DATE = SYSDATE,
14082 LAST_UPDATED_BY = l_userid,
14083 LAST_UPDATE_LOGIN = l_loginid,
14084 PROGRAM_UPDATE_DATE = SYSDATE,
14085 PROCESS_FLAG = 3,
14086 LOCK_FLAG = 2,
14087 ERROR_CODE = substrb(l_error_code,1,240),
14088 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14089 WHERE TRANSACTION_interface_id = l_temp_rowid
14090 AND PROCESS_FLAG = 1;
14091 --check for batch error
14092 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14093
14094 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14095 SET LAST_UPDATE_DATE = SYSDATE,
14096 LAST_UPDATED_BY = l_userid,
14097 LAST_UPDATE_LOGIN = l_loginid,
14098 PROGRAM_UPDATE_DATE = SYSDATE,
14099 PROCESS_FLAG = 3,
14100 LOCK_FLAG = 2,
14101 ERROR_CODE = substrb(l_error_code,1,240)
14102 WHERE TRANSACTION_HEADER_ID = l_header_id
14103 AND PROCESS_FLAG = 1
14104 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id; --Bug#5075521
14105 -- group error changes.
14106 l_current_batch_failed := TRUE;--Bug#5075521
14107 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14108
14109 END IF ;
14110
14111 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
14112 IF (l_debug = 1) THEN
14113 inv_log_util.trace('UnExpected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14114 END IF;
14115
14116 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14117 FND_MESSAGE.set_token('token1','XACT_QTY1');
14118 l_error_code := FND_MESSAGE.get;
14119 l_error_exp := l_msg_data;
14120 x_msg_data := l_msg_data;
14121 UPDATE MTL_TRANSACTIONS_INTERFACE
14122 SET LAST_UPDATE_DATE = SYSDATE,
14123 LAST_UPDATED_BY = l_userid,
14124 LAST_UPDATE_LOGIN = l_loginid,
14125 PROGRAM_UPDATE_DATE = SYSDATE,
14126 PROCESS_FLAG = 3,
14127 LOCK_FLAG = 2,
14128 ERROR_CODE = substrb(l_error_code,1,240),
14129 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14130 WHERE ROWID = l_temp_rowid
14131 AND PROCESS_FLAG = 1;
14132 --check for batch error
14133 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14134
14135 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14136 SET LAST_UPDATE_DATE = SYSDATE,
14137 LAST_UPDATED_BY = l_userid,
14138 LAST_UPDATE_LOGIN = l_loginid,
14139 PROGRAM_UPDATE_DATE = SYSDATE,
14140 PROCESS_FLAG = 3,
14141 LOCK_FLAG = 2,
14142 ERROR_CODE = substrb(l_error_code,1,240)
14143 WHERE TRANSACTION_HEADER_ID = l_header_id
14144 AND PROCESS_FLAG = 1
14145 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14146 --group error changes.
14147 l_current_batch_failed := TRUE;--Bug#5075521
14148 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14149 END IF;
14150
14151 IF (l_debug = 1) THEN
14152 inv_log_util.trace('L_QOH : ' || l_qoh,'INV_TXN_MANAGER_GRP', 9);
14153 inv_log_util.trace('L_RQOH : ' || l_rqoh,'INV_TXN_MANAGER_GRP', 9);
14154 inv_log_util.trace('L_PQOH : ' || l_pqoh,'INV_TXN_MANAGER_GRP', 9);
14155 inv_log_util.trace('L_QR : ' || l_qr,'INV_TXN_MANAGER_GRP', 9);
14156 inv_log_util.trace('L_QS : ' || l_qs,'INV_TXN_MANAGER_GRP', 9);
14157 inv_log_util.trace('L_ATT : ' || l_att,'INV_TXN_MANAGER_GRP', 9);
14158 inv_log_util.trace('L_ATR : ' || l_atr,'INV_TXN_MANAGER_GRP', 9);
14159 END IF;
14160 END IF;--100
14161
14162 -- Bug 3427817: For WIP backflush transactions, we should not
14163 -- check for negative availability. If it is
14164 -- a backflush transaction, then get the
14165 -- profile value and do not check for
14166 -- availability if the profile is set to
14167 -- YES.
14168
14169 IF ( NOT l_current_batch_failed ) THEN--150
14170
14171 -- nsinghi bug#5286961. Do not call the query_tree for gme yield transactions.
14172
14173 IF ((l_Line_rec_Type.wip_entity_type <> 10) OR -- not GME
14174 (l_Line_rec_Type.wip_entity_type = 10 AND
14175 l_line_rec_Type.transaction_type_id NOT IN (43, 44, 1002))) THEN
14176
14177 /*Bug:5392366. Modified the following condition to also check
14178 completion_transaction_id and move_transaction_id to make sure it
14179 is a backflush transaction. If both these values are null then
14180 it is is not a backflush transaction*/
14181 IF ((l_line_rec_Type.transaction_source_type_id = inv_globals.G_SOURCETYPE_WIP) AND
14182 (l_line_rec_Type.transaction_action_id
14183 IN (inv_globals.G_ACTION_ISSUE, inv_globals.G_ACTION_NEGCOMPRETURN) AND (l_line_rec_type.completion_transaction_id is not null OR l_line_rec_type.move_transaction_id is not null))) THEN
14184 -- It is a backflush transaction. Get the
14185 -- override flag.
14186 l_override_neg_for_backflush :=
14187 fnd_profile.value('INV_OVERRIDE_NEG_FOR_BACKFLUSH');
14188 /*Bug 4764343 Base Bug:4645686. Introducing a new profile
14189 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' for a specific customer.If set to 'Yes',
14190 backflush transaction can drive inventory negative, even if any reservations
14191 exist for the item*/
14192 l_override_rsv_for_backflush := NVL(fnd_profile.value('INV_OVERRIDE_RSV_FOR_BACKFLUSH'), 2);
14193 ELSE
14194 l_override_neg_for_backflush := 0;
14195 l_override_rsv_for_backflush := 2;
14196 END IF;
14197 IF (l_debug = 1) THEN
14198 inv_log_util.trace('l_override_neg_for_backflush ' || l_override_neg_for_backflush,'INV_TXN_MANAGER_GRP', 9);
14199 inv_log_util.trace('l_override_rsv_for_backflush ' || l_override_rsv_for_backflush,'INV_TXN_MANAGER_GRP', 9);
14200 END IF;
14201
14202 --Bug 3487453: Added and set the variable l_translate
14203 -- to true for the token to be translated.
14204 IF (l_att < l_trx_qty) THEN
14205 IF (l_neg_inv_rcpt = 1 OR l_override_neg_for_backflush = 1) THEN
14206
14207 IF (l_qr >l_trx_qty OR l_qs >0) THEN
14208 /*Bug 4764343 base Bug::4645686. This condition is added for a specific customer by introducing
14209 a new profile 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' . If this profile is not set to 'Yes'
14210 then the backflush transaction can not consume existing reservations.Else it can consume
14211 existing reservation and can drive inventory go negative. */
14212 IF (l_override_rsv_for_backflush <> 1 ) THEN
14213 inv_log_util.trace('Transaction quantity must be less than or equal to available quantity','INV_TXN_MANAGER_GRP', 9);
14214 FND_MESSAGE.set_name('INV','INV_INT_PROCCODE');
14215 l_error_code := FND_MESSAGE.get;
14216 FND_MESSAGE.set_name('INV','INV_QTY_LESS_OR_EQUAL');
14217 l_error_exp := FND_MESSAGE.get;
14218 x_msg_data := l_error_exp;
14219 UPDATE MTL_TRANSACTIONS_INTERFACE
14220 SET LAST_UPDATE_DATE = SYSDATE,
14221 LAST_UPDATED_BY = l_userid,
14222 LAST_UPDATE_LOGIN = l_loginid,
14223 PROGRAM_UPDATE_DATE = SYSDATE,
14224 PROCESS_FLAG = 3,
14225 LOCK_FLAG = 2,
14226 ERROR_CODE = substrb(l_error_code,1,240),
14227 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14228 WHERE ROWID = l_temp_rowid
14229 AND PROCESS_FLAG = 1;
14230 --check for batch error
14231 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14232
14233 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14234 SET LAST_UPDATE_DATE = SYSDATE,
14235 LAST_UPDATED_BY = l_userid,
14236 LAST_UPDATE_LOGIN = l_loginid,
14237 PROGRAM_UPDATE_DATE = SYSDATE,
14238 PROCESS_FLAG = 3,
14239 LOCK_FLAG = 2,
14240 ERROR_CODE = substrb(l_error_code,1,240)
14241 WHERE TRANSACTION_HEADER_ID = l_header_id
14242 AND PROCESS_FLAG = 1
14243 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14244 -- group error changes.
14245 l_current_batch_failed := TRUE;--Bug#5075521
14246 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14247 END IF; --override_rsv_for_backflush
14248 END IF;
14249
14250 IF (NOT l_current_batch_failed ) THEN --200
14251 INV_QUANTITY_TREE_PVT.query_tree
14252 ( p_api_version_number => 1.0
14253 , p_init_msg_lst => fnd_api.g_false
14254 , x_return_status => l_return_status
14255 , x_msg_count => l_msg_count
14256 , x_msg_data => l_msg_data
14257 , p_tree_id => l_tree_id
14258 , p_revision => NULL
14259 , p_lot_number => NULL
14260 , p_subinventory_code => NULL
14261 , p_locator_id => NULL
14262 , x_qoh => l_item_qoh
14263 , x_rqoh => l_item_rqoh
14264 , x_pqoh => l_item_pqoh
14265 , x_qr => l_item_qr
14266 , x_qs => l_item_qs
14267 , x_att => l_item_att
14268 , x_atr => l_item_atr
14269 );
14270
14271 IF l_return_status = fnd_api.g_ret_sts_error THEN
14272 IF (l_debug = 1) THEN
14273 inv_log_util.trace('Expected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14274 END IF;
14275
14276 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14277 FND_MESSAGE.set_token('token1','XACT_QTY1');
14278 l_error_code := FND_MESSAGE.get;
14279 l_error_exp := l_msg_data;
14280 x_msg_data := l_msg_data;
14281 UPDATE MTL_TRANSACTIONS_INTERFACE
14282 SET LAST_UPDATE_DATE = SYSDATE,
14283 LAST_UPDATED_BY = l_userid,
14284 LAST_UPDATE_LOGIN = l_loginid,
14285 PROGRAM_UPDATE_DATE = SYSDATE,
14286 PROCESS_FLAG = 3,
14287 LOCK_FLAG = 2,
14288 ERROR_CODE = substrb(l_error_code,1,240),
14289 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14290 WHERE TRANSACTION_interface_id = l_temp_rowid
14291 AND PROCESS_FLAG = 1;
14292 --check for batch error
14293 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14294
14295 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14296 SET LAST_UPDATE_DATE = SYSDATE,
14297 LAST_UPDATED_BY = l_userid,
14298 LAST_UPDATE_LOGIN = l_loginid,
14299 PROGRAM_UPDATE_DATE = SYSDATE,
14300 PROCESS_FLAG = 3,
14301 LOCK_FLAG = 2,
14302 ERROR_CODE = substrb(l_error_code,1,240)
14303 WHERE TRANSACTION_HEADER_ID = l_header_id
14304 AND PROCESS_FLAG = 1
14305 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14306 -- group error changes.
14307 l_current_batch_failed := TRUE;--Bug#5075521
14308 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14309 END IF ;
14310
14311 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
14312 IF (l_debug = 1) THEN
14313 inv_log_util.trace('UnExpected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14314 END IF;
14315
14316 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14317 FND_MESSAGE.set_token('token1','XACT_QTY1');
14318 l_error_code := FND_MESSAGE.get;
14319 l_error_exp := l_msg_data;
14320 x_msg_data := l_msg_data;
14321 UPDATE MTL_TRANSACTIONS_INTERFACE
14322 SET LAST_UPDATE_DATE = SYSDATE,
14323 LAST_UPDATED_BY = l_userid,
14324 LAST_UPDATE_LOGIN = l_loginid,
14325 PROGRAM_UPDATE_DATE = SYSDATE,
14326 PROCESS_FLAG = 3,
14327 LOCK_FLAG = 2,
14328 ERROR_CODE = substrb(l_error_code,1,240),
14329 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14330 WHERE ROWID = l_temp_rowid
14331 AND PROCESS_FLAG = 1;
14332 --check for batch error
14333 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14334
14335 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14336 SET LAST_UPDATE_DATE = SYSDATE,
14337 LAST_UPDATED_BY = l_userid,
14338 LAST_UPDATE_LOGIN = l_loginid,
14339 PROGRAM_UPDATE_DATE = SYSDATE,
14340 PROCESS_FLAG = 3,
14341 LOCK_FLAG = 2,
14342 ERROR_CODE = substrb(l_error_code,1,240)
14343 WHERE TRANSACTION_HEADER_ID = l_header_id
14344 AND PROCESS_FLAG = 1
14345 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14346 --group error changes.
14347 l_current_batch_failed := TRUE;--Bug#5075521
14348 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14349 END IF;
14350 END IF; --200
14351 inv_log_util.trace('L_ITEM_QOH : ' || l_item_qoh,'INV_TXN_MANAGER_GRP', 9);
14352 inv_log_util.trace('L_ITEM_RQOH : ' || l_item_rqoh,'INV_TXN_MANAGER_GRP', 9);
14353 inv_log_util.trace('L_ITEM_PQOH : ' || l_item_pqoh,'INV_TXN_MANAGER_GRP', 9);
14354 inv_log_util.trace('L_ITEM_QR : ' || l_item_qr,'INV_TXN_MANAGER_GRP', 9);
14355 inv_log_util.trace('L_ITEM_QS : ' || l_item_qs,'INV_TXN_MANAGER_GRP', 9);
14356 inv_log_util.trace('L_ITEM_ATT : ' || l_item_att,'INV_TXN_MANAGER_GRP', 9);
14357 inv_log_util.trace('L_ITEM_ATR : ' || l_item_atr,'INV_TXN_MANAGER_GRP', 9);
14358 inv_log_util.trace('L_TRX_QTY : ' || l_trx_qty,'INV_TXN_MANAGER_GRP', 9);
14359
14360 IF ( NOT l_current_batch_failed) THEN --250
14361 IF (l_item_qoh <> l_item_att) THEN -- Higher Level Reservations
14362 IF (l_item_att < l_trx_qty AND l_item_qr > 0) THEN
14363 /*Bug 4764343 Base Bug::4645686. This condition is added for a specific customer by introducing
14364 a new profile 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' . If this profile is not set to 'Yes'then the
14365 backflush transaction can not consume existing reservations.Else it can consume existing
14366 reservation and can drive inventory negative. */
14367 IF (l_override_rsv_for_backflush <> 1 ) THEN
14368 inv_log_util.trace('Total Org quantity cannot become negative when there are reservations present','INV_TXN_MANAGER_GRP', 9);
14369 FND_MESSAGE.set_name('INV','INV_INT_PROCCODE');
14370 l_error_code := FND_MESSAGE.get;
14371 FND_MESSAGE.set_name('INV','INV_ORG_QUANTITY');
14372 l_error_exp := FND_MESSAGE.get;
14373 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14374 x_msg_data := l_error_exp;
14375 UPDATE MTL_TRANSACTIONS_INTERFACE
14376 SET LAST_UPDATE_DATE = SYSDATE,
14377 LAST_UPDATED_BY = l_userid,
14378 LAST_UPDATE_LOGIN = l_loginid,
14379 PROGRAM_UPDATE_DATE = SYSDATE,
14380 PROCESS_FLAG = 3,
14381 LOCK_FLAG = 2,
14382 ERROR_CODE = substrb(l_error_code,1,240),
14383 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14384 WHERE ROWID = l_temp_rowid
14385 AND PROCESS_FLAG = 1;
14386 --check for batch error
14387 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14388
14389 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14390 SET LAST_UPDATE_DATE = SYSDATE,
14391 LAST_UPDATED_BY = l_userid,
14392 LAST_UPDATE_LOGIN = l_loginid,
14393 PROGRAM_UPDATE_DATE = SYSDATE,
14394 PROCESS_FLAG = 3,
14395 LOCK_FLAG = 2,
14396 ERROR_CODE = substrb(l_error_code,1,240)
14397 WHERE TRANSACTION_HEADER_ID = l_header_id
14398 AND PROCESS_FLAG = 1
14399 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14400 --group error changes.
14401 l_current_batch_failed := TRUE;--Bug#5075521
14402 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14403 END IF;-- override_rsv_for_backflush
14404 END IF;--total org quantity
14405 END IF;--high level
14406 END IF; --250
14407
14408 ELSE --(neg_inv_rcpt = 1)
14409 IF (l_debug = 1) THEN
14410 inv_log_util.trace('Not Enough Qty: l_att,l_trx_qty:' || l_att||','||l_trx_qty,'INV_TXN_MANAGER_GRP', 9);
14411 END IF;
14412 FND_MESSAGE.set_name('INV','INV_NO_NEG_BALANCES');
14413 l_error_code := FND_MESSAGE.get;
14414 FND_MESSAGE.set_name('INV','INV_LESS_OR_EQUAL');
14415 FND_MESSAGE.set_token('ENTITY1','INV_QUANTITY',l_translate);
14416 FND_MESSAGE.set_token('ENTITY2','AVAIL_TO_TRANSACT',l_translate);
14417 l_error_exp := FND_MESSAGE.get;
14418 x_msg_data := l_error_exp;
14419 UPDATE MTL_TRANSACTIONS_INTERFACE
14420 SET LAST_UPDATE_DATE = SYSDATE,
14421 LAST_UPDATED_BY = l_userid,
14422 LAST_UPDATE_LOGIN = l_loginid,
14423 PROGRAM_UPDATE_DATE = SYSDATE,
14424 PROCESS_FLAG = 3,
14425 LOCK_FLAG = 2,
14426 ERROR_CODE = substrb(l_error_code,1,240),
14427 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14428 WHERE ROWID = l_temp_rowid
14429 AND PROCESS_FLAG = 1;
14430 --check for batch error
14431 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14432
14433 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14434 SET LAST_UPDATE_DATE = SYSDATE,
14435 LAST_UPDATED_BY = l_userid,
14436 LAST_UPDATE_LOGIN = l_loginid,
14437 PROGRAM_UPDATE_DATE = SYSDATE,
14438 PROCESS_FLAG = 3,
14439 LOCK_FLAG = 2,
14440 ERROR_CODE = substrb(l_error_code,1,240)
14441 WHERE TRANSACTION_HEADER_ID = l_header_id
14442 AND PROCESS_FLAG = 1
14443 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14444 -- group error changes.
14445 l_current_batch_failed := TRUE;--Bug#5075521
14446 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14447 END IF;
14448 END IF;--check for att and trx qty
14449 END IF; --nsinghi bug#5286961 l_Line_rec_Type.wip_entity_type = 10
14450
14451
14452 -- update the qty
14453 -- Pawan 11th july Added - GME does not have transfer subinventory
14454 IF ( NOT l_current_batch_failed ) THEN --300
14455 IF (l_actid in (2,28)) then
14456 inv_quantity_tree_pub.update_quantities
14457 (p_api_version_number => 1.0,
14458 p_init_msg_lst => fnd_api.g_false,
14459 x_return_status => l_return_status,
14460 x_msg_count => l_msg_count,
14461 x_msg_data => l_msg_data,
14462 p_organization_id => l_org_id,
14463 p_inventory_item_id => l_item_id,
14464 p_tree_mode => 2,
14465 p_is_revision_control => l_revision_control,
14466 p_is_lot_control => l_lot_control,
14467 p_is_serial_control => FALSE,
14468 p_demand_source_type_id => nvl(l_srctypeid,-9999),
14469 p_demand_source_header_id => nvl(l_srcid,-9999),
14470 p_demand_source_line_id => nvl(l_srclineid,-9999),
14471 p_revision => l_rev,
14472 p_lot_number => l_lotnum,
14473 p_subinventory_code => l_xfrsub,
14474 p_locator_id => l_xlocid,
14475 p_primary_quantity => l_trx_qty,
14476 p_quantity_type => inv_quantity_tree_pvt.g_qoh,
14477 p_onhand_source => inv_quantity_tree_pvt.g_all_subs,
14478 x_qoh => l_qoh,
14479 x_rqoh => l_rqoh,
14480 x_qr => l_qr,
14481 x_qs => l_qs,
14482 x_att => l_att,
14483 x_atr => l_atr);
14484
14485
14486 IF l_return_status <> fnd_api.g_ret_sts_success THEN
14487 FND_MESSAGE.set_name('INV', 'INV_ERR_CREATETREE');
14488 FND_MESSAGE.set_token('ROUTINE','INV_QUANTITY_TREE_PUB.UPDATE_QUANTITIES');
14489 l_error_code:= fnd_message.get;
14490 l_error_exp :=l_msg_data;
14491 x_msg_data := l_msg_data;
14492 UPDATE MTL_TRANSACTIONS_INTERFACE
14493 SET LAST_UPDATE_DATE = SYSDATE,
14494 LAST_UPDATED_BY = l_userid,
14495 LAST_UPDATE_LOGIN = l_loginid,
14496 PROGRAM_UPDATE_DATE = SYSDATE,
14497 PROCESS_FLAG = 3,
14498 LOCK_FLAG = 2,
14499 ERROR_CODE = substrb(l_error_code,1,240),
14500 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14501 WHERE ROWID = l_temp_rowid
14502 AND PROCESS_FLAG = 1;
14503 --check for batch error
14504 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14505
14506 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14507 SET LAST_UPDATE_DATE = SYSDATE,
14508 LAST_UPDATED_BY = l_userid,
14509 LAST_UPDATE_LOGIN = l_loginid,
14510 PROGRAM_UPDATE_DATE = SYSDATE,
14511 PROCESS_FLAG = 3,
14512 LOCK_FLAG = 2,
14513 ERROR_CODE = substrb(l_error_code,1,240)
14514 WHERE TRANSACTION_HEADER_ID = l_header_id
14515 AND PROCESS_FLAG = 1
14516 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14517 -- group error changes.
14518 l_current_batch_failed := TRUE;--Bug#5075521
14519 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14520 END IF;
14521 ELSE
14522 /* Jalaj Srivastava Bug 5232394
14523 update tree with correct sign.
14524 sign is derived from transaction_quantity */
14525
14526 inv_quantity_tree_pub.update_quantities
14527 (p_api_version_number => 1.0,
14528 p_init_msg_lst => fnd_api.g_false,
14529 x_return_status => l_return_status,
14530 x_msg_count => l_msg_count,
14531 x_msg_data => l_msg_data,
14532 p_organization_id => l_org_id,
14533 p_inventory_item_id => l_item_id,
14534 p_tree_mode => 2,
14535 p_is_revision_control => l_revision_control,
14536 p_is_lot_control => l_lot_control,
14537 p_is_serial_control => FALSE,
14538 p_demand_source_type_id => nvl(l_srctypeid,-9999),
14539 p_demand_source_header_id => nvl(l_srcid,-9999),
14540 p_demand_source_line_id => nvl(l_srclineid,-9999),
14541 p_revision => l_rev,
14542 p_lot_number => l_lotnum,
14543 p_subinventory_code => l_sub_code,
14544 p_locator_id => l_locid,
14545 p_primary_quantity => (sign(l_line_rec_type.transaction_quantity)*(l_trx_qty)),
14546 p_quantity_type => inv_quantity_tree_pvt.g_qoh,
14547 p_onhand_source => inv_quantity_tree_pvt.g_all_subs,
14548 x_qoh => l_qoh,
14549 x_rqoh => l_rqoh,
14550 x_qr => l_qr,
14551 x_qs => l_qs,
14552 x_att => l_att,
14553 x_atr => l_atr);
14554
14555 IF l_return_status <> fnd_api.g_ret_sts_success THEN
14556 FND_MESSAGE.set_name('INV', 'INV_ERR_CREATETREE');
14557 FND_MESSAGE.set_token('ROUTINE','INV_QUANTITY_TREE_PUB.UPDATE_QUANTITIES');
14558 l_error_code:= fnd_message.get;
14559 l_error_exp :=l_msg_data;
14560 x_msg_data := l_msg_data;
14561 UPDATE MTL_TRANSACTIONS_INTERFACE
14562 SET LAST_UPDATE_DATE = SYSDATE,
14563 LAST_UPDATED_BY = l_userid,
14564 LAST_UPDATE_LOGIN = l_loginid,
14565 PROGRAM_UPDATE_DATE = SYSDATE,
14566 PROCESS_FLAG = 3,
14567 LOCK_FLAG = 2,
14568 ERROR_CODE = substrb(l_error_code,1,240),
14569 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14570 WHERE ROWID = l_temp_rowid
14571 AND PROCESS_FLAG = 1;
14572 --check for batch error
14573 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14574
14575 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14576 SET LAST_UPDATE_DATE = SYSDATE,
14577 LAST_UPDATED_BY = l_userid,
14578 LAST_UPDATE_LOGIN = l_loginid,
14579 PROGRAM_UPDATE_DATE = SYSDATE,
14580 PROCESS_FLAG = 3,
14581 LOCK_FLAG = 2,
14582 ERROR_CODE = substrb(l_error_code,1,240)
14583 WHERE TRANSACTION_HEADER_ID = l_header_id
14584 AND PROCESS_FLAG = 1
14585 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14586 -- group error changes.
14587 l_current_batch_failed := TRUE;--Bug#5075521
14588 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14589 ELSE
14590 --qty tree update was successful
14591 IF (l_debug = 1) THEN
14592 inv_log_util.trace('after update of quantity tree qoh='||l_qoh||' l_att='||l_att||' l_atr='||l_atr,'INV_TXN_MANAGER_GRP', 9);
14593 END IF;
14594 END IF;
14595 END IF;-- Pawan Added for IF (l_actid in (2,28))
14596 END IF; --300
14597 END IF; --150
14598 END LOOP;--
14599 END IF;--050
14600 /* This should be for any error other than not found */
14601 --IF z1%OPEN
14602 --CLOSE Z1;
14603 --------------Qty tree end
14604
14605 END LOOP; --AA1
14606
14607 --free all trees created so far.
14608 /* INV_QUANTITY_TREE_PVT.free_All
14609 ( p_api_version_number => 1.0
14610 , p_init_msg_lst => fnd_api.g_false
14611 , x_return_status => l_return_status
14612 , x_msg_count => l_msg_count
14613 , x_msg_data => l_msg_data); */
14614
14615 --Jalaj Srivastava Bug 4672291
14616 --Call free_tree only when l_tree_id is not null
14617 --Jalaj Srivastava Bug 5155661
14618 --free the tree only if p_free_tree is true
14619 IF (p_free_tree = fnd_api.G_TRUE)
14620 AND (l_tree_id IS NOT NULL) THEN
14621 INV_QUANTITY_TREE_PVT.free_tree
14622 ( p_api_version_number => 1.0
14623 , p_init_msg_lst => fnd_api.g_false
14624 , x_return_status => l_return_status
14625 , x_msg_count => l_msg_count
14626 , x_msg_data => l_msg_data
14627 , p_tree_id => l_tree_id );
14628 END IF;
14629
14630 SELECT COUNT(*)
14631 INTO l_count_success
14632 FROM mtl_transactions_interface
14633 WHERE transaction_header_id = l_header_id
14634 AND process_flag = 1;
14635
14636 IF (l_count_success = 0) THEN
14637 RETURN -1;
14638 END IF;
14639
14640 -- ADD tmp Insert here. In case of an error
14641 --return -1.
14642 --J-dev
14643
14644 IF (NOT tmpinsert(l_header_id,p_validation_level)) THEN
14645 l_error_exp := FND_MESSAGE.get;
14646 IF (l_debug = 1) THEN
14647 inv_log_util.trace('Error in tmpinsert='|| l_error_exp, 'INV_TXN_MANAGER_GRP', 9);
14648 END IF;
14649 FND_MESSAGE.set_name('INV','INV_INT_TMPXFRCODE');
14650 l_error_code := FND_MESSAGE.get;
14651 x_msg_data := l_error_exp;
14652 UPDATE MTL_TRANSACTIONS_INTERFACE
14653 SET LAST_UPDATE_DATE = SYSDATE,
14654 LAST_UPDATED_BY = l_userid,
14655 LAST_UPDATE_LOGIN = l_loginid,
14656 PROGRAM_UPDATE_DATE = SYSDATE,
14657 PROCESS_FLAG = 3,
14658 LOCK_FLAG = 2,
14659 ERROR_CODE = substrb(l_error_code,1,240),
14660 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14661 WHERE TRANSACTION_HEADER_ID =l_header_id
14662 AND PROCESS_FLAG = 1;
14663
14664 return -1;
14665 ELSE
14666 --delete from mti/mtli/msni
14667
14668 DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
14669 WHERE TRANSACTION_INTERFACE_ID
14670 IN(
14671 SELECT TRANSACTION_INTERFACE_ID
14672 FROM MTL_TRANSACTIONS_INTERFACE
14673 WHERE TRANSACTION_HEADER_ID =l_header_id
14674 AND PROCESS_FLAG <> 3
14675 union all
14676 SELECT SERIAL_TRANSACTION_TEMP_ID
14677 FROM MTL_TRANSACTION_LOTS_INTERFACE
14678 WHERE TRANSACTION_INTERFACE_ID
14679 IN (
14680 SELECT TRANSACTION_INTERFACE_ID
14681 FROM MTL_TRANSACTIONS_INTERFACE
14682 WHERE TRANSACTION_HEADER_ID = l_header_id
14683 AND PROCESS_FLAG <> 3 )) ;
14684 DELETE FROM MTL_TRANSACTION_LOTS_INTERFACE
14685 WHERE TRANSACTION_INTERFACE_ID IN
14686 (SELECT TRANSACTION_INTERFACE_ID
14687 FROM MTL_TRANSACTIONS_INTERFACE
14688 WHERE TRANSACTION_HEADER_ID =l_header_id
14689 AND PROCESS_FLAG <> 3);
14690 DELETE FROM MTL_TRANSACTIONS_INTERFACE
14691 WHERE TRANSACTION_HEADER_ID = l_header_id
14692 AND PROCESS_FLAG <> 3;
14693 IF (l_debug = 1) THEN
14694 inv_log_util.trace('*** Del recs mti valid trx', 'INV_TXN_MANAGER_GRP',9);
14695 END IF;
14696 END IF;--tmpinsert
14697
14698 return 0;--return success.
14699
14700
14701 EXCEPTION
14702 WHEN OTHERS THEN
14703 IF (l_debug = 1) THEN
14704 inv_log_util.trace('*** SQL error '||substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP',9);
14705 END IF;
14706
14707 FND_MESSAGE.set_name('INV','INV_INT_SQLCODE');
14708 l_error_code := FND_MESSAGE.get;
14709
14710 UPDATE MTL_TRANSACTIONS_INTERFACE
14711 SET LAST_UPDATE_DATE = SYSDATE,
14712 LAST_UPDATED_BY = l_userid,
14713 LAST_UPDATE_LOGIN = l_loginid,
14714 PROGRAM_UPDATE_DATE = SYSDATE,
14715 PROCESS_FLAG = 3,
14716 LOCK_FLAG = 2,
14717 ERROR_CODE = substrb(l_error_code,1,240),
14718 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14719 WHERE TRANSACTION_HEADER_ID = l_header_id
14720 AND PROCESS_FLAG = 1;
14721
14722 return -1;
14723
14724
14725 END Validate_Transactions;
14726
14727
14728
14729 FUNCTION Validate_Additional_Attr(
14730 p_api_version IN NUMBER
14731 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
14732 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
14733 , p_intid IN NUMBER
14734 , p_rowid IN VARCHAR2
14735 , p_inventory_item_id IN NUMBER
14736 , p_organization_id IN NUMBER
14737 , p_lot_number IN VARCHAR2
14738 , p_grade_code IN OUT NOCOPY VARCHAR2
14739 , p_retest_date IN OUT NOCOPY DATE
14740 , p_maturity_date IN OUT NOCOPY DATE
14741 , p_parent_lot_number IN OUT NOCOPY VARCHAR2
14742 , p_origination_date IN OUT NOCOPY DATE
14743 , p_origination_type IN OUT NOCOPY NUMBER
14744 , p_expiration_action_code IN OUT NOCOPY VARCHAR2
14745 , p_expiration_action_date IN OUT NOCOPY DATE
14746 , p_expiration_date IN OUT NOCOPY DATE
14747 , p_hold_date IN OUT NOCOPY DATE
14748 , p_reason_id IN OUT NOCOPY NUMBER
14749 , p_copy_lot_attribute_flag IN VARCHAR2
14750 , x_return_status OUT NOCOPY VARCHAR2
14751 , x_msg_count OUT NOCOPY NUMBER
14752 , x_msg_data OUT NOCOPY VARCHAR2 )
14753 RETURN BOOLEAN
14754 IS
14755
14756 /* get lot record info */
14757 CURSOR c_get_lot_record ( p_orgid NUMBER, p_itemid NUMBER, p_lotnum VARCHAR2)
14758 IS
14759 SELECT *
14760 FROM mtl_lot_numbers
14761 WHERE lot_number = p_lotnum
14762 AND inventory_item_id = p_itemid
14763 AND organization_id = p_orgid;
14764
14765 l_lot_record c_get_lot_record%ROWTYPE;
14766 l_parent_lot_record c_get_lot_record%ROWTYPE;
14767
14768 /* Get reason code info */
14769 CURSOR c_get_reason_info IS
14770 SELECT MTR.REASON_ID
14771 FROM MTL_TRANSACTION_REASONS MTR
14772 WHERE MTR.REASON_ID = p_reason_id
14773 AND NVL(MTR.DISABLE_DATE, SYSDATE + 1) > SYSDATE;
14774
14775 /* get item information */
14776 CURSOR c_get_item_info IS
14777 select RETEST_INTERVAL,
14778 EXPIRATION_ACTION_INTERVAL ,
14779 SHELF_LIFE_CODE,
14780 MATURITY_DAYS,
14781 HOLD_DAYS,
14782 CHILD_LOT_FLAG ,
14783 GRADE_CONTROL_FLAG
14784 from mtl_system_items
14785 WHERE inventory_item_id = p_inventory_item_id
14786 AND organization_id = p_organization_id;
14787
14788
14789 l_return_status VARCHAR2(1);
14790 l_msg_count NUMBER;
14791 l_msg_data VARCHAR2(3000);
14792
14793
14794 l_api_version NUMBER := 1.0;
14795 l_init_msg_list VARCHAR2(3) := 'F';
14796 l_commit VARCHAR2(3) := 'F';
14797
14798
14799 -- FABDI
14800 l_userid NUMBER := -1; --prg_info.userid;
14801 l_reqstid NUMBER := -1; -- prg_info.reqstid;
14802 l_applid NUMBER := -1; -- prg_info.appid;
14803 l_progid NUMBER := -1; -- prg_info.progid;
14804 l_loginid NUMBER := -1; -- prg_info.loginid;
14805
14806 l_retest_interval NUMBER;
14807 l_exp_action_interval NUMBER;
14808 l_shelf_life_code NUMBER;
14809 l_maturity_days NUMBER;
14810 l_hold_days NUMBER;
14811 l_reason_id NUMBER;
14812 l_check BOOLEAN := TRUE;
14813
14814 l_parent_lot_number VARCHAR2(80);
14815 l_lot_number VARCHAR2(80);
14816 l_itemid NUMBER;
14817 l_orgid NUMBER;
14818
14819 l_child_lot_flag VARCHAR2(1);
14820 l_grade_control_flag VARCHAR2(1);
14821
14822 l_new_parent_lot BOOLEAN ;
14823 l_new_child_lot BOOLEAN ;
14824 l_lot_onhand NUMBER; --Bug#7139549
14825 l_orig_date DATE;
14826
14827 BEGIN
14828
14829 IF (l_debug is null)
14830 THEN
14831 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
14832 END IF;
14833
14834 IF (l_debug = 1) THEN
14835 inv_log_util.trace('inside Validate_Additional_Attr' , 'INV_TXN_MANAGER_GRP', 9);
14836 END IF;
14837
14838
14839
14840 /* Get Lot Child Information*/
14841 OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, p_lot_number);
14842 FETCH c_get_lot_record INTO l_lot_record;
14843
14844 IF c_get_lot_record%NOTFOUND
14845 THEN
14846 -- dbms_output.put_line('New Lot Child ');
14847 l_new_child_lot := TRUE;
14848 ELSE
14849 /*Bug#7139549 check if the lot exists but it is a pending product lot */
14850
14851 SELECT count(1) into l_lot_onhand
14852 FROM mtl_onhand_quantities_detail
14853 WHERE INVENTORY_ITEM_ID = p_inventory_item_id
14854 AND ORGANIZATION_ID = p_organization_id
14855 AND lot_number = p_lot_number
14856 AND PRIMARY_TRANSACTION_QUANTITY > 0
14857 AND rownum = 1;
14858
14859 IF (l_lot_onhand = 0) THEN
14860 inv_calculate_exp_date.get_origination_date
14861 ( p_inventory_item_id => p_inventory_item_id
14862 ,p_organization_id => p_organization_id
14863 ,p_lot_number => p_lot_number
14864 ,x_orig_date => l_orig_date
14865 ,x_return_status => l_return_status
14866 );
14867
14868 IF l_return_status <> 'S' THEN
14869 IF (l_debug = 1) THEN
14870 inv_log_util.trace('Error from get_origination_date', 'INV_TXN_MANAGER_GRP', 9);
14871 END IF;
14872 CLOSE c_get_lot_record;
14873 RAISE FND_API.G_EXC_ERROR;
14874 END IF;
14875 -- dbms_output.put_line('Existing Lot Child ');
14876 IF (l_orig_date IS NULL AND p_expiration_date IS NULL) THEN
14877 IF (l_debug = 1) THEN
14878 inv_log_util.trace('existing pending lot having no expiry date', 'INV_TXN_MANAGER_GRP', 9);
14879 END IF;
14880 l_new_child_lot := TRUE;
14881 END IF; --expiration date null
14882 ELSE
14883 IF (l_debug = 1) THEN
14884 inv_log_util.trace('new lot', 'INV_TXN_MANAGER_GRP', 9);
14885 END IF;
14886 l_new_child_lot := FALSE;
14887 END IF; --lot onhand condition
14888 END IF;
14889
14890 CLOSE c_get_lot_record;
14891
14892 if p_parent_lot_number IS NOT NULL
14893 THEN
14894 /* Get Parent Lot Child Information*/
14895 OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, p_parent_lot_number);
14896 FETCH c_get_lot_record INTO l_parent_lot_record;
14897
14898 IF c_get_lot_record%NOTFOUND
14899 THEN
14900 -- dbms_output.put_line('New Lot Parent Lot ' );
14901 l_new_parent_lot := TRUE;
14902 Else
14903 -- dbms_output.put_line('Existing Parent Lot ' );
14904 l_new_parent_lot := FALSE;
14905 END IF;
14906 CLOSE c_get_lot_record;
14907 ELSE
14908 -- dbms_output.put_line('No Parent Lot ' );
14909 l_new_parent_lot := FALSE;
14910 END IF;
14911
14912
14913
14914 /* Get item info */
14915 OPEN c_get_item_info;
14916 FETCH c_get_item_info INTO l_retest_interval, l_exp_action_interval, l_shelf_life_code,
14917 l_maturity_days, l_hold_days, l_child_lot_flag, l_grade_control_flag;
14918 CLOSE c_get_item_info;
14919
14920 /* Check Lot */
14921 IF (l_new_child_lot) THEN
14922
14923 IF (l_debug = 1) THEN
14924 inv_log_util.trace('Validate_Additional_Attr: This is a New Lot : ' , 'INV_TXN_MANAGER_GRP', 9);
14925 END IF;
14926
14927 /* defult missing values */
14928 l_lot_record.inventory_item_id := p_inventory_item_id ;
14929 l_lot_record.organization_id := p_organization_id ;
14930
14931 l_lot_record.lot_number := p_lot_number ;
14932 l_lot_record.parent_lot_number := p_parent_lot_number ;
14933
14934 l_lot_record.grade_code := p_grade_code ;
14935 l_lot_record.retest_date := p_retest_date ;
14936 l_lot_record.maturity_date := p_maturity_date ;
14937
14938 l_lot_record.origination_date := NVL(p_origination_date, SYSDATE);
14939
14940 l_lot_record.origination_type := p_origination_type ;
14941 l_lot_record.expiration_action_code := p_expiration_action_code ;
14942 l_lot_record.expiration_action_date := p_expiration_action_date ;
14943 l_lot_record.hold_date := p_hold_date ;
14944 /*Fixed for bug#6626120
14945 Lot record is initialized with exp date if lot expiration is 'user defined'.
14946 This code ensure that for user defined the exp date passed is not ignored
14947 and not assigned to null.
14948 For shelf life day the exp date is always calcualted so no need to
14949 initialize for that case. If we initalize for that as well then
14950 system will not calculate the exp date for shel life days hence will
14951 break the functionality. Hence the initialzation is done
14952 conditionally.
14953 */
14954 if l_shelf_life_code = 4 and p_expiration_date is not null then
14955 l_lot_record.expiration_date :=p_expiration_date;
14956 end if;
14957
14958 -- dbms_output.put_line('l_copy_lot_attribute_flag ' || p_copy_lot_attribute_flag );
14959
14960 IF (l_debug = 1) THEN
14961 inv_log_util.trace('Validate_Additional_Attr: p_copy_lot_attribute_flag ' || p_copy_lot_attribute_flag , 'INV_TXN_MANAGER_GRP', 9);
14962 END IF;
14963
14964 IF ((p_parent_lot_number IS NOT NULL) AND
14965 (l_child_lot_flag = 'Y'))
14966 THEN
14967 IF p_copy_lot_attribute_flag = 'N'
14968 THEN
14969 IF (l_debug = 1) THEN
14970 inv_log_util.trace('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (1) ' , 'INV_TXN_MANAGER_GRP', 9);
14971 END IF;
14972 -- dbms_output.put_line('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (1 )');
14973 /* Default attributes for lot from item master */
14974 -- inv_lot_api_pub.Set_Msi_Default_Attr(p_lot_rec => l_lot_record);
14975
14976 Inv_Lot_API_PKG.Set_Msi_Default_Attr ( p_lot_rec => l_lot_record
14977 , x_return_status => l_return_status
14978 , x_msg_count => l_msg_count
14979 , x_msg_data => l_msg_data);
14980
14981 IF l_return_status <> fnd_api.g_ret_sts_success
14982 THEN
14983 l_error_code := l_msg_data;
14984 l_error_exp := l_msg_data;
14985 RAISE FND_API.G_EXC_ERROR;
14986 END IF;
14987
14988 p_grade_code := l_lot_record.grade_code;
14989 p_retest_date := l_lot_record.retest_date;
14990 p_maturity_date := l_lot_record.maturity_date;
14991 p_origination_date := l_lot_record.origination_date;
14992 p_origination_type := l_lot_record.origination_type;
14993 p_expiration_action_code := l_lot_record.expiration_action_code;
14994 p_expiration_action_date := l_lot_record.expiration_action_date;
14995 p_hold_date := l_lot_record.hold_date;
14996 p_expiration_date := l_lot_record.expiration_date;
14997 ELSE
14998 -- Default attributes form Parent lot
14999 OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, l_lot_record.parent_lot_number);
15000 FETCH c_get_lot_record INTO l_parent_lot_record;
15001 CLOSE c_get_lot_record;
15002 /* Check if Parent lot exists */
15003 IF NOT (l_new_parent_lot)
15004 THEN
15005 IF (l_debug = 1) THEN
15006 inv_log_util.trace('Validate_Additional_Attr: Parent lot EXISTS ' , 'INV_TXN_MANAGER_GRP', 9);
15007 END IF;
15008 if p_expiration_date is null
15009 then
15010 p_expiration_date := l_parent_lot_record.expiration_date;
15011 end if;
15012
15013 IF p_grade_code IS NULL
15014 THEN
15015 p_grade_code := l_parent_lot_record.grade_code;
15016 END IF;
15017 IF p_retest_date IS NULL
15018 THEN
15019 p_retest_date := l_parent_lot_record.retest_date;
15020 END IF;
15021 IF p_maturity_date IS NULL
15022 THEN
15023 p_maturity_date := l_parent_lot_record.maturity_date;
15024 END IF;
15025 IF p_origination_date IS NULL
15026 THEN
15027 p_origination_date := l_parent_lot_record.origination_date;
15028 END IF;
15029 IF p_origination_type IS NULL
15030 THEN
15031 p_origination_type := l_parent_lot_record.origination_type;
15032 END IF;
15033 IF p_expiration_action_code IS NULL
15034 THEN
15035 p_expiration_action_code := l_parent_lot_record.expiration_action_code;
15036 END IF;
15037 IF p_expiration_action_date IS NULL
15038 THEN
15039 p_expiration_action_date := l_parent_lot_record.expiration_action_date;
15040 END IF;
15041 IF p_hold_date IS NULL
15042 THEN
15043 p_hold_date := l_parent_lot_record.hold_date;
15044 END IF;
15045 Else
15046 -- dbms_output.put_line('Parent lot does not EXISTS, default from item ' );
15047 IF (l_debug = 1) THEN
15048 inv_log_util.trace('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (2) ' , 'INV_TXN_MANAGER_GRP', 9);
15049 END IF;
15050
15051 /* new parent lot , default from item master */
15052
15053 Inv_Lot_API_PKG.Set_Msi_Default_Attr (
15054 p_lot_rec => l_lot_record
15055 , x_return_status => l_return_status
15056 , x_msg_count => l_msg_count
15057 , x_msg_data => l_msg_data
15058 );
15059
15060 IF l_return_status <> fnd_api.g_ret_sts_success THEN
15061 l_error_code := l_msg_data;
15062 l_error_exp := l_msg_data;
15063 RAISE FND_API.G_EXC_ERROR;
15064 END IF;
15065
15066 p_grade_code := l_lot_record.grade_code;
15067 p_retest_date := l_lot_record.retest_date;
15068 p_maturity_date := l_lot_record.maturity_date;
15069 p_origination_date := l_lot_record.origination_date;
15070 p_origination_type := l_lot_record.origination_type;
15071 p_expiration_action_code := l_lot_record.expiration_action_code;
15072 p_expiration_action_date := l_lot_record.expiration_action_date;
15073 p_hold_date := l_lot_record.hold_date;
15074 p_expiration_date := l_lot_record.expiration_date;
15075 END IF;
15076 END IF; -- end copy lot attrib check
15077 ELSE
15078 -- dbms_output.put_line('lot is new and Item is not child lot enabled ' );
15079 /* lot is new and Item is not child lot enabled */
15080
15081 IF (l_debug = 1) THEN
15082 inv_log_util.trace('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (3) ' , 'INV_TXN_MANAGER_GRP', 9);
15083 END IF;
15084
15085 Inv_Lot_API_PKG.Set_Msi_Default_Attr (
15086 p_lot_rec => l_lot_record
15087 , x_return_status => l_return_status
15088 , x_msg_count => l_msg_count
15089 , x_msg_data => l_msg_data
15090 );
15091
15092 IF l_return_status <> fnd_api.g_ret_sts_success THEN
15093 l_error_code := l_msg_data;
15094 l_error_exp := l_msg_data;
15095 RAISE FND_API.G_EXC_ERROR;
15096 END IF;
15097
15098 p_grade_code := l_lot_record.grade_code;
15099 p_retest_date := l_lot_record.retest_date;
15100 p_maturity_date := l_lot_record.maturity_date;
15101 p_origination_date := l_lot_record.origination_date;
15102 p_origination_type := l_lot_record.origination_type;
15103 p_expiration_action_code := l_lot_record.expiration_action_code;
15104 p_expiration_action_date := l_lot_record.expiration_action_date;
15105 p_hold_date := l_lot_record.hold_date;
15106 p_expiration_date := l_lot_record.expiration_date;
15107 END IF;
15108
15109
15110
15111 l_itemid := p_inventory_item_id;
15112 l_orgid := p_organization_id;
15113 /*
15114 dbms_output.put_line('***************************************' );
15115 dbms_output.put_line('grade code ' || p_grade_code );
15116 dbms_output.put_line('retest date ' || p_retest_date );
15117 dbms_output.put_line('maturity date ' || p_maturity_date );
15118 dbms_output.put_line('origination date ' || p_origination_date ) ;
15119 dbms_output.put_line('origination type ' || p_origination_type );
15120 dbms_output.put_line('expiration action Code ' || p_expiration_action_code );
15121 dbms_output.put_line('expiration action date ' || p_expiration_action_date );
15122 dbms_output.put_line('Hold date ' || p_hold_date );
15123 dbms_output.put_line('expiration date ' || p_expiration_date );
15124 dbms_output.put_line('***************************************' );
15125 */
15126
15127 /* VALIDATE parent/child lot number */
15128 l_check := INV_LOT_ATTR_PUB.validate_child_lot( p_parent_lot_number => p_parent_lot_number
15129 ,p_lot_number => p_lot_number
15130 ,p_org_id => l_orgid
15131 ,p_inventory_item_id => l_itemid
15132 ,p_child_lot_flag => l_child_lot_flag
15133 ,x_return_status => l_return_status
15134 ,x_msg_count => l_msg_count
15135 ,x_msg_data => l_msg_data);
15136 IF NOT(l_check)
15137 THEN
15138 l_error_code := l_msg_data;
15139 l_error_exp := l_msg_data;
15140 RAISE FND_API.G_EXC_ERROR;
15141
15142 END IF;
15143
15144 IF (l_debug = 1) THEN
15145 inv_log_util.trace('validate_child_lot pass', 'INV_TXN_MANAGER_GRP', 9);
15146 END IF;
15147
15148
15149 /******************* START Grade Code validation logic ********************/
15150 l_check := INV_LOT_ATTR_PUB.validate_grade_code( p_grade_code => p_grade_code
15151 , p_org_id => l_orgid
15152 , p_inventory_item_id => l_itemid
15153 , p_grade_control_flag => l_grade_control_flag
15154 , x_return_status => l_return_status
15155 , x_msg_count => l_msg_count
15156 , x_msg_data => l_msg_data);
15157 IF NOT(l_check)
15158 THEN
15159 l_error_code := l_msg_data;
15160 l_error_exp := l_msg_data;
15161 RAISE FND_API.G_EXC_ERROR;
15162 END IF;
15163
15164 IF (l_debug = 1) THEN
15165 inv_log_util.trace('validate_grade_code pass', 'INV_TXN_MANAGER_GRP', 9);
15166 END IF;
15167
15168 /******************* START Origination Type validation logic ********************/
15169 l_check := INV_LOT_ATTR_PUB.validate_origination_type( p_origination_type => p_origination_type
15170 , x_return_status => l_return_status
15171 , x_msg_count => l_msg_count
15172 , x_msg_data => l_msg_data);
15173 IF NOT(l_check)
15174 THEN
15175 l_error_code := l_msg_data;
15176 l_error_exp := l_msg_data;
15177 RAISE FND_API.G_EXC_ERROR;
15178 END IF;
15179 IF (l_debug = 1) THEN
15180 inv_log_util.trace('validate_origination_type pass', 'INV_TXN_MANAGER_GRP', 9);
15181 END IF;
15182
15183
15184 -- dbms_output.put_line('Validate_Additional_Attr: Origination type validation - PASS...');
15185
15186 /******************* START Expiration Action Code validation logic ********************/
15187 l_check := INV_LOT_ATTR_PUB.validate_exp_action_code( p_expiration_action_code => p_expiration_action_code
15188 , p_org_id => l_orgid
15189 , p_inventory_item_id => l_itemid
15190 , p_shelf_life_code => l_shelf_life_code
15191 , x_return_status => l_return_status
15192 , x_msg_count => l_msg_count
15193 , x_msg_data => l_msg_data);
15194 IF NOT(l_check)
15195 THEN
15196 l_error_code := l_msg_data;
15197 l_error_exp := l_msg_data;
15198 RAISE FND_API.G_EXC_ERROR;
15199 END IF;
15200 IF (l_debug = 1) THEN
15201 inv_log_util.trace('validate_exp_action_code pass', 'INV_TXN_MANAGER_GRP', 9);
15202 END IF;
15203
15204 -- dbms_output.put_line('Validate_Additional_Attr: Expiration Action Code validation - PASS...');
15205
15206 /******************* START Retest Date validation logic ********************/
15207 l_check := INV_LOT_ATTR_PUB.validate_retest_date(p_retest_date => p_retest_date
15208 ,p_origination_date => p_origination_date
15209 ,x_return_status => l_return_status
15210 ,x_msg_count => l_msg_count
15211 ,x_msg_data => l_msg_data);
15212 IF NOT(l_check)
15213 THEN
15214 l_error_code := l_msg_data;
15215 l_error_exp := l_msg_data;
15216 RAISE FND_API.G_EXC_ERROR;
15217 END IF;
15218 IF (l_debug = 1) THEN
15219 inv_log_util.trace('validate_retest_date pass', 'INV_TXN_MANAGER_GRP', 9);
15220 END IF;
15221
15222 /******************* START Expiration Action Date validation logic ********************/
15223 l_check := INV_LOT_ATTR_PUB.validate_exp_action_date( p_expiration_action_date => p_expiration_action_date
15224 , p_expiration_date => p_expiration_date
15225 , x_return_status => l_return_status
15226 , x_msg_count => l_msg_count
15227 , x_msg_data => l_msg_data);
15228 IF NOT(l_check)
15229 THEN
15230 l_error_code := l_msg_data;
15231 l_error_exp := l_msg_data;
15232 RAISE FND_API.G_EXC_ERROR;
15233
15234 END IF;
15235 IF (l_debug = 1) THEN
15236 inv_log_util.trace('validate_exp_action_date pass', 'INV_TXN_MANAGER_GRP', 9);
15237 END IF;
15238
15239
15240 /******************* START Maturity Date validation logic ********************/
15241 l_check := INV_LOT_ATTR_PUB.validate_maturity_date( p_maturity_date => p_maturity_date
15242 ,p_origination_date => p_origination_date
15243 ,x_return_status => l_return_status
15244 ,x_msg_count => l_msg_count
15245 ,x_msg_data => l_msg_data);
15246 IF NOT(l_check)
15247 THEN
15248 l_error_code := l_msg_data;
15249 l_error_exp := l_msg_data;
15250 RAISE FND_API.G_EXC_ERROR;
15251 END IF;
15252 IF (l_debug = 1) THEN
15253 inv_log_util.trace('validate_maturity_date pass', 'INV_TXN_MANAGER_GRP', 9);
15254 END IF;
15255
15256 /******************* START Hold Date validation logic ********************/
15257 l_check := INV_LOT_ATTR_PUB.validate_hold_date( p_hold_date => p_hold_date
15258 ,p_origination_date => p_origination_date
15259 ,x_return_status => l_return_status
15260 ,x_msg_count => l_msg_count
15261 ,x_msg_data => l_msg_data);
15262 IF NOT(l_check)
15263 THEN
15264 l_error_code := l_msg_data;
15265 l_error_exp := l_msg_data;
15266 RAISE FND_API.G_EXC_ERROR;
15267 END IF;
15268 IF (l_debug = 1) THEN
15269 inv_log_util.trace('validate_hold_date pass', 'INV_TXN_MANAGER_GRP', 9);
15270 END IF;
15271
15272 /******************* START Reason Code validation logic ********************/
15273 l_check := INV_LOT_ATTR_PUB.validate_reason_code( p_reason_code => null
15274 ,p_reason_id => p_reason_id
15275 ,x_return_status => l_return_status
15276 ,x_msg_count => l_msg_count
15277 ,x_msg_data => l_msg_count);
15278 IF NOT(l_check)
15279 THEN
15280 l_error_code := l_msg_data;
15281 l_error_exp := l_msg_data;
15282 RAISE FND_API.G_EXC_ERROR;
15283 END IF;
15284 IF (l_debug = 1) THEN
15285 inv_log_util.trace('validate_reason_code pass', 'INV_TXN_MANAGER_GRP', 9);
15286 END IF;
15287
15288 ELSE
15289 IF (l_debug = 1) THEN
15290 inv_log_util.trace('Validate_Additional_Attr: NO NEED FOR VALIDATION.. just default ',
15291 'INV_TXN_MANAGER_GRP', 9);
15292 END IF;
15293
15294 -- dbms_output.put_line('Validate_Additional_Attr: LOT EXISTS, NO NEED FOR VALIDATION.. just default from MLN : '||
15295 -- l_lot_record.lot_number);
15296
15297 p_parent_lot_number := l_lot_record.parent_lot_number;
15298 p_expiration_date := l_lot_record.expiration_date;
15299 p_grade_code := l_lot_record.grade_code;
15300 p_retest_date := l_lot_record.retest_date;
15301 p_maturity_date := l_lot_record.maturity_date;
15302 p_origination_date := l_lot_record.origination_date;
15303 p_origination_type := l_lot_record.origination_type;
15304 p_expiration_action_code := l_lot_record.expiration_action_code;
15305 p_expiration_action_date := l_lot_record.expiration_action_date;
15306 p_hold_date := l_lot_record.hold_date;
15307 /*
15308 dbms_output.put_line('***************************************' );
15309 dbms_output.put_line('p_parent_lot_number ' || p_parent_lot_number );
15310 dbms_output.put_line('grade code ' || p_grade_code );
15311 dbms_output.put_line('retest date ' || p_retest_date );
15312 dbms_output.put_line('maturity date ' || p_maturity_date );
15313 dbms_output.put_line('origination date ' || p_origination_date ) ;
15314 dbms_output.put_line('origination type ' || p_origination_type );
15315 dbms_output.put_line('expiration action Code ' || p_expiration_action_code );
15316 dbms_output.put_line('expiration action date ' || p_expiration_action_date );
15317 dbms_output.put_line('Hold date ' || p_hold_date );
15318 dbms_output.put_line('expiration date ' || p_expiration_date );
15319 dbms_output.put_line('***************************************' );
15320 */
15321
15322 END IF;
15323
15324 return true;
15325 /******************* END Perform Date validation logic ********************/
15326 EXCEPTION
15327 WHEN FND_API.G_EXC_ERROR THEN
15328 x_return_status := FND_API.G_RET_STS_ERROR;
15329 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15330 SET LAST_UPDATE_DATE = SYSDATE,
15331 LAST_UPDATED_BY = l_userid,
15332 LAST_UPDATE_LOGIN = l_loginid,
15333 PROGRAM_APPLICATION_ID = l_applid,
15334 PROGRAM_ID = l_progid,
15335 PROGRAM_UPDATE_DATE = SYSDATE,
15336 REQUEST_ID = l_reqstid,
15337 ERROR_CODE = substrb(l_error_code,1,240)
15338 WHERE TRANSACTION_INTERFACE_ID = p_intid;
15339
15340 errupdate(p_rowid,null);
15341
15342 RETURN FALSE;
15343
15344 WHEN NO_DATA_FOUND THEN
15345 IF (l_debug = 1) THEN
15346 inv_log_util.trace('Validate_Additional_Attr: error NO_DATA_FOUND' , 'INV_TXN_MANAGER_GRP', 9);
15347 END IF;
15348
15349 x_return_status := fnd_api.g_ret_sts_error;
15350
15351 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
15352 p_count => x_msg_count,
15353 p_data => x_msg_data);
15354 if( x_msg_count > 1 ) then
15355 x_msg_data := fnd_msg_pub.get(x_msg_count, FND_API.G_FALSE);
15356 end if;
15357
15358 l_error_code := x_msg_data;
15359 l_error_exp := x_msg_data;
15360 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15361 SET LAST_UPDATE_DATE = SYSDATE,
15362 LAST_UPDATED_BY = l_userid,
15363 LAST_UPDATE_LOGIN = l_loginid,
15364 PROGRAM_APPLICATION_ID = l_applid,
15365 PROGRAM_ID = l_progid,
15366 PROGRAM_UPDATE_DATE = SYSDATE,
15367 REQUEST_ID = l_reqstid,
15368 ERROR_CODE = substrb(l_error_code,1,240)
15369 WHERE TRANSACTION_INTERFACE_ID = p_intid;
15370
15371 errupdate(p_rowid,null);
15372 RETURN FALSE;
15373
15374
15375 WHEN OTHERS THEN
15376 IF (l_debug = 1) THEN
15377 inv_log_util.trace('Validate_Additional_Attr: error OTHERS exception' , 'INV_TXN_MANAGER_GRP', 9);
15378 END IF;
15379
15380 x_return_status := fnd_api.g_ret_sts_unexp_error;
15381
15382 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
15383 p_count => x_msg_count,
15384 p_data => x_msg_data);
15385 if( x_msg_count > 1 ) then
15386 x_msg_data := fnd_msg_pub.get(x_msg_count, FND_API.G_FALSE);
15387 end if;
15388
15389 l_error_code := x_msg_data;
15390 l_error_exp := x_msg_data;
15391
15392 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15393 SET LAST_UPDATE_DATE = SYSDATE,
15394 LAST_UPDATED_BY = l_userid,
15395 LAST_UPDATE_LOGIN = l_loginid,
15396 PROGRAM_APPLICATION_ID = l_applid,
15397 PROGRAM_ID = l_progid,
15398 PROGRAM_UPDATE_DATE = SYSDATE,
15399 REQUEST_ID = l_reqstid,
15400 ERROR_CODE = substrb(l_error_code,1,240)
15401 WHERE TRANSACTION_INTERFACE_ID = p_intid;
15402
15403 errupdate(p_rowid,null);
15404
15405 RETURN FALSE;
15406
15407
15408 END Validate_Additional_Attr;
15409
15410
15411 PROCEDURE validate_derive_object_details
15412 ( p_org_id IN NUMBER
15413 , p_object_type IN NUMBER
15414 , p_object_id IN NUMBER
15415 , p_object_number IN VARCHAR2
15416 , p_item_id IN NUMBER
15417 , p_object_type2 IN NUMBER
15418 , p_object_id2 IN NUMBER
15419 , p_object_number2 IN VARCHAR2
15420 , p_serctrl IN NUMBER
15421 , p_lotctrl IN NUMBER
15422 , p_rowid IN ROWID
15423 , p_table IN VARCHAR2
15424 , x_return_status OUT NOCOPY VARCHAR2
15425 , x_msg_count OUT NOCOPY NUMBER
15426 , x_msg_data OUT NOCOPY VARCHAR2)
15427 IS
15428 l_api_name CONSTANT VARCHAR2(30) := 'validate_derive_object_details';
15429 l_object_id NUMBER;
15430 l_object_id2 NUMBER;
15431 l_object_number VARCHAR2(240);
15432 l_object_number2 VARCHAR2(240);
15433 l_inventory_item_id NUMBER;
15434
15435 BEGIN
15436 x_return_status := lg_ret_sts_success;
15437 -- Standard Start of API savepoint
15438 SAVEPOINT sp_validations;
15439
15440 g_pkg_name := l_api_name;
15441 IF (l_debug = 1) THEN
15442 mydebug('Entered validate_derive_object_details ...');
15443 mydebug ('p_org_id : ' || p_org_id );
15444 mydebug ('p_object_type : ' || p_object_type );
15445 mydebug ('p_object_id : ' || p_object_id );
15446 mydebug ('p_object_number : ' || p_object_number);
15447 mydebug ('p_item_id : ' || p_item_id );
15448 mydebug ('p_object_type2 : ' || p_object_type2 );
15449 mydebug ('p_object_id2 : ' || p_object_id2 );
15450 mydebug ('p_object_number2: ' || p_object_number2);
15451 mydebug ('p_serctrl : ' || p_serctrl );
15452 mydebug ('p_lotctrl : ' || p_lotctrl );
15453 mydebug ('p_rowid : ' || p_rowid );
15454 mydebug ('p_table : ' || p_table );
15455 END IF;
15456 l_object_id := p_object_id;
15457 l_object_id2 := p_object_id2;
15458 l_object_number := p_object_number;
15459 l_object_number2 := p_object_number2;
15460
15461 IF p_object_id is NOT NULL and p_object_type is NOT NULL
15462 THEN
15463 IF (l_debug = 1) THEN mydebug('{{- Use p_object_id and p_object_type to - }}' ); END IF;
15464 IF p_object_type = 1 THEN
15465 IF (l_debug = 1) THEN mydebug('{{ Select lot_number from MLN}}' ); END IF;
15466 select lot_number
15467 INTO l_object_number
15468 FROM mtl_lot_numbers
15469 WHERE gen_object_id = p_object_id;
15470 ELSIF p_object_type = 2 THEN
15471 IF (l_debug = 1) THEN mydebug('{{ Select serial_number from MSN }}' ); END IF;
15472 SELECT serial_number
15473 INTO l_object_number
15474 FROM mtl_serial_numbers
15475 WHERE gen_object_id = p_object_id;
15476 END IF;
15477 IF (l_debug = 1) THEN mydebug('l_object_number : ' || l_object_number ); END IF;
15478
15479 ELSIF p_object_type is NOT NULL AND p_object_number IS NOT NULL AND p_item_id IS NOT NULL
15480 THEN
15481 IF (l_debug = 1) THEN mydebug('{{- Use p_object_number,p_item_id, p_org_id to - }}' ); END IF;
15482 IF p_object_type = 1 THEN
15483 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MLN }}' ); END IF;
15484 select gen_object_id
15485 INTO l_object_id
15486 FROM mtl_lot_numbers
15487 WHERE organization_id = p_org_id
15488 AND inventory_item_id = p_item_id
15489 AND lot_number = p_object_number;
15490 ELSIF p_object_type = 2 THEN
15491 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MSN}}' ); END IF;
15492 SELECT gen_object_id
15493 INTO l_object_id
15494 FROM mtl_serial_numbers
15495 WHERE current_organization_id = p_org_id
15496 AND inventory_item_id = p_item_id
15497 AND serial_number = p_object_number;
15498 END IF;
15499 IF (l_debug = 1) THEN mydebug('l_object_id2 : ' || l_object_id2 ); END IF;
15500 END IF;
15501 IF p_object_id2 is NOT NULL and p_object_type2 is NOT NULL
15502 THEN
15503 IF (l_debug = 1) THEN mydebug('{{- Use p_object_id2 and p_object_type2 to - }}' ); END IF;
15504 IF p_object_type2 = 1 THEN
15505 IF (l_debug = 1) THEN mydebug('{{ Select lot_number from MLN}}' ); END IF;
15506 select lot_number
15507 INTO l_object_number2
15508 FROM mtl_lot_numbers
15509 WHERE gen_object_id = p_object_id2;
15510 ELSIF p_object_type2 = 2 THEN
15511 IF (l_debug = 1) THEN mydebug('{{ Select serial_number from MSN }}' ); END IF;
15512 SELECT serial_number
15513 INTO l_object_number2
15514 FROM mtl_serial_numbers
15515 WHERE gen_object_id = p_object_id2;
15516 END IF;
15517 IF (l_debug = 1) THEN mydebug('l_object_number2 : ' || l_object_number2 ); END IF;
15518 ELSIF p_object_type2 is NOT NULL AND p_object_number2 IS NOT NULL AND p_item_id IS NOT NULL
15519 THEN
15520 IF (l_debug = 1) THEN mydebug('{{- Use p_object_number2,p_item_id, p_org_id to - }}' ); END IF;
15521 IF p_object_type2 = 1 THEN
15522 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MLN }}' ); END IF;
15523 select gen_object_id
15524 INTO l_object_id2
15525 FROM mtl_lot_numbers
15526 WHERE organization_id = p_org_id
15527 AND inventory_item_id = p_item_id
15528 AND lot_number = p_object_number2;
15529 ELSIF p_object_type = 2 THEN
15530 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MSN}}' ); END IF;
15531 SELECT gen_object_id
15532 INTO l_object_id2
15533 FROM mtl_serial_numbers
15534 WHERE current_organization_id = p_org_id
15535 AND inventory_item_id = p_item_id
15536 AND serial_number = p_object_number2;
15537 END IF;
15538 IF (l_debug = 1) THEN mydebug('l_object_id2 : ' || l_object_id2 ); END IF;
15539 END IF;
15540
15541 IF l_object_id IS NOT NULL OR l_object_number IS NOT NULL OR
15542 l_object_number2 IS NOT NULL OR l_object_id2 IS NOT NULL
15543 THEN
15544 IF p_table = 'MTLI' THEN
15545 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15546 SET parent_object_id = l_object_id
15547 ,parent_object_id2 = l_object_id2
15548 ,parent_object_number = l_object_number
15549 ,parent_object_number2 = l_object_number2
15550 WHERE ROWID = p_rowid;
15551 ELSIF p_table = 'MSNI' THEN
15552 UPDATE MTL_SERIAL_NUMBERS_INTERFACE MSNI
15553 SET parent_object_id = l_object_id
15554 ,parent_object_id2 = l_object_id2
15555 ,parent_object_number = l_object_number
15556 ,parent_object_number2 = l_object_number2
15557 WHERE ROWID = p_rowid;
15558 END IF;
15559 END IF;
15560
15561 EXCEPTION
15562 WHEN OTHERS THEN
15563 IF (l_debug = 1) THEN mydebug('exception WHEN OTHERS'|| x_msg_data || ':' || sqlerrm); END IF;
15564 x_return_status := lg_ret_sts_unexp_error;
15565 ROLLBACK TO sp_validations;
15566
15567 END validate_derive_object_details;
15568
15569
15570 PROCEDURE validate_serial_genealogy_data
15571 ( p_interface_id IN NUMBER
15572 , p_org_id IN NUMBER
15573 , x_return_status OUT NOCOPY VARCHAR2
15574 , x_msg_count OUT NOCOPY NUMBER
15575 , x_msg_data OUT NOCOPY VARCHAR2)
15576 IS
15577 CURSOR cur_MSNI IS
15578 SELECT FM_SERIAL_NUMBER
15579 ,TO_SERIAL_NUMBER
15580 ,PARENT_SERIAL_NUMBER
15581 ,PARENT_OBJECT_TYPE
15582 ,PARENT_OBJECT_ID
15583 ,PARENT_OBJECT_NUMBER
15584 ,PARENT_OBJECT_TYPE2
15585 ,PARENT_OBJECT_ID2
15586 ,PARENT_OBJECT_NUMBER2
15587 ,PARENT_ITEM_ID
15588 ,ROWID
15589 FROM MTL_SERIAL_NUMBERS_INTERFACE
15590 WHERE TRANSACTION_INTERFACE_ID = p_interface_id;
15591
15592 BEGIN
15593 x_return_status := lg_ret_sts_success;
15594 -- Standard Start of API savepoint
15595 SAVEPOINT sp_gen_validations;
15596
15597 g_pkg_name := 'validate_serial_genealogy_data';
15598 IF (l_debug = 1) THEN
15599 mydebug ('p_interface_id : ' || p_interface_id);
15600 mydebug ('p_org_id : ' || p_org_id );
15601 END IF;
15602
15603
15604 FOR rec_MSNI in cur_MSNI
15605 LOOP
15606
15607 IF (l_debug = 1) THEN
15608 mydebug ('FM_SERIAL_NUMBER : ' || rec_MSNI.FM_SERIAL_NUMBER);
15609 mydebug ('TO_SERIAL_NUMBER : ' || rec_MSNI.TO_SERIAL_NUMBER );
15610 mydebug('PARENT_OBJECT_TYPE :' || rec_MSNI.PARENT_OBJECT_TYPE );
15611 mydebug('PARENT_OBJECT_ID :' || rec_MSNI.PARENT_OBJECT_ID );
15612 mydebug('PARENT_OBJECT_NUMBER :' || rec_MSNI.PARENT_OBJECT_NUMBER );
15613 mydebug('PARENT_OBJECT_TYPE2 :' || rec_MSNI.PARENT_OBJECT_TYPE2 );
15614 mydebug('PARENT_OBJECT_ID2 :' || rec_MSNI.PARENT_OBJECT_ID2 );
15615 mydebug('PARENT_OBJECT_NUMBER2:' || rec_MSNI.PARENT_OBJECT_NUMBER2);
15616 mydebug('PARENT_ITEM_ID:' || rec_MSNI.PARENT_ITEM_ID);
15617 mydebug('PARENT_SERIAL_NUMBER:' || rec_MSNI.PARENT_SERIAL_NUMBER);
15618 mydebug('ROWID:' || rec_MSNI.ROWID);
15619 END IF;
15620
15621
15622 IF (rec_MSNI.parent_object_id is NOT NULL AND rec_MSNI.parent_object_type is NOT NULL) OR
15623 (rec_MSNI.parent_object_type is NOT NULL AND rec_MSNI.parent_object_number is NOT NULL
15624 AND rec_MSNI.parent_Item_id IS NOT NULL) THEN
15625 IF (l_debug = 1) THEN
15626 mydebug('{{- Parent details are available - Validation/derivation of }} ' ||
15627 '{{ parent object details is called here}}' );
15628 END IF;
15629 validate_derive_object_details
15630 ( p_org_id => p_org_id
15631 , p_object_type => rec_MSNI.parent_object_type
15632 , p_object_id => rec_MSNI.parent_object_id
15633 , p_object_number => rec_MSNI.parent_object_number
15634 , p_item_id => rec_MSNI.parent_Item_id
15635 , p_object_type2 => rec_MSNI.parent_object_type2
15636 , p_object_id2 => rec_MSNI.parent_object_id2
15637 , p_object_number2 => rec_MSNI.parent_object_number2
15638 , p_serctrl => NULL
15639 , p_lotctrl => NULL
15640 , p_rowid => rec_MSNI.rowid
15641 , p_table => 'MSNI'
15642 , x_return_status => x_return_status
15643 , x_msg_count => x_msg_count
15644 , x_msg_data => x_msg_data);
15645 IF x_return_status <> lg_ret_sts_success THEN
15646 IF (l_debug=1) THEN mydebug(' x_return_status: ' || x_return_status); END IF;
15647 --RAISE lg_exc_error; ????
15648 END IF;
15649 ELSE
15650 IF (l_debug = 1) THEN
15651 mydebug('{{- Parent details are NOT available, so no validations }}' );
15652 END IF;
15653 END IF;
15654 END LOOP;
15655
15656 EXCEPTION WHEN OTHERS THEN
15657 IF (l_debug = 1) THEN mydebug('exception WHEN OTHERS'|| x_msg_data || ':' || sqlerrm); END IF;
15658 x_return_status := lg_ret_sts_unexp_error;
15659 ROLLBACK TO sp_gen_validations;
15660
15661
15662 NULL;
15663
15664 END validate_serial_genealogy_data;
15665
15666 --
15667 -- Name: GET_SERIAL_DIFF_WRP
15668 --
15669 -- Input parameters:
15670 -- p_fm_serial 'from' Serial Number
15671 -- p_to_serial 'to' Serial Number
15672 --
15673 -- Output parameters:
15674 -- return_status quantity between passed serial numbers,
15675 -- 0 if pased serial numbers are invalid.
15676 --
15677 FUNCTION get_serial_diff_wrp(p_fm_serial IN VARCHAR2, p_to_serial IN VARCHAR2)
15678 RETURN NUMBER AS
15679 l_qty NUMBER := 0;
15680 BEGIN
15681 l_qty := inv_serial_number_pub.get_serial_diff(p_fm_serial, p_to_serial);
15682 IF (l_qty <= 0) THEN
15683 return 0;
15684 ELSE
15685 return l_qty;
15686 END IF;
15687
15688 END get_serial_diff_wrp;
15689
15690 END INV_TXN_MANAGER_GRP;