[Home] [Help]
PACKAGE BODY: APPS.INV_TXN_MANAGER_GRP
Source
1 PACKAGE BODY INV_TXN_MANAGER_GRP AS
2 /* $Header: INVTXGGB.pls 120.129.12020000.12 2013/01/10 06:28:01 gausriva 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 --Bug# 10019284
812 SELECT gl.chart_of_accounts_id
813 INTO l_chart
814 FROM hr_organization_information hoi,
815 hr_all_organization_units hou,
816 gl_sets_of_books gl
817 WHERE hoi.organization_id = hou.organization_id
818 AND hoi.org_information1 = TO_CHAR (gl.set_of_books_id)
819 AND hoi.org_information_context = 'Accounting Information'
820 AND hoi.organization_id = p_orgid;
821
822 IF (l_debug = 1) THEN
823 inv_log_util.trace('chart_of_accounts_id:'|| to_char(l_chart), 'INV_TXN_MANAGER_GRP','1');
824 END IF;
825
826 IF fnd_flex_keyval.validate_ccid ( APPL_SHORT_NAME => 'SQLGL'
827 ,KEY_FLEX_CODE => 'GL#'
828 ,STRUCTURE_NUMBER => l_chart
829 ,COMBINATION_ID => p_acctid )
830 THEN
831 catsegs := fnd_flex_keyval.concatenated_values;
832 IF fnd_flex_keyval.validate_segs ( OPERATION => 'CHECK_COMBINATION'
833 ,APPL_SHORT_NAME => 'SQLGL'
834 ,KEY_FLEX_CODE => 'GL#'
835 ,STRUCTURE_NUMBER => l_chart
836 ,CONCAT_SEGMENTS => catsegs
837 ,VALIDATION_DATE => p_txn_date
838 ,VRULE => '\nSUMMARY_FLAG\nI\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWED\nN'||
839 '\0GL_GLOBAL\nDETAIL_POSTING_ALLOWED\nE\nAPPL=INV;NAME=INV_VRULE_POSTING\nN' )
840 THEN
841 IF (l_debug = 1) THEN
842 inv_log_util.trace('Distribution acct id : ' || p_acctid || ' is valid', 'INV_TXN_MANAGER_GRP','1');
843 END IF;
844 RETURN TRUE;
845 ELSE
846 l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
847 IF (l_debug = 1) THEN
848 inv_log_util.trace('Distribution acct id is invalid '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
849 END IF;
850 RETURN FALSE;
851 END IF;
852 ELSE
853 l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
854 IF (l_debug = 1) THEN
855 inv_log_util.trace('Distribution acct id Validation Error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
856 END IF;
857 RETURN FALSE;
858 END IF ;
859
860 EXCEPTION
861 WHEN OTHERS THEN
862 l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
863 IF (l_debug = 1) THEN
864 inv_log_util.trace('Error in validate_acctid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
865 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
866 END IF;
867 RETURN FALSE;
868 END validate_acctid;
869
870 /* getacctid()
871 *
872 ******************************************************************/
873 FUNCTION getacctid(x_acctid OUT NOCOPY NUMBER, p_orgid IN NUMBER, p_rowid IN VARCHAR2)
874 RETURN BOOLEAN
875 IS
876
877 kff fnd_flex_key_api.flexfield_type;
878 str fnd_flex_key_api.structure_type;
879 seg fnd_flex_key_api.segment_type;
880 seg_list fnd_flex_key_api.segment_list;
881 j number;
882 i number;
883 nsegs number;
884 l_popul boolean;
885 segarray fnd_flex_ext.segmentarray;
886 --segarray segment_array;
887 tmp_seg_arr seg_arr_type;
888 concat varchar2(2000);
889 l_chart number;
890 l_acctid number;
891 l_trxdate date; --Bug#5176266.
892 begin
893
894 SELECT DST_SEGMENT1, DST_SEGMENT2, DST_SEGMENT3,
895 DST_SEGMENT4, DST_SEGMENT5, DST_SEGMENT6,
896 DST_SEGMENT7, DST_SEGMENT8, DST_SEGMENT9,
897 DST_SEGMENT10, DST_SEGMENT11, DST_SEGMENT12,
898 DST_SEGMENT13, DST_SEGMENT14, DST_SEGMENT15,
899 DST_SEGMENT16, DST_SEGMENT17, DST_SEGMENT18,
900 DST_SEGMENT19, DST_SEGMENT20, DST_SEGMENT21,
901 DST_SEGMENT22, DST_SEGMENT23, DST_SEGMENT24,
902 DST_SEGMENT25, DST_SEGMENT26, DST_SEGMENT27,
903 DST_SEGMENT28, DST_SEGMENT29, DST_SEGMENT30,
904 TRANSACTION_DATE /*Bug#5176266*/
905 INTO tmp_seg_arr(1).colvalue, tmp_seg_arr(2).colvalue, tmp_seg_arr(3).colvalue,
906 tmp_seg_arr(4).colvalue, tmp_seg_arr(5).colvalue, tmp_seg_arr(6).colvalue,
907 tmp_seg_arr(7).colvalue, tmp_seg_arr(8).colvalue, tmp_seg_arr(9).colvalue,
908 tmp_seg_arr(10).colvalue, tmp_seg_arr(11).colvalue, tmp_seg_arr(12).colvalue,
909 tmp_seg_arr(13).colvalue, tmp_seg_arr(14).colvalue, tmp_seg_arr(15).colvalue,
910 tmp_seg_arr(16).colvalue, tmp_seg_arr(17).colvalue, tmp_seg_arr(18).colvalue,
911 tmp_seg_arr(19).colvalue, tmp_seg_arr(20).colvalue, tmp_seg_arr(21).colvalue,
912 tmp_seg_arr(22).colvalue, tmp_seg_arr(23).colvalue, tmp_seg_arr(24).colvalue,
913 tmp_seg_arr(25).colvalue, tmp_seg_arr(26).colvalue, tmp_seg_arr(27).colvalue,
914 tmp_seg_arr(28).colvalue, tmp_seg_arr(29).colvalue, tmp_seg_arr(30).colvalue,
915 l_trxdate/*Bug#5176266*/
916 FROM MTL_TRANSACTIONS_INTERFACE
917 WHERE ROWID = p_rowid;
918
919 l_popul := FALSE;
920 i := 0;
921 WHILE (i < 30) and (NOT l_popul) loop
922 i := i + 1;
923 IF (tmp_seg_arr(i).colvalue IS NOT NULL) THEN
924 l_popul := TRUE;
925 END IF;
926 END LOOP;
927
928 IF NOT l_popul THEN
929 return true;
930 END IF;
931
932 SELECT CHART_OF_ACCOUNTS_ID
933 INTO l_chart
934 FROM ORG_ORGANIZATION_DEFINITIONS
935 WHERE ORGANIZATION_ID = p_orgid;
936
937
938 kff := fnd_flex_key_api.find_flexfield('SQLGL','GL#');
939 str := fnd_flex_key_api.find_structure(kff, l_chart);
940 fnd_flex_key_api.get_segments(kff, str, TRUE, nsegs, seg_list);
941
942 /*
943 * When the flexfield is defined, the order the segments are displayed
944 * and the order of segment columns need not be the same. For example, a
945 * flexfield may contain 3 segments, which are defined as segment 1, 4 and 3.
946 * The following loop re-arranges the order of the flexfield segments
947 * so that the AOL routine can process it.
948 */
949 for i in 1..nsegs loop
950 seg := fnd_flex_key_api.find_segment(kff, str, seg_list(i));
951 j := 1;
952 while (j <= tmp_seg_arr.count) loop
953 if (seg.column_name = 'SEGMENT' || j) THEN
954 segarray(i) := tmp_seg_arr(j).colvalue;
955 j := tmp_seg_arr.count + 2;
956 else
957 j := j + 1;
958 end if;
959 end loop;
960 if (j = tmp_seg_arr.count + 1) then
961 j := j;
962 --
963 -- Error raise exception.
964 --
965 end if;
966 end loop;
967
968 --
969 -- Now we have the all segment values in correct order in segarray.
970 l_acctid_validated := TRUE; --Bug#4247753
971 --
972 if fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => 'SQLGL',
973 KEY_FLEX_CODE => 'GL#',
974 STRUCTURE_NUMBER => l_chart,
975 N_SEGMENTS => nsegs,
976 VALIDATION_DATE => l_trxdate,/*Bug#5176266*/
977 SEGMENTS => segarray,
978 COMBINATION_ID => l_acctid)
979 then
980
981 /* Bug#4247753. Added call to 'validate_acctid' */
982 IF ( NOT validate_acctid(l_acctid , p_orgid, l_trxdate) ) THEN
983 RETURN FALSE;
984 END IF;
985
986 IF (l_debug = 1) THEN
987 inv_log_util.trace('Distribution acct id : ' || x_acctid, 'INV_TXN_MANAGER_GRP','1');
988 END IF;
989 x_acctid := l_acctid;
990 RETURN TRUE;
991 else
992 l_error_exp := substr(FND_MESSAGE.get,1,240);
993 IF (l_debug = 1) THEN
994 inv_log_util.trace('Distribution acct id error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
995 END IF;
996 RETURN FALSE;
997 end if;
998 --x_acctid := fnd_flex_ext.concatenate_segments(nsegs,segarray, str.segment_separator);
999
1000 EXCEPTION
1001 WHEN NO_DATA_FOUND THEN
1002 FND_MESSAGE.set_name('INV','INV-Database corrupt');
1003 FND_MESSAGE.set_token('ROUTINE','getacctid');
1004 RETURN FALSE;
1005 WHEN OTHERS THEN
1006 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
1007 IF (l_debug = 1) THEN
1008 inv_log_util.trace('Error in getacctid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
1009 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1010 END IF;
1011 x_acctid := NULL;
1012 RETURN FALSE;
1013 END getacctid;
1014
1015 /******************************************************************
1016 -- Procedure
1017 -- getitemid
1018 -- Description
1019 -- find the item_id using the flex field segments
1020 -- Output Parameters
1021 -- x_item_id locator or null if error occurred
1022 ******************************************************************/
1023 FUNCTION getitemid(x_itemid out NOCOPY NUMBER, p_orgid NUMBER, p_rowid VARCHAR2)
1024 RETURN BOOLEAN
1025 IS
1026 l_nseg NUMBER;
1027 l_seglist fnd_flex_key_api.segment_list;
1028 l_segs1 fnd_flex_ext.segmentarray;
1029 l_fftype fnd_flex_key_api.flexfield_type;
1030 l_ffstru fnd_flex_key_api.structure_type;
1031 l_segment_type fnd_flex_key_api.segment_type;
1032 -- Local array to hold the data for getting the cancatenated segment.
1033 l_segmentarray fnd_flex_ext.segmentarray;
1034 l_itemsegs VARCHAR2(32000);
1035 l_delim VARCHAR2(1);
1036 l_result BOOLEAN := FALSE;
1037 BEGIN
1038 -- Getting the segments from MTI
1039 SELECT
1040 ITEM_SEGMENT1,
1041 ITEM_SEGMENT2,
1042 ITEM_SEGMENT3,
1043 ITEM_SEGMENT4,
1044 ITEM_SEGMENT5,
1045 ITEM_SEGMENT6,
1046 ITEM_SEGMENT7,
1047 ITEM_SEGMENT8,
1048 ITEM_SEGMENT9,
1049 ITEM_SEGMENT10,
1050 ITEM_SEGMENT11,
1051 ITEM_SEGMENT12,
1052 ITEM_SEGMENT13,
1053 ITEM_SEGMENT14,
1054 ITEM_SEGMENT15,
1055 ITEM_SEGMENT16,
1056 ITEM_SEGMENT17,
1057 ITEM_SEGMENT18,
1058 ITEM_SEGMENT19,
1059 ITEM_SEGMENT20
1060 INTO
1061 l_segs1(1),
1062 l_segs1(2),
1063 l_segs1(3),
1064 l_segs1(4),
1065 l_segs1(5),
1066 l_segs1(6),
1067 l_segs1(7),
1068 l_segs1(8),
1069 l_segs1(9),
1070 l_segs1(10),
1071 l_segs1(11),
1072 l_segs1(12),
1073 l_segs1(13),
1074 l_segs1(14),
1075 l_segs1(15),
1076 l_segs1(16),
1077 l_segs1(17),
1078 l_segs1(18),
1079 l_segs1(19),
1080 l_segs1(20)
1081 FROM mtl_transactions_interface mti
1082 WHERE mti.rowid = p_rowid;
1083
1084 -- find flex field type
1085 l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MSTK');
1086
1087 -- find flex structure type
1088 l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
1089
1090 -- find segment list for the key flex field
1091 fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
1092
1093 -- find segment delimiter
1094 l_delim := l_ffstru.segment_separator;
1095
1096 -- get the corresponding column for all segments
1097 FOR l_loop IN 1..l_nseg LOOP
1098 l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(l_loop));
1099 -- Bug Fix#4747090
1100 --l_segmentarray contains data in the order flexfield is defined. Used in creating cancatenated segments for validation.
1101 l_segmentarray(l_loop) := l_segs1(To_number(Substr(l_segment_type.column_name, 8)));
1102 END LOOP;
1103 -- Bug Fix#4747090
1104 -- Gets the encoded cancatenated string
1105 l_itemsegs := fnd_flex_ext.concatenate_segments(n_segments => l_nseg,
1106 segments => l_segmentarray,
1107 delimiter => l_delim);
1108 l_result := FND_FLEX_KEYVAL.Validate_Segs(
1109 OPERATION => 'FIND_COMBINATION',
1110 APPL_SHORT_NAME => 'INV',
1111 KEY_FLEX_CODE => 'MSTK',
1112 STRUCTURE_NUMBER => 101,
1113 CONCAT_SEGMENTS => l_itemsegs,
1114 VALUES_OR_IDS => 'I',
1115 DATA_SET => p_orgid,
1116 SELECT_COMB_FROM_VIEW => 'MTL_SYSTEM_ITEMS_FVL') ;
1117
1118 if l_result then
1119 x_itemid := fnd_flex_keyval.combination_id;
1120 else
1121 x_itemid := NULL;
1122 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
1123 inv_log_util.trace('Error in getitemid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
1124 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1125 end if;
1126 return l_result;
1127
1128 END getitemid;
1129
1130
1131 /******************************************************************
1132 -- Procedure
1133 -- getsrcid
1134 -- Description
1135 -- find the Source ID using the flex field segments
1136 -- Output Parameters
1137 -- x_trxsrc transaction source id or null if error occurred
1138 ******************************************************************/
1139 FUNCTION getsrcid(x_trxsrc OUT NOCOPY NUMBER, p_srctype IN NUMBER, p_orgid IN NUMBER, p_rowid IN VARCHAR2)
1140 RETURN BOOLEAN
1141 IS
1142 l_nseg NUMBER;
1143 l_seglist fnd_flex_key_api.segment_list;
1144 l_fftype fnd_flex_key_api.flexfield_type;
1145 l_ffstru fnd_flex_key_api.structure_type;
1146 l_segment_type fnd_flex_key_api.segment_type;
1147 l_structure_list fnd_flex_key_api.structure_list;
1148 l_chart NUMBER;
1149 segarray fnd_flex_ext.segmentarray;
1150 tmp_seg_arr seg_arr_type;
1151 i NUMBER;
1152 j NUMBER;
1153 l_app_shortname VARCHAR2(20);
1154 l_struct_number NUMBER;
1155 l_flex_code VARCHAR2(20);
1156 seg fnd_flex_key_api.segment_type;
1157 l_result boolean; -- Added for bug 3346767
1158
1159 BEGIN
1160 SELECT DSP_SEGMENT1, DSP_SEGMENT2, DSP_SEGMENT3,
1161 DSP_SEGMENT4, DSP_SEGMENT5, DSP_SEGMENT6,
1162 DSP_SEGMENT7, DSP_SEGMENT8, DSP_SEGMENT9,
1163 DSP_SEGMENT10, DSP_SEGMENT11, DSP_SEGMENT12,
1164 DSP_SEGMENT13, DSP_SEGMENT14, DSP_SEGMENT15,
1165 DSP_SEGMENT16, DSP_SEGMENT17, DSP_SEGMENT18,
1166 DSP_SEGMENT19, DSP_SEGMENT20, DSP_SEGMENT21,
1167 DSP_SEGMENT22, DSP_SEGMENT23, DSP_SEGMENT24,
1168 DSP_SEGMENT25, DSP_SEGMENT26, DSP_SEGMENT27,
1169 DSP_SEGMENT28, DSP_SEGMENT29, DSP_SEGMENT30
1170 INTO tmp_seg_arr(1).colvalue, tmp_seg_arr(2).colvalue, tmp_seg_arr(3).colvalue,
1171 tmp_seg_arr(4).colvalue, tmp_seg_arr(5).colvalue, tmp_seg_arr(6).colvalue,
1172 tmp_seg_arr(7).colvalue, tmp_seg_arr(8).colvalue, tmp_seg_arr(9).colvalue,
1173 tmp_seg_arr(10).colvalue, tmp_seg_arr(11).colvalue, tmp_seg_arr(12).colvalue,
1174 tmp_seg_arr(13).colvalue, tmp_seg_arr(14).colvalue, tmp_seg_arr(15).colvalue,
1175 tmp_seg_arr(16).colvalue, tmp_seg_arr(17).colvalue, tmp_seg_arr(18).colvalue,
1176 tmp_seg_arr(19).colvalue, tmp_seg_arr(20).colvalue, tmp_seg_arr(21).colvalue,
1177 tmp_seg_arr(22).colvalue, tmp_seg_arr(23).colvalue, tmp_seg_arr(24).colvalue,
1178 tmp_seg_arr(25).colvalue, tmp_seg_arr(26).colvalue, tmp_seg_arr(27).colvalue,
1179 tmp_seg_arr(28).colvalue, tmp_seg_arr(29).colvalue, tmp_seg_arr(30).colvalue
1180 FROM MTL_TRANSACTIONS_INTERFACE
1181 WHERE ROWID = p_rowid;
1182
1183 SELECT CHART_OF_ACCOUNTS_ID
1184 INTO l_chart
1185 FROM ORG_ORGANIZATION_DEFINITIONS
1186 WHERE ORGANIZATION_ID = p_orgid;
1187
1188
1189 -- find flex field type
1190 -- find flex structure type
1191 l_app_shortname := 'INV';
1192 l_struct_number := 101;
1193 IF (p_srctype = 2) OR (p_srctype = 8) THEN
1194 l_flex_code := 'MKTS';
1195 ELSE
1196 IF (p_srctype = 3) THEN
1197 l_app_shortname := 'SQLGL';
1198 l_flex_code := 'GL#';
1199 l_struct_number := l_chart;
1200 ELSE
1201 IF (p_srctype = 6) THEN
1202 l_flex_code := 'MDSP';
1203 END IF;
1204 END IF;
1205 END IF;
1206
1207 l_fftype := fnd_flex_key_api.find_flexfield(l_app_shortname,l_flex_code);
1208 l_ffstru := fnd_flex_key_api.find_structure(l_fftype, l_struct_number);
1209
1210 -- find segment list for the key flex field
1211 fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
1212
1213 /*
1214 * When the flexfield is defined, the order the segments are displayed
1215 * and the order of segment columns need not be the same. For example, a
1216 * flexfield may contain 3 segments, which are defined as segment 1, 4 and 3.
1217 * The following loop re-arranges the order of the flexfield segments
1218 * so that the AOL routine can process it.
1219 */
1220 for i in 1..l_nseg loop
1221 seg := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(i));
1222 j := 1;
1223 while (j <= tmp_seg_arr.count) loop
1224 if (seg.column_name = 'SEGMENT' || j) THEN
1225 segarray(i) := tmp_seg_arr(j).colvalue;
1226 j := tmp_seg_arr.count + 2;
1227 else
1228 j := j + 1;
1229 end if;
1230 end loop;
1231 if (j = tmp_seg_arr.count + 1) then
1232 j := j;
1233 --
1234 -- Error raise exception.
1235 --
1236 end if;
1237 end loop;
1238
1239 --
1240 -- Now we have the all segment values in correct order in segarray.
1241 --
1242 -- Bug 3273172 Added DATA_SET => p_orgid to the below FND call
1243 -- Changed for bug 3346767
1244 IF (p_srctype = 6) THEN
1245 l_result := fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => l_app_shortname,
1246 KEY_FLEX_CODE => l_flex_code,
1247 STRUCTURE_NUMBER => l_struct_number,
1248 VALIDATION_DATE => sysdate,
1249 N_SEGMENTS => l_nseg,
1250 SEGMENTS => segarray,
1251 COMBINATION_ID => x_trxsrc,
1252 DATA_SET => p_orgid);
1253 ELSE
1254 l_result := fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => l_app_shortname,
1255 KEY_FLEX_CODE => l_flex_code,
1256 STRUCTURE_NUMBER => l_struct_number,
1257 VALIDATION_DATE => sysdate,
1258 N_SEGMENTS => l_nseg,
1259 SEGMENTS => segarray,
1260 COMBINATION_ID => x_trxsrc);
1261 END IF;
1262 if l_result then
1263 IF (l_debug = 1) THEN
1264 inv_log_util.trace('Transaction Source ID : ' || x_trxsrc, 'INV_TXN_MANAGER_GRP','1');
1265 END IF;
1266 RETURN TRUE;
1267 else
1268 l_error_exp := substr(FND_MESSAGE.get,1,240);
1269 IF (l_debug = 1) THEN
1270 inv_log_util.trace('Transaction Source ID error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1'
1271 );
1272 END IF;
1273 RETURN FALSE;
1274 end if;
1275
1276 EXCEPTION
1277 WHEN OTHERS THEN
1278 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
1279 IF (l_debug = 1) THEN
1280 inv_log_util.trace('Error in getsrcid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
1281 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1282 END IF;
1283 x_trxsrc := NULL;
1284 return FALSE;
1285
1286 END getsrcid;
1287
1288 /******************************************************************
1289 *
1290 * errupdate()
1291 *
1292 ******************************************************************/
1293
1294 /* Bug 5343678 rowid is a keyword so we should never pass it as parameter */
1295 /* Also passed the reqd number of parameters in all places just to avoid confusion as
1296 parameter name is not prefixed in any of the calls */
1297
1298 PROCEDURE errupdate(p_rowid IN VARCHAR2 DEFAULT NULL, lot_rowid IN VARCHAR2 DEFAULT NULL)
1299 IS
1300
1301 l_userid NUMBER := -1; -- = prg_info.userid;
1302 l_reqstid NUMBER := -1; -- = prg_info.reqstid;
1303 l_applid NUMBER := -1; -- = prg_info.appid;
1304 l_progid NUMBER := -1; -- = prg_info.progid;
1305 l_loginid NUMBER := -1; --= prg_info.loginid;
1306 BEGIN
1307
1308 -- WHENEVER NOT FOUND CONTINUE;
1309 --Jalaj Srivastava Bug 4969885
1310 --if errors are for lot record then also update MLTI
1311 IF (lot_rowid IS NOT NULL) THEN
1312
1313 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
1314 SET LAST_UPDATE_DATE = SYSDATE,
1315 LAST_UPDATED_BY = l_userid,
1316 LAST_UPDATE_LOGIN = l_loginid,
1317 PROGRAM_UPDATE_DATE = SYSDATE,
1318 ERROR_CODE = substrb(l_error_code,1,240)
1319 WHERE ROWID = lot_rowid;
1320 END IF;
1321 IF (p_rowid IS NOT NULL) THEN
1322 UPDATE MTL_TRANSACTIONS_INTERFACE
1323 SET ERROR_CODE = substrb(l_error_code,1,240),
1324 ERROR_EXPLANATION = substrb(l_error_exp,1,240),
1325 LAST_UPDATE_DATE = sysdate,
1326 LAST_UPDATED_BY = l_userid,
1327 LAST_UPDATE_LOGIN = l_loginid,
1328 PROGRAM_UPDATE_DATE = SYSDATE,
1329 PROCESS_FLAG = 3,
1330 LOCK_FLAG = 2
1331 WHERE ROWID = p_rowid;
1332 END IF;
1333 return;
1334
1335 EXCEPTION
1336 WHEN OTHERS THEN
1337 RETURN;
1338 END errupdate;
1339
1340
1341
1342 /******************************************************************
1343 -- Procedure
1344 -- derive_segment_ids
1345 -- Description
1346 -- derive segment-ids based on segment values
1347 -- Output Parameters
1348 --
1349 ******************************************************************/
1350 PROCEDURE derive_segment_ids(p_header_id NUMBER, x_return_status OUT NOCOPY VARCHAR2,
1351 x_msg_count OUT NOCOPY NUMBER, x_msg_data OUT NOCOPY VARCHAR2)
1352 IS
1353 CURSOR c_mti IS
1354 SELECT inventory_item_id,
1355 organization_id,
1356 distribution_account_id,
1357 transaction_source_type_id,
1358 transaction_source_id,
1359 transaction_date, --Bug#5176266.
1360 rowid
1361 FROM MTL_TRANSACTIONS_INTERFACE
1362 WHERE transaction_header_id = p_header_id
1363 AND process_flag = 1
1364 AND (inventory_item_id is NULL OR distribution_account_id is NULL
1365 OR
1366 (transaction_source_id is NULL AND transaction_source_type_id in (2,3,6,8))); --Bug 2971400
1367
1368 l_itemid MTL_TRANSACTIONS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
1369 l_acctid MTL_TRANSACTIONS_INTERFACE.DISTRIBUTION_ACCOUNT_ID%TYPE;
1370 l_srctype MTL_TRANSACTIONS_INTERFACE.TRANSACTION_SOURCE_TYPE_ID%TYPE;
1371 l_trxsrc MTL_TRANSACTIONS_INTERFACE.TRANSACTION_SOURCE_ID%TYPE;
1372 l_trxdate MTL_TRANSACTIONS_INTERFACE.TRANSACTION_DATE%TYPE; --Bug#5176266.
1373 BEGIN
1374
1375 FOR c_mti_row in c_mti LOOP
1376 l_acctid := c_mti_row.distribution_account_id;
1377 l_itemid := c_mti_row.inventory_item_id;
1378 l_srctype := c_mti_row.transaction_source_type_id;
1379 l_trxsrc := c_mti_row.transaction_source_id;
1380 l_trxdate :=c_mti_row.transaction_date; --Bug#5176266.
1381
1382 IF (l_itemid IS NULL) THEN
1383 IF (NOT getitemid(l_itemid, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1384 l_error_exp := FND_MESSAGE.get;
1385
1386 FND_MESSAGE.set_name('INV', 'INV_INT_ITMSEGCODE');
1387 l_error_code := FND_MESSAGE.get;
1388
1389 errupdate(c_mti_row.rowid,null);
1390 END IF;
1391 END IF;
1392 /* Bug 3273172,moved the below code here
1393 for Account, Account Alias source is populated first before getting the account */
1394 IF ( ( l_srctype=INV_Globals.G_SourceType_SalesOrder OR
1395 l_srctype = INV_Globals.G_SourceType_Account OR
1396 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
1397 l_srctype = INV_Globals.G_SourceType_IntOrder)
1398 AND (l_trxsrc is NULL) ) THEN
1399 IF ( NOT getsrcid(l_trxsrc, l_srctype, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1400 l_error_exp := FND_MESSAGE.get;
1401
1402 FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
1403 l_error_code := FND_MESSAGE.get;
1404
1405 errupdate(c_mti_row.rowid,null);
1406 END IF;
1407 END IF;
1408 l_acctid_validated := FALSE; --Bug#4247753
1409 IF (l_acctid IS NULL) THEN
1410 IF (l_srctype = 3 OR l_srctype = 6) THEN
1411 IF (l_srctype = 6) THEN
1412 SELECT DISTRIBUTION_ACCOUNT
1413 INTO l_acctid
1414 FROM MTL_GENERIC_DISPOSITIONS
1415 WHERE ORGANIZATION_ID = c_mti_row.organization_id
1416 AND DISPOSITION_ID = l_trxsrc;
1417 ELSE
1418 l_acctid := l_trxsrc;
1419 END IF;
1420
1421 ELSE
1422 IF (NOT getacctid(l_acctid, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1423 --l_error_exp := FND_MESSAGE.get; --Bug#4247753. Error Explaination is
1424 --already set in getacctid()
1425 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
1426 l_error_code := FND_MESSAGE.get;
1427
1428 errupdate(c_mti_row.rowid,null);
1429 END IF;
1430 END IF;
1431 END IF;
1432
1433 --Bug#4247753 calling the functon, validate_acctid() for validating the Account combination ID
1434 IF ( l_acctid IS NOT NULL AND (NOT l_acctid_validated)) THEN
1435 IF ( NOT validate_acctid(l_acctid, c_mti_row.organization_id, l_trxdate)) THEN
1436 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
1437 l_error_code := FND_MESSAGE.get;
1438 errupdate(c_mti_row.rowid,null);
1439 END IF;
1440 END IF;
1441
1442 /* Bug 2971400 populating transaction source id */
1443 /* Bug 3273172,Moving the below code to above
1444 IF ( ( l_srctype=INV_Globals.G_SourceType_SalesOrder OR
1445 l_srctype = INV_Globals.G_SourceType_Account OR
1446 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
1447 l_srctype = INV_Globals.G_SourceType_IntOrder)
1448 AND (l_trxsrc is NULL) ) THEN
1449 IF ( NOT getsrcid(l_trxsrc, l_srctype, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1450 l_error_exp := FND_MESSAGE.get;
1451
1452 FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
1453 l_error_code := FND_MESSAGE.get;
1454
1455 errupdate(c_mti_row.rowid,null);
1456 END IF;
1457
1458 END IF; */
1459
1460 UPDATE MTL_TRANSACTIONS_INTERFACE
1461 SET inventory_item_id = l_itemid,
1462 distribution_account_id = l_acctid,
1463 transaction_source_id = l_trxsrc
1464 WHERE rowid = c_mti_row.rowid;
1465
1466 END LOOP;
1467
1468 EXCEPTION
1469 WHEN OTHERS THEN
1470 IF (l_debug = 1) THEN
1471 inv_log_util.trace('Error in derive_segment_ids : ' || l_error_exp, 'INV_TXN_MANAGER_GRP ','1');
1472 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1473 END IF;
1474 x_return_status := FND_API.G_RET_STS_ERROR;
1475
1476 END derive_segment_ids;
1477
1478 -----------------------------------------------------------------------
1479 -- Name : validate_quantities
1480 -- Desc : This procedure is used to validate transaction quantity2
1481 --
1482 -- I/P Params :
1483 -- All the relevant transaction details :
1484 -- - organization id
1485 -- - item_id
1486 -- - lot, revision, subinventory
1487 -- - transaction quantities
1488 -- O/P Params :
1489 -- x_rerturn_status.
1490 -- RETURN VALUE :
1491 -- TRUE : IF the transaction is valid regarding Quantity2 and lot indivisible
1492 -- FALSE : IF the transaction is NOT valid regarding Quantity2 and lot indivisible
1493 --
1494 -- HISTORY
1495 -- Jalaj Srivastava Bug 4969885
1496 -- Added parameter p_lot_rowid
1497 -- Jalaj Srivastava Bug 5446542
1498 -- Check for lot indivisibility here
1499 -- Make sure that lot indivisibility api is called
1500 -- with primary quantity
1501 -----------------------------------------------------------------------
1502 FUNCTION validate_quantities(
1503 p_rowid IN VARCHAR2
1504 , p_lot_rowid IN VARCHAR2
1505 , p_transaction_type_id IN NUMBER
1506 , p_organization_id IN NUMBER
1507 , p_inventory_item_id IN NUMBER
1508 , p_revision IN VARCHAR2
1509 , p_subinventory_code IN VARCHAR2
1510 , p_locator_id IN NUMBER
1511 , p_lot_number IN VARCHAR2
1512 , p_transaction_quantity IN OUT NOCOPY NUMBER
1513 , p_transaction_uom IN VARCHAR2
1514 , p_secondary_quantity IN OUT NOCOPY NUMBER
1515 , p_secondary_uom_code IN OUT NOCOPY VARCHAR2)
1516 RETURN BOOLEAN
1517 IS
1518 l_lot_divisible_flag VARCHAR2(1);
1519 l_tracking_quantity_ind VARCHAR2(30);
1520 l_secondary_default_ind VARCHAR2(30);
1521 l_secondary_uom_code VARCHAR2(3);
1522 l_secondary_qty NUMBER;
1523 l_transaction_quantity NUMBER;
1524 l_lot_indiv_trx_valid BOOLEAN;
1525 l_msg VARCHAR2(4000);
1526 l_msg_index_out pls_integer;
1527 l_return_status varchar2(1);
1528 l_msg_data varchar2(4000);
1529 l_msg_count pls_integer;
1530 l_primary_uom_code VARCHAR2(3);--Bug 5446542
1531 l_primary_quantity NUMBER;--Bug 5446542
1532
1533 CURSOR get_item_details( org_id IN NUMBER
1534 , item_id IN NUMBER) IS
1535 SELECT lot_divisible_flag
1536 , tracking_quantity_ind
1537 , secondary_default_ind
1538 , secondary_uom_code
1539 , primary_uom_code /* Bug 5446542 */
1540 FROM mtl_system_items
1541 WHERE organization_id = org_id
1542 AND inventory_item_id = item_id;
1543
1544 CURSOR check_gme_reversal IS
1545 SELECT count(1)
1546 FROM gme_transaction_pairs gtp, MTL_TRANSACTIONS_INTERFACE mti
1547 WHERE mti.rowid = p_rowid
1548 AND gtp.batch_id = mti.transaction_source_id
1549 AND gtp.material_detail_id = mti.trx_source_line_id
1550 AND transaction_id1 = mti.source_line_id
1551 AND pair_type = gme_common_pvt.g_pairs_reversal_type;
1552 l_is_reversal NUMBER := 0;
1553 CURSOR get_transaction_details( trx_type_id IN NUMBER) IS
1554 SELECT transaction_action_id
1555 , transaction_source_type_id
1556 FROM mtl_transaction_types
1557 WHERE transaction_type_id = trx_type_id;
1558 l_transaction_action_id NUMBER;
1559 l_transaction_source_type_id NUMBER;
1560 x_primary_quantity NUMBER; /* Fix for Bug#11729772*/
1561 x_secondary_quantity NUMBER; /* Fix for Bug#11729772 */
1562
1563 /*Bug#14700832 Start*/
1564 l_is_yield_correction NUMBER := 0;
1565 CURSOR check_yield_correction IS
1566 SELECT 1
1567 FROM mtl_material_transactions mmt,mtl_transaction_lot_numbers mtln,
1568 mtl_transactions_interface mti, mtl_transaction_lots_interface mtli
1569 WHERE mti.ROWID = p_rowid
1570 AND mtli.ROWID = p_lot_rowid
1571 AND mmt.transaction_id = mti.transaction_sequence_id
1572 AND mmt.transaction_id = mtln.transaction_id
1573 AND Abs(mmt.transaction_quantity) = Abs(mti.transaction_quantity)
1574 AND mmt.subinventory_code = mti.subinventory_code
1575 AND nvl(mmt.locator_id,0) = nvl(mti.locator_id,0)
1576 AND mtln.lot_number = mtli.lot_number
1577 AND Abs(mtln.transaction_quantity) = Abs(mtli.transaction_quantity) ;
1578 /*Bug#14700832 End*/
1579
1580
1581 BEGIN
1582 IF (l_debug is null)
1583 THEN
1584 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1585 END IF;
1586
1587 IF (l_debug = 1) THEN
1588 inv_log_util.trace('validate_quantities: Start ', 'INV_TXN_MANAGER_GRP', 9);
1589 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);
1590 inv_log_util.trace('txn uom='||p_transaction_uom||' qty='||to_char(p_transaction_quantity), 'INV_TXN_MANAGER_GRP', 9);
1591 inv_log_util.trace('sec uom='||p_secondary_uom_code||' qty='||to_char(p_secondary_quantity), 'INV_TXN_MANAGER_GRP', 9);
1592 END IF;
1593
1594
1595 /* =======================================================================
1596 Init variables
1597 ======================================================================= */
1598 OPEN get_item_details( p_organization_id
1599 , p_inventory_item_id);
1600 FETCH get_item_details
1601 INTO l_lot_divisible_flag
1602 , l_tracking_quantity_ind
1603 , l_secondary_default_ind
1604 , l_secondary_uom_code
1605 , l_primary_uom_code;/* Bug 5446542 */
1606 --Item has already been validated
1607 --no need to check for no_data_found
1608 CLOSE get_item_details;
1609 --{
1610 IF (l_tracking_quantity_ind = 'PS') THEN
1611
1612 /** Quantity Validation **/
1613 IF (p_transaction_quantity IS NULL AND p_secondary_quantity IS NULL) THEN
1614 IF (l_debug = 1) THEN
1615 inv_log_util.trace('validate_quantities: both transaction and secondary quantities are null', 'INV_TXN_MANAGER_GRP', 9);
1616 END IF;
1617 loaderrmsg('INV_INT_QTYCODE','INV_INT_QTYCODE');
1618 errupdate(p_rowid, p_lot_rowid);
1619 return false;
1620 END IF;
1621
1622 -- the item is DUOM controlled
1623
1624 /** UOM Validation **/
1625 IF (p_secondary_uom_code <> l_secondary_uom_code) THEN
1626 IF (l_debug = 1) THEN
1627 inv_log_util.trace('validate_quantities: sec uom passed in not same as item sec uom', 'INV_TXN_MANAGER_GRP', 9);
1628 END IF;
1629 loaderrmsg('INV_INCORRECT_SECONDARY_UOM','INV_INCORRECT_SECONDARY_UOM');
1630 errupdate(p_rowid, p_lot_rowid);
1631 return false;
1632 END IF;
1633 -- Set the default UOM2 if missing
1634 IF (p_secondary_uom_code IS NULL) THEN
1635 p_secondary_uom_code := l_secondary_uom_code;
1636 END IF;
1637 IF (l_debug = 1) THEN
1638 inv_log_util.trace('validate_quantities: assigned sec uom='||p_secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
1639 END IF;
1640 -- Set the Qty2 from Qty1 if missing:
1641 --{
1642 IF (p_secondary_quantity IS NULL) THEN
1643 l_secondary_qty := INV_CONVERT.INV_UM_CONVERT
1644 ( item_id => p_inventory_item_id
1645 ,lot_number => p_lot_number
1646 ,organization_id => p_organization_id
1647 ,precision => 5
1648 ,from_quantity => p_transaction_quantity
1649 ,from_unit => p_transaction_uom
1650 ,to_unit => p_secondary_uom_code
1651 ,from_name => NULL
1652 ,to_name => NULL);
1653
1654 IF (l_secondary_qty = -99999) THEN
1655 IF (l_debug = 1) THEN
1656 inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT error while calculating sec qty', 'INV_TXN_MANAGER_GRP', 9);
1657 END IF;
1658 loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1659 errupdate(p_rowid, p_lot_rowid);
1660 return false;
1661 END IF;
1662 p_secondary_quantity := l_secondary_qty;
1663 IF (l_debug = 1) THEN
1664 inv_log_util.trace('validate_quantities: new secondary qty is: '|| l_secondary_qty , 'INV_TXN_MANAGER_GRP', 9);
1665 END IF;
1666 END IF;--}
1667
1668 -- Set the Qty1 from Qty2 if missing:
1669 --{
1670 IF (p_transaction_quantity IS NULL) THEN
1671 l_transaction_quantity := INV_CONVERT.INV_UM_CONVERT
1672 ( item_id => p_inventory_item_id
1673 , lot_number => p_lot_number
1674 , organization_id => p_organization_id
1675 , precision => 5
1676 , from_quantity => p_secondary_quantity
1677 , from_unit => p_secondary_uom_code
1678 , to_unit => p_transaction_uom
1679 , from_name => NULL
1680 , to_name => NULL);
1681
1682 IF (l_transaction_quantity = -99999) THEN
1683 IF (l_debug = 1) THEN
1684 inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT ERROR while calculating transaction quantity', 'INV_TXN_MANAGER_GRP', 9);
1685 END IF;
1686 loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1687 errupdate(p_rowid, p_lot_rowid);
1688 return false;
1689 END IF;
1690 p_transaction_quantity := l_transaction_quantity;
1691 IF (l_debug = 1) THEN
1692 inv_log_util.trace('validate_quantities: new transaction qty is: '|| l_transaction_quantity , 'INV_TXN_MANAGER_GRP', 9);
1693 END IF;
1694 END IF;--}
1695
1696 --Jalaj Srivastava Bug 4969885
1697 --We will not check for deviation
1698 --calling programs and customers should validate for deviation
1699 --before loading in mti
1700 ELSE
1701 --tracking is in primary
1702 p_secondary_quantity := NULL;
1703 p_secondary_uom_code := NULL;
1704 END IF;--}
1705
1706 --Jalaj Srivastava Bug 5446542
1707 --Lot indivisibility check will be done here
1708 -- Lot Indivisible Validation
1709 --{
1710 IF (l_lot_divisible_flag = 'N') THEN
1711 --Jalaj Srivastava Bug 5446542
1712 --if txn uom is not same as the primary uom then
1713 --convert txn qty to prim qty.
1714 IF (l_primary_uom_code <> p_transaction_uom) THEN
1715 l_primary_quantity := INV_CONVERT.INV_UM_CONVERT
1716 ( item_id => p_inventory_item_id
1717 ,lot_number => p_lot_number
1718 ,organization_id => p_organization_id
1719 ,precision => 5
1720 ,from_quantity => p_transaction_quantity
1721 ,from_unit => p_transaction_uom
1722 ,to_unit => l_primary_uom_code
1723 ,from_name => NULL
1724 ,to_name => NULL);
1725
1726 IF (l_primary_quantity = -99999) THEN
1727 IF (l_debug = 1) THEN
1728 inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT error while calculating primary qty', 'INV_TXN_MANAGER_GRP', 9);
1729 END IF;
1730 loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1731 errupdate(p_rowid, p_lot_rowid);
1732 return false;
1733 END IF;
1734 ELSE
1735 l_primary_quantity := p_transaction_quantity;
1736 END IF;
1737 /*Bug,9717803 start Avoiding the indivisible lot validation for the reversal transactions */
1738 OPEN get_transaction_details(p_transaction_type_id);
1739 FETCH get_transaction_details
1740 INTO l_transaction_action_id
1741 , l_transaction_source_type_id;
1742 IF (get_transaction_details%NOTFOUND)
1743 THEN
1744 CLOSE get_transaction_details;
1745 FND_MESSAGE.SET_NAME('INV','TRX_TYPE_NOT_FOUND');
1746 FND_MESSAGE.SET_TOKEN('TRANSACTION_TYPE_ID', p_transaction_type_id);
1747 FND_MSG_PUB.ADD;
1748 RAISE FND_API.G_EXC_ERROR;
1749 END IF;
1750 CLOSE get_transaction_details;
1751
1752 IF l_transaction_source_type_id = 5 AND l_transaction_action_id =32 THEN
1753 OPEN check_gme_reversal;
1754 FETCH check_gme_reversal INTO l_is_reversal;
1755 CLOSE check_gme_reversal;
1756 END IF;
1757 IF (l_debug = 1) THEN
1758 inv_log_util.trace('validate_quantities: check for lot indivisibility,gme_reversal'||l_is_reversal, 'INV_TXN_MANAGER_GRP', 9);
1759 END IF;
1760
1761 IF l_is_reversal <> 1 THEN
1762 /*Bug,9717803 END Avoiding the indivisible lot validation for the reversal transactions */
1763
1764 l_lot_indiv_trx_valid := INV_LOT_API_PUB.VALIDATE_LOT_INDIVISIBLE
1765 ( p_api_version => 1.0
1766 , p_init_msg_list => fnd_api.g_false
1767 , p_transaction_type_id => p_transaction_type_id
1768 , p_organization_id => p_organization_id
1769 , p_inventory_item_id => p_inventory_item_id
1770 , p_revision => p_revision
1771 , p_subinventory_code => p_subinventory_code
1772 , p_locator_id => p_locator_id
1773 , p_lot_number => p_lot_number
1774 , p_primary_quantity => l_primary_quantity /* Bug 5446542: pass primary qty and not txn qty */
1775 , p_secondary_quantity => p_secondary_quantity /* Fix for Bug#11729772 */
1776 , p_qoh => NULL
1777 , p_atr => NULL
1778 , x_primary_quantity => x_primary_quantity /* Fix for Bug#11729772 */
1779 , x_secondary_quantity => x_secondary_quantity /* Fix for Bug#11729772 */
1780 , x_return_status => l_return_status
1781 , x_msg_count => l_msg_count
1782 , x_msg_data => l_msg_data);
1783
1784 IF (NOT l_lot_indiv_trx_valid) THEN
1785 /*Bug#14700832 Start */
1786 /*check if it is a valid yield correction with a transaction date */
1787 IF l_transaction_source_type_id = 5 AND l_transaction_action_id =31 THEN
1788 OPEN check_yield_correction;
1789 FETCH check_yield_correction INTO l_is_yield_correction;
1790 CLOSE check_yield_correction;
1791
1792 IF l_is_yield_correction = 1 THEN
1793 IF (l_debug = 1) THEN
1794 inv_log_util.trace('validate_quantities: End .... ', 'INV_TXN_MANAGER_GRP', 9);
1795 END IF;
1796 RETURN TRUE;
1797 END IF;
1798 END IF;
1799 /*Bug#14700832 End*/
1800
1801 --the transaction is not valid regarding lot indivisible:
1802 IF (l_debug = 1) THEN
1803 inv_log_util.trace('validate_quantities: Failed check for lot indivisibility', 'INV_TXN_MANAGER_GRP', 9);
1804 END IF;
1805 RAISE FND_API.G_EXC_ERROR;
1806 END IF;
1807
1808 END IF;
1809 IF (l_debug = 1) THEN
1810 inv_log_util.trace('validate_quantities: passed check for lot indivisibility', 'INV_TXN_MANAGER_GRP', 9);
1811 END IF;
1812
1813 END IF;--} -- l_lot_divisible_flag = 'N'
1814
1815 IF (l_debug = 1) THEN
1816 inv_log_util.trace('validate_quantities: End .... ', 'INV_TXN_MANAGER_GRP', 9);
1817 END IF;
1818
1819 RETURN TRUE;
1820
1821 EXCEPTION
1822 WHEN FND_API.G_EXC_ERROR THEN
1823 FND_MSG_PUB.Get(
1824 p_msg_index => 1,
1825 p_data => l_msg,
1826 p_encoded => FND_API.G_FALSE,
1827 p_msg_index_out => l_msg_index_out);
1828
1829 l_error_exp := l_msg;
1830 l_error_code := l_msg;
1831
1832 IF (l_debug = 1) THEN
1833 inv_log_util.trace('validate_quantities: FND_API.G_EXC_ERROR ' || l_error_code, 'INV_TXN_MANAGER_GRP', 9);
1834 END IF;
1835
1836 errupdate(p_rowid, p_lot_rowid);
1837 RETURN FALSE;
1838
1839 WHEN OTHERS THEN
1840 IF (l_debug = 1) THEN
1841 inv_log_util.trace('validate_quantities: when others'||substr(sqlerrm,1,240),'INV_TXN_MANAGER_GRP',1);
1842 END IF;
1843 RETURN FALSE;
1844
1845 END validate_quantities;
1846
1847
1848 /******************************************************************
1849 *
1850 * validate_group
1851 * Validate a group of MTI records in a batch together
1852
1853 * J-dev (WIP related validations)
1854 * For patchet J, wip desktop transactions will be inserted into MTI,
1855 * validated by INV and moved to MMTT. Since WIP already does some
1856 * validations, we will by-pass some validation done here (based on the
1857 * variable l_validation_full)
1858 * The validation to be done for WIP desktop are:
1859 * MTI WIP Validation
1860 * DESKTOP WIP TRANSACTIONS
1861 * 1. Flow Schedule will only exist for WIP Transactions
1862 * 2. Derive Transaction_action_id and Transaction_source_type_id
1863 * from transaction_type_id
1864 * 3. Validate Shippable_flag records in MTI have transaction_enabled items.
1865 * 4. Validate Inventory_item_flag, Inventory_asset_flag Costing Enabled_Flag
1866 * 5. Validate Subinventory_code(disabled ?)
1867 * 6. Validate Transfer Subinventory(disabled ?)
1868 * 7. Validate Restricted Subinventories
1869 * 8. Validate Subinventory for the following:
1870 * -You cannot issue from non tracked
1871 * - You cannot transfer from expense sub to asset sub for asset items
1872 * -If the expense to asset transfer allowed profile is set then
1873 * You cannot issue from a non-tracked sub
1874 * All other transfers are valid
1875 * 9. Validate Transaction_type_id (disable date )
1876 * 10. Validate Transaction_action(currently we do not support cycle
1877 * count
1878 * and some internal orders through MTI)
1879 * 11. Validate Organization(disable date)
1880 * 12. Validate Locators(disable date)
1881 * 13. Validate Revision ( should exists in mtl_item_revisions,
1882 * we do not validate against disbaled_date for revision).
1883 * 14. Validate Transaction reasons(disable date)
1884 * 15. Validate Transaction Qty Sign
1885 * 16. Validate OverCompletion Trx qtyshould not be -ve or greater
1886 * than the transaction qty.
1887 * 17. Validate Distribution Account
1888 *(if dist account id is not null or if null,should be an asset item/sub)
1889 *18. Validate transaction UOM
1890 *19. Validate cost_group, Xfr cost Groups
1891 * 20. Validate VMI: po_asl_attributes
1892 * 21. Validate LPN, Xfr LPN, Contenet LPN
1893 * All Other validations will be by-passed
1894 ******************************************************************/
1895 PROCEDURE validate_group(
1896 p_header_id NUMBER,
1897 x_return_status OUT NOCOPY VARCHAR2,
1898 x_msg_count OUT NOCOPY NUMBER,
1899 x_msg_data OUT NOCOPY VARCHAR2,
1900 p_userid NUMBER,
1901 p_loginid NUMBER,
1902 p_validation_level NUMBER:= fnd_api.g_valid_level_full)
1903 IS
1904
1905 srctypeid NUMBER;
1906 tvu_flow_schedule VARCHAR2(50);
1907 tev_scheduled_flag NUMBER;
1908 flow_schedule_children VARCHAR2(50);
1909 l_count NUMBER;
1910 l_profile VARCHAR2(100);
1911 EXP_TO_AST_ALLOWED NUMBER;
1912 EXP_TYPE_REQUIRED NUMBER;
1913 NUMHOLD NUMBER:=0;
1914 l_validate_full BOOLEAN := TRUE; --J-dev
1915
1916 -- INVCONV start fabdi
1917 -- new cursor AA2
1918 CURSOR AA2 IS
1919 SELECT
1920 ROWID,
1921 TRANSACTION_TYPE_ID,
1922 ORGANIZATION_ID,
1923 INVENTORY_ITEM_ID,
1924 REVISION,
1925 SUBINVENTORY_CODE,
1926 LOCATOR_ID,
1927 TRANSACTION_QUANTITY,
1928 TRANSACTION_UOM,
1929 SECONDARY_TRANSACTION_QUANTITY,
1930 SECONDARY_UOM_CODE
1931 FROM MTL_TRANSACTIONS_INTERFACE
1932 WHERE TRANSACTION_HEADER_ID = p_header_id
1933 AND PROCESS_FLAG = 1
1934 ORDER BY ORGANIZATION_ID,INVENTORY_ITEM_ID,REVISION,
1935 SUBINVENTORY_CODE,LOCATOR_ID;
1936
1937 l_transaction_quantity NUMBER ;
1938 l_transaction_uom_code VARCHAR(3);
1939 l_secondary_quantity NUMBER;
1940 l_secondary_uom_code VARCHAR(3);
1941 l_return_status VARCHAR(3);
1942 l_msg_count NUMBER;
1943 l_msg_data VARCHAR(200);
1944
1945 l_transaction_type_id NUMBER;
1946 l_organization_id NUMBER;
1947 l_inventory_item_id NUMBER;
1948 l_revision VARCHAR(3);
1949 l_subinventory_code VARCHAR(10);
1950 l_locator_id NUMBER;
1951 l_rowid VARCHAR(31);
1952 l_tracking_quantity_ind mtl_system_items_b.tracking_quantity_ind%TYPE;
1953 l_item_secondary_uom_code mtl_system_items_b.secondary_uom_code%TYPE;
1954
1955 l_qty_check BOOLEAN;
1956 l_lot_control_code number;
1957
1958 /* get lot control flag */
1959 CURSOR get_item_info( org_id IN NUMBER
1960 , item_id IN NUMBER) IS
1961 SELECT lot_control_code, tracking_quantity_ind, secondary_uom_code
1962 FROM mtl_system_items
1963 WHERE organization_id = org_id
1964 AND inventory_item_id = item_id;
1965
1966 -- INVCONV end fabdi
1967
1968
1969 BEGIN
1970 if (l_debug is null) then
1971 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1972 end if;
1973
1974
1975 /*---------------------------------------------------------+
1976 | Derive transaction_action_id and transaction_source_
1977 | type_id
1978 +---------------------------------------------------------*/
1979
1980 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
1981 SET LAST_UPDATE_DATE = SYSDATE,
1982 LAST_UPDATED_BY = p_userid,
1983 LAST_UPDATE_LOGIN = p_loginid,
1984 PROGRAM_UPDATE_DATE = SYSDATE,
1985 TRANSACTION_ACTION_ID =
1986 (SELECT MTT.TRANSACTION_ACTION_ID
1987 FROM MTL_TRANSACTION_TYPES MTT
1988 WHERE MTT.TRANSACTION_TYPE_ID
1989 = MTI.TRANSACTION_TYPE_ID),
1990 TRANSACTION_SOURCE_TYPE_ID =
1991 (SELECT MTT.TRANSACTION_SOURCE_TYPE_ID
1992 FROM MTL_TRANSACTION_TYPES MTT
1993 WHERE MTT.TRANSACTION_TYPE_ID
1994 = MTI.TRANSACTION_TYPE_ID)
1995 WHERE TRANSACTION_HEADER_ID = p_header_id
1996 AND PROCESS_FLAG = 1;
1997
1998
1999 /*+-----------------------------------------------------------------+
2000 | OPM INVCONV umoogala (Bug 4432078) |
2001 | Flag error for all unsupported txns for Process Mfg Orgs. |
2002 +-----------------------------------------------------------------+*/
2003
2004 loaderrmsg('INV_TXN_NOT_SUPPORTED_CODE', 'INV_TXN_NOT_SUPPORTED_CODE_EXP');
2005
2006 UPDATE mtl_transactions_interface mti
2007 SET last_update_date = SYSDATE,
2008 last_updated_by = p_userid,
2009 last_update_login = p_loginid,
2010 program_update_date = SYSDATE,
2011 process_flag = 3,
2012 lock_flag = 2,
2013 error_code = substrb(l_error_code,1,240),
2014 error_explanation = substrb(l_error_exp,1,240)
2015 WHERE transaction_header_id = p_header_id
2016 AND process_flag = 1
2017 AND transaction_type_id in (25, 90, 91, 92, 38, 48, 55,
2018 56, 57, 58, 24, 93, 66, 67,
2019 68, 80, 94, 26, 28, 77)
2020 AND EXISTS
2021 (SELECT 'This is a Process Mfg Org'
2022 FROM mtl_parameters mp
2023 WHERE mp.process_enabled_flag = 'Y'
2024 AND mp.organization_id = mti.organization_id
2025 );
2026
2027 l_count := SQL%ROWCOUNT;
2028 /*------------------------------------------------------+
2029 | get flow schedule control variables
2030 +------------------------------------------------------*/
2031
2032 BEGIN
2033 SELECT TRANSACTION_SOURCE_TYPE_ID,
2034 DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y',1,0),
2035 NVL(SCHEDULED_FLAG,0)
2036 INTO srctypeid, tvu_flow_schedule, tev_scheduled_flag
2037 FROM MTL_TRANSACTIONS_INTERFACE
2038 WHERE TRANSACTION_HEADER_ID = p_header_id
2039 AND PROCESS_FLAG = 1
2040 AND ROWNUM < 2;
2041 EXCEPTION
2042 WHEN NO_DATA_FOUND THEN
2043 x_return_status := FND_API.G_RET_STS_ERROR;
2044 x_msg_data := 'No Transaction found in MTI';
2045 return;
2046 END;
2047
2048 /**J-dev check we need to perform a full validation*/
2049 IF (l_debug = 1) THEN
2050 inv_log_util.trace('wip_constants.DMF_PATCHSET_LEVEL'||wip_constants.dmf_patchset_level,'INV_TXN_MANAGER_GRP', 9);
2051 inv_log_util.trace('wip_constants.DMF_PATCHSET_J_VALUE'||wip_constants.dmf_patchset_J_VALUE,'INV_TXN_MANAGER_GRP', 9);
2052 END IF;
2053
2054 IF (srctypeid = 5 AND wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE) THEN
2055 IF (p_validation_level <> fnd_api.g_valid_level_full) THEN
2056 l_validate_full := FALSE;
2057 /**implies this a WIP desktop transaction*/
2058 IF (l_debug = 1) THEN
2059 inv_log_util.trace('Val Grp:WIP desktop trx','INV_TXN_MANAGER_GRP', 9);
2060 END IF;
2061 ELSE
2062 IF (l_debug = 1) THEN
2063 inv_log_util.trace('Val Grp:WIP MTI trx','INV_TXN_MANAGER_GRP', 9);
2064 END IF;
2065 END IF;
2066 END IF;
2067
2068 IF (l_validate_full) THEN--J-dev
2069 /* The flow_schedule will only make sense for wip transactions */
2070 IF srctypeid = 5 THEN
2071 BEGIN
2072 SELECT
2073 DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y',1,0)
2074 INTO flow_schedule_children
2075 FROM MTL_TRANSACTIONS_INTERFACE
2076 WHERE TRANSACTION_HEADER_ID = p_header_id
2077 AND TRANSACTION_ACTION_ID IN (1, 27, 33, 34)
2078 AND PROCESS_FLAG = 1
2079 AND ROWNUM < 2;
2080 EXCEPTION
2081 WHEN NO_DATA_FOUND THEN
2082 flow_schedule_children := 0;
2083 END;
2084 END IF;
2085 END IF;--J-dev
2086
2087
2088
2089 /*-------------------------------------------------------------------------+
2090 | Derive inventory_item_id, distribution_acct_id and transaction_source_id
2091 | where not supplied
2092 +--------------------------------------------------------------------------*/
2093
2094
2095 /* commented logical validations fr inv_globals pre-req*/
2096 IF (l_validate_full) THEN --J-dev
2097 fnd_flex_key_api.set_session_mode('seed_data');
2098 derive_segment_ids(p_header_id, x_return_status ,x_msg_count, x_msg_data);
2099 END IF;
2100 loaderrmsg('INV_INT_TRXACTCODE', 'INV_INT_TRXACTCODE');
2101
2102 --------------------------------------------------------+
2103 --Validate Logical Transactions.
2104 --========================================================
2105 -- Add a check to prevent processing logical transactions
2106 -- that are populated directly to the interface table
2107 --------------------------------------------------------
2108
2109 --J-dev for Drop Ship
2110 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2111 SET LAST_UPDATE_DATE = SYSDATE,
2112 LAST_UPDATED_BY = p_userid,
2113 LAST_UPDATE_LOGIN = p_loginid,
2114 PROGRAM_UPDATE_DATE = SYSDATE,
2115 PROCESS_FLAG = 3,
2116 LOCK_FLAG = 2,
2117 ERROR_CODE = substrb(l_error_code,1,240),
2118 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2119 WHERE TRANSACTION_HEADER_ID = p_header_id
2120 AND process_flag = 1
2121 AND ((transaction_source_type_id = inv_globals.G_sourcetype_inventory
2122 AND transaction_action_id IN
2123 (inv_globals.G_action_logicalissue,
2124 inv_globals.G_action_logicalicsales,
2125 inv_globals.G_action_logicalicreceipt,
2126 inv_globals.G_action_logicalicrcptreturn,
2127 inv_globals.G_action_logicalicsalesreturn,
2128 inv_globals.G_action_logicalreceipt)) OR
2129 (transaction_source_type_id = inv_globals.G_sourcetype_rma
2130 AND transaction_action_id = inv_globals.G_action_logicalreceipt)
2131 OR
2132 (transaction_source_type_id = inv_globals.G_sourcetype_purchaseorder
2133 AND transaction_action_id in
2134 (inv_globals.G_action_logicalissue,
2135 -- inv_globals.G_action_logicaldeladj,
2136 -- inv_globals.G_action_logicalreceipt,
2137 inv_globals.G_action_retropriceupdate)) OR
2138 (transaction_source_type_id = inv_globals.G_sourcetype_rma
2139 AND transaction_action_id = inv_globals.G_action_logicalreceipt) OR
2140 (transaction_source_type_id = inv_globals.G_sourcetype_intreq
2141 AND transaction_action_id = inv_globals.G_action_logicalexpreqreceipt) OR
2142 (transaction_source_type_id = inv_globals.G_sourcetype_salesorder
2143 and transaction_action_id = inv_globals.G_action_logicalissue)) ;
2144 --J-dev for Drop Ship
2145
2146 /*------------------------------------------------------+
2147 | Validate inventory item
2148 +------------------------------------------------------*/
2149 l_count := 0;
2150
2151 loaderrmsg('INV_INT_ITMCODE', 'INV_INT_ITMEXP');
2152
2153 -- Bug: 3616999: The WIP phantom items are not transactable items
2154 -- but are still inserted into MTI. We should not validate them
2155 -- but will have to move them to MMTT and it will be deleted from the
2156 -- table before pushed to MMT. So, if the source type is 5 (WIP) and
2157 -- wip_supply_type is 6, we do not validate them
2158 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2159 SET LAST_UPDATE_DATE = SYSDATE,
2160 LAST_UPDATED_BY = p_userid,
2161 LAST_UPDATE_LOGIN = p_loginid,
2162 PROGRAM_UPDATE_DATE = SYSDATE,
2163 PROCESS_FLAG = 3,
2164 LOCK_FLAG = 2,
2165 ERROR_CODE = substrb(l_error_code,1,240),
2166 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2167 WHERE TRANSACTION_HEADER_ID = p_header_id
2168 AND PROCESS_FLAG = 1
2169 AND TRANSACTION_ACTION_ID <> 24
2170 AND NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2171 AND NOT (TRANSACTION_SOURCE_TYPE_ID = 5 AND
2172 nvl(OPERATION_SEQ_NUM,1) < 0 AND nvl(WIP_SUPPLY_TYPE,0) = 6)
2173 -- AND ((TRANSACTION_SOURCE_TYPE_ID = 5 AND WIP_SUPPLY_TYPE <> 6) OR
2174 -- (transaction_source_type_id <>5))
2175 AND NOT EXISTS (
2176 SELECT NULL
2177 FROM MTL_SYSTEM_ITEMS MSI
2178 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2179 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2180 AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y');
2181
2182 l_count := SQL%ROWCOUNT;
2183
2184
2185 /*----------------------------------------------------+
2186 | Start validation of item where it is specified
2187 +----------------------------------------------------*/
2188 loaderrmsg('INV_INT_ITMCODE','INV_INT_ITMEXP');
2189
2190
2191 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2192 SET LAST_UPDATE_DATE = SYSDATE,
2193 LAST_UPDATED_BY = p_userid,
2194 LAST_UPDATE_LOGIN = p_loginid,
2195 PROGRAM_UPDATE_DATE = SYSDATE,
2196 PROCESS_FLAG = 3,
2197 LOCK_FLAG = 2,
2198 ERROR_CODE = substrb(l_error_code,1,240),
2199 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2200 WHERE TRANSACTION_HEADER_ID = p_header_id
2201 AND INVENTORY_ITEM_ID IS NOT NULL
2202 AND (TRANSACTION_ACTION_ID NOT IN (1, 27, 33, 34)
2203 OR TRANSACTION_SOURCE_TYPE_ID <> 5)
2204 AND PROCESS_FLAG = 1
2205 AND NOT EXISTS (
2206 SELECT NULL
2207 FROM MTL_SYSTEM_ITEMS MSI
2208 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2209 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2210 AND MSI.INVENTORY_ITEM_FLAG = 'Y');
2211
2212 l_count := SQL%ROWCOUNT;
2213 IF (l_debug = 1) THEN
2214 inv_log_util.trace('Validating specified item ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2215 END IF;
2216
2217
2218
2219 /*----------------------------------------------------------------+
2220 | The items are validated seperately for average cost update
2221 | transactions as done in the form
2222 +----------------------------------------------------------------*/
2223
2224 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2225 SET LAST_UPDATE_DATE = SYSDATE,
2226 LAST_UPDATED_BY = p_userid,
2227 LAST_UPDATE_LOGIN = p_loginid,
2228 PROGRAM_UPDATE_DATE = SYSDATE,
2229 PROCESS_FLAG = 3,
2230 LOCK_FLAG = 2,
2231 ERROR_CODE = substrb(l_error_code,1,240),
2232 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2233 WHERE TRANSACTION_HEADER_ID = p_header_id
2234 AND PROCESS_FLAG = 1
2235 AND TRANSACTION_ACTION_ID = 24
2236 AND NOT EXISTS (
2237 SELECT NULL
2238 FROM MTL_SYSTEM_ITEMS MSI
2239 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2240 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2241 AND MSI.INVENTORY_ITEM_FLAG = 'Y'
2242 AND MSI.INVENTORY_ASSET_FLAG = 'Y'
2243 AND MSI.COSTING_ENABLED_FLAG = 'Y');
2244
2245 l_count := SQL%ROWCOUNT;
2246 IF (l_debug = 1) THEN
2247 inv_log_util.trace('Validating specified item ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2248 END IF;
2249
2250 /*----------------------------------------------------------------+
2251 | The inv layer is validated seperately for layer cost update
2252 | transactions. Only positive qty layers can be updated.
2253 +----------------------------------------------------------------*/
2254
2255 IF (l_validate_full) THEN--J-dev
2256 loaderrmsg('INV_POS_QTY_LAYER','INV_POS_QTY_LAYER');
2257 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2258 SET LAST_UPDATE_DATE = SYSDATE,
2259 LAST_UPDATED_BY = p_userid,
2260 LAST_UPDATE_LOGIN = p_loginid,
2261 PROGRAM_UPDATE_DATE = SYSDATE,
2262 PROCESS_FLAG = 3,
2263 LOCK_FLAG = 2,
2264 ERROR_CODE = substrb(l_error_code,1,240),
2265 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2266 WHERE TRANSACTION_HEADER_ID = p_header_id
2267 AND PROCESS_FLAG = 1
2268 AND TRANSACTION_ACTION_ID = 24
2269 AND TRANSACTION_SOURCE_TYPE_ID = 15
2270 AND NOT EXISTS (
2271 SELECT NULL
2272 FROM CST_INV_LAYERS CIL
2273 WHERE CIL.INV_LAYER_ID = MTI.TRANSACTION_SOURCE_ID
2274 AND CIL.LAYER_QUANTITY > 0);
2275
2276 l_count := SQL%ROWCOUNT;
2277 IF (l_debug = 1) THEN
2278 inv_log_util.trace('Validating for layer cost update ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2279 END IF;
2280 END IF;--J-dev
2281
2282 /*------------------------------------------------------------------------+
2283 | Validate for lot/serial/revision control for direct inter-org transfers
2284 +------------------------------------------------------------------------*/
2285
2286 IF (l_validate_full) THEN--J-dev
2287 loaderrmsg('INV_INT_ITMCTRL','INV_INT_ITMECTRL');
2288
2289 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2290 SET LAST_UPDATE_DATE = SYSDATE,
2291 LAST_UPDATED_BY = p_userid,
2292 LAST_UPDATE_LOGIN = p_loginid,
2293 PROGRAM_UPDATE_DATE = SYSDATE,
2294 PROCESS_FLAG = 3,
2295 LOCK_FLAG = 2,
2296 ERROR_CODE = substrb(l_error_code,1,240),
2297 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2298 WHERE TRANSACTION_HEADER_ID = p_header_id
2299 AND PROCESS_FLAG = 1
2300 AND TRANSACTION_ACTION_ID = 3 AND TRANSACTION_TYPE_ID <> 54 --Bug 13365231
2301 AND EXISTS (
2302 SELECT NULL
2303 FROM MTL_SYSTEM_ITEMS MS1,
2304 MTL_SYSTEM_ITEMS MS2
2305 WHERE MS1.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2306 AND MS1.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2307 AND MS2.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2308 AND MS2.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2309 AND ((MS1.LOT_CONTROL_CODE = 1 AND
2310 MS2.LOT_CONTROL_CODE = 2)
2311 OR (MS1.SERIAL_NUMBER_CONTROL_CODE IN (1,6)
2312 AND MS2.SERIAL_NUMBER_CONTROL_CODE IN (2,3,5))
2313 OR (MS1.REVISION_QTY_CONTROL_CODE = 1 AND
2314 MS2.REVISION_QTY_CONTROL_CODE = 2)));
2315
2316 l_count := SQL%ROWCOUNT;
2317 IF (l_debug = 1) THEN
2318 inv_log_util.trace('Validating lot/serial/revision control for direct inter-org transfers (exclude internal order) ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2319 END IF;
2320
2321 /**Bug 13365231 we need allow serial contorl 'sale order receipt' at source org
2322 * when the transaction is Int Order Direct Ship
2323 */
2324 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2325 SET LAST_UPDATE_DATE = SYSDATE,
2326 LAST_UPDATED_BY = p_userid,
2327 LAST_UPDATE_LOGIN = p_loginid,
2328 PROGRAM_UPDATE_DATE = SYSDATE,
2329 PROCESS_FLAG = 3,
2330 LOCK_FLAG = 2,
2331 ERROR_CODE = substrb(l_error_code,1,240),
2332 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2333 WHERE TRANSACTION_HEADER_ID = p_header_id
2334 AND PROCESS_FLAG = 1
2335 AND TRANSACTION_ACTION_ID = 3 AND TRANSACTION_TYPE_ID = 54 --Bug 13365231
2336 AND EXISTS (
2337 SELECT NULL
2338 FROM MTL_SYSTEM_ITEMS MS1,
2339 MTL_SYSTEM_ITEMS MS2
2340 WHERE MS1.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2341 AND MS1.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2342 AND MS2.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2343 AND MS2.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2344 AND ((MS1.LOT_CONTROL_CODE = 1 AND
2345 MS2.LOT_CONTROL_CODE = 2)
2346 OR (MS1.SERIAL_NUMBER_CONTROL_CODE IN (1) --Bug 13365231
2347 AND MS2.SERIAL_NUMBER_CONTROL_CODE IN (2,3,5))
2348 OR (MS1.REVISION_QTY_CONTROL_CODE = 1 AND
2349 MS2.REVISION_QTY_CONTROL_CODE = 2)));
2350
2351 l_count := SQL%ROWCOUNT;
2352 IF (l_debug = 1) THEN
2353 inv_log_util.trace('Validating lot/serial/revision control for direct inter-org transfers (only for internal order) ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2354 END IF;
2355 /*End Bug 13365231 */
2356
2357 END IF;--J-dev
2358
2359
2360 /*-----------------------------------------------------------+
2361 | Validating inventory item against transfer organization
2362 +-----------------------------------------------------------*/
2363
2364 IF (l_validate_full) THEN --J-dev
2365 loaderrmsg('INV_INT_ITEMCODE','INV_INT_XFRITMEXP');
2366
2367 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2368 SET LAST_UPDATE_DATE = SYSDATE,
2369 LAST_UPDATED_BY = p_userid,
2370 LAST_UPDATE_LOGIN = p_loginid,
2371 PROGRAM_UPDATE_DATE = SYSDATE,
2372 PROCESS_FLAG = 3,
2373 LOCK_FLAG = 2,
2374 ERROR_CODE = substrb(l_error_code,1,240),
2375 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2376 WHERE TRANSACTION_HEADER_ID = p_header_id
2377 AND TRANSACTION_ACTION_ID = 3
2378 AND PROCESS_FLAG = 1
2379 AND NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2380 AND NOT EXISTS (
2381 SELECT NULL
2382 FROM MTL_SYSTEM_ITEMS MSI
2383 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2384 AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2385 AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y');
2386
2387 l_count := SQL%ROWCOUNT;
2388 IF (l_debug = 1) THEN
2389 inv_log_util.trace('Validating item against xfer org ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2390 END IF;
2391
2392 END IF;--J-dev
2393
2394
2395 /*-----------------------------------------------+
2396 | Start validation of subinventory code
2397 +-----------------------------------------------*/
2398 loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBEXP');
2399
2400
2401 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2402 SET LAST_UPDATE_DATE = SYSDATE,
2403 LAST_UPDATED_BY = p_userid,
2404 LAST_UPDATE_LOGIN = p_loginid,
2405 PROGRAM_UPDATE_DATE = SYSDATE,
2406 PROCESS_FLAG = 3,
2407 LOCK_FLAG = 2,
2408 ERROR_CODE = substrb(l_error_code,1,240),
2409 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2410 WHERE TRANSACTION_HEADER_ID = p_header_id
2411 AND PROCESS_FLAG = 1
2412 AND TRANSACTION_ACTION_ID NOT IN (24, 30) /* CFM Scrap Transactions */
2413 AND (NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2414 AND NOT EXISTS (
2415 SELECT NULL
2416 FROM MTL_SECONDARY_INVENTORIES MSI
2417 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2418 AND MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2419 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)
2420 OR (SHIPPABLE_FLAG = 'N'
2421 AND SUBINVENTORY_CODE IS NOT NULL
2422 AND NOT EXISTS (
2423 SELECT NULL
2424 FROM MTL_SECONDARY_INVENTORIES MSI
2425 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2426 AND MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2427 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)));
2428
2429 l_count := SQL%ROWCOUNT;
2430 IF (l_debug = 1) THEN
2431 inv_log_util.trace('Validating subinventory code ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2432 END IF;
2433
2434
2435
2436 /*-----------------------------------------------------------+
2437 | Start validating the transfer subinventory |
2438 +-----------------------------------------------------------*/
2439
2440 IF (l_validate_full) THEN --J-dev
2441
2442 loaderrmsg('INV_INT_XSUBCODE','INV_INT_XSUBEXP');
2443
2444
2445 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2446 SET LAST_UPDATE_DATE = SYSDATE,
2447 LAST_UPDATED_BY = p_userid,
2448 LAST_UPDATE_LOGIN = p_loginid,
2449 PROGRAM_UPDATE_DATE = SYSDATE,
2450 PROCESS_FLAG = 3,
2451 LOCK_FLAG = 2,
2452 ERROR_CODE = substrb(l_error_code,1,240),
2453 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2454 WHERE TRANSACTION_HEADER_ID = p_header_id
2455 AND PROCESS_FLAG = 1
2456 AND (TRANSACTION_ACTION_ID IN (2,3,21,5)
2457 AND TRANSFER_SUBINVENTORY IS NOT NULL)
2458 AND ((NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2459 AND NOT EXISTS (
2460 SELECT NULL
2461 FROM MTL_SECONDARY_INVENTORIES MSI
2462 WHERE MSI.ORGANIZATION_ID =
2463 DECODE(MTI.TRANSACTION_ACTION_ID,2,
2464 MTI.ORGANIZATION_ID,5,MTI.organization_id,
2465 MTI.TRANSFER_ORGANIZATION)
2466 AND MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2467 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE))
2468 OR (SHIPPABLE_FLAG = 'N'
2469 AND TRANSFER_SUBINVENTORY IS NOT NULL
2470 AND NOT EXISTS (
2471 SELECT NULL
2472 FROM MTL_SECONDARY_INVENTORIES MSI
2473 WHERE MSI.ORGANIZATION_ID =
2474 DECODE(MTI.TRANSACTION_ACTION_ID,3,
2475 MTI.TRANSFER_ORGANIZATION,21,
2476 MTI.TRANSFER_ORGANIZATION,MTI.ORGANIZATION_ID)
2477 AND MSI.SECONDARY_INVENTORY_NAME =
2478 MTI.TRANSFER_SUBINVENTORY
2479 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)));
2480
2481 l_count := SQL%ROWCOUNT;
2482 IF (l_debug = 1) THEN
2483 inv_log_util.trace('Validating xfer subinventory code ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2484 END IF;
2485 END IF;--J-dev
2486
2487
2488
2489 /*-----------------------------------------------------------+
2490 | Validating restricted subinventories
2491 +-----------------------------------------------------------*/
2492 loaderrmsg('INV_INT_SUBCODE','INV_INT_RESUBEXP');
2493
2494 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2495 SET LAST_UPDATE_DATE = SYSDATE,
2496 LAST_UPDATED_BY = p_userid,
2497 LAST_UPDATE_LOGIN = p_loginid,
2498 PROGRAM_UPDATE_DATE = SYSDATE,
2499 PROCESS_FLAG = 3,
2500 LOCK_FLAG = 2,
2501 ERROR_CODE = substrb(l_error_code,1,240),
2502 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2503 WHERE TRANSACTION_HEADER_ID = p_header_id
2504 AND SUBINVENTORY_CODE IS NOT NULL
2505 AND PROCESS_FLAG = 1
2506 AND NOT EXISTS (
2507 SELECT NULL
2508 FROM MTL_ITEM_SUB_INVENTORIES MIS,
2509 MTL_SYSTEM_ITEMS MSI
2510 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2511 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2512 AND MSI.RESTRICT_SUBINVENTORIES_CODE = 1
2513 AND MIS.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2514 AND MIS.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2515 AND MIS.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2516 AND MIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2517 AND MIS.SECONDARY_INVENTORY = MTI.SUBINVENTORY_CODE
2518 UNION
2519 SELECT NULL
2520 FROM MTL_SYSTEM_ITEMS ITM
2521 WHERE ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2522 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2523 AND ITM.RESTRICT_SUBINVENTORIES_CODE = 2);
2524
2525 l_count := SQL%ROWCOUNT;
2526 IF (l_debug = 1) THEN
2527 inv_log_util.trace('Validating restricted subinventories ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2528 END IF;
2529
2530
2531 /*--------------------------------------------------------+
2532 | Validating restricted subinventory against transfer
2533 | organization
2534 +--------------------------------------------------------*/
2535
2536 IF (l_validate_full) THEN --J-dev
2537
2538 loaderrmsg('INV_INT_XSUBCODE','INV_INT_RESXFRSUBEXP');
2539
2540
2541 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2542 SET LAST_UPDATE_DATE = SYSDATE,
2543 LAST_UPDATED_BY = p_userid,
2544 LAST_UPDATE_LOGIN = p_loginid,
2545 PROGRAM_UPDATE_DATE = SYSDATE,
2546 PROCESS_FLAG = 3,
2547 LOCK_FLAG = 2,
2548 ERROR_CODE = substrb(l_error_code,1,240),
2549 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2550 WHERE TRANSACTION_HEADER_ID = p_header_id
2551 AND PROCESS_FLAG = 1
2552 AND TRANSFER_SUBINVENTORY IS NOT NULL
2553 AND TRANSACTION_ACTION_ID in (2,21,3,5)
2554 AND NOT EXISTS (
2555 SELECT NULL
2556 FROM MTL_ITEM_SUB_INVENTORIES MIS,
2557 MTL_SYSTEM_ITEMS MSI
2558 WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID, 2,
2559 MTI.ORGANIZATION_ID,
2560 MTI.TRANSFER_ORGANIZATION)
2561 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2562 AND MSI.RESTRICT_SUBINVENTORIES_CODE = 1
2563 AND MIS.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
2564 MTI.ORGANIZATION_ID,
2565 MTI.TRANSFER_ORGANIZATION)
2566 AND MIS.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2567 AND MIS.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2568 AND MIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2569 AND MIS.SECONDARY_INVENTORY = MTI.TRANSFER_SUBINVENTORY
2570 UNION
2571 SELECT NULL
2572 FROM MTL_SYSTEM_ITEMS ITM
2573 WHERE ITM.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
2574 MTI.ORGANIZATION_ID,
2575 MTI.TRANSFER_ORGANIZATION)
2576 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2577 AND ITM.RESTRICT_SUBINVENTORIES_CODE = 2);
2578
2579
2580 l_count := SQL%ROWCOUNT;
2581 IF (l_debug = 1) THEN
2582 inv_log_util.trace('Validating xfer res subs ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2583 END IF;
2584
2585 END IF;--J-dev
2586
2587 /*----------------------------------------------------------------------+
2588 | Validate Subinventory for the following:
2589 | You cannot issue from non tracked
2590 | You cannot issue from expense sub for intransit shipment
2591 | You cannot transfer from expense sub to asset sub for asset items
2592 |If the expense to asset transfer allowed profiel is set then
2593 | You cannot issue from a non-tracked sub
2594 | All other transfers are valid
2595 |exp_to_ast_allowed = 1 means that the exp to ast trx are not alowed
2596 +----------------------------------------------------------------------*/
2597 SELECT FND_PROFILE.VALUE('INV:EXPENSE_TO_ASSET_TRANSFER')
2598 INTO l_profile
2599 FROM dual;
2600
2601 IF SQL%FOUND THEN
2602 IF l_profile = '2' THEN
2603 exp_to_ast_allowed := 1;
2604 ELSE
2605 exp_to_ast_allowed := 2;
2606 END IF;
2607 ELSE
2608 exp_to_ast_allowed := 1;
2609 END IF;
2610
2611
2612 IF exp_to_ast_allowed = 1 THEN
2613
2614 loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBTYPEXP');
2615
2616 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2617 SET LAST_UPDATE_DATE = SYSDATE,
2618 LAST_UPDATED_BY = p_userid,
2619 LAST_UPDATE_LOGIN = p_loginid,
2620 PROGRAM_UPDATE_DATE = SYSDATE,
2621 PROCESS_FLAG = 3,
2622 LOCK_FLAG = 2,
2623 ERROR_CODE = substrb(l_error_code,1,240),
2624 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2625 WHERE TRANSACTION_HEADER_ID = p_header_id
2626 AND PROCESS_FLAG = 1
2627 AND ((((TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2628 AND EXISTS ( SELECT 'This is a Discrete Mfg Org'
2629 FROM MTL_PARAMETERS MP
2630 WHERE MP.PROCESS_ENABLED_FLAG = 'N'
2631 AND MP.ORGANIZATION_ID = MTI.ORGANIZATION_ID))
2632 OR (TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2633 AND NOT(TRANSACTION_SOURCE_TYPE_ID = 5 AND TRANSACTION_ACTION_ID in (1,31) /*Bug 14038473: Bypass subinventory validations for OPM Batches */
2634 AND EXISTS ( SELECT 'This is a Process Mfg Org'
2635 FROM MTL_PARAMETERS MP
2636 WHERE MP.PROCESS_ENABLED_FLAG = 'Y'
2637 AND MP.ORGANIZATION_ID = MTI.ORGANIZATION_ID))))
2638 AND EXISTS (
2639 SELECT 'X'
2640 FROM MTL_SECONDARY_INVENTORIES MSI
2641 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2642 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2643 AND MSI.QUANTITY_TRACKED = 2))
2644 OR (TRANSACTION_ACTION_ID = 21
2645 AND EXISTS (
2646 SELECT 'X'
2647 FROM MTL_SECONDARY_INVENTORIES MSI,
2648 MTL_SYSTEM_ITEMS ITM
2649 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2650 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2651 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2652 AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2653 AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2654 AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2655 AND MSI.ASSET_INVENTORY = 2)));
2656
2657 l_count := SQL%ROWCOUNT;
2658
2659
2660 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2661 SET LAST_UPDATE_DATE = SYSDATE,
2662 LAST_UPDATED_BY = p_userid,
2663 LAST_UPDATE_LOGIN = p_loginid,
2664 PROGRAM_UPDATE_DATE = SYSDATE,
2665 PROCESS_FLAG = 3,
2666 LOCK_FLAG = 2,
2667 ERROR_CODE = substrb(l_error_code,1,240),
2668 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2669 WHERE TRANSACTION_HEADER_ID = p_header_id
2670 AND PROCESS_FLAG = 1
2671 AND TRANSACTION_ACTION_ID in (2,5)
2672 AND EXISTS (
2673 SELECT 'X'
2674 FROM MTL_SECONDARY_INVENTORIES MSI,
2675 MTL_SYSTEM_ITEMS ITM
2676 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2677 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2678 AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2679 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2680 AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2681 AND MSI.ASSET_INVENTORY = 2)
2682 AND EXISTS (
2683 SELECT 'X'
2684 FROM MTL_SECONDARY_INVENTORIES MSI,
2685 MTL_SYSTEM_ITEMS ITM
2686 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2687 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2688 AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2689 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2690 AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2691 AND MSI.ASSET_INVENTORY = 1);
2692
2693 l_count := l_count + SQL%ROWCOUNT;
2694
2695 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2696 SET LAST_UPDATE_DATE = SYSDATE,
2697 LAST_UPDATED_BY = p_userid,
2698 LAST_UPDATE_LOGIN = p_loginid,
2699 PROGRAM_UPDATE_DATE = SYSDATE,
2700 PROCESS_FLAG = 3,
2701 LOCK_FLAG = 2,
2702 ERROR_CODE = substrb(l_error_code,1,240),
2703 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2704 WHERE TRANSACTION_HEADER_ID = p_header_id
2705 AND PROCESS_FLAG = 1
2706 AND TRANSACTION_ACTION_ID = 3
2707 AND EXISTS (
2708 SELECT 'X'
2709 FROM MTL_SECONDARY_INVENTORIES MSI
2710 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2711 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2712 AND MSI.ASSET_INVENTORY = 2)
2713 AND EXISTS (
2714 SELECT 'X'
2715 FROM MTL_SECONDARY_INVENTORIES MSI
2716 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2717 AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2718 AND MSI.ASSET_INVENTORY = 1);
2719
2720 l_count := l_count + SQL%ROWCOUNT;
2721
2722 IF (l_debug = 1) THEN
2723 inv_log_util.trace('Validating subs ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2724 END IF;
2725 FND_MESSAGE.set_name('INV', 'INV_ERR_DETVAL');
2726 FND_MESSAGE.set_token('token', numhold);
2727
2728 ELSE
2729
2730 loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBTYPEXP');
2731
2732 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2733 SET LAST_UPDATE_DATE = SYSDATE,
2734 LAST_UPDATED_BY = p_userid,
2735 LAST_UPDATE_LOGIN = p_loginid,
2736 PROGRAM_UPDATE_DATE = SYSDATE,
2737 PROCESS_FLAG = 3,
2738 LOCK_FLAG = 2,
2739 ERROR_CODE = substrb(l_error_code,1,240),
2740 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2741 WHERE TRANSACTION_HEADER_ID = p_header_id
2742 AND PROCESS_FLAG = 1
2743 AND ((((TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2744 AND EXISTS ( SELECT 'This is a Discrete Mfg Org'
2745 FROM MTL_PARAMETERS MP
2746 WHERE MP.PROCESS_ENABLED_FLAG = 'N'
2747 AND MP.ORGANIZATION_ID = MTI.ORGANIZATION_ID))
2748 OR (TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2749 AND NOT(TRANSACTION_SOURCE_TYPE_ID = 5 AND TRANSACTION_ACTION_ID in (1,31) /*Bug 14038473: Bypass subinventory validations for OPM Batches */
2750 AND EXISTS ( SELECT 'This is a Process Mfg Org'
2751 FROM MTL_PARAMETERS MP
2752 WHERE MP.PROCESS_ENABLED_FLAG = 'Y'
2753 AND MP.ORGANIZATION_ID = MTI.ORGANIZATION_ID))))
2754 AND EXISTS (
2755 SELECT 'X'
2756 FROM MTL_SECONDARY_INVENTORIES MSI
2757 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2758 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2759 AND MSI.QUANTITY_TRACKED = 2)));
2760
2761 l_count := SQL%ROWCOUNT;
2762 IF (l_debug = 1) THEN
2763 inv_log_util.trace('Validating subs else ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2764 END IF;
2765 FND_MESSAGE.set_name('INV', 'INV_ERR_DETVAL');
2766 FND_MESSAGE.set_token('token', numhold);
2767
2768 END IF;
2769
2770
2771 /*--------------------------------------------------------------------+
2772 | Start validation of transaction source
2773 +--------------------------------------------------------------------*/
2774
2775 IF (l_validate_full) THEN --J-dev
2776
2777 loaderrmsg('INV_INT_SRCCODE','INV_INT_SALEXP');
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 TRANSACTION_SOURCE_TYPE_ID in (2,8)
2792 AND NOT EXISTS (
2793 SELECT NULL
2794 FROM MTL_SALES_ORDERS MSO
2795 WHERE MSO.SALES_ORDER_ID = MTI.TRANSACTION_SOURCE_ID
2796 AND NVL(START_DATE_ACTIVE, SYSDATE - 1) <= SYSDATE
2797 AND NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE
2798 AND ENABLED_FLAG = 'Y');
2799
2800 l_count := SQL%ROWCOUNT;
2801 loaderrmsg('INV_INT_SRCCODE','INV_INT_ACCTEXP');
2802
2803 /*Bug#5176266. Made changes to the below UPDATE statement
2804 to validate the Account effective date against transactions
2805 date( not sysdate)*/
2806 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2807 SET LAST_UPDATE_DATE = SYSDATE,
2808 LAST_UPDATED_BY = p_userid,
2809 LAST_UPDATE_LOGIN = p_loginid,
2810 PROGRAM_UPDATE_DATE = SYSDATE,
2811 PROCESS_FLAG = 3,
2812 LOCK_FLAG = 2,
2813 ERROR_CODE = substrb(l_error_code,1,240),
2814 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2815 WHERE TRANSACTION_HEADER_ID = p_header_id
2816 AND PROCESS_FLAG = 1
2817 AND TRANSACTION_SOURCE_TYPE_ID = 3
2818 AND NOT EXISTS (
2819 SELECT NULL
2820 FROM GL_CODE_COMBINATIONS GCC,
2821 ORG_ORGANIZATION_DEFINITIONS OOD
2822 WHERE GCC.CODE_COMBINATION_ID = MTI.TRANSACTION_SOURCE_ID
2823 AND GCC.CHART_OF_ACCOUNTS_ID = OOD.CHART_OF_ACCOUNTS_ID
2824 AND OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2825 AND GCC.ENABLED_FLAG = 'Y'
2826 AND NVL(GCC.START_DATE_ACTIVE, MTI.TRANSACTION_DATE - 1) <= MTI.TRANSACTION_DATE
2827 AND NVL(GCC.END_DATE_ACTIVE, MTI.TRANSACTION_DATE + 1) > MTI.TRANSACTION_DATE);
2828
2829 l_count := l_count + SQL%ROWCOUNT;
2830 loaderrmsg('INV_INT_SRCCODE','INV_INT_ALIASEXP');
2831
2832 /* Bug# 3249130/ 3249131, Port change of Bug# 3238160. Changing the DML statement that populates the
2833 error code in MTI when the Account alias is inactive. The query now checks for the
2834 EFFECTIVE_DATE and DISABLE_DATE rather than START_DATE_ACTIVE and END_DATE_ACTIVE*/
2835
2836 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2837 SET LAST_UPDATE_DATE = SYSDATE,
2838 LAST_UPDATED_BY = p_userid,
2839 LAST_UPDATE_LOGIN = p_loginid,
2840 PROGRAM_UPDATE_DATE = SYSDATE,
2841 PROCESS_FLAG = 3,
2842 LOCK_FLAG = 2,
2843 ERROR_CODE = substrb(l_error_code,1,240),
2844 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2845 WHERE TRANSACTION_HEADER_ID = p_header_id
2846 AND PROCESS_FLAG = 1
2847 AND TRANSACTION_SOURCE_TYPE_ID = INV_GLOBALS.G_SourceType_AccountAlias
2848 AND NOT EXISTS (
2849 SELECT NULL
2850 FROM MTL_GENERIC_DISPOSITIONS MGD
2851 WHERE MGD.DISPOSITION_ID = MTI.TRANSACTION_SOURCE_ID
2852 AND MGD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2853 AND MGD.ENABLED_FLAG = 'Y'
2854 AND NVL(MGD.EFFECTIVE_DATE, SYSDATE - 1) <= SYSDATE
2855 AND NVL(MGD.DISABLE_DATE, SYSDATE + 1) > SYSDATE );
2856 /* AND NVL(MGD.START_DATE_ACTIVE, SYSDATE - 1) <= SYSDATE
2857 AND NVL(MGD.END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE );*/
2858
2859
2860 l_count := l_count + SQL%ROWCOUNT;
2861 IF (l_debug = 1) THEN
2862 inv_log_util.trace('Validating transaction source ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2863 END IF;
2864
2865 END IF;--J-dev
2866
2867 /*----------------------------------------------------+
2868 | Validating transaction type
2869 +----------------------------------------------------*/
2870 loaderrmsg('INV_INT_TRXTYPCODE','INV_INT_TYPEXP');
2871
2872 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2873 SET LAST_UPDATE_DATE = SYSDATE,
2874 LAST_UPDATED_BY = p_userid,
2875 LAST_UPDATE_LOGIN = p_loginid,
2876 PROGRAM_UPDATE_DATE = SYSDATE,
2877 PROCESS_FLAG = 3,
2878 LOCK_FLAG = 2,
2879 ERROR_CODE = substrb(l_error_code,1,240),
2880 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2881 WHERE TRANSACTION_HEADER_ID = p_header_id
2882 AND PROCESS_FLAG = 1
2883 AND NOT EXISTS (
2884 SELECT NULL
2885 FROM MTL_TRANSACTION_TYPES MTT
2886 WHERE MTT.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
2887 AND nvl(MTT.DISABLE_DATE,SYSDATE+1) > SYSDATE );
2888
2889 l_count := SQL%ROWCOUNT;
2890 IF (l_debug = 1) THEN
2891 inv_log_util.trace('Validating transaction type ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2892 END IF;
2893
2894
2895 /*-------------------------------------------------------+
2896 | Validating transaction actions
2897 +-------------------------------------------------------*/
2898 loaderrmsg('INV_INT_TRXACTCODE','INV_INT_TRXACTEXP');
2899
2900 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2901 SET LAST_UPDATE_DATE = SYSDATE,
2902 LAST_UPDATED_BY = p_userid,
2903 LAST_UPDATE_LOGIN = p_loginid,
2904 PROGRAM_UPDATE_DATE = SYSDATE,
2905 PROCESS_FLAG = 3,
2906 LOCK_FLAG = 2,
2907 ERROR_CODE = substrb(l_error_code,1,240),
2908 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2909 WHERE TRANSACTION_HEADER_ID = p_header_id
2910 AND PROCESS_FLAG = 1
2911 AND (TRANSACTION_ACTION_ID in (4,8,12,28,29)
2912 OR (TRANSACTION_ACTION_ID = 30 AND UPPER(NVL(FLOW_SCHEDULE,'N')) <> 'Y')); /* CFM Scrap Transaction */
2913
2914 l_count := SQL%ROWCOUNT;
2915 IF (l_debug = 1) THEN
2916 inv_log_util.trace('Validating transaction action ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2917 END IF;
2918
2919
2920 /*-------------------------------------------------------+
2921 | Start validation of organization
2922 +-------------------------------------------------------*/
2923
2924 loaderrmsg('INV_INT_ORGCODE','INV_INT_ORGEXP');
2925
2926
2927 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2928 SET LAST_UPDATE_DATE = SYSDATE,
2929 LAST_UPDATED_BY = p_userid,
2930 LAST_UPDATE_LOGIN = p_loginid,
2931 PROGRAM_UPDATE_DATE = SYSDATE,
2932 PROCESS_FLAG = 3,
2933 LOCK_FLAG = 2,
2934 ERROR_CODE = substrb(l_error_code,1,240),
2935 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2936 WHERE TRANSACTION_HEADER_ID = p_header_id
2937 AND PROCESS_FLAG = 1
2938 AND NOT EXISTS (
2939 SELECT NULL
2940 FROM ORG_ORGANIZATION_DEFINITIONS OOD
2941 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2942 AND NVL(OOD.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
2943
2944 l_count := SQL%ROWCOUNT;
2945 IF (l_debug = 1) THEN
2946 inv_log_util.trace('Validating ORG ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2947 END IF;
2948
2949
2950 /*-------------------------------------------------------------+
2951 | Start validating the transfer organization
2952 +-------------------------------------------------------------*/
2953
2954 IF (l_validate_full) THEN --J-dev
2955
2956 loaderrmsg('INV_INT_XORGCODE','INV_INT_XORGEXP');
2957
2958
2959 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2960 SET LAST_UPDATE_DATE = SYSDATE,
2961 LAST_UPDATED_BY = p_userid,
2962 LAST_UPDATE_LOGIN = p_loginid,
2963 PROGRAM_UPDATE_DATE = SYSDATE,
2964 PROCESS_FLAG = 3,
2965 LOCK_FLAG = 2,
2966 ERROR_CODE = substrb(l_error_code,1,240),
2967 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2968 WHERE TRANSACTION_HEADER_ID = p_header_id
2969 AND TRANSACTION_ACTION_ID in (3,21)
2970 AND PROCESS_FLAG = 1
2971 AND (NOT EXISTS (
2972 SELECT NULL
2973 FROM ORG_ORGANIZATION_DEFINITIONS OOD
2974 WHERE OOD.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2975 AND NVL(OOD.DISABLE_DATE, SYSDATE + 1) > SYSDATE)
2976 OR NOT EXISTS (
2977 SELECT NULL
2978 FROM MTL_INTERORG_PARAMETERS MIP
2979 WHERE MIP.TO_ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2980 AND MIP.FROM_ORGANIZATION_ID = MTI.ORGANIZATION_ID));
2981
2982 l_count := SQL%ROWCOUNT;
2983 IF (l_debug = 1) THEN
2984 inv_log_util.trace('Validating xfer ORG ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2985 END IF;
2986
2987 END IF;--J-dev
2988
2989 /*--------------------------------------------------+
2990 | Validating item revisions
2991 +--------------------------------------------------*/
2992 loaderrmsg('INV_INT_REVCODE','INV_INT_REVEXP');
2993
2994 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2995 SET LAST_UPDATE_DATE = SYSDATE,
2996 LAST_UPDATED_BY = p_userid,
2997 LAST_UPDATE_LOGIN = p_loginid,
2998 PROGRAM_UPDATE_DATE = SYSDATE,
2999 PROCESS_FLAG = 3,
3000 LOCK_FLAG = 2,
3001 ERROR_CODE = substrb(l_error_code,1,240),
3002 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3003 WHERE TRANSACTION_HEADER_ID = p_header_id
3004 AND PROCESS_FLAG = 1
3005 AND TRANSACTION_ACTION_ID NOT IN (24,33,34)
3006 AND NOT EXISTS (
3007 SELECT NULL
3008 FROM MTL_ITEM_REVISIONS MIR,
3009 MTL_SYSTEM_ITEMS MSI
3010 WHERE MSI.REVISION_QTY_CONTROL_CODE = 2
3011 AND MIR.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3012 AND MIR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3013 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3014 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3015 AND MIR.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
3016 AND MIR.ORGANIZATION_ID = MSI.ORGANIZATION_ID
3017 AND MIR.REVISION = MTI.REVISION
3018 UNION
3019 SELECT NULL
3020 FROM MTL_SYSTEM_ITEMS ITM
3021 WHERE ITM.REVISION_QTY_CONTROL_CODE = 1
3022 AND MTI.REVISION IS NULL
3023 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3024 AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID);
3025
3026
3027 l_count := SQL%ROWCOUNT;
3028
3029 IF (l_validate_full) THEN --J-dev
3030
3031 loaderrmsg('INV_INT_REVCODE','INV_INT_REVXFREXP');
3032
3033
3034 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3035 SET LAST_UPDATE_DATE = SYSDATE,
3036 LAST_UPDATED_BY = p_userid,
3037 LAST_UPDATE_LOGIN = p_loginid,
3038 PROGRAM_UPDATE_DATE = SYSDATE,
3039 PROCESS_FLAG = 3,
3040 LOCK_FLAG = 2,
3041 ERROR_CODE = substrb(l_error_code,1,240),
3042 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3043 WHERE TRANSACTION_HEADER_ID = p_header_id
3044 AND PROCESS_FLAG = 1
3045 AND TRANSACTION_ACTION_ID = 3
3046 AND NOT EXISTS (
3047 SELECT NULL
3048 FROM MTL_ITEM_REVISIONS MIR,
3049 MTL_SYSTEM_ITEMS MSI
3050 WHERE MSI.REVISION_QTY_CONTROL_CODE = 2
3051 AND MIR.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3052 AND MIR.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
3053 AND MIR.REVISION = MTI.REVISION
3054 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3055 AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
3056 AND MIR.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
3057 AND MIR.ORGANIZATION_ID = MSI.ORGANIZATION_ID
3058 UNION
3059 SELECT NULL
3060 FROM MTL_SYSTEM_ITEMS ITM
3061 WHERE ITM.REVISION_QTY_CONTROL_CODE = 1
3062 -- AND MTI.REVISION IS NULL --Bug#3285134. No REVISION validation for Revision to Non-Revision Org Xfer
3063 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3064 AND ITM.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION);
3065
3066 l_count := l_count + SQL%ROWCOUNT;
3067
3068 END IF;--J-dev
3069
3070 IF (l_debug = 1) THEN
3071 inv_log_util.trace('Validating revisions ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3072 END IF;
3073
3074 /* Bug# 10331476 - Start : Restricting unimplemented item revisions for transactions with source type (13, 6, 3)*/
3075
3076 loaderrmsg('INV_INT_REVCODE','INV_INT_REVEXP');
3077
3078 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3079 SET LAST_UPDATE_DATE = SYSDATE,
3080 LAST_UPDATED_BY = p_userid,
3081 LAST_UPDATE_LOGIN = p_loginid,
3082 PROGRAM_UPDATE_DATE = SYSDATE,
3083 PROCESS_FLAG = 3,
3084 LOCK_FLAG = 2,
3085 ERROR_CODE = substrb(l_error_code,1,240),
3086 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3087 WHERE TRANSACTION_HEADER_ID = p_header_id
3088 AND PROCESS_FLAG = 1
3089 AND TRANSACTION_SOURCE_TYPE_ID IN (13, 6, 3)
3090 AND TRANSACTION_ACTION_ID IN (1, 27, 2)
3091 AND EXISTS (
3092 SELECT NULL
3093 FROM MTL_ITEM_REVISIONS MIR,
3094 MTL_SYSTEM_ITEMS MSI
3095 WHERE MSI.REVISION_QTY_CONTROL_CODE = 2
3096 AND MIR.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3097 AND MIR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3098 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3099 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3100 AND MIR.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
3101 AND MIR.ORGANIZATION_ID = MSI.ORGANIZATION_ID
3102 AND MIR.REVISION = MTI.REVISION
3103 AND NVL(Trunc(MIR.IMPLEMENTATION_DATE), Trunc(SYSDATE + 1)) > Trunc (SYSDATE));
3104
3105 l_count := SQL%ROWCOUNT;
3106
3107 IF (l_debug = 1) THEN
3108 inv_log_util.trace('Validating unimplemented revisions ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3109 END IF;
3110
3111 /* Bug# 10331476: End */
3112
3113
3114
3115 /*------------------------------------------------------+
3116 | Validating transaction reasons
3117 +------------------------------------------------------*/
3118 loaderrmsg('INV_INT_REACODE','INV_INT_REAEXP');
3119
3120 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3121 SET LAST_UPDATE_DATE = SYSDATE,
3122 LAST_UPDATED_BY = p_userid,
3123 LAST_UPDATE_LOGIN = p_loginid,
3124 PROGRAM_UPDATE_DATE = SYSDATE,
3125 PROCESS_FLAG = 3,
3126 LOCK_FLAG = 2,
3127 ERROR_CODE = substrb(l_error_code,1,240),
3128 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3129 WHERE TRANSACTION_HEADER_ID = p_header_id
3130 AND PROCESS_FLAG = 1
3131 AND REASON_ID IS NOT NULL
3132 AND NOT EXISTS (
3133 SELECT NULL
3134 FROM MTL_TRANSACTION_REASONS MTR
3135 WHERE MTR.REASON_ID = MTI.REASON_ID
3136 AND NVL(MTR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
3137
3138 l_count := SQL%ROWCOUNT;
3139 IF (l_debug = 1) THEN
3140 inv_log_util.trace('Validating reasons ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3141 END IF;
3142
3143 --Jalaj Srivastava Bug 4969885
3144 --Validate the transaction uom befoire validating quantities
3145 /*---------------------------------------------------------+
3146 | Start validating the transaction uom
3147 +---------------------------------------------------------*/
3148
3149 loaderrmsg('INV_INT_UOMCODE','INV_INT_UOMEXP');
3150
3151
3152 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3153 SET LAST_UPDATE_DATE = SYSDATE,
3154 LAST_UPDATED_BY = p_userid,
3155 LAST_UPDATE_LOGIN = p_loginid,
3156 PROGRAM_UPDATE_DATE = SYSDATE,
3157 PROCESS_FLAG = 3,
3158 LOCK_FLAG = 2,
3159 ERROR_CODE = substrb(l_error_code,1,240),
3160 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3161 WHERE TRANSACTION_HEADER_ID = p_header_id
3162 AND INVENTORY_ITEM_ID IS NOT NULL
3163 AND PROCESS_FLAG = 1
3164 AND NOT EXISTS (
3165 SELECT NULL
3166 FROM MTL_ITEM_UOMS_VIEW MIUV
3167 WHERE MIUV.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3168 AND MIUV.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3169 AND MIUV.UOM_CODE = MTI.TRANSACTION_UOM);
3170
3171 l_count := SQL%ROWCOUNT;
3172 IF (l_debug = 1) THEN
3173 inv_log_util.trace('Validating transaction uom ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3174 END IF;
3175
3176 /*------------------------------------------------------+
3177 | Validating transaction quantity
3178 +------------------------------------------------------*/
3179
3180 loaderrmsg('INV_INT_QTYCODE','INV_INT_QTYSGNEXP');
3181
3182 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3183 SET LAST_UPDATE_DATE = SYSDATE,
3184 LAST_UPDATED_BY = p_userid,
3185 LAST_UPDATE_LOGIN = p_loginid,
3186 PROGRAM_UPDATE_DATE = SYSDATE,
3187 PROCESS_FLAG = 3,
3188 LOCK_FLAG = 2,
3189 ERROR_CODE = substrb(l_error_code,1,240),
3190 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3191 WHERE TRANSACTION_HEADER_ID = p_header_id
3192 AND PROCESS_FLAG = 1
3193 AND TRANSACTION_QUANTITY > 0
3194 AND TRANSACTION_ACTION_ID IN (1,21,32,34);
3195
3196 l_count := SQL%ROWCOUNT;
3197
3198 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3199 SET LAST_UPDATE_DATE = SYSDATE,
3200 LAST_UPDATED_BY = p_userid,
3201 LAST_UPDATE_LOGIN = p_loginid,
3202 PROGRAM_UPDATE_DATE = SYSDATE,
3203 PROCESS_FLAG = 3,
3204 LOCK_FLAG = 2,
3205 ERROR_CODE = substrb(l_error_code,1,240),
3206 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3207 WHERE TRANSACTION_HEADER_ID = p_header_id
3208 AND PROCESS_FLAG = 1
3209 AND TRANSACTION_QUANTITY < 0
3210 AND TRANSACTION_ACTION_ID IN (12,27,31,33);
3211
3212 l_count := l_count + SQL%ROWCOUNT;
3213 IF (l_debug = 1) THEN
3214 inv_log_util.trace('Validating transaction quantity ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3215 END IF;
3216
3217 IF (l_debug = 1) THEN
3218 inv_log_util.trace('start of OPM validations within (validate_group)' , 'INV_TXN_MANAGER_GRP', 9);
3219 END IF;
3220
3221 OPEN AA2 ;
3222 LOOP
3223 FETCH AA2 INTO
3224 l_rowid
3225 ,l_transaction_type_id
3226 ,l_organization_id
3227 ,l_inventory_item_id
3228 ,l_revision
3229 ,l_subinventory_code
3230 ,l_locator_id
3231 ,l_transaction_quantity
3232 ,l_transaction_uom_code
3233 ,l_secondary_quantity
3234 ,l_secondary_uom_code ;
3235
3236 OPEN get_item_info(l_organization_id,l_inventory_item_id) ;
3237 FETCH get_item_info INTO l_lot_control_code, l_tracking_quantity_ind, l_item_secondary_uom_code;
3238 --item is already validated at this point no need to check for no_data_found
3239 CLOSE get_item_info;
3240
3241 /* bug 4178299, bypass dual qty validations for none-lot ctl items
3242 * since qty will be validated at lot level per line, at header level
3243 * we only need to check that transaction qty equals the sum of the lines total */
3244 --{
3245 IF (l_tracking_quantity_ind = 'PS') THEN
3246 --{
3247 IF (l_lot_control_code = 1 ) THEN
3248
3249 IF (l_debug = 1) THEN
3250 inv_log_util.trace('calling validate_quantities IN (validate_group)' , 'INV_TXN_MANAGER_GRP', 9);
3251 END IF;
3252
3253 /*------------------------------------------------------+
3254 | Validating secondary quantity, only
3255 | If the item is tracked in both primary AND secondary
3256 |
3257 +------------------------------------------------------*/
3258 l_qty_check := validate_quantities(
3259 p_rowid => l_rowid
3260 , p_lot_rowid => NULL
3261 , p_transaction_type_id => l_transaction_type_id
3262 , p_organization_id => l_organization_id
3263 , p_inventory_item_id => l_inventory_item_id
3264 , p_revision => l_revision
3265 , p_subinventory_code => l_subinventory_code
3266 , p_locator_id => l_locator_id
3267 , p_lot_number => NULL
3268 , p_transaction_quantity => l_transaction_quantity
3269 , p_transaction_uom => l_transaction_uom_code
3270 , p_secondary_quantity => l_secondary_quantity
3271 , p_secondary_uom_code => l_secondary_uom_code
3272 );
3273 --{
3274 IF (l_qty_check) THEN
3275 IF (l_debug = 1) THEN
3276 inv_log_util.trace('validate_quantities IN (validate_group) - PASSED ' , 'INV_TXN_MANAGER_GRP', 9);
3277 END IF;
3278
3279 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3280 SET TRANSACTION_QUANTITY = l_transaction_quantity,
3281 SECONDARY_TRANSACTION_QUANTITY = l_secondary_quantity,
3282 SECONDARY_UOM_CODE = l_secondary_uom_code
3283 WHERE ROWID = l_rowid;
3284
3285 ELSE
3286 -- validation failed
3287 IF (l_debug = 1) THEN
3288 inv_log_util.trace('validate_quantities IN (validate_group) - FAIL ' || l_msg_data , 'INV_TXN_MANAGER_GRP', 9);
3289 inv_log_util.trace('validate_group: TRANSACTION_QUANTITY ' || l_transaction_quantity , 'INV_TXN_MANAGER_GRP', 9);
3290 inv_log_util.trace('validate_group: SECONDARY_TRANSACTION_QUANTITY ' || l_secondary_quantity || ' uom2 '|| l_secondary_uom_code ,
3291 'INV_TXN_MANAGER_GRP', 9);
3292 END IF;
3293 END IF;--}
3294 ELSIF (l_lot_control_code = 2 ) THEN
3295 IF (l_debug = 1) THEN
3296 inv_log_util.trace('validate_group: for lot controlled items secondary uom='||l_secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
3297 END IF;
3298 IF (l_secondary_uom_code <> l_item_secondary_uom_code) THEN
3299 IF (l_debug = 1) THEN
3300 inv_log_util.trace('validate_group: sec uom in mti is diff than item sec uom', 'INV_TXN_MANAGER_GRP', 9);
3301 END IF;
3302 loaderrmsg('INV_INCORRECT_SECONDARY_UOM','INV_INCORRECT_SECONDARY_UOM');
3303 errupdate(l_rowid, NULL);
3304 END IF;
3305 --Set the default UOM2 if missing
3306 IF (l_secondary_uom_code IS NULL) THEN
3307 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3308 SET SECONDARY_UOM_CODE = l_item_secondary_uom_code
3309 WHERE ROWID = l_rowid;
3310 END IF;
3311 END IF;--} -- Lot ctl check
3312 ELSE
3313 --tracking is primary. no need for sec uom/qty
3314 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3315 SET SECONDARY_TRANSACTION_QUANTITY = NULL,
3316 SECONDARY_UOM_CODE = NULL
3317 WHERE ROWID = l_rowid;
3318 END IF;--}
3319
3320 EXIT WHEN AA2%NOTFOUND;
3321 END LOOP;
3322 CLOSE AA2;
3323
3324 -- INVCONV end fabdi
3325
3326
3327 /*------------------------------------------------------+
3328 | Validating Overcompletion transaction quantity
3329 +------------------------------------------------------*/
3330
3331 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3332 FND_MESSAGE.set_token('ENTITY1','overcompletion_txn_qty');
3333 FND_MESSAGE.set_token('ENTITY2','zero');
3334
3335 l_error_exp := FND_MESSAGE.get;
3336
3337 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3338 l_error_code := FND_MESSAGE.get;
3339
3340
3341 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3342 SET LAST_UPDATE_DATE = SYSDATE,
3343 LAST_UPDATED_BY = p_userid,
3344 LAST_UPDATE_LOGIN = p_loginid,
3345 PROGRAM_UPDATE_DATE = SYSDATE,
3346 PROCESS_FLAG = 3,
3347 LOCK_FLAG = 2,
3348 ERROR_CODE = substrb(l_error_code,1,240),
3349 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3350 WHERE TRANSACTION_HEADER_ID = p_header_id
3351 AND PROCESS_FLAG = 1
3352 AND NVL(OVERCOMPLETION_TRANSACTION_QTY,1) <= 0;
3353
3354 l_count := SQL%ROWCOUNT;
3355
3356 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3357 FND_MESSAGE.set_token('ENTITY1','transaction quantity-cap');
3358 FND_MESSAGE.set_token('ENTITY2','overcompletion_txn_qty');
3359
3360 l_error_exp := FND_MESSAGE.get;
3361
3362 FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3363 l_error_code := FND_MESSAGE.get;
3364
3365
3366
3367 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3368 SET LAST_UPDATE_DATE = SYSDATE,
3369 LAST_UPDATED_BY = p_userid,
3370 LAST_UPDATE_LOGIN = p_loginid,
3371 PROGRAM_UPDATE_DATE = SYSDATE,
3372 PROCESS_FLAG = 3,
3373 LOCK_FLAG = 2,
3374 ERROR_CODE = substrb(l_error_code,1,240),
3375 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3376 WHERE TRANSACTION_HEADER_ID = p_header_id
3377 AND PROCESS_FLAG = 1
3378 AND OVERCOMPLETION_TRANSACTION_QTY IS NOT NULL
3379 AND OVERCOMPLETION_TRANSACTION_QTY > TRANSACTION_QUANTITY;
3380
3381 l_count := l_count + SQL%ROWCOUNT;
3382 IF (l_debug = 1) THEN
3383 inv_log_util.trace('Validating overcompletion quantity ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3384 END IF;
3385
3386
3387 /*------------------------------------------------------+
3388 | Validate distribution account
3389 +------------------------------------------------------*/
3390
3391 IF (l_validate_full) THEN --J-dev
3392
3393 loaderrmsg('INV_INT_DISTCODE','INV_INT_DISTEXP');
3394
3395 /*Bug#5176266. Made changes to the below UPDATE statement
3396 to validate the Account effective date against transactions
3397 date( not sysdate)*/
3398
3399 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3400 SET LAST_UPDATE_DATE = SYSDATE,
3401 LAST_UPDATED_BY = p_userid,
3402 LAST_UPDATE_LOGIN = p_loginid,
3403 PROGRAM_UPDATE_DATE = SYSDATE,
3404 PROCESS_FLAG = 3,
3405 LOCK_FLAG = 2,
3406 ERROR_CODE = substrb(l_error_code,1,240),
3407 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3408 WHERE TRANSACTION_HEADER_ID = p_header_id
3409 AND PROCESS_FLAG = 1
3410 AND DISTRIBUTION_ACCOUNT_ID IS NOT NULL
3411 AND NOT EXISTS (
3412 SELECT NULL
3413 FROM GL_CODE_COMBINATIONS GCC
3414 WHERE GCC.CODE_COMBINATION_ID = MTI.DISTRIBUTION_ACCOUNT_ID
3415 AND GCC.CHART_OF_ACCOUNTS_ID
3416 = (SELECT CHART_OF_ACCOUNTS_ID
3417 FROM ORG_ORGANIZATION_DEFINITIONS OOD
3418 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
3419 AND GCC.ENABLED_FLAG = 'Y'
3420 AND NVL(GCC.START_DATE_ACTIVE, MTI.TRANSACTION_DATE - 1) <= MTI.TRANSACTION_DATE
3421 AND NVL(GCC.END_DATE_ACTIVE, MTI.TRANSACTION_DATE + 1) > MTI.TRANSACTION_DATE);
3422
3423 l_count := SQL%ROWCOUNT;
3424
3425
3426 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3427 SET LAST_UPDATE_DATE = SYSDATE,
3428 LAST_UPDATED_BY = p_userid,
3429 LAST_UPDATE_LOGIN = p_loginid,
3430 PROGRAM_UPDATE_DATE = SYSDATE,
3431 PROCESS_FLAG = 3,
3432 LOCK_FLAG = 2,
3433 ERROR_CODE = substrb(l_error_code,1,240),
3434 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3435 WHERE TRANSACTION_HEADER_ID = p_header_id
3436 AND PROCESS_FLAG = 1
3437 AND DISTRIBUTION_ACCOUNT_ID IS NULL
3438 AND (TRANSACTION_SOURCE_TYPE_ID = INV_Globals.G_SourceType_Inventory OR
3439 TRANSACTION_SOURCE_TYPE_ID >=100)
3440 AND NVL(OWNING_ORGANIZATION_ID,organization_id) = organization_id
3441 AND NVL(OWNING_TP_TYPE,2) = 2 -- if it is null we are considering it as normal item..
3442 -- Added the above two lines for the bug # 5896859
3443 AND (TRANSACTION_ACTION_ID IN (1,27)
3444 AND EXISTS (
3445 SELECT NULL
3446 FROM MTL_SYSTEM_ITEMS MSI,
3447 mtl_secondary_inventories MSUB
3448 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3449 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3450 AND MSI.INVENTORY_ASSET_FLAG = 'Y'
3451 AND MSUB.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
3452 AND MSUB.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3453 AND MSUB.ASSET_INVENTORY = 1));
3454
3455
3456 l_count := l_count + SQL%ROWCOUNT;
3457 IF (l_debug = 1) THEN
3458 inv_log_util.trace('Validating distribution account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3459 END IF;
3460
3461 END IF;--J-dev
3462
3463
3464
3465 /*-----------------------------------------------------------+
3466 | Validate freight and freight account
3467 +-----------------------------------------------------------*/
3468
3469
3470 IF (l_validate_full) THEN --J-dev
3471
3472 loaderrmsg('INV_INT_FRTCODE','INV_INT_FRTEXP');
3473
3474
3475 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3476 SET LAST_UPDATE_DATE = SYSDATE,
3477 LAST_UPDATED_BY = p_userid,
3478 LAST_UPDATE_LOGIN = p_loginid,
3479 PROGRAM_UPDATE_DATE = SYSDATE,
3480 PROCESS_FLAG = 3,
3481 LOCK_FLAG = 2,
3482 ERROR_CODE = substrb(l_error_code,1,240),
3483 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3484 WHERE TRANSACTION_HEADER_ID = p_header_id
3485 AND TRANSACTION_ACTION_ID in (3,21)
3486 AND FREIGHT_CODE IS NOT NULL
3487 AND PROCESS_FLAG = 1
3488 AND NOT EXISTS (
3489 SELECT NULL
3490 FROM ORG_FREIGHT FR
3491 WHERE FR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3492 AND FR.FREIGHT_CODE = MTI.FREIGHT_CODE
3493 AND NVL(FR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
3494
3495 l_count := SQL%ROWCOUNT;
3496 loaderrmsg('INV_INT_FRTACTCODE','INV_INT_FRTACTEXP');
3497
3498
3499 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3500 SET LAST_UPDATE_DATE = SYSDATE,
3501 LAST_UPDATED_BY = p_userid,
3502 LAST_UPDATE_LOGIN = p_loginid,
3503 PROGRAM_UPDATE_DATE = SYSDATE,
3504 PROCESS_FLAG = 3,
3505 LOCK_FLAG = 2,
3506 ERROR_CODE = substrb(l_error_code,1,240),
3507 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3508 WHERE TRANSACTION_HEADER_ID = p_header_id
3509 AND TRANSACTION_ACTION_ID in (3,21)
3510 AND TRANSPORTATION_ACCOUNT IS NOT NULL
3511 AND PROCESS_FLAG = 1
3512 AND NOT EXISTS (
3513 SELECT NULL
3514 FROM ORG_FREIGHT FR
3515 WHERE FR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3516 AND FR.FREIGHT_CODE = MTI.FREIGHT_CODE
3517 AND FR.DISTRIBUTION_Account = MTI.TRANSPORTATION_ACCOUNT
3518 AND NVL(FR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
3519
3520 l_count := l_count + SQL%ROWCOUNT;
3521 IF (l_debug = 1) THEN
3522 inv_log_util.trace('Validating freight account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3523 END IF;
3524 END IF; --J-dev
3525
3526 /*--------------------------------------------------------+
3527 | Start validation of wip_entity for wip transactions for
3528 | non-CFMs.
3529 |+--------------------------------------------------------*/
3530
3531 --J-dev This should not be done for WIP MTI records in J.
3532 -- WIP will do this validation.
3533 IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3534 loaderrmsg('INV_INT_SRCCODE','INV_INT_SRCWIPEXP');
3535
3536
3537 IF srctypeid = 5 THEN
3538
3539 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3540 SET LAST_UPDATE_DATE = SYSDATE,
3541 LAST_UPDATED_BY = p_userid,
3542 LAST_UPDATE_LOGIN = p_loginid,
3543 PROGRAM_UPDATE_DATE = SYSDATE,
3544 PROCESS_FLAG = 3,
3545 LOCK_FLAG = 2,
3546 ERROR_CODE = substrb(l_error_code,1,240),
3547 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3548 WHERE TRANSACTION_HEADER_ID = p_header_id
3549 AND PROCESS_FLAG = 1
3550 AND TRANSACTION_SOURCE_TYPE_ID = 5
3551 AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'N'
3552 AND NOT EXISTS (
3553 SELECT NULL
3554 FROM WIP_ENTITIES WEN
3555 WHERE WEN.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3556 AND WEN.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID);
3557
3558 l_count := SQL%ROWCOUNT;
3559 IF (l_debug = 1) THEN
3560 inv_log_util.trace('Validating wip entity non-CFM ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3561 END IF;
3562 END IF;
3563 END IF;--J-dev
3564
3565
3566 /*------------------------------------------------------+
3567 | Start validation of wip_entity for wip transactions
3568 | that are CFMs
3569 +------------------------------------------------------*/
3570
3571 --J-dev
3572 --This validation should not be done for WIP MTI in J.
3573 --WIP will do this validation in J.
3574
3575 IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3576 loaderrmsg('INV_INT_SRCCODE','INV_INT_SRCCFMEXP');
3577 IF srctypeid = 5 THEN
3578 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3579 SET LAST_UPDATE_DATE = SYSDATE,
3580 LAST_UPDATED_BY = p_userid,
3581 LAST_UPDATE_LOGIN = p_loginid,
3582 PROGRAM_UPDATE_DATE = SYSDATE,
3583 PROCESS_FLAG = 3,
3584 LOCK_FLAG = 2,
3585 ERROR_CODE = substrb(l_error_code,1,240),
3586 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3587 WHERE TRANSACTION_HEADER_ID = p_header_id
3588 AND PROCESS_FLAG = 1
3589 AND TRANSACTION_SOURCE_TYPE_ID = 5
3590 AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'Y'
3591 AND NOT EXISTS (
3592 SELECT NULL
3593 FROM WIP_ENTITIES WEN
3594 WHERE WEN.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3595 AND WEN.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID);
3596
3597 l_count := SQL%ROWCOUNT;
3598 IF (l_debug = 1) THEN
3599 inv_log_util.trace('Validating wip entity CFM ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3600 END IF;
3601 END IF;
3602 END IF;--J-dev
3603
3604 /*---------------------------------------------------------------+
3605 | Validating Projects Contracts
3606 |
3607 +----------------------------------------------------------------*/
3608 /* load message to detect source project contracts error*/
3609
3610 IF (l_validate_full) THEN --J-dev
3611
3612 loaderrmsg('INV_PROJCON_ERR','INV_PROJCON_ERR');
3613
3614 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3615 SET LAST_UPDATE_DATE = SYSDATE,
3616 LAST_UPDATED_BY = p_userid,
3617 LAST_UPDATE_LOGIN = p_loginid,
3618 PROCESS_FLAG = 3,
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 TRANSACTION_SOURCE_TYPE_ID = INV_GLOBALS.G_SourceType_PrjContracts
3623 AND NOT EXISTS (
3624 SELECT NULL
3625 FROM OKE_K_HEADERS_V OKHV
3626 WHERE MTI.TRANSACTION_SOURCE_ID = OKHV.K_HEADER_ID);
3627
3628 l_count := SQL%ROWCOUNT;
3629 /*-----------------------------------------------------------+
3630 | Start validating source_project_id, source_task_id,
3631 | expenditure_type and expenditure_org_id for miscllaneous
3632 | trxs that are project related.
3633 +-----------------------------------------------------------*/
3634
3635 -- Bug #2505534 Moved validation of source_project_id inside validate_line()
3636
3637 /* validate source task id */
3638 loaderrmsg('INV_TASK_ERR','INV_TASK_ERR');
3639
3640
3641 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3642 SET LAST_UPDATE_DATE = SYSDATE,
3643 LAST_UPDATED_BY = p_userid,
3644 LAST_UPDATE_LOGIN = p_loginid,
3645 PROGRAM_UPDATE_DATE = SYSDATE,
3646 PROCESS_FLAG = 3,
3647 LOCK_FLAG = 2,
3648 ERROR_CODE = substrb(l_error_code,1,240),
3649 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3650 WHERE TRANSACTION_HEADER_ID = p_header_id
3651 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3652 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3653 AND TRANSACTION_ACTION_ID IN (1, 27 )
3654 AND PROCESS_FLAG = 1
3655 AND EXISTS (
3656 SELECT NULL
3657 FROM MTL_TRANSACTION_TYPES MTTY
3658 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3659 AND MTTY.TYPE_CLASS = 1 )
3660 AND NOT EXISTS (
3661 SELECT NULL
3662 FROM PA_TASKS_LOWEST_V TSK
3663 WHERE TSK.PROJECT_ID = MTI.SOURCE_PROJECT_ID AND
3664 TSK.TASK_ID = MTI.SOURCE_TASK_ID );
3665
3666
3667 l_count := l_count + SQL%ROWCOUNT;
3668
3669 /* validate expenditure type */
3670 /* get value of profile INV:Miscllaneous Project transaction to see
3671 if the expenditure type field is required and has a value or
3672 that it does not have a user entered value
3673 INV: Project Miscellaneous Transaction Expenditure Type
3674 INV_PROJ_MISC_TXN_EXP_TYPE
3675 user_entered = 2 (user must provide valid exp type)
3676 system derived = 1 (user must NOT provide any value for exp type)
3677 */
3678
3679 SELECT FND_PROFILE.VALUE('INV_PROJ_MISC_TXN_EXP_TYPE')
3680 INTO l_profile
3681 FROM dual;
3682
3683 IF SQL%FOUND THEN
3684 if l_profile = '2' THEN
3685 exp_type_required := 2 ;
3686 else
3687 exp_type_required := 1 ;
3688 end if;
3689 ELSE
3690 exp_type_required := 1;
3691 END IF;
3692
3693 loaderrmsg('INV_ETYPE_ERR','INV_ETYPE_ERR');
3694 IF exp_type_required = 2 THEN
3695
3696 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3697 SET LAST_UPDATE_DATE = SYSDATE,
3698 LAST_UPDATED_BY = p_userid,
3699 LAST_UPDATE_LOGIN = p_loginid,
3700 PROGRAM_UPDATE_DATE = SYSDATE,
3701 PROCESS_FLAG = 3,
3702 LOCK_FLAG = 2,
3703 ERROR_CODE = substrb(l_error_code,1,240),
3704 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3705 WHERE TRANSACTION_HEADER_ID = p_header_id
3706 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3707 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3708 AND TRANSACTION_ACTION_ID IN (1, 27 )
3709 AND PROCESS_FLAG = 1
3710 AND EXISTS (
3711 SELECT NULL
3712 FROM MTL_TRANSACTION_TYPES MTTY
3713 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3714 AND MTTY.TYPE_CLASS = 1 )
3715 AND NOT EXISTS (
3716 SELECT NULL
3717 FROM CST_PROJ_EXP_TYPES_VAL_V CET
3718 WHERE CET.EXPENDITURE_TYPE = MTI.EXPENDITURE_TYPE
3719 AND CET.COST_ELEMENT_ID = 1
3720 AND TRUNC(MTI.TRANSACTION_DATE) >= CET.SYS_LINK_START_DATE
3721 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(SYS_LINK_END_DATE,
3722 MTI.TRANSACTION_DATE + 1)
3723 AND TRUNC(MTI.TRANSACTION_DATE) >= CET.EXP_TYPE_START_DATE
3724 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(EXP_TYPE_END_DATE,
3725 MTI.TRANSACTION_DATE+1)) ;
3726
3727 l_count := l_count + SQL%ROWCOUNT;
3728
3729 ELSE
3730 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3731 SET LAST_UPDATE_DATE = SYSDATE,
3732 LAST_UPDATED_BY = p_userid,
3733 LAST_UPDATE_LOGIN = p_loginid,
3734 PROGRAM_UPDATE_DATE = SYSDATE,
3735 PROCESS_FLAG = 3,
3736 LOCK_FLAG = 2,
3737 ERROR_CODE = substrb(l_error_code,1,240),
3738 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3739 WHERE TRANSACTION_HEADER_ID = p_header_id
3740 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3741 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3742 AND TRANSACTION_ACTION_ID IN (1, 27 )
3743 AND PROCESS_FLAG = 1
3744 AND EXISTS (
3745 SELECT NULL
3746 FROM MTL_TRANSACTION_TYPES MTTY
3747 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3748 AND MTTY.TYPE_CLASS = 1 )
3749 AND MTI.EXPENDITURE_TYPE IS NOT NULL ;
3750
3751 l_count := l_count + SQL%ROWCOUNT;
3752
3753 END IF;
3754
3755 /* validate expenditure org id */
3756 --Bug #2505534 moved validation code inside validate_line()
3757 /*+--------------------------------------------------------------+
3758 | Now validate cost group ids, these must exist and must be |
3759 | enabled in terms of date |
3760 +--------------------------------------------------------------+*/
3761 loaderrmsg('INV_INT_CSTGRP','INV_INT_CSTEXP');
3762
3763 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3764 SET LAST_UPDATE_DATE = SYSDATE,
3765 LAST_UPDATED_BY = p_userid,
3766 LAST_UPDATE_LOGIN = p_loginid,
3767 PROGRAM_UPDATE_DATE = SYSDATE,
3768 PROCESS_FLAG = 3,
3769 LOCK_FLAG = 2,
3770 ERROR_CODE = substrb(l_error_code,1,240),
3771 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3772 WHERE TRANSACTION_HEADER_ID = p_header_id
3773 AND PROCESS_FLAG = 1
3774 --AND TRANSACTION_ACTION_ID = 24
3775 --AND TRANSACTION_SOURCE_TYPE_ID IN (13,15)
3776 AND COST_GROUP_ID IS NOT NULL
3777 AND NOT EXISTS (
3778 SELECT NULL
3779 FROM CST_COST_GROUPS CCG
3780 WHERE CCG.COST_GROUP_ID = MTI.COST_GROUP_ID
3781 AND NVL(CCG.ORGANIZATION_ID, MTI.ORGANIZATION_ID)
3782 =MTI.ORGANIZATION_ID
3783 AND TRUNC(NVL(CCG.DISABLE_DATE,SYSDATE+1)) >= TRUNC(SYSDATE) ) ;
3784
3785 l_count := SQL%ROWCOUNT;
3786 IF (l_debug = 1) THEN
3787 inv_log_util.trace('Validating cost group ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3788 END IF;
3789
3790 END IF;--J-dev
3791
3792
3793 /*+-----------------------------------------------------------------------+
3794 | Now validate transfer cost group ids, these must exist and must be |
3795 | enabled in terms of date |
3796 +-----------------------------------------------------------------------+*/
3797 loaderrmsg('INV_INT_XCSTGRP','INV_INT_XCSTEXP');
3798
3799 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3800 SET LAST_UPDATE_DATE = SYSDATE,
3801 LAST_UPDATED_BY = p_userid,
3802 LAST_UPDATE_LOGIN = p_loginid,
3803 PROGRAM_UPDATE_DATE = SYSDATE,
3804 PROCESS_FLAG = 3,
3805 LOCK_FLAG = 2,
3806 ERROR_CODE = substrb(l_error_code,1,240),
3807 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3808 WHERE TRANSACTION_HEADER_ID = p_header_id
3809 AND PROCESS_FLAG = 1
3810 AND TRANSFER_COST_GROUP_ID IS NOT NULL
3811 AND NOT EXISTS (
3812 SELECT NULL
3813 FROM CST_COST_GROUPS CCG
3814 WHERE CCG.COST_GROUP_ID = MTI.TRANSFER_COST_GROUP_ID
3815 AND NVL(CCG.ORGANIZATION_ID, MTI.ORGANIZATION_ID) =
3816 MTI.ORGANIZATION_ID
3817 AND TRUNC(NVL(CCG.DISABLE_DATE,SYSDATE+1)) >= TRUNC(SYSDATE) ) ;
3818
3819
3820 l_count := SQL%ROWCOUNT;
3821 IF (l_debug = 1) THEN
3822 inv_log_util.trace('Validating xfer cost group ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3823 END IF;
3824
3825 /*-------------------------------------------------------------+
3826 | Validate the interface table for Planning Organization
3827 | to be used for VMI transactions
3828 +-------------------------------------------------------------*/
3829
3830 loaderrmsg('INV_INT_PLANORG','INV_INT_PLANORG');
3831
3832 /*Bug#4951558. In the where clause of the below UPDATE statement, added the
3833 condition, 'paa.using_organization_code = -1' because
3834 'using_organization_code' is set to -1 in the table, 'po_asl_attributes' if
3835 the global flag is set to 'Yes' in the ASL for an (item, supplier)
3836 combination*/
3837
3838 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3839 SET LAST_UPDATE_DATE = SYSDATE,
3840 LAST_UPDATED_BY = p_userid,
3841 LAST_UPDATE_LOGIN = p_loginid,
3842 PROGRAM_UPDATE_DATE = SYSDATE,
3843 PROCESS_FLAG = 3,
3844 LOCK_FLAG = 2,
3845 ERROR_CODE = substrb(l_error_code,1,240),
3846 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3847 WHERE TRANSACTION_HEADER_ID = p_header_id
3848 AND PROCESS_FLAG = 1
3849 AND PLANNING_ORGANIZATION_ID IS NOT NULL
3850 AND planning_tp_type = 1
3851 AND planning_organization_id <> ORGANIZATION_ID
3852 AND NOT EXISTS (
3853 SELECT NULL
3854 FROM po_asl_attributes paa
3855 WHERE PAA.vendor_site_id = mti.planning_organization_id
3856 AND PAA.ITEM_ID = MTI.INVENTORY_ITEM_ID
3857 AND (paa.using_organization_id = -1 OR
3858 paa.using_organization_id = mti.organization_id));
3859
3860 l_count := SQL%ROWCOUNT;
3861 IF (l_debug = 1) THEN
3862 inv_log_util.trace('Validating group Plann Org:Supplier' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3863 END IF;
3864
3865 --if the planning _org is a inventory org it should be in
3866 --mtl_parameters.
3867
3868 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3869 SET LAST_UPDATE_DATE = SYSDATE,
3870 LAST_UPDATED_BY = p_userid,
3871 LAST_UPDATE_LOGIN = p_loginid,
3872 PROGRAM_UPDATE_DATE = SYSDATE,
3873 PROCESS_FLAG = 3,
3874 LOCK_FLAG = 2,
3875 ERROR_CODE = substrb(l_error_code,1,240),
3876 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3877 WHERE TRANSACTION_HEADER_ID = p_header_id
3878 AND PROCESS_FLAG = 1
3879 AND PLANNING_ORGANIZATION_ID IS NOT NULL
3880 AND planning_tp_type = 2
3881 AND planning_organization_id <> ORGANIZATION_ID
3882 AND NOT EXISTS (
3883 SELECT NULL
3884 FROM mtl_parameters mp
3885 where
3886 mp.organization_id = mti.planning_organization_id);
3887
3888
3889 l_count := SQL%ROWCOUNT;
3890 IF (l_debug = 1) THEN
3891 inv_log_util.trace('Validating group Planning Org:Inventory Org' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3892 END IF;
3893
3894
3895 /*-------------------------------------------------------------+
3896 | Validate the Interface table for LPN
3897 +-------------------------------------------------------------*/
3898
3899 loaderrmsg('INV_INT_LPN','INV_INT_LPN');
3900
3901
3902 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3903 SET LAST_UPDATE_DATE = SYSDATE,
3904 LAST_UPDATED_BY = p_userid,
3905 LAST_UPDATE_LOGIN = p_loginid,
3906 PROGRAM_UPDATE_DATE = SYSDATE,
3907 PROCESS_FLAG = 3,
3908 LOCK_FLAG = 2,
3909 ERROR_CODE = substrb(l_error_code,1,240),
3910 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3911 WHERE TRANSACTION_HEADER_ID = p_header_id
3912 AND PROCESS_FLAG = 1
3913 AND lpn_id IS NOT NULL
3914 AND NOT EXISTS (
3915 SELECT NULL
3916 FROM wms_license_plate_numbers wlpn
3917 where
3918 wlpn.lpn_id = mti.lpn_id);
3919
3920
3921 l_count := SQL%ROWCOUNT;
3922 IF (l_debug = 1) THEN
3923 inv_log_util.trace('Validating group LPN:LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3924 END IF;
3925
3926 --Validate Xfr LPN
3927
3928 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3929 SET LAST_UPDATE_DATE = SYSDATE,
3930 LAST_UPDATED_BY = p_userid,
3931 LAST_UPDATE_LOGIN = p_loginid,
3932 PROGRAM_UPDATE_DATE = SYSDATE,
3933 PROCESS_FLAG = 3,
3934 LOCK_FLAG = 2,
3935 ERROR_CODE = substrb(l_error_code,1,240),
3936 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3937 WHERE TRANSACTION_HEADER_ID = p_header_id
3938 AND PROCESS_FLAG = 1
3939 AND TRANSFER_LPN_ID IS NOT NULL
3940 AND NOT EXISTS (
3941 SELECT NULL
3942 FROM wms_license_plate_numbers wlpn
3943 where
3944 wlpn.lpn_id = mti.transfer_lpn_id
3945
3946 /* for bug 6903894 */
3947 AND (
3948 --WIP Assembly Completion
3949 ((TRANSACTION_TYPE_ID = 44) OR (TRANSACTION_SOURCE_TYPE_ID = 5 and TRANSACTION_ACTION_ID = 31))
3950 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV, WMS_CONTAINER_PUB.LPN_CONTEXT_WIP, WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED, WMS_CONTAINER_PUB.LPN_PREPACK_FOR_WIP)
3951
3952 OR
3953 --Account Alias Issue
3954 ((TRANSACTION_TYPE_ID = 31) OR (TRANSACTION_SOURCE_TYPE_ID = 6 and TRANSACTION_ACTION_ID = 1))
3955 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED)
3956
3957 OR --bug10009302
3958 --Miscellaneous Receipt
3959 ( (TRANSACTION_TYPE_ID = 42) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 27)
3960 OR (TRANSACTION_SOURCE_TYPE_ID >= 100 and TRANSACTION_ACTION_ID = 27) ) /*Bug11858317 */
3961 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED)
3962
3963 OR
3964 --Miscellaneous Issue
3965 ((TRANSACTION_TYPE_ID = 32) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 1))
3966 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED)
3967
3968 OR
3969 --Issue Components to WIP
3970 ((TRANSACTION_TYPE_ID = 35) OR (TRANSACTION_SOURCE_TYPE_ID = 5 and TRANSACTION_ACTION_ID = 1))
3971 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV)
3972
3973 OR
3974 --Account Alias Receipt
3975 ((TRANSACTION_TYPE_ID = 41) OR (TRANSACTION_SOURCE_TYPE_ID = 6 and TRANSACTION_ACTION_ID = 27))
3976 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED)
3977
3978 OR
3979 --Subinventory Transfer
3980 (
3981 ((TRANSACTION_TYPE_ID = 2) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 2)) OR
3982 (TRANSACTION_SOURCE_TYPE_ID >= 100 and TRANSACTION_ACTION_ID = 2) /* 13076071 */
3983 )
3984 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED)
3985
3986 OR
3987 --Direct Interorganization Transfer
3988 ((TRANSACTION_TYPE_ID = 3) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 3))
3989 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_WIP,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED)
3990
3991 OR
3992 --Intransit Shipment
3993 ((TRANSACTION_TYPE_ID = 21) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 21))
3994 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_WIP,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED)
3995 OR
3996 --Average Cost Update
3997 ((TRANSACTION_TYPE_ID = 80) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 24))
3998 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_WIP,WMS_CONTAINER_PUB.LPN_CONTEXT_RCV,WMS_CONTAINER_PUB.LPN_CONTEXT_INTRANSIT,WMS_CONTAINER_PUB.LPN_PREPACK_FOR_WIP)
3999
4000 OR
4001 --Sales Order Shipment
4002 ((TRANSACTION_TYPE_ID = 33) OR (TRANSACTION_SOURCE_TYPE_ID = 2 and TRANSACTION_ACTION_ID = 1))
4003 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PACKING,WMS_CONTAINER_PUB.LPN_LOADED_FOR_SHIPMENT,WMS_CONTAINER_PUB.LPN_CONTEXT_PICKED)
4004
4005 OR
4006 --Return Assemblies to WIP
4007 ((TRANSACTION_TYPE_ID = 17) OR (TRANSACTION_SOURCE_TYPE_ID = 5 and TRANSACTION_ACTION_ID = 32))
4008 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED,WMS_CONTAINER_PUB.LPN_PREPACK_FOR_WIP)
4009
4010
4011 OR
4012
4013 -- Bug 7417173 - Container Split --bug10149138
4014 (((TRANSACTION_TYPE_ID=89) OR (TRANSACTION_SOURCE_TYPE_ID = 13 AND TRANSACTION_ACTION_ID = 52))
4015 AND lpn_context NOT IN (WMS_CONTAINER_PUB.LPN_CONTEXT_STORES))
4016
4017 OR --Bug 10009302
4018 --Packing
4019 (((TRANSACTION_TYPE_ID = 87) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 50))
4020 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED,WMS_CONTAINER_PUB.LPN_LOADED_FOR_SHIPMENT,WMS_CONTAINER_PUB.LPN_CONTEXT_PICKED))
4021
4022 OR --Bug 12944629
4023 --lot translate
4024 (((TRANSACTION_TYPE_ID = 84) OR (TRANSACTION_SOURCE_TYPE_ID = 13 and TRANSACTION_ACTION_ID = 42))
4025 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED))
4026
4027 OR
4028
4029 --Return Components from WIP
4030 ((TRANSACTION_TYPE_ID = 43) OR (TRANSACTION_SOURCE_TYPE_ID = 5 and TRANSACTION_ACTION_ID = 27))
4031 AND lpn_context IN (WMS_CONTAINER_PUB.LPN_CONTEXT_INV,WMS_CONTAINER_PUB.LPN_CONTEXT_WIP,WMS_CONTAINER_PUB.LPN_CONTEXT_PREGENERATED,WMS_CONTAINER_PUB.LPN_PREPACK_FOR_WIP)--bug 10153918
4032
4033 )
4034 /* for bug 6903894*/
4035
4036 );
4037
4038
4039 l_count := SQL%ROWCOUNT;
4040 IF (l_debug = 1) THEN
4041 inv_log_util.trace('Validating group LPN:XFER_LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
4042 END IF;
4043
4044
4045 --Validate Content LPN
4046
4047 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4048 SET LAST_UPDATE_DATE = SYSDATE,
4049 LAST_UPDATED_BY = p_userid,
4050 LAST_UPDATE_LOGIN = p_loginid,
4051 PROGRAM_UPDATE_DATE = SYSDATE,
4052 PROCESS_FLAG = 3,
4053 LOCK_FLAG = 2,
4054 ERROR_CODE = substrb(l_error_code,1,240),
4055 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4056 WHERE TRANSACTION_HEADER_ID = p_header_id
4057 AND PROCESS_FLAG = 1
4058 AND CONTENT_LPN_ID IS NOT NULL
4059 AND NOT EXISTS (
4060 SELECT NULL
4061 FROM wms_license_plate_numbers wlpn
4062 where
4063 wlpn.lpn_id = mti.CONTENT_LPN_ID);
4064
4065
4066 l_count := SQL%ROWCOUNT;
4067 IF (l_debug = 1) THEN
4068 inv_log_util.trace('Validating group LPN:Content_LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
4069 END IF;
4070
4071
4072 /*-------------------------------------------------------------+
4073 | Update the interface table with shippable item flag
4074 | to be used for OE transactions
4075 +-------------------------------------------------------------*/
4076
4077
4078
4079 IF (srctypeid = INV_GLOBALS.G_SourceType_SalesOrder OR
4080 srctypeid = INV_GLOBALS.G_SourceType_IntOrder OR
4081 srctypeid = INV_GLOBALS.G_SourceType_PrjContracts) THEN
4082 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4083 SET LAST_UPDATE_DATE = SYSDATE,
4084 LAST_UPDATED_BY = p_userid,
4085 LAST_UPDATE_LOGIN = p_loginid,
4086 PROGRAM_UPDATE_DATE = SYSDATE,
4087 SHIPPABLE_FLAG = (SELECT SHIPPABLE_ITEM_FLAG
4088 FROM MTL_SYSTEM_ITEMS MSI
4089 WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
4090 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
4091 WHERE TRANSACTION_HEADER_ID = p_header_id
4092 AND INVENTORY_ITEM_ID IS NOT NULL
4093 AND TRANSACTION_SOURCE_TYPE_ID in (2,8,16)
4094 AND PROCESS_FLAG = 1;
4095
4096 END IF;
4097
4098 /*-----------------------------------------------------------+
4099 | Deriving values for inventory_item_id and wip_entity_type
4100 | for WIP transactions. Do this for bot CFM and non-CFMs.
4101 +------------------------------------------------------------*/
4102
4103 --J-dev
4104 --This validation should not be done for WIP MTI in J.
4105 --WIP will do this validation in J.
4106
4107 IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
4108
4109 IF (srctypeid = 5) THEN
4110 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4111 SET LAST_UPDATE_DATE = SYSDATE,
4112 LAST_UPDATED_BY = p_userid,
4113 LAST_UPDATE_LOGIN = p_loginid,
4114 PROGRAM_UPDATE_DATE = SYSDATE,
4115 INVENTORY_ITEM_ID = (SELECT DECODE(MTI.TRANSACTION_ACTION_ID,30,
4116 PRIMARY_ITEM_ID,31,PRIMARY_ITEM_ID,32,
4117 PRIMARY_ITEM_ID,
4118 MTI.INVENTORY_ITEM_ID) -- CFM Scrap Transactions
4119 FROM WIP_ENTITIES WE
4120 WHERE WE.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID
4121 AND WE.ORGANIZATION_ID = MTI.ORGANIZATION_ID),
4122 WIP_ENTITY_TYPE = (SELECT ENTITY_TYPE
4123 FROM WIP_ENTITIES WE
4124 WHERE WE.ORGANIZATION_ID = MTI.ORGANIZATION_ID
4125 AND WE.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID)
4126 WHERE TRANSACTION_HEADER_ID = p_header_id
4127 AND TRANSACTION_SOURCE_TYPE_ID = 5
4128 AND PROCESS_FLAG = 1;
4129
4130
4131 /*-------------------------------------------------------------+
4132 | Update MTI with right op seq num for non-CFMs
4133 +--------------------------------------------------------------*/
4134
4135 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4136 SET LAST_UPDATE_DATE = SYSDATE,
4137 LAST_UPDATED_BY = p_userid,
4138 LAST_UPDATE_LOGIN = p_loginid,
4139 PROGRAM_UPDATE_DATE = SYSDATE,
4140 OPERATION_SEQ_NUM = (SELECT nvl(max(operation_seq_num),1)
4141 FROM WIP_OPERATIONS WO
4142 WHERE WO.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID
4143 AND WO.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
4144 WHERE TRANSACTION_HEADER_ID = p_header_id
4145 AND TRANSACTION_SOURCE_TYPE_ID = 5
4146 AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'N'
4147 AND TRANSACTION_ACTION_ID IN (32,31)
4148 AND PROCESS_FLAG = 1;
4149
4150 END IF;
4151 END IF;--J-dev
4152
4153 /*-------------------------------------------------------------+
4154 | If a single transaction within a group fails all transactions
4155 | in that group should not be processed.
4156 +--------------------------------------------------------------*/
4157
4158 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
4159
4160 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4161 SET LAST_UPDATE_DATE = SYSDATE,
4162 LAST_UPDATED_BY = p_userid,
4163 LAST_UPDATE_LOGIN = p_loginid,
4164 PROGRAM_UPDATE_DATE = SYSDATE,
4165 PROCESS_FLAG = 3,
4166 LOCK_FLAG = 2,
4167 ERROR_CODE = substrb(l_error_code,1,240)
4168 WHERE TRANSACTION_HEADER_ID = p_header_id
4169 AND PROCESS_FLAG = 1
4170 AND EXISTS
4171 (SELECT 'Y'
4172 FROM MTL_TRANSACTIONS_INTERFACE MTI2
4173 WHERE MTI2.TRANSACTION_HEADER_ID = p_header_id
4174 AND MTI2.PROCESS_FLAG = 3
4175 AND MTI2.ERROR_CODE IS NOT NULL
4176 AND MTI2.TRANSACTION_BATCH_ID = MTI.TRANSACTION_BATCH_ID);
4177
4178 /* Commented following and Added EXISTS clause above for bug 8444982
4179
4180 AND TRANSACTION_BATCH_ID IN
4181 (SELECT DISTINCT MTI2.TRANSACTION_BATCH_ID
4182 FROM MTL_TRANSACTIONS_INTERFACE MTI2
4183 WHERE MTI2.TRANSACTION_HEADER_ID = p_header_id
4184 AND MTI2.PROCESS_FLAG = 3
4185 AND MTI2.ERROR_CODE IS NOT NULL);
4186
4187 */
4188 -- start of fix for eam
4189 -- added following validation on rebuild_item_id (valid in MSI and transactable)
4190 -- and rebuild_activity_id (valid in MSI)
4191 /*----------------------------------------------------+
4192 | validate rebuild item id and rebuild activity id where it is specified
4193 +----------------------------------------------------*/
4194
4195
4196 IF (l_validate_full) THEN --J-dev
4197
4198 loaderrmsg('INV_REB_ITMCODE','INV_REB_ITMEXP');
4199
4200 /* Bug# 5264549 : made changes to the REBUILD_ITEM_ID query to
4201 update EAM validations from Transaction Manager */
4202
4203 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4204 SET LAST_UPDATE_DATE = SYSDATE,
4205 LAST_UPDATED_BY = p_userid,
4206 LAST_UPDATE_LOGIN = p_loginid,
4207 PROGRAM_UPDATE_DATE = SYSDATE,
4208 PROCESS_FLAG = 3,
4209 LOCK_FLAG = 2,
4210 ERROR_CODE = substrb(l_error_code,1,240),
4211 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4212 WHERE TRANSACTION_HEADER_ID = p_header_id
4213 AND PROCESS_FLAG = 1
4214 AND ((REBUILD_ITEM_ID IS NOT NULL
4215 AND NOT EXISTS (
4216 SELECT NULL
4217 FROM MTL_SYSTEM_ITEMS MSI, MTL_PARAMETERS MP
4218 WHERE MSI.INVENTORY_ITEM_ID = MTI.REBUILD_ITEM_ID
4219 AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
4220 AND MP.MAINT_ORGANIZATION_ID = MTI.ORGANIZATION_ID
4221 AND MSI.EAM_ITEM_TYPE = 3
4222 AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y'))
4223
4224 OR (REBUILD_ACTIVITY_ID IS NOT NULL
4225 AND NOT EXISTS (
4226 SELECT NULL
4227 FROM MTL_SYSTEM_ITEMS MSI
4228 WHERE MSI.INVENTORY_ITEM_ID = MTI.REBUILD_ACTIVITY_ID
4229 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
4230 AND MSI.EAM_ITEM_TYPE = 2)));
4231
4232 l_count := SQL%ROWCOUNT;
4233 IF (l_debug = 1) THEN
4234 inv_log_util.trace('Validating rebuild items ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
4235 END IF;
4236 -- end of fix for eam
4237
4238 END IF;--J-dev
4239
4240 x_return_status := FND_API.G_RET_STS_SUCCESS;
4241
4242 FND_MESSAGE.clear;
4243
4244
4245 EXCEPTION
4246 WHEN OTHERS THEN
4247 IF (l_debug = 1) THEN
4248 inv_log_util.trace('Error in validate_group : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4249 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
4250 END IF;
4251 x_return_status := FND_API.G_RET_STS_ERROR;
4252 FND_MESSAGE.clear;
4253
4254 END validate_group;
4255
4256
4257
4258
4259
4260 /******* LINE VALIDATION OBJECTS ***************/
4261
4262 /******************************************************************
4263 *
4264 * lotcheck
4265 *
4266 ******************************************************************/
4267 FUNCTION lotcheck(p_rowid VARCHAR2, p_orgid NUMBER, p_itemid NUMBER, p_intid NUMBER,
4268 p_priuom VARCHAR2, p_trxuom VARCHAR2, p_lotuniq NUMBER,
4269 p_shlfcode NUMBER, p_shlfdays NUMBER, p_serctrl NUMBER, p_srctype NUMBER, p_acttype NUMBER,
4270 p_is_wsm_enabled VARCHAR2,
4271 -- INVCONV start fabdi
4272 p_trx_typeid NUMBER, p_revision VARCHAR2, p_subinvtory_code VARCHAR2, p_locator NUMBER, serial_tagged NUMBER)
4273 -- INVCONV end fabdi
4274
4275 RETURN BOOLEAN
4276 IS
4277 -- INVCONV fabdi start
4278 CURSOR INT3 IS
4279 SELECT LOT_NUMBER,
4280 TRANSACTION_QUANTITY,
4281 -- INVCONV start fabdi
4282 SECONDARY_TRANSACTION_QUANTITY,
4283 GRADE_CODE,
4284 RETEST_DATE,
4285 MATURITY_DATE,
4286 PARENT_LOT_NUMBER,
4287 ORIGINATION_DATE,
4288 ORIGINATION_TYPE,
4289 EXPIRATION_ACTION_CODE,
4290 EXPIRATION_ACTION_DATE,
4291 LOT_EXPIRATION_DATE,
4292 HOLD_DATE,
4293 REASON_ID,
4294 -- INVCONV end fabdi
4295 SERIAL_TRANSACTION_TEMP_ID,
4296 fnd_date.date_to_canonical(LOT_EXPIRATION_DATE),
4297 ROWID,
4298 parent_object_type, --R12 Genealogy enhancements
4299 parent_object_id, --R12 Genealogy enhancements
4300 parent_object_number, --R12 Genealogy enhancements
4301 parent_item_id, --R12 Genealogy enhancements
4302 parent_object_type2, --R12 Genealogy enhancements
4303 parent_object_id2, --R12 Genealogy enhancements
4304 parent_object_number2, --R12 Genealogy enhancements
4305 status_id -- Material Status Enhancement - Tracking bug: 13519864
4306 FROM MTL_TRANSACTION_LOTS_INTERFACE
4307 WHERE TRANSACTION_INTERFACE_ID = p_intid;
4308 -- INVCONV fabdi end
4309
4310
4311
4312 l_lotnum VARCHAR2(80); -- changed lot_number to 80, inconv
4313 --- mrana changed to type ROWID l_lotrowid VARCHAR2(20);
4314 l_lotrowid ROWID;
4315 l_lotexpdate VARCHAR2(22);
4316 l_userid NUMBER := -1; --prg_info.userid;
4317 l_reqstid NUMBER := -1; -- prg_info.reqstid;
4318 l_applid NUMBER := -1; -- prg_info.appid;
4319 l_progid NUMBER := -1; -- prg_info.progid;
4320 l_loginid NUMBER := -1; -- prg_info.loginid;
4321 l_lotqty NUMBER;
4322 l_lotpriqty NUMBER;
4323 l_sertempid NUMBER;
4324 l_tnum NUMBER;
4325
4326 -- INVCONV start fabdi
4327 L_parent_object_type NUMBER; --R12 Genealogy enhancements
4328 L_parent_object_id NUMBER; --R12 Genealogy enhancements
4329 L_parent_object_number NUMBER; --R12 Genealogy enhancements
4330 L_parent_item_id NUMBER; --R12 Genealogy enhancements
4331 L_parent_object_type2 NUMBER; --R12 Genealogy enhancements
4332 L_parent_object_id2 NUMBER; --R12 Genealogy enhancements
4333 L_parent_object_number2 NUMBER; --R12 Genealogy enhancements
4334 l_table VARCHAR2(10);
4335 l_rowid ROWID;
4336 l_serrowid ROWID;
4337 l_fm_serial_number VARCHAR2(30);
4338 l_to_serial_number VARCHAR2(30);
4339 l_process_enabled_flag VARCHAR2(1); --ADM bug 9959125
4340
4341 /* get copy lot attribute flag */
4342 CURSOR get_org_copy_lot_flag IS
4343 SELECT copy_lot_attribute_flag,
4344 lot_number_generation,
4345 nvl(process_enabled_flag, 'N') --ADM bug 9959125
4346 FROM mtl_parameters
4347 WHERE organization_id = p_orgid;
4348
4349 /* get item information */
4350 CURSOR c_get_item_info IS
4351 SELECT COPY_LOT_ATTRIBUTE_FLAG , child_lot_flag
4352 from mtl_system_items
4353 WHERE inventory_item_id = p_itemid
4354 AND organization_id = p_orgid;
4355
4356 -- nsinghi bug 5209065. Added the cursor.
4357 CURSOR cur_get_interface_id IS
4358 SELECT transaction_interface_id
4359 FROM MTL_TRANSACTIONS_INTERFACE
4360 WHERE ROWID = p_rowid;
4361
4362 l_item_copy_lot_attribute_flag VARCHAR2(1);
4363 l_org_copy_lot_attribute_flag VARCHAR2(1);
4364 l_lot_number_generation NUMBER;
4365 l_copy_lot_attribute_flag VARCHAR2(1);
4366 l_child_lot_enabled VARCHAR2(1);
4367
4368 l_transaction_uom_code VARCHAR(3);
4369 l_secondary_quantity NUMBER;
4370 l_secondary_uom_code VARCHAR(3);
4371 l_qty_check BOOLEAN;
4372
4373 l_grade_code VARCHAR2(250);
4374 l_retest_date DATE;
4375 l_maturity_date DATE;
4376 l_parent_lot_number VARCHAR2(80);
4377 l_origination_date DATE;
4378 l_origination_type NUMBER;
4379 l_expiration_action_code VARCHAR2(80);
4380 l_expiration_action_date DATE ;
4381 l_expiration_date DATE;
4382 l_hold_date DATE;
4383 l_attr_check boolean;
4384 l_error_message varchar2(200);
4385 l_reason_id number;
4386
4387 l_return_status VARCHAR(3);
4388 l_msg_count NUMBER;
4389 l_msg_data VARCHAR(200);
4390
4391 -- INVCONV end fabdi
4392 l_interface_id NUMBER; -- nsinghi bug 5209065
4393 l_status_id number := NULL; -- Material Status Enhancement - Tracking bug: 13519864
4394 l_default_status_id number:= NULL; -- Material Status Enhancement - Tracking bug: 13519864
4395 l_allow_status_entry VARCHAR2(3) := NVL(fnd_profile.VALUE('INV_ALLOW_ONHAND_STATUS_ENTRY'), 'N'); -- Material Status Enhancement - Tracking bug: 13519864
4396 BEGIN
4397 g_pkg_name := 'Lot_check';
4398
4399 if (l_debug is null) then
4400 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
4401 end if;
4402 if l_debug = 1 then
4403 mydebug ('In lot check ...' );
4404 mydebug ('p_rowid : ' || p_rowid );
4405 mydebug ('p_orgid : ' || p_orgid );
4406 mydebug ('p_itemid : ' || p_itemid );
4407 mydebug ('p_intid : ' || p_intid );
4408 mydebug ('p_priuom : ' || p_priuom );
4409 mydebug ('p_trxuom : ' || p_trxuom );
4410 mydebug ('p_lotuniq : ' || p_lotuniq );
4411 mydebug ('p_shlfcode : ' || p_shlfcode );
4412 mydebug ('p_shlfdays : ' || p_shlfdays );
4413 mydebug ('p_serctrl : ' || p_serctrl );
4414 mydebug ('p_srctype : ' || p_srctype );
4415 mydebug ('p_acttype : ' || p_acttype );
4416 mydebug ('p_trx_typeid : ' || p_trx_typeid );
4417 mydebug ('p_revision : ' || p_revision );
4418 mydebug ('p_subinvtory_code : ' || p_subinvtory_code );
4419 mydebug ('p_locator : ' || p_locator );
4420 mydebug ('p_is_wsm_enabled : ' || p_is_wsm_enabled );
4421 end if;
4422
4423 -- INVCONV start fabdi
4424 IF (l_debug = 1) THEN
4425 inv_log_util.trace('invconv: inside lotcheck..', 'INV_TXN_MANAGER_GRP', 9);
4426 END IF;
4427
4428 /* GET Copy Lot Attribute_flag */
4429
4430 OPEN get_org_copy_lot_flag;
4431 FETCH get_org_copy_lot_flag INTO l_org_copy_lot_attribute_flag, l_lot_number_generation, l_process_enabled_flag; --ADM bug 9959125
4432 CLOSE get_org_copy_lot_flag;
4433
4434 /* Get item info */
4435 OPEN c_get_item_info;
4436 FETCH c_get_item_info INTO l_item_copy_lot_attribute_flag, l_child_lot_enabled;
4437 CLOSE c_get_item_info;
4438
4439 IF l_lot_number_generation = 1 THEN
4440 l_copy_lot_attribute_flag := NVL(l_org_copy_lot_attribute_flag,'N') ;
4441 ELSIF l_lot_number_generation IN (2,3) THEN
4442 l_copy_lot_attribute_flag := NVL(l_item_copy_lot_attribute_flag,'N') ;
4443 END IF;
4444 -- INVCONV end fabdi
4445
4446 --WHENEVER NOT FOUND CONTINUE;
4447
4448 loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
4449
4450 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4451 SET LAST_UPDATE_DATE = SYSDATE,
4452 LAST_UPDATED_BY = l_userid,
4453 LAST_UPDATE_LOGIN = l_loginid,
4454 PROGRAM_UPDATE_DATE = SYSDATE,
4455 PROCESS_FLAG = 3,
4456 LOCK_FLAG = 2,
4457 ERROR_CODE = substrb(l_error_code,1,240),
4458 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4459 WHERE ROWID = p_rowid
4460 AND ABS(TRANSACTION_QUANTITY) <>
4461 (SELECT ABS(SUM(TRANSACTION_QUANTITY))
4462 FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI
4463 WHERE MTLI.TRANSACTION_INTERFACE_ID = p_intid);
4464
4465 IF SQL%FOUND THEN
4466 return(FALSE);
4467 END IF;
4468
4469 IF p_lotuniq = 1 THEN
4470 FND_MESSAGE.set_name('INV','INV_INT_LOTUNIQCODE');
4471 l_error_code := FND_MESSAGE.get;
4472
4473 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4474 SET LAST_UPDATE_DATE = SYSDATE,
4475 LAST_UPDATED_BY = l_userid,
4476 LAST_UPDATE_LOGIN = l_loginid,
4477 PROGRAM_APPLICATION_ID = l_applid,
4478 PROGRAM_ID = l_progid,
4479 PROGRAM_UPDATE_DATE = SYSDATE,
4480 REQUEST_ID = l_reqstid,
4481 ERROR_CODE = substrb(l_error_code,1,240)
4482 WHERE TRANSACTION_INTERFACE_ID = p_intid
4483 AND EXISTS (
4484 SELECT NULL
4485 FROM MTL_LOT_NUMBERS MLN
4486 WHERE MLN.LOT_NUMBER = MTLI.LOT_NUMBER
4487 AND MLN.INVENTORY_ITEM_ID <> p_itemid);
4488
4489 IF SQL%FOUND THEN
4490 FND_MESSAGE.set_name('INV','INV_INT_LOTUNIQEXP');
4491 l_error_exp := FND_MESSAGE.get;
4492
4493 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4494 SET LAST_UPDATE_DATE = SYSDATE,
4495 LAST_UPDATED_BY = l_userid,
4496 LAST_UPDATE_LOGIN = l_loginid,
4497 PROGRAM_UPDATE_DATE = SYSDATE,
4498 PROCESS_FLAG = 3,
4499 LOCK_FLAG = 2,
4500 ERROR_CODE = substrb(l_error_code,1,240),
4501 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4502 WHERE ROWID = p_rowid;
4503
4504 return(FALSE);
4505 END IF;
4506
4507 END IF;
4508
4509 OPEN INT3;
4510
4511 while (TRUE) LOOP
4512
4513 FETCH INT3 INTO
4514 l_lotnum,
4515 l_lotqty,
4516 -- INVCONV start fabdi
4517 l_secondary_quantity,
4518 l_grade_code,
4519 l_retest_date,
4520 l_maturity_date,
4521 l_parent_lot_number,
4522 l_origination_date,
4523 l_origination_type,
4524 l_expiration_action_code ,
4525 l_expiration_action_date,
4526 l_expiration_date ,
4527 l_hold_date ,
4528 l_reason_id,
4529 -- INVCONV end fabdi
4530 l_sertempid,
4531 l_lotexpdate,
4532 l_lotrowid,
4533 l_parent_object_type, --R12 Genealogy enhancements
4534 l_parent_object_id, --R12 Genealogy enhancements
4535 l_parent_object_number, --R12 Genealogy enhancements
4536 l_parent_item_id, --R12 Genealogy enhancements
4537 l_parent_object_type2, --R12 Genealogy enhancements
4538 l_parent_object_id2, --R12 Genealogy enhancements
4539 l_parent_object_number2, --R12 Genealogy enhancements
4540 l_status_id; --Material Status Enhancement - Tracking bug: 13519864
4541
4542 IF int3%NOTFOUND THEN
4543 CLOSE int3;
4544 return(true);
4545 END IF;
4546
4547 BEGIN
4548
4549 -- INVCONV start fabdi
4550 l_transaction_uom_code := p_trxuom;
4551
4552 IF (l_debug = 1) THEN
4553 inv_log_util.trace('lotcheck: calling validate_quantities', 'INV_TXN_MANAGER_GRP', 9);
4554 inv_log_util.trace('l_parent_object_type: ' || l_parent_object_type,'INV_TXN_MANAGER_GRP', 9);
4555 inv_log_util.trace('l_parent_object_id: ' || l_parent_object_id,'INV_TXN_MANAGER_GRP', 9);
4556 inv_log_util.trace('l_parent_object_number: ' || l_parent_object_number,'INV_TXN_MANAGER_GRP', 9);
4557 inv_log_util.trace('l_parent_item_id: ' || l_parent_item_id,'INV_TXN_MANAGER_GRP', 9);
4558 inv_log_util.trace('l_parent_object_type2: ' || l_parent_object_type2,'INV_TXN_MANAGER_GRP', 9);
4559 inv_log_util.trace('l_parent_object_id2: ' || l_parent_object_id2,'INV_TXN_MANAGER_GRP', 9);
4560 inv_log_util.trace('l_parent_object_number2: ' || l_parent_object_number2,'INV_TXN_MANAGER_GRP', 9);
4561 inv_log_util.trace('l_sertempid: ' || l_sertempid,'INV_TXN_MANAGER_GRP', 9);
4562
4563 END IF;
4564
4565
4566 /*------------------------------------------------------+
4567 | Validating quantity both (primary and secondary qty)
4568 | in MTLT, only
4569 | If the item is tracked in both primary AND secondary
4570 |
4571 +------------------------------------------------------*/
4572
4573 l_qty_check := validate_quantities(
4574 p_rowid => p_rowid
4575 , p_lot_rowid => l_lotrowid
4576 , p_transaction_type_id => p_trx_typeid
4577 , p_organization_id => p_orgid
4578 , p_inventory_item_id => p_itemid
4579 , p_revision => p_revision
4580 , p_subinventory_code => p_subinvtory_code
4581 , p_locator_id => p_locator
4582 , p_lot_number => l_lotnum
4583 , p_transaction_quantity => l_lotqty
4584 , p_transaction_uom => l_transaction_uom_code
4585 , p_secondary_quantity => l_secondary_quantity
4586 , p_secondary_uom_code => l_secondary_uom_code
4587 );
4588
4589
4590 IF (l_qty_check) THEN
4591 IF (l_debug = 1) THEN
4592 inv_log_util.trace('validate_quantities IN (lotcheck) ==> PASS ' , 'INV_TXN_MANAGER_GRP', 9);
4593 END IF;
4594
4595 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4596 SET TRANSACTION_QUANTITY = l_lotqty,
4597 SECONDARY_TRANSACTION_QUANTITY = l_secondary_quantity
4598 WHERE ROWID = l_lotrowid;
4599 ELSE
4600 IF (l_debug = 1) THEN
4601 inv_log_util.trace('validate_quantities IN (lotcheck) - FAIL ' || l_msg_data, 'INV_TXN_MANAGER_GRP', 9);
4602 END IF;
4603 l_error_exp := '';
4604 l_error_code := '';
4605 FND_MESSAGE.clear;
4606 return(FALSE);
4607 END IF;
4608
4609 IF (l_debug = 1) THEN
4610 inv_log_util.trace('calling VALIDATE_ADDITIONAL_ATTR', 'INV_TXN_MANAGER_GRP', 9);
4611 end if;
4612
4613 IF l_child_lot_enabled = 'N'
4614 THEN
4615 l_parent_lot_number := NULL ;
4616 END IF;
4617
4618 /* nsinghi bug 5209065. Following cursor used to set interface id, so that interface record can be queried
4619 for custom expiration dt calculation. When transaction is created through API, lot expiration date
4620 calculation is handled by the following code. */
4621 OPEN cur_get_interface_id;
4622 FETCH cur_get_interface_id INTO l_interface_id;
4623 CLOSE cur_get_interface_id;
4624 inv_calculate_exp_date.set_txn_id (p_table => 1, p_header_id => l_interface_id);
4625 inv_calculate_exp_date.set_lot_txn_id (p_table => 1, p_header_id => l_lotrowid);
4626
4627 /* this api will validate all the added new lot attributes intoduced in INVCONV
4628 project */
4629 l_attr_check := VALIDATE_ADDITIONAL_ATTR(
4630 p_api_version => 1.0
4631 , p_init_msg_list => fnd_api.g_false
4632 , p_validation_level => fnd_api.g_valid_level_full
4633 , p_intid => p_intid
4634 , p_rowid => p_rowid
4635 , p_inventory_item_id => p_itemid
4636 , p_organization_id => p_orgid
4637 , p_lot_number => l_lotnum
4638 , p_grade_code => l_grade_code
4639 , p_retest_date => l_retest_date
4640 , p_maturity_date => l_maturity_date
4641 , p_parent_lot_number => l_parent_lot_number
4642 , p_origination_date => l_origination_date
4643 , p_origination_type => l_origination_type
4644 , p_expiration_action_code => l_expiration_action_code
4645 , p_expiration_action_date => l_expiration_action_date
4646 , p_expiration_date => l_expiration_date
4647 , p_hold_date => l_hold_date
4648 , p_reason_id => l_reason_id
4649 , p_copy_lot_attribute_flag => l_copy_lot_attribute_flag
4650 , x_return_status => l_return_status
4651 , x_msg_count => l_msg_count
4652 , x_msg_data => l_msg_data
4653 ) ;
4654 IF (l_attr_check)
4655 THEN
4656
4657 IF (l_debug = 1) THEN
4658 inv_log_util.trace('VALIDATE_ADDITIONAL_ATTR IN (lotcheck) ==> PASS ' , 'INV_TXN_MANAGER_GRP', 9);
4659 END IF;
4660
4661 -- nsinghi bug 5209065. Added the following line.
4662 -- Expiration date was getting reset and hence ensured that appropriate value gets updated to MTLI.
4663 -- nsinghi bug#5209065 rework. Added fnd_date.date_to_canonical call.
4664 l_lotexpdate := fnd_date.date_to_canonical(l_expiration_date);
4665
4666 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4667 SET GRADE_CODE = l_grade_code ,
4668 RETEST_DATE = l_retest_date ,
4669 MATURITY_DATE = l_maturity_date,
4670 PARENT_LOT_NUMBER = l_parent_lot_number,
4671 ORIGINATION_DATE = l_origination_date,
4672 ORIGINATION_TYPE = l_origination_type ,
4673 EXPIRATION_ACTION_CODE = l_expiration_action_code,
4674 EXPIRATION_ACTION_DATE = l_expiration_action_date ,
4675 LOT_EXPIRATION_DATE = l_expiration_date ,
4676 HOLD_DATE = l_hold_date,
4677 REASON_ID = l_reason_id
4678 WHERE ROWID = l_lotrowid;
4679
4680 ELSE
4681 IF (l_debug = 1) THEN
4682 inv_log_util.trace('VALIDATE_ADDITIONAL_ATTR IN (lotcheck) - FAIL ' || l_msg_data, 'INV_TXN_MANAGER_GRP', 9);
4683 END IF;
4684 l_error_exp := '';
4685 l_error_code := '';
4686 FND_MESSAGE.clear;
4687 return(FALSE);
4688 END IF;
4689
4690 -- INVCONV end fabdi
4691
4692 -- R12 Genealogy Enhancement : Start
4693 IF (p_srctype = INV_GLOBALS.G_SOURCETYPE_WIP AND
4694 p_acttype = INV_GLOBALS.G_ACTION_ISSUE) THEN
4695 IF (p_serctrl = 2 OR p_serctrl = 5) -- Lot + serial Controlled
4696 THEN
4697 -- mrana:5443557: this is not needed anymore AND (p_is_wsm_enabled = 'N')) THEN
4698 IF (l_debug = 1) THEN
4699 INV_log_util.trace('{{- It is lot+serial controlled item. Call validate_serial_genealogy_data }}'
4700 , 'INV_TXN_MANAGER_GRP', 9);
4701 END IF;
4702 validate_serial_genealogy_data ( p_interface_id => l_sertempid
4703 , p_org_id => p_orgid
4704 , x_return_status => l_return_status
4705 , x_msg_count => l_msg_count
4706 , x_msg_data => l_msg_data);
4707 IF l_return_status <> lg_ret_sts_success THEN
4708 IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
4709 --RAISE lg_exc_error; ????
4710 END IF;
4711 ELSE
4712 IF (l_debug = 1) THEN
4713 INV_log_util.trace('{{- It is lot controlled item - if parent details are available, }} ' ||
4714 '{{ Validation/derivation of parent object details should happen here}}'
4715 , 'INV_TXN_MANAGER_GRP', 9);
4716 END IF;
4717 IF (l_parent_object_id is NOT NULL AND l_parent_object_type is NOT NULL) OR
4718 (l_parent_object_type is NOT NULL AND l_parent_object_number is NOT NULL
4719 AND l_parent_Item_id IS NOT NULL) THEN
4720 IF (l_debug = 1) THEN
4721 inv_log_util.trace('{{- Parent details are available - Validation/derivation of }} ' ||
4722 '{{ parent object details is called here}}' , 'INV_TXN_MANAGER_GRP', 9);
4723 END IF;
4724 validate_derive_object_details
4725 ( p_org_id => p_orgid
4726 , p_object_type => l_parent_object_type
4727 , p_object_id => l_parent_object_id
4728 , p_object_number => l_parent_object_number
4729 , p_item_id => l_parent_Item_id
4730 , p_object_type2 => l_parent_object_type2
4731 , p_object_id2 => l_parent_object_id2
4732 , p_object_number2 => l_parent_object_number2
4733 , p_serctrl => p_serctrl
4734 , p_lotctrl => 2
4735 , p_rowid => l_lotrowid
4736 , p_table => 'MTLI'
4737 , x_return_status => l_return_status
4738 , x_msg_count => l_msg_count
4739 , x_msg_data => l_msg_data);
4740 IF l_return_status <> lg_ret_sts_success THEN
4741 IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
4742 --RAISE lg_exc_error; ????
4743 END IF;
4744
4745 ELSE
4746 null; -- Parent object details not populated during wip issue . It is OK
4747 IF (l_debug = 1) THEN
4748 inv_log_util.trace('{{ Parent object details not populated during WIP issue . It is OK }}' ,
4749 'INV_TXN_MANAGER_GRP', 9);
4750 END IF;
4751 END IF;
4752 END IF;
4753 IF (l_debug = 1) THEN
4754 inv_log_util.trace('{{- It is not a WIP issue transactioon, so no validation/derivation of }}' ||
4755 '{{ parent object details should happen here}}' , 'INV_TXN_MANAGER_GRP', 9);
4756 END IF;
4757 END IF;
4758 -- R12 Genealogy Enhancement : End
4759 --bug 8497953 kbanddyo added lot number and org id as in parameters for invoking inv_convert
4760 -- this is done to cater to lot specific uom conversions.
4761 IF (p_srctype =5) then
4762 --ADM bug 9959125, converting only for discrete orgs.
4763 If l_process_enabled_flag = 'N' Then
4764 l_lotpriqty := inv_convert.inv_um_convert(p_itemid,l_lotnum,p_orgid,6,l_lotqty,p_trxuom,p_priuom,'','');
4765 End If;
4766 ELSE
4767 l_lotpriqty := inv_convert.inv_um_convert(p_itemid,l_lotnum,p_orgid,5,l_lotqty,p_trxuom,p_priuom,'','');
4768 END IF;
4769
4770
4771 EXCEPTION
4772 WHEN OTHERS THEN
4773
4774 /*IF (NOT UomConvert(l_itemid,0,l_trxuom, '',
4775 l_priuom, '',l_lotqty,
4776 l_lotpriqty, 0)) THEN */
4777 l_error_exp := FND_MESSAGE.get;
4778
4779 FND_MESSAGE.set_name('INV','INV_INT_UOMCONVCODE');
4780 l_error_code := FND_MESSAGE.get;
4781
4782 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4783 SET LAST_UPDATE_DATE = SYSDATE,
4784 LAST_UPDATED_BY = l_userid,
4785 LAST_UPDATE_LOGIN = l_loginid,
4786 PROGRAM_APPLICATION_ID = l_applid,
4787 PROGRAM_ID = l_progid,
4788 PROGRAM_UPDATE_DATE = SYSDATE,
4789 REQUEST_ID = l_reqstid,
4790 ERROR_CODE = substrb(l_error_code,1,240)
4791 WHERE ROWID = l_lotrowid;
4792
4793 UPDATE MTL_TRANSACTIONS_INTERFACE
4794 SET ERROR_CODE = substrb(l_error_code,1,240),
4795 ERROR_EXPLANATION = substrb(l_error_exp,1,240),
4796 LAST_UPDATE_DATE = sysdate,
4797 LAST_UPDATED_BY = l_userid,
4798 LAST_UPDATE_LOGIN = l_loginid,
4799 PROGRAM_UPDATE_DATE = SYSDATE,
4800 PROCESS_FLAG = 3,
4801 LOCK_FLAG = 2
4802 WHERE ROWID = p_rowid;
4803
4804 return(FALSE);
4805 END;
4806 /* Changes done in the below if condition for bug2725491
4807 Hadling the no_data_found exception when the lot is new
4808 and expiration is set */
4809 IF ((p_shlfcode <> 1) AND (l_lotexpdate IS NULL)) THEN
4810 BEGIN
4811 SELECT
4812 fnd_date.date_to_canonical(EXPIRATION_DATE)
4813 INTO l_lotexpdate
4814 FROM MTL_LOT_NUMBERS
4815 WHERE INVENTORY_ITEM_ID = p_itemid
4816 AND ORGANIZATION_ID = p_orgid
4817 AND LOT_NUMBER = l_lotnum;
4818 EXCEPTION
4819 WHEN NO_DATA_FOUND THEN
4820 IF ((p_shlfcode = 2) AND (l_lotexpdate IS NULL)) THEN
4821 SELECT fnd_date.date_to_canonical(SYSDATE + p_shlfdays)
4822 INTO l_lotexpdate
4823 FROM DUAL;
4824 END IF;
4825
4826 IF ((p_shlfcode = 4) AND (l_lotexpdate IS NULL)) THEN
4827
4828 FND_MESSAGE.set_name('INV','INV_LOT_EXPREQD');
4829 l_error_exp := FND_MESSAGE.get;
4830 FND_MESSAGE.set_name('INV','INV_LOT_EXPREQD');
4831 l_error_code := FND_MESSAGE.get;
4832
4833 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4834 SET LAST_UPDATE_DATE = SYSDATE,
4835 LAST_UPDATED_BY = l_userid,
4836 LAST_UPDATE_LOGIN = l_loginid,
4837 PROGRAM_APPLICATION_ID = l_applid,
4838 PROGRAM_ID = l_progid,
4839 PROGRAM_UPDATE_DATE = SYSDATE,
4840 REQUEST_ID = l_reqstid,
4841 ERROR_CODE = substrb(l_error_code,1,240)
4842 WHERE ROWID = l_lotrowid;
4843
4844 UPDATE MTL_TRANSACTIONS_INTERFACE
4845 SET ERROR_CODE = substrb(l_error_code,1,240),
4846 ERROR_EXPLANATION = substrb(l_error_exp,1,240),
4847 LAST_UPDATE_DATE = sysdate,
4848 LAST_UPDATED_BY = l_userid,
4849 LAST_UPDATE_LOGIN = l_loginid,
4850 PROGRAM_UPDATE_DATE = SYSDATE,
4851 PROCESS_FLAG = 3,
4852 LOCK_FLAG = 2
4853 WHERE ROWID = p_rowid;
4854
4855
4856 return(FALSE);
4857
4858 END IF;
4859 END;
4860 END IF;
4861
4862 --Bug #5738503
4863 --If the item is not under shelf life control and
4864 --expiration date is not null then set the expiration date to null
4865 IF ((p_shlfcode = 1) AND (l_lotexpdate IS NOT NULL)) THEN
4866 l_lotexpdate := NULL;
4867 END IF;
4868
4869 --serial tagging
4870 /*
4871 IF (p_serctrl = 2 OR p_serctrl = 5 OR (p_serctrl = 6 AND
4872 p_srctype = 2 AND p_acttype = 1) OR (p_serctrl = 6 AND
4873 p_srctype = INV_GLOBALS.G_SourceType_IntOrder AND p_acttype = 1)
4874 OR (p_serctrl = 6 AND p_srctype = 8)
4875 OR (P_serctrl = 6 AND p_srctype = 16 and p_acttype = 1)
4876 OR (P_serctrl = 6 AND (p_trx_typeid = 93 OR p_trx_typeid = 94) ))
4877 */
4878 IF (serial_tagged = 2)
4879 THEN
4880 BEGIN
4881 SELECT 1
4882 into l_tnum
4883 FROM MTL_SERIAL_NUMBERS_INTERFACE
4884 WHERE TRANSACTION_INTERFACE_ID = l_sertempid
4885 AND ROWNUM < 2;
4886 EXCEPTION
4887 WHEN NO_DATA_FOUND THEN
4888 loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
4889
4890 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4891 SET LAST_UPDATE_DATE = SYSDATE,
4892 LAST_UPDATED_BY = l_userid,
4893 LAST_UPDATE_LOGIN = l_loginid,
4894 PROGRAM_APPLICATION_ID = l_applid,
4895 PROGRAM_ID = l_progid,
4896 PROGRAM_UPDATE_DATE = SYSDATE,
4897 REQUEST_ID = l_reqstid,
4898 ERROR_CODE = substrb(l_error_code,1,240)
4899 WHERE ROWID = l_lotrowid;
4900
4901 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4902 SET LAST_UPDATE_DATE = SYSDATE,
4903 LAST_UPDATED_BY = l_userid,
4904 LAST_UPDATE_LOGIN = l_loginid,
4905 PROGRAM_UPDATE_DATE = SYSDATE,
4906 PROCESS_FLAG = 3,
4907 LOCK_FLAG = 2,
4908 ERROR_CODE = substrb(l_error_code,1,240),
4909 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4910 WHERE ROWID = p_rowid;
4911
4912
4913 return(FALSE);
4914 END;
4915
4916 ELSE
4917 IF (l_sertempid IS NOT NULL) THEN
4918 DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
4919 WHERE TRANSACTION_INTERFACE_ID = l_sertempid;
4920 END IF;
4921
4922 END IF;
4923 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4924 SET LAST_UPDATE_DATE = SYSDATE,
4925 LAST_UPDATED_BY = l_userid,
4926 LAST_UPDATE_LOGIN = l_loginid,
4927 PROGRAM_APPLICATION_ID = l_applid,
4928 PROGRAM_ID = l_progid,
4929 PROGRAM_UPDATE_DATE = SYSDATE,
4930 REQUEST_ID = l_reqstid,
4931 PRIMARY_QUANTITY = nvl(l_lotpriqty, abs(PRIMARY_QUANTITY)*sign(TRANSACTION_QUANTITY) ), --ADM bug 9959125
4932 LOT_EXPIRATION_DATE = fnd_date.canonical_to_date(l_lotexpdate),
4933 SERIAL_TRANSACTION_TEMP_ID = l_sertempid
4934 WHERE ROWID = l_lotrowid;
4935
4936 /* Material Status Enhancement - Tracking bug: 13519864 */
4937 /*validate material status for comingling */
4938
4939 IF (l_status_id IS NOT NULL AND l_allow_status_entry = 'Y' AND p_serctrl NOT IN (2,5)) THEN /* Bug 13725126 */
4940
4941 if inv_cache.set_org_rec(p_orgid) then
4942 l_default_status_id := inv_cache.org_rec.default_status_id;
4943 end if;
4944
4945 IF (l_default_status_id is not null) THEN
4946
4947 FND_MESSAGE.set_name('INV', 'INV_STATUS_COMINGLING');
4948 l_error_code := 'INV_STATUS_COMINGLING';
4949 l_error_exp := FND_MESSAGE.get;
4950
4951 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4952 SET LAST_UPDATE_DATE = SYSDATE,
4953 LAST_UPDATED_BY = l_userid,
4954 LAST_UPDATE_LOGIN = l_loginid,
4955 PROGRAM_APPLICATION_ID = l_applid,
4956 PROGRAM_ID = l_progid,
4957 PROGRAM_UPDATE_DATE = SYSDATE,
4958 REQUEST_ID = l_reqstid,
4959 ERROR_CODE = substrb(l_error_code,1,240)
4960 WHERE TRANSACTION_INTERFACE_ID = p_intid
4961 AND EXISTS
4962 (
4963 select 'comingling exists'
4964 from mtl_onhand_quantities_detail moqd,
4965 mtl_transactions_interface mti
4966 WHERE mti.TRANSACTION_INTERFACE_ID = p_intid
4967 AND PROCESS_FLAG = 1
4968 AND moqd.organization_id = mti.organization_id
4969 AND moqd.inventory_item_id = mti.inventory_item_id
4970 and moqd.subinventory_code = mti.subinventory_code
4971 and nvl(moqd.locator_id, -9999) = nvl(mti.locator_id, -9999)
4972 and nvl(moqd.lot_number, '@@@@') = nvl(mtli.lot_number, '@@@@')
4973 and nvl(moqd.lpn_id, -9999) = nvl(mti.lpn_id, -9999)
4974 and nvl(moqd.status_id, -9999) <> nvl(mtli.status_id, -9999)
4975 );
4976
4977 IF SQL%FOUND THEN
4978 FND_MESSAGE.set_name('INV','INV_STATUS_COMINGLING');
4979 l_error_exp := FND_MESSAGE.get;
4980
4981 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4982 SET LAST_UPDATE_DATE = SYSDATE,
4983 LAST_UPDATED_BY = l_loginid,
4984 LAST_UPDATE_LOGIN = l_loginid,
4985 PROGRAM_UPDATE_DATE = SYSDATE,
4986 PROCESS_FLAG = 3,
4987 LOCK_FLAG = 2,
4988 ERROR_CODE = substrb(l_error_code,1,240),
4989 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4990 WHERE TRANSACTION_INTERFACE_ID = p_intid
4991 AND PROCESS_FLAG = 1
4992 AND EXISTS
4993 (
4994 select 'comingling exists'
4995 from mtl_onhand_quantities_detail moqd,
4996 mtl_transaction_lots_interface mtli
4997 WHERE moqd.organization_id = mti.organization_id
4998 AND moqd.inventory_item_id = mti.inventory_item_id
4999 and moqd.subinventory_code = mti.subinventory_code
5000 and nvl(moqd.locator_id, -9999) = nvl(mti.locator_id, -9999)
5001 and nvl(moqd.lot_number, '@@@@') = nvl(mtli.lot_number, '@@@@')
5002 and nvl(moqd.lpn_id, -9999) = nvl(mti.lpn_id, -9999)
5003 and nvl(moqd.status_id, -9999) <> nvl(mtli.status_id, -9999)
5004 );
5005
5006 END IF;
5007 END IF;
5008 END IF;
5009
5010 END LOOP;
5011 IF int3%ISOPEN THEN
5012 CLOSE int3;
5013 END IF ;
5014
5015 EXCEPTION
5016 WHEN OTHERS THEN
5017 FND_MESSAGE.set_name('INV','INV_INT_UOMCONVCODE');
5018
5019 --WHENEVER SQL ERROR CONTINUE;
5020 UPDATE MTL_TRANSACTIONS_INTERFACE
5021 SET LAST_UPDATE_DATE = SYSDATE,
5022 LAST_UPDATED_BY = l_userid,
5023 LAST_UPDATE_LOGIN = l_loginid,
5024 PROGRAM_UPDATE_DATE = SYSDATE,
5025 PROCESS_FLAG = 3,
5026 LOCK_FLAG = 2,
5027 ERROR_CODE = substrb(l_error_code,1,240)
5028 WHERE ROWID = p_rowid;
5029
5030 return FALSE;
5031
5032 END lotcheck;
5033
5034
5035
5036 /******************************************************************
5037 *
5038 * setorgclientinfo()
5039 *
5040 ******************************************************************/
5041 FUNCTION setorgclientinfo(p_orgid in NUMBER)
5042 RETURN BOOLEAN
5043 IS
5044
5045 x_return_status varchar2(50);
5046
5047 BEGIN
5048
5049 --WHENEVER NOT FOUND CONTINUE;
5050
5051 --Commenting the processing based on checking PJM_INSTALL. Bug 3812559
5052 /*
5053 IF (pjm_installed = -1) THEN
5054 IF PJM_INSTALL.check_install
5055 THEN
5056 pjm_installed := 1;
5057 ELSE
5058 pjm_installed := 0;
5059 END IF;
5060
5061 END IF;
5062 */
5063
5064 /* IF (pjm_installed = 1) THEN */
5065 IF (client_info_org_id <> p_orgid) THEN
5066 INV_Project.Set_Org_client_info(x_return_status,
5067 p_orgid);
5068 IF (x_return_status <> 'S') THEN
5069 return FALSE;
5070 END IF;
5071 -- commented as a part of bug #2505534
5072 --client_info_org_id := p_orgid;
5073 END IF;
5074 /* END IF; */
5075 return TRUE;
5076
5077 EXCEPTION
5078 WHEN OTHERS THEN
5079 return FALSE;
5080 END setorgclientinfo;
5081
5082 /******************************************************************
5083 -- Function
5084 -- getloc
5085 -- Description
5086 -- Private function to get Locator id using Flex API's
5087 -- Uses FND_FLEX_KEY_API (AFFFKAIS/B.pls) and
5088 -- FND_FLEX_EXT (AFFFEXTS/B.pls)
5089 --
5090 -- Assumes that only Id's are populated in the MTI segments
5091 --
5092 -- Returns
5093 -- Returns false if any error occurs
5094 -- Output Parameters
5095 -- x_locid locator or null if error occurred
5096 ******************************************************************/
5097
5098 FUNCTION getloc(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_locctrl NUMBER, p_segmentarray fnd_flex_ext.segmentarray) return BOOLEAN is
5099 l_nseg NUMBER;
5100 l_seglist fnd_flex_key_api.segment_list;
5101 l_fftype fnd_flex_key_api.flexfield_type;
5102 l_ffstru fnd_flex_key_api.structure_type;
5103 l_segment_type fnd_flex_key_api.segment_type;
5104 l_locator VARCHAR2(32000);
5105 l_error_exp VARCHAR2(250);
5106 l_structure_list fnd_flex_key_api.structure_list;
5107 l_nstru NUMBER;
5108 l_index NUMBER;
5109 l_locid NUMBER;
5110 l_delim VARCHAR2(1);
5111 l_val BOOLEAN := FALSE;
5112 DYNAMIC CONSTANT NUMBER := 3;
5113 l_operation VARCHAR2(100);
5114 -- Local array to hold the data for getting the cancatenated segment.
5115 l_segmentarray fnd_flex_ext.segmentarray;
5116 BEGIN
5117
5118 fnd_flex_key_api.set_session_mode('seed_data');
5119
5120 -- find flex field type
5121 l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MTLL');
5122
5123 -- find flex structure type
5124 l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
5125
5126 -- find segment list for the key flex field
5127 fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
5128
5129 -- find segment delimiter
5130 l_delim := l_ffstru.segment_separator;
5131
5132 -- get the corresponding column for all segments
5133 --
5134 -- The default segments for the LocatorKFF is SEGMENT1 - SEGMENT20
5135 -- 'To_number(Substr(l_segment_type.column_name, 8))' gives the
5136 -- number of the segment i.e. 1 - 20 which is used as index to
5137 -- fetch the corresponding columns from segments array
5138 --
5139 FOR l_loop IN 1..l_nseg LOOP
5140
5141 l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(l_loop));
5142 -- Bug Fix#4747090
5143 --l_segmentarray contains data in the order flexfield is defined. Used in creating cancatenated segments for validation.
5144 l_segmentarray(l_loop) := p_segmentarray(To_number(Substr(l_segment_type.column_name, 8)));
5145 END LOOP;
5146 -- Bug Fix#4747090
5147 -- Gets the encoded cancatenated string
5148 l_locator := fnd_flex_ext.concatenate_segments(n_segments => l_nseg,
5149 segments => l_segmentarray,
5150 delimiter => l_delim);
5151 IF (l_debug = 1) THEN
5152 inv_log_util.trace('Locator is : ' || l_locator, 'INV_TXN_MANAGER_GRP','1');
5153 END IF;
5154 /*
5155 * If Locator control allows dynamic creation then create the combination
5156 * if it does not already exist else just check if it exists.
5157 */
5158 if p_locctrl = DYNAMIC then
5159 /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
5160 call FND_FLEX_KEYVAL.Validate_Segs with 'CREATE_COMBINATION' operation*/
5161 IF (g_create_loc_at = 1) then
5162 l_operation := 'CREATE_COMBINATION';
5163 ELSE
5164 l_operation := 'CREATE_COMB_NO_AT';
5165 END IF;
5166 else
5167 l_operation := 'FIND_COMBINATION';
5168 end if;
5169
5170 l_val := FND_FLEX_KEYVAL.Validate_Segs(
5171 OPERATION => l_operation,
5172 APPL_SHORT_NAME => 'INV',
5173 KEY_FLEX_CODE => 'MTLL',
5174 STRUCTURE_NUMBER => 101,
5175 CONCAT_SEGMENTS => l_locator,
5176 VALUES_OR_IDS => 'I',
5177 DATA_SET => p_org_id ) ;
5178
5179 if l_val then
5180 x_locid := fnd_flex_keyval.combination_id;
5181 else
5182 x_locid := NULL;
5183 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5184 IF (l_debug = 1) THEN
5185 inv_log_util.trace('Error in getloc : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5186 inv_log_util.trace('Error in getloc : error_segment :' || FND_FLEX_KEYVAL.error_segment , 'INV_TXN_MANAGER_GRP','1');
5187 inv_log_util.trace('Error in getloc : error_message :' || FND_FLEX_KEYVAL.error_message , 'INV_TXN_MANAGER_GRP','1');
5188 inv_log_util.trace('Error in getloc : encoded_error_message :' || FND_FLEX_KEYVAL.encoded_error_message , 'INV_TXN_MANAGER_GRP','1');
5189 END IF;
5190 end if;
5191
5192 return l_val;
5193
5194 EXCEPTION
5195
5196 WHEN OTHERS THEN
5197
5198 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5199 IF (l_debug = 1) THEN
5200 inv_log_util.trace('Error in getloc : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5201 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5202 END IF;
5203 x_locid := NULL;
5204 return FALSE;
5205
5206 END getloc;
5207 /******************************************************************
5208 -- Function
5209 -- getlocid
5210 -- Description
5211 -- find the locator using the flex field segments
5212 -- Calls private function getLoc to do the work
5213 -- Output Parameters
5214 -- x_locator locator or null if error occurred
5215 ******************************************************************/
5216 FUNCTION getlocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
5217 l_segs1 fnd_flex_ext.segmentArray;
5218 l_error_exp VARCHAR2(250);
5219 l_locid number;
5220 begin
5221
5222 SELECT
5223 LOCATOR_ID,
5224 LOC_SEGMENT1,
5225 LOC_SEGMENT2,
5226 LOC_SEGMENT3,
5227 LOC_SEGMENT4,
5228 LOC_SEGMENT5,
5229 LOC_SEGMENT6,
5230 LOC_SEGMENT7,
5231 LOC_SEGMENT8,
5232 LOC_SEGMENT9,
5233 LOC_SEGMENT10,
5234 LOC_SEGMENT11,
5235 LOC_SEGMENT12,
5236 LOC_SEGMENT13,
5237 LOC_SEGMENT14,
5238 LOC_SEGMENT15,
5239 LOC_SEGMENT16,
5240 LOC_SEGMENT17,
5241 LOC_SEGMENT18,
5242 LOC_SEGMENT19,
5243 LOC_SEGMENT20
5244 INTO
5245 l_locid,
5246 l_segs1(1),
5247 l_segs1(2),
5248 l_segs1(3),
5249 l_segs1(4),
5250 l_segs1(5),
5251 l_segs1(6),
5252 l_segs1(7),
5253 l_segs1(8),
5254 l_segs1(9),
5255 l_segs1(10),
5256 l_segs1(11),
5257 l_segs1(12),
5258 l_segs1(13),
5259 l_segs1(14),
5260 l_segs1(15),
5261 l_segs1(16),
5262 l_segs1(17),
5263 l_segs1(18),
5264 l_segs1(19),
5265 l_segs1(20)
5266 FROM mtl_transactions_interface mti
5267 WHERE mti.rowid = p_rowid;
5268
5269 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5270
5271 EXCEPTION
5272
5273 WHEN OTHERS THEN
5274 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5275 IF (l_debug = 1) THEN
5276 inv_log_util.trace('Error in getlocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5277 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5278 END IF;
5279 x_locid := NULL;
5280 return FALSE;
5281
5282 END getlocid;
5283
5284 /******************************************************************
5285 -- Function
5286 -- getxlocid
5287 -- Description
5288 -- find the locator using the flex field segments
5289 -- Calls private function getLoc to do the work
5290 -- Output Parameters
5291 -- x_locator locator or null if error occurred
5292 ******************************************************************/
5293
5294 FUNCTION getxlocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
5295 l_segs1 fnd_flex_ext.segmentArray;
5296 l_error_exp VARCHAR2(250);
5297 l_locid number;
5298 begin
5299
5300 SELECT
5301 TRANSFER_LOCATOR,
5302 XFER_LOC_SEGMENT1,
5303 XFER_LOC_SEGMENT2,
5304 XFER_LOC_SEGMENT3,
5305 XFER_LOC_SEGMENT4,
5306 XFER_LOC_SEGMENT5,
5307 XFER_LOC_SEGMENT6,
5308 XFER_LOC_SEGMENT7,
5309 XFER_LOC_SEGMENT8,
5310 XFER_LOC_SEGMENT9,
5311 XFER_LOC_SEGMENT10,
5312 XFER_LOC_SEGMENT11,
5313 XFER_LOC_SEGMENT12,
5314 XFER_LOC_SEGMENT13,
5315 XFER_LOC_SEGMENT14,
5316 XFER_LOC_SEGMENT15,
5317 XFER_LOC_SEGMENT16,
5318 XFER_LOC_SEGMENT17,
5319 XFER_LOC_SEGMENT18,
5320 XFER_LOC_SEGMENT19,
5321 XFER_LOC_SEGMENT20
5322 INTO
5323 l_locid,
5324 l_segs1(1),
5325 l_segs1(2),
5326 l_segs1(3),
5327 l_segs1(4),
5328 l_segs1(5),
5329 l_segs1(6),
5330 l_segs1(7),
5331 l_segs1(8),
5332 l_segs1(9),
5333 l_segs1(10),
5334 l_segs1(11),
5335 l_segs1(12),
5336 l_segs1(13),
5337 l_segs1(14),
5338 l_segs1(15),
5339 l_segs1(16),
5340 l_segs1(17),
5341 l_segs1(18),
5342 l_segs1(19),
5343 l_segs1(20)
5344 FROM mtl_transactions_interface mti
5345 WHERE mti.rowid = p_rowid;
5346
5347 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5348
5349 EXCEPTION
5350
5351 WHEN OTHERS THEN
5352 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5353 IF (l_debug = 1) THEN
5354 inv_log_util.trace('Error in getxlocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5355 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5356 END IF;
5357 x_locid := NULL;
5358 return FALSE;
5359
5360 END getxlocid;
5361
5362 /******************************************************************
5363 -- Function
5364 -- getplocid. Added for Bug: 7323175
5365 -- Description
5366 -- find the locator using the flex field segments
5367 -- Calls private function getLoc to do the work.
5368 -- Used only in case of Project enabled ords for the
5369 -- creation of physical locators
5370 -- Output Parameters
5371 -- x_locator locator or null if error occurred
5372 ******************************************************************/
5373 /** Altered the changes made in the bug 7323175 for the bug 12922489*/
5374 /*FUNCTION getplocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
5375 l_segs1 fnd_flex_ext.segmentArray;
5376 l_error_exp VARCHAR2(250);
5377 l_locid number;
5378 begin
5379
5380 SELECT
5381 LOCATOR_ID,
5382 LOC_SEGMENT1,
5383 LOC_SEGMENT2,
5384 LOC_SEGMENT3,
5385 LOC_SEGMENT4,
5386 LOC_SEGMENT5,
5387 LOC_SEGMENT6,
5388 LOC_SEGMENT7,
5389 LOC_SEGMENT8,
5390 LOC_SEGMENT9,
5391 LOC_SEGMENT10,
5392 LOC_SEGMENT11,
5393 LOC_SEGMENT12,
5394 LOC_SEGMENT13,
5395 LOC_SEGMENT14,
5396 LOC_SEGMENT15,
5397 LOC_SEGMENT16,
5398 LOC_SEGMENT17,
5399 LOC_SEGMENT18,
5400 '',
5401 ''
5402 INTO
5403 l_locid,
5404 l_segs1(1),
5405 l_segs1(2),
5406 l_segs1(3),
5407 l_segs1(4),
5408 l_segs1(5),
5409 l_segs1(6),
5410 l_segs1(7),
5411 l_segs1(8),
5412 l_segs1(9),
5413 l_segs1(10),
5414 l_segs1(11),
5415 l_segs1(12),
5416 l_segs1(13),
5417 l_segs1(14),
5418 l_segs1(15),
5419 l_segs1(16),
5420 l_segs1(17),
5421 l_segs1(18),
5422 l_segs1(19),
5423 l_segs1(20)
5424
5425
5426
5427 FROM mtl_transactions_interface mti
5428 WHERE mti.rowid = p_rowid;
5429
5430 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5431
5432 EXCEPTION
5433
5434 WHEN OTHERS THEN
5435 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5436 IF (l_debug = 1) THEN
5437 inv_log_util.trace('Error in getplocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5438 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5439 END IF;
5440 x_locid := NULL;
5441 return FALSE;
5442
5443 END getplocid;*/
5444
5445 /******************************************************************
5446 -- Function
5447 -- getxplocid : Added for Bug: 7323175
5448 -- Description
5449 -- find the locator using the flex field segments
5450 -- Calls private function getLoc to do the work
5451 -- Used only in case of Project enabled orgs for the
5452 -- creation of physical locators for transfer transactions
5453 -- Output Parameters
5454 -- x_locator locator or null if error occurred
5455 ******************************************************************/
5456 /** Altered the changes made in the bug 7323175 for the bug 12922489*/
5457 /*FUNCTION getxplocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
5458 l_segs1 fnd_flex_ext.segmentArray;
5459 l_error_exp VARCHAR2(250);
5460 l_locid number;
5461 begin
5462
5463 SELECT
5464 TRANSFER_LOCATOR,
5465 XFER_LOC_SEGMENT1,
5466 XFER_LOC_SEGMENT2,
5467 XFER_LOC_SEGMENT3,
5468 XFER_LOC_SEGMENT4,
5469 XFER_LOC_SEGMENT5,
5470 XFER_LOC_SEGMENT6,
5471 XFER_LOC_SEGMENT7,
5472 XFER_LOC_SEGMENT8,
5473 XFER_LOC_SEGMENT9,
5474 XFER_LOC_SEGMENT10,
5475 XFER_LOC_SEGMENT11,
5476 XFER_LOC_SEGMENT12,
5477 XFER_LOC_SEGMENT13,
5478 XFER_LOC_SEGMENT14,
5479 XFER_LOC_SEGMENT15,
5480 XFER_LOC_SEGMENT16,
5481 XFER_LOC_SEGMENT17,
5482 XFER_LOC_SEGMENT18,
5483 '',
5484 ''
5485
5486 INTO
5487 l_locid,
5488 l_segs1(1),
5489 l_segs1(2),
5490 l_segs1(3),
5491 l_segs1(4),
5492 l_segs1(5),
5493 l_segs1(6),
5494 l_segs1(7),
5495 l_segs1(8),
5496 l_segs1(9),
5497 l_segs1(10),
5498 l_segs1(11),
5499 l_segs1(12),
5500 l_segs1(13),
5501 l_segs1(14),
5502 l_segs1(15),
5503 l_segs1(16),
5504 l_segs1(17),
5505 l_segs1(18),
5506 l_segs1(19),
5507 l_segs1(20)
5508
5509
5510 FROM mtl_transactions_interface mti
5511 WHERE mti.rowid = p_rowid;
5512
5513 return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5514
5515 EXCEPTION
5516
5517 WHEN OTHERS THEN
5518 l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5519 IF (l_debug = 1) THEN
5520 inv_log_util.trace('Error in getxplocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5521 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5522 END IF;
5523 x_locid := NULL;
5524 return FALSE;
5525
5526 END getxplocid;*/
5527
5528
5529 /******************************************************************
5530 *
5531 * validate_loc_for_project()
5532 *
5533 ******************************************************************/
5534 FUNCTION validate_loc_for_project(p_ltv_locid in NUMBER, p_ltv_orgid in NUMBER, p_ltv_srctype in NUMBER,
5535 p_ltv_trxact in NUMBER, p_ltv_trx_src_id in NUMBER, p_ltv_flow_schedule in NUMBER,
5536 p_ltv_scheduled_flag in NUMBER)
5537 RETURN BOOLEAN
5538 IS
5539
5540 CURSOR LTV1 IS
5541 SELECT PROJECT_ID, TASK_ID
5542 FROM WIP_DISCRETE_JOBS
5543 WHERE WIP_ENTITY_ID = p_ltv_trx_src_id
5544 AND ROWNUM < 2 ;
5545
5546 CURSOR LTV2 IS
5547 SELECT PROJECT_ID, TASK_ID
5548 FROM WIP_FLOW_SCHEDULES
5549 WHERE WIP_ENTITY_ID = p_ltv_trx_src_id
5550 AND ROWNUM < 2 ;
5551
5552 l_ltv_project_ref_enabled NUMBER := 0 ;
5553 l_ltv_project_id NUMBER;
5554 l_ltv_task_id NUMBER;
5555 l_ltv_mode VARCHAR2(20);
5556 l_ltv_reqd_flag VARCHAR2(10);
5557 l_ltv_loc_project_valid NUMBER := 1;
5558 l_ltv_error_mesg VARCHAR2(241);
5559
5560 BEGIN
5561
5562 -- WHENEVER NOT FOUND CONTINUE;
5563
5564 BEGIN
5565 SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
5566 INTO l_ltv_project_ref_enabled
5567 FROM MTL_PARAMETERS
5568 WHERE ORGANIZATION_ID = p_ltv_orgid ;
5569 EXCEPTION
5570 WHEN NO_DATA_FOUND THEN
5571 FND_MESSAGE.set_name('INV','INV_INT_ORGEXP');
5572 return(FALSE);
5573 END;
5574
5575 IF l_ltv_project_ref_enabled = 0 THEN
5576 return(TRUE);
5577 END IF;
5578
5579 l_ltv_mode := 'ANY';
5580 l_ltv_reqd_flag := 'N';
5581
5582 IF p_ltv_srctype = 5 THEN
5583 IF p_ltv_scheduled_flag = 1 THEN
5584
5585 IF p_ltv_trx_src_id IS NULL THEN
5586 FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5587 return FALSE;
5588 END IF;
5589
5590 IF p_ltv_flow_schedule = 0 THEN
5591 OPEN LTV1 ;
5592 FETCH LTV1 INTO
5593 l_ltv_project_id,
5594 l_ltv_task_id;
5595
5596 IF SQL%NOTFOUND THEN
5597 FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5598 CLOSE LTV1;
5599 return(FALSE);
5600 END IF;
5601 CLOSE LTV1;
5602 ELSE
5603 IF p_ltv_flow_schedule = 1 THEN
5604 OPEN LTV2 ;
5605 FETCH LTV2 INTO
5606 l_ltv_project_id,
5607 l_ltv_task_id;
5608
5609 IF SQL%NOTFOUND THEN
5610 FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5611 CLOSE LTV2;
5612 return(FALSE);
5613 END IF;
5614 CLOSE LTV2;
5615 END IF;
5616 END IF;
5617
5618 l_ltv_mode := 'SPECIFIC';
5619 IF ( p_ltv_trxact = 31 OR p_ltv_trxact = 32 ) THEN
5620 l_ltv_reqd_flag := 'Y';
5621 END IF;
5622 ELSE
5623 return(TRUE);
5624 END IF;
5625 END IF;
5626 IF (l_debug=1) THEN
5627 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');
5628 END IF;
5629
5630 IF p_ltv_scheduled_flag = 1 THEN
5631 inv_wwacst.call_prj_loc_validation(
5632 p_ltv_locid,
5633 p_ltv_orgid,
5634 l_ltv_mode,
5635 l_ltv_reqd_flag,
5636 l_ltv_project_id,
5637 l_ltv_task_id,
5638 l_ltv_loc_project_valid,
5639 l_ltv_error_mesg);
5640
5641
5642 IF l_ltv_loc_project_valid = 0 THEN
5643 --Bug #6449667, Modified the code below so that relavant error message are displayed from project validation API.
5644 IF (l_debug=1) THEN
5645 inv_log_util.trace('Error in validate_loc_for_project : ' || l_ltv_error_mesg, 'INV_TXN_MANAGER_GRP','9');
5646 END IF;
5647 --FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5648 FND_MESSAGE.set_name('INV', 'INV_FND_GENERIC_MSG');
5649 FND_MESSAGE.set_token('MSG', l_ltv_error_mesg);
5650 return(FALSE);
5651 ELSE
5652 FND_MESSAGE.clear;
5653 return(TRUE);
5654 END IF;
5655
5656
5657 ELSE
5658 return(TRUE);
5659 END IF;
5660
5661
5662 EXCEPTION
5663 WHEN OTHERS THEN
5664 RETURN FALSE;
5665 END validate_loc_for_project;
5666
5667
5668 /******************************************************************
5669 *
5670 * validate_unit_number()
5671 *
5672 ******************************************************************/
5673 FUNCTION validate_unit_number(p_unit_number in VARCHAR2, p_orgid in NUMBER, p_itemid in NUMBER,
5674 p_srctype in NUMBER, p_acttype in NUMBER)
5675
5676 RETURN BOOLEAN
5677 IS
5678
5679 l_unit_no_ok NUMBER := 1;
5680
5681 BEGIN
5682
5683 -- WHENEVER NOT FOUND CONTINUE;
5684
5685 IF (NVL(PJM_UNIT_EFF.ENABLED,'N') = 'Y') THEN
5686 IF (PJM_UNIT_EFF.UNIT_EFFECTIVE_ITEM(p_itemid,p_orgid) = 'Y') THEN
5687 IF (p_srctype = 3 AND p_acttype in(3,21) AND p_unit_number IS NOT NULL) then
5688 l_unit_no_ok := 0;
5689 SELECT count(1) INTO l_unit_no_ok
5690 FROM PJM_UNIT_NUMBERS_LOV_V
5691 WHERE UNIT_NUMBER =p_unit_number;
5692 END IF;
5693 END IF;
5694 END IF;
5695
5696 IF (l_unit_no_ok = 0) THEN
5697
5698 FND_MESSAGE.set_name('INV','INV_INT_UNITNUMBER');
5699 FND_MESSAGE.set_token('ROUTINE','validate_unit_number');
5700 return FALSE;
5701 ELSE
5702 FND_MESSAGE.clear;
5703 return TRUE;
5704 END IF;
5705
5706 EXCEPTION
5707 WHEN OTHERS THEN
5708 RETURN FALSE;
5709 END validate_unit_number;
5710
5711 /******************************************************************
5712 * get_costgrpid() : This function derives the cost group id for a particular Organization, Subinventory and Locator_id combination
5713 * Added for Bug 6356567
5714 ******************************************************************/
5715
5716 FUNCTION get_costgrpid(p_org_id in NUMBER, p_subinv in VARCHAR2, p_locatorid in NUMBER)
5717 RETURN mtl_transactions_interface.cost_group_id%TYPE IS
5718 l_cost_group_id number;
5719 l_org_cost_group_id number;
5720 l_primary_cost_method mtl_parameters.primary_cost_method%TYPE;
5721 l_project_enabled NUMBER;
5722 l_project_id NUMBER;
5723 BEGIN
5724 IF p_org_id is NULL then
5725 return NULL;
5726 END IF;
5727
5728 l_cost_group_id := NULL; /* Initializing the value of Cost Group id to Null */
5729
5730 BEGIN
5731 SELECT Nvl(project_reference_enabled,2), default_cost_group_id, primary_cost_method
5732 INTO l_project_enabled, l_org_cost_group_id, l_primary_cost_method
5733 FROM mtl_parameters
5734 WHERE organization_id = p_org_id
5735 and WMS_ENABLED_FLAG = 'N' ; -- Bug 8345339
5736 EXCEPTION
5737 WHEN no_data_found THEN
5738 return NULL;
5739 END;
5740
5741 IF (l_project_enabled = 1 and p_locatorid is not null) THEN --If the Org is Project enabled Org
5742 BEGIN
5743 SELECT project_id INTO l_project_id
5744 FROM mtl_item_locations
5745 WHERE organization_id =p_org_id
5746 AND inventory_location_id = p_locatorid;
5747 EXCEPTION
5748 WHEN no_data_found THEN
5749 l_project_id := null;
5750 END;
5751
5752 IF l_project_id IS NOT NULL THEN
5753 SELECT mpp.costing_group_id INTO l_cost_group_id
5754 FROM mrp_project_parameters mpp
5755 WHERE mpp.project_id = l_project_id
5756 AND mpp.organization_id = p_org_id;
5757 END IF; --IF l_project_id IS NOT NULL THEN
5758 END IF;
5759
5760 IF (l_cost_group_id is null) then
5761 IF l_primary_cost_method = 1 THEN -- costing method is standard
5762 BEGIN
5763 SELECT default_cost_group_id INTO l_cost_group_id
5764 FROM mtl_secondary_inventories
5765 WHERE secondary_inventory_name = p_subinv
5766 AND organization_id = p_org_id
5767 AND default_cost_group_id IS NOT NULL;
5768 EXCEPTION
5769 WHEN no_data_found THEN
5770 l_cost_group_id := l_org_cost_group_id;
5771 END;
5772 ELSE -- costing method is not standard
5773 l_cost_group_id := l_org_cost_group_id;
5774 END IF;
5775 END IF;
5776 return l_cost_group_id;
5777 END get_costgrpid;
5778
5779 /******************************************************************
5780 *
5781 * update_mil() : To update dynamic locators in autonomous mode
5782 * Added for Bug# 5044059
5783 * Added a parameter p_plocid Physical Locator for Bug# 7323175
5784 * Altered the changes made in the bug 7323175 for the bug 12922489
5785 ******************************************************************/
5786 PROCEDURE update_mil(p_userid NUMBER,
5787 p_loginid NUMBER,
5788 p_applid NUMBER,
5789 p_progid NUMBER,
5790 p_reqstid NUMBER,
5791 p_subinv VARCHAR2,
5792 p_default_locator_status NUMBER,
5793 p_orgid NUMBER,
5794 p_locid NUMBER) IS
5795 PRAGMA AUTONOMOUS_TRANSACTION;
5796 l_count NUMBER := 0;
5797 BEGIN
5798
5799 begin
5800 SELECT 1 INTO l_count
5801 FROM MTL_ITEM_LOCATIONS
5802 WHERE ORGANIZATION_ID = p_orgid
5803 /* Start: Fix for Bug# 7323175 : Also considering the physical locator for locking */
5804 AND INVENTORY_LOCATION_ID = p_locid
5805 --AND INVENTORY_LOCATION_ID IN (p_locid,p_plocid)
5806 /* End: Fix for Bug# 7323175 */
5807 AND SUBINVENTORY_CODE is NULL FOR UPDATE NOWAIT;
5808 exception
5809 when others then
5810 l_count := 0;
5811 IF (l_debug = 1) THEN
5812 inv_log_util.trace('Could not lock MIL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
5813 END IF;
5814 end;
5815
5816 IF (l_count = 1) THEN
5817 UPDATE MTL_ITEM_LOCATIONS
5818 SET LAST_UPDATE_DATE = SYSDATE,
5819 LAST_UPDATED_BY = p_userid,
5820 LAST_UPDATE_LOGIN = p_loginid,
5821 PROGRAM_APPLICATION_ID = p_applid,
5822 PROGRAM_ID = p_progid,
5823 PROGRAM_UPDATE_DATE = SYSDATE,
5824 REQUEST_ID = p_reqstid,
5825 SUBINVENTORY_CODE = p_subinv,
5826 STATUS_ID = p_default_locator_status
5827 /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
5828 physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
5829 p_plocid would be null */
5830 --PHYSICAL_LOCATION_ID = p_plocid
5831 /* End: Fix for Bug# 7323175 */
5832 WHERE ORGANIZATION_ID = p_orgid
5833 /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
5834 AND INVENTORY_LOCATION_ID = p_locid
5835 --AND INVENTORY_LOCATION_ID IN (p_locid,p_plocid)
5836 /* End: Fix for Bug# 7323175 */
5837 AND SUBINVENTORY_CODE is NULL;
5838
5839
5840 IF (l_debug = 1) THEN
5841 inv_log_util.trace('Rows updated in MIL = '||SQL%ROWCOUNT, 'INV_TXN_MANAGER_GRP','9');
5842 END IF;
5843 END IF;
5844
5845 COMMIT;
5846
5847 EXCEPTION
5848 WHEN OTHERS THEN
5849 IF (l_debug = 1) THEN
5850 inv_log_util.trace('update_mil SQL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
5851 END IF;
5852 ROLLBACK;
5853 RETURN;
5854 END update_mil;
5855
5856
5857 /*Bug#5125632. Added the following procedure to update the lot status
5858 of lots for a given line in MTLI, if they are NULL.
5859 Fist MTL_LOT_NUMBERS is checked to find the status. If there is no row in this
5860 table, then, MTL_SYSTEM_ITEMS is checked to fetch the 'default_lot_status_id'
5861 for the corresponding item*/
5862
5863 Procedure update_status_id_in_mtli( p_txn_interface_id IN NUMBER
5864 ,p_org_id IN NUMBER
5865 ,p_inventory_item_id IN NUMBER ) Is
5866 l_status_enabled VARCHAR2(1);
5867 l_status_id NUMBER;
5868 l_mtli_status_id NUMBER;
5869 l_lot_num VARCHAR2(31);
5870
5871 CURSOR lots IS
5872 SELECT ROWID
5873 , lot_number
5874 , status_id
5875 FROM MTL_TRANSACTION_LOTS_INTERFACE
5876 WHERE transaction_interface_id = p_txn_interface_id;
5877
5878 Begin
5879 IF (l_debug = 1) THEN
5880 inv_log_util.trace('Entered The Procedure update_status_id_in_mtli() with the parameters:', 'INV_TXN_MANAGER_GRP','1');
5881 inv_log_util.trace('p_txn_interface_id:'||p_txn_interface_id, 'INV_TXN_MANAGER_GRP','1');
5882 inv_log_util.trace('p_org_id:'||p_org_id, 'INV_TXN_MANAGER_GRP','1');
5883 inv_log_util.trace('p_inventory_item_id:'||p_inventory_item_id, 'INV_TXN_MANAGER_GRP','1');
5884 End If;
5885
5886 FOR lots_rec IN lots
5887 LOOP
5888 IF lots_rec.status_id IS NULL THEN
5889 l_mtli_status_id := lots_rec.status_id;--To initialize 'lots_rec.status_id' with NULL
5890 IF (l_debug = 1) THEN
5891 inv_log_util.trace('Current cursor values are :', 'INV_TXN_MANAGER_GRP','1');
5892 inv_log_util.trace('lots_rec.lot_number:'||lots_rec.lot_number, 'INV_TXN_MANAGER_GRP','1');
5893 inv_log_util.trace('lots_rec.status_id:'||lots_rec.status_id, 'INV_TXN_MANAGER_GRP','1');
5894 End If;
5895 BEGIN
5896 SELECT status_id
5897 INTO l_mtli_status_id
5898 FROM mtl_lot_numbers
5899 WHERE organization_id = p_org_id
5900 AND inventory_item_id = p_inventory_item_id
5901 AND lot_number = lots_rec.lot_number;
5902
5903 IF (l_debug = 1) THEN
5904 inv_log_util.trace('After selecting from MLN, Value is:', 'INV_TXN_MANAGER_GRP','1');
5905 inv_log_util.trace('l_mtli_status_id:'||l_mtli_status_id, 'INV_TXN_MANAGER_GRP','1');
5906 End If;
5907
5908 EXCEPTION WHEN NO_DATA_FOUND THEN
5909 BEGIN
5910 SELECT lot_status_enabled
5911 ,default_lot_status_id
5912 INTO l_status_enabled
5913 ,l_status_id
5914 FROM mtl_system_items
5915 WHERE organization_id = p_org_id
5916 AND inventory_item_id = p_inventory_item_id;
5917 IF (l_debug = 1) THEN
5918 inv_log_util.trace('After selecting from MSI, Values are:', 'INV_TXN_MANAGER_GRP','1');
5919 inv_log_util.trace('lot_status_enabled:'||l_status_enabled, 'INV_TXN_MANAGER_GRP','1');
5920 inv_log_util.trace('default_lot_status_id:'||l_status_id, 'INV_TXN_MANAGER_GRP','1');
5921 End If;
5922
5923 IF (NVL(l_status_enabled, 'N') = 'Y') THEN
5924 l_mtli_status_id := l_status_id;
5925 ELSE
5926 l_mtli_status_id := 1;
5927 END IF;
5928 END;
5929 END;
5930
5931 IF (l_debug = 1) THEN
5932 inv_log_util.trace('Before Update of MTLI', 'INV_TXN_MANAGER_GRP','1');
5933 End If;
5934
5935 UPDATE mtl_transaction_lots_interface
5936 SET status_id = l_mtli_status_id
5937 ,last_updated_by = fnd_global.user_id
5938 ,last_update_date = sysdate
5939 ,last_update_login = fnd_global.login_id
5940 ,request_id = fnd_global.conc_request_id
5941 ,program_application_id = fnd_global.prog_appl_id
5942 ,program_id = fnd_global.conc_program_id
5943 ,program_update_date = Decode(fnd_global.conc_request_id, -1, NULL, SYSDATE)
5944 WHERE ROWID = lots_rec.rowid;
5945
5946 IF (l_debug = 1) THEN
5947 inv_log_util.trace('After Update of MTLI', 'INV_TXN_MANAGER_GRP','1');
5948 End If;
5949
5950 END IF;
5951 END LOOP;
5952 EXCEPTION WHEN OTHERS THEN
5953 IF lots%ISOPEN THEN
5954 CLOSE lots;
5955 END IF;
5956 IF (l_debug = 1) THEN
5957 inv_log_util.trace('Exception occurred in update_status_id_in_mtli procedure:', 'INV_TXN_MANAGER_GRP','1');
5958 inv_log_util.trace('Error Is:'||SQLERRM, 'INV_TXN_MANAGER_GRP','1');
5959 End If;
5960
5961 End update_status_id_in_mtli;
5962
5963 /******************************************************************
5964 *
5965 * validate_lot_serial_for_rcpt()
5966 * SDPAUL Bug# 5710830
5967 * This private procedure is used to validate a set of
5968 * MTL_TRANSACTION_LOTS_INTERFACE and MTL_SERIAL_NUMBERS_INTERFACE records
5969 * and inserts them into the corresponding master tables.
5970 * These validations are only needed for Receipt into stores transaction -> 27
5971 * and for the transaction sources -> 3,6 and 13.
5972 *
5973 ******************************************************************/
5974
5975 PROCEDURE validate_lot_serial_for_rcpt
5976 (p_interface_id IN NUMBER
5977 , p_org_id IN NUMBER
5978 , p_item_id IN NUMBER
5979 , p_lotctrl IN NUMBER
5980 , p_serctrl IN NUMBER
5981 , p_rev IN VARCHAR2 DEFAULT NULL
5982 , p_trx_src_id IN NUMBER DEFAULT NULL
5983 , p_trx_action_id IN NUMBER DEFAULT NULL
5984 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
5985 , p_locator_id IN NUMBER DEFAULT NULL
5986 , x_proc_msg OUT NOCOPY VARCHAR2
5987 , x_return_status OUT NOCOPY VARCHAR2
5988 )
5989 IS
5990 CURSOR cur_MTLI IS
5991 SELECT LOT_NUMBER
5992 , LOT_EXPIRATION_DATE
5993 , LOT_ATTRIBUTE_CATEGORY
5994 , ATTRIBUTE_CATEGORY
5995 , ATTRIBUTE1
5996 , ATTRIBUTE2
5997 , ATTRIBUTE3
5998 , ATTRIBUTE4
5999 , ATTRIBUTE5
6000 , ATTRIBUTE6
6001 , ATTRIBUTE7
6002 , ATTRIBUTE8
6003 , ATTRIBUTE9
6004 , ATTRIBUTE10
6005 , ATTRIBUTE11
6006 , ATTRIBUTE12
6007 , ATTRIBUTE13
6008 , ATTRIBUTE14
6009 , ATTRIBUTE15
6010 , C_ATTRIBUTE1
6011 , C_ATTRIBUTE2
6012 , C_ATTRIBUTE3
6013 , C_ATTRIBUTE4
6014 , C_ATTRIBUTE5
6015 , C_ATTRIBUTE6
6016 , C_ATTRIBUTE7
6017 , C_ATTRIBUTE8
6018 , C_ATTRIBUTE9
6019 , C_ATTRIBUTE10
6020 , C_ATTRIBUTE11
6021 , C_ATTRIBUTE12
6022 , C_ATTRIBUTE13
6023 , C_ATTRIBUTE14
6024 , C_ATTRIBUTE15
6025 , C_ATTRIBUTE16
6026 , C_ATTRIBUTE17
6027 , C_ATTRIBUTE18
6028 , C_ATTRIBUTE19
6029 , C_ATTRIBUTE20
6030 , N_ATTRIBUTE1
6031 , N_ATTRIBUTE2
6032 , N_ATTRIBUTE3
6033 , N_ATTRIBUTE4
6034 , N_ATTRIBUTE5
6035 , N_ATTRIBUTE6
6036 , N_ATTRIBUTE7
6037 , N_ATTRIBUTE8
6038 , N_ATTRIBUTE9
6039 , N_ATTRIBUTE10
6040 , D_ATTRIBUTE1
6041 , D_ATTRIBUTE2
6042 , D_ATTRIBUTE3
6043 , D_ATTRIBUTE4
6044 , D_ATTRIBUTE5
6045 , D_ATTRIBUTE6
6046 , D_ATTRIBUTE7
6047 , D_ATTRIBUTE8
6048 , D_ATTRIBUTE9
6049 , D_ATTRIBUTE10
6050 , GRADE_CODE
6051 , ORIGINATION_DATE
6052 , DATE_CODE
6053 , STATUS_ID
6054 , CHANGE_DATE
6055 , AGE
6056 , RETEST_DATE
6057 , MATURITY_DATE
6058 , ITEM_SIZE
6059 , COLOR
6060 , VOLUME
6061 , VOLUME_UOM
6062 , PLACE_OF_ORIGIN
6063 , BEST_BY_DATE
6064 , LENGTH
6065 , LENGTH_UOM
6066 , RECYCLED_CONTENT
6067 , THICKNESS
6068 , THICKNESS_UOM
6069 , WIDTH
6070 , WIDTH_UOM
6071 , TERRITORY_CODE
6072 , SUPPLIER_LOT_NUMBER
6073 , VENDOR_NAME
6074 , SERIAL_TRANSACTION_TEMP_ID
6075 FROM MTL_TRANSACTION_LOTS_INTERFACE
6076 WHERE TRANSACTION_INTERFACE_ID = p_interface_id;
6077
6078 CURSOR cur_MSNI(interface_id NUMBER) IS
6079 SELECT FM_SERIAL_NUMBER
6080 , TO_SERIAL_NUMBER
6081 FROM MTL_SERIAL_NUMBERS_INTERFACE
6082 WHERE TRANSACTION_INTERFACE_ID = interface_id;
6083
6084 -- PL/SQL table to store lot attributes
6085 l_attributes_tbl inv_lot_api_pub.char_tbl;
6086 l_c_attributes_tbl inv_lot_api_pub.char_tbl;
6087 l_n_attributes_tbl inv_lot_api_pub.number_tbl;
6088 l_d_attributes_tbl inv_lot_api_pub.date_tbl;
6089
6090 l_lot_exists NUMBER := 0;
6091 l_ret_number NUMBER := 0;
6092 l_qty NUMBER := NULL;
6093 l_start_qty NUMBER := 0;
6094 l_end_ser VARCHAR2(30);
6095
6096 l_expiration_date DATE;
6097 l_object_id NUMBER;
6098 l_msg_count NUMBER;
6099
6100 BEGIN
6101 x_return_status := lg_ret_sts_success;
6102
6103 -- Check for both lot and serial controlled item
6104 IF (p_lotctrl = 2 AND p_serctrl IN (2,5) ) THEN
6105 IF (l_debug = 1) THEN
6106 inv_log_util.trace('Validating both lot and serial controlled item','INV_TXN_MANAGER_GRP', 9);
6107 END IF;
6108 -- Looping through all MTLI records
6109 FOR rec_MTLI IN cur_MTLI
6110 LOOP
6111
6112 -- Check to see if the lot already exists
6113 -- If 'NO' then call the create_inv_lot API
6114 l_lot_exists := 0;
6115 BEGIN
6116 SELECT 1 INTO l_lot_exists
6117 FROM DUAL
6118 WHERE EXISTS(SELECT lot_number
6119 FROM mtl_lot_numbers
6120 WHERE lot_number = rec_MTLI.LOT_NUMBER
6121 AND inventory_item_id = p_item_id
6122 AND organization_id = p_org_id);
6123 EXCEPTION
6124 WHEN OTHERS THEN
6125 l_lot_exists := 0;
6126 END; -- End of check for lot exists
6127
6128 IF (l_lot_exists = 1) THEN
6129 IF (l_debug = 1) THEN
6130 inv_log_util.trace('Lot already exists','INV_TXN_MANAGER_GRP', 9);
6131 END IF;
6132 ELSE -- Have to create a new lot
6133
6134 l_attributes_tbl(1) := rec_MTLI.ATTRIBUTE1;
6135 l_attributes_tbl(2) := rec_MTLI.ATTRIBUTE2;
6136 l_attributes_tbl(3) := rec_MTLI.ATTRIBUTE3;
6137 l_attributes_tbl(4) := rec_MTLI.ATTRIBUTE4;
6138 l_attributes_tbl(5) := rec_MTLI.ATTRIBUTE5;
6139 l_attributes_tbl(6) := rec_MTLI.ATTRIBUTE6;
6140 l_attributes_tbl(7) := rec_MTLI.ATTRIBUTE7;
6141 l_attributes_tbl(8) := rec_MTLI.ATTRIBUTE8;
6142 l_attributes_tbl(9) := rec_MTLI.ATTRIBUTE9;
6143 l_attributes_tbl(10) := rec_MTLI.ATTRIBUTE10;
6144 l_attributes_tbl(11) := rec_MTLI.ATTRIBUTE11;
6145 l_attributes_tbl(12) := rec_MTLI.ATTRIBUTE12;
6146 l_attributes_tbl(13) := rec_MTLI.ATTRIBUTE13;
6147 l_attributes_tbl(14) := rec_MTLI.ATTRIBUTE14;
6148 l_attributes_tbl(15) := rec_MTLI.ATTRIBUTE15;
6149
6150 l_c_attributes_tbl(1) := rec_MTLI.C_ATTRIBUTE1;
6151 l_c_attributes_tbl(2) := rec_MTLI.C_ATTRIBUTE2;
6152 l_c_attributes_tbl(3) := rec_MTLI.C_ATTRIBUTE3;
6153 l_c_attributes_tbl(4) := rec_MTLI.C_ATTRIBUTE4;
6154 l_c_attributes_tbl(5) := rec_MTLI.C_ATTRIBUTE5;
6155 l_c_attributes_tbl(6) := rec_MTLI.C_ATTRIBUTE6;
6156 l_c_attributes_tbl(7) := rec_MTLI.C_ATTRIBUTE7;
6157 l_c_attributes_tbl(8) := rec_MTLI.C_ATTRIBUTE8;
6158 l_c_attributes_tbl(9) := rec_MTLI.C_ATTRIBUTE9;
6159 l_c_attributes_tbl(10) := rec_MTLI.C_ATTRIBUTE10;
6160 l_c_attributes_tbl(11) := rec_MTLI.C_ATTRIBUTE11;
6161 l_c_attributes_tbl(12) := rec_MTLI.C_ATTRIBUTE12;
6162 l_c_attributes_tbl(13) := rec_MTLI.C_ATTRIBUTE13;
6163 l_c_attributes_tbl(14) := rec_MTLI.C_ATTRIBUTE14;
6164 l_c_attributes_tbl(15) := rec_MTLI.C_ATTRIBUTE15;
6165 l_c_attributes_tbl(16) := rec_MTLI.C_ATTRIBUTE16;
6166 l_c_attributes_tbl(17) := rec_MTLI.C_ATTRIBUTE17;
6167 l_c_attributes_tbl(18) := rec_MTLI.C_ATTRIBUTE18;
6168 l_c_attributes_tbl(19) := rec_MTLI.C_ATTRIBUTE19;
6169 l_c_attributes_tbl(20) := rec_MTLI.C_ATTRIBUTE20;
6170
6171 l_n_attributes_tbl(1) := rec_MTLI.N_ATTRIBUTE1;
6172 l_n_attributes_tbl(2) := rec_MTLI.N_ATTRIBUTE2;
6173 l_n_attributes_tbl(3) := rec_MTLI.N_ATTRIBUTE3;
6174 l_n_attributes_tbl(4) := rec_MTLI.N_ATTRIBUTE4;
6175 l_n_attributes_tbl(5) := rec_MTLI.N_ATTRIBUTE5;
6176 l_n_attributes_tbl(6) := rec_MTLI.N_ATTRIBUTE6;
6177 l_n_attributes_tbl(7) := rec_MTLI.N_ATTRIBUTE7;
6178 l_n_attributes_tbl(8) := rec_MTLI.N_ATTRIBUTE8;
6179 l_n_attributes_tbl(9) := rec_MTLI.N_ATTRIBUTE9;
6180 l_n_attributes_tbl(10) := rec_MTLI.N_ATTRIBUTE10;
6181
6182 l_d_attributes_tbl(1) := rec_MTLI.D_ATTRIBUTE1;
6183 l_d_attributes_tbl(2) := rec_MTLI.D_ATTRIBUTE2;
6184 l_d_attributes_tbl(3) := rec_MTLI.D_ATTRIBUTE3;
6185 l_d_attributes_tbl(4) := rec_MTLI.D_ATTRIBUTE4;
6186 l_d_attributes_tbl(5) := rec_MTLI.D_ATTRIBUTE5;
6187 l_d_attributes_tbl(6) := rec_MTLI.D_ATTRIBUTE6;
6188 l_d_attributes_tbl(7) := rec_MTLI.D_ATTRIBUTE7;
6189 l_d_attributes_tbl(8) := rec_MTLI.D_ATTRIBUTE8;
6190 l_d_attributes_tbl(9) := rec_MTLI.D_ATTRIBUTE9;
6191 l_d_attributes_tbl(10) := rec_MTLI.D_ATTRIBUTE10;
6192
6193 IF (l_debug=1) THEN
6194 inv_log_util.trace('Before call to inv_lot_api_pub.create_inv_lot', 'INV_TXN_MANAGER_GRP', 9);
6195 END IF;
6196
6197 inv_lot_api_pub.create_inv_lot(
6198 x_return_status => x_return_status
6199 , x_msg_count => l_msg_count
6200 , x_msg_data => x_proc_msg
6201 , p_inventory_item_id => p_item_id
6202 , p_organization_id => p_org_id
6203 , p_lot_number => rec_MTLI.LOT_NUMBER
6204 , p_expiration_date => rec_MTLI.LOT_EXPIRATION_DATE
6205 , p_disable_flag => null
6206 , p_attribute_category => rec_MTLI.ATTRIBUTE_CATEGORY
6207 , p_lot_attribute_category => rec_MTLI.LOT_ATTRIBUTE_CATEGORY
6208 , p_attributes_tbl => l_attributes_tbl
6209 , p_c_attributes_tbl => l_c_attributes_tbl
6210 , p_n_attributes_tbl => l_n_attributes_tbl
6211 , p_d_attributes_tbl => l_d_attributes_tbl
6212 , p_grade_code => rec_MTLI.GRADE_CODE
6213 , p_origination_date => rec_MTLI.ORIGINATION_DATE
6214 , p_date_code => rec_MTLI.DATE_CODE
6215 , p_status_id => rec_MTLI.STATUS_ID
6216 , p_change_date => rec_MTLI.CHANGE_DATE
6217 , p_age => rec_MTLI.AGE
6218 , p_retest_date => rec_MTLI.RETEST_DATE
6219 , p_maturity_date => rec_MTLI.MATURITY_DATE
6220 , p_item_size => rec_MTLI.ITEM_SIZE
6221 , p_color => rec_MTLI.COLOR
6222 , p_volume => rec_MTLI.VOLUME
6223 , p_volume_uom => rec_MTLI.VOLUME_UOM
6224 , p_place_of_origin => rec_MTLI.PLACE_OF_ORIGIN
6225 , p_best_by_date => rec_MTLI.BEST_BY_DATE
6226 , p_length => rec_MTLI.LENGTH
6227 , p_length_uom => rec_MTLI.LENGTH_UOM
6228 , p_recycled_content => rec_MTLI.RECYCLED_CONTENT
6229 , p_thickness => rec_MTLI.THICKNESS
6230 , p_thickness_uom => rec_MTLI.THICKNESS_UOM
6231 , p_width => rec_MTLI.WIDTH
6232 , p_width_uom => rec_MTLI.WIDTH_UOM
6233 , p_territory_code => rec_MTLI.TERRITORY_CODE
6234 , p_supplier_lot_number => rec_MTLI.SUPPLIER_LOT_NUMBER
6235 , p_vendor_name => rec_MTLI.VENDOR_NAME
6236 , p_source => null
6237 );
6238
6239 IF (l_debug=1) THEN
6240 inv_log_util.trace('After call to inv_lot_api_pub.create_inv_lot', 'INV_TXN_MANAGER_GRP', 9);
6241 inv_log_util.trace(' x_return_status : ' || x_return_status, 'INV_TXN_MANAGER_GRP', 9);
6242 END IF;
6243 END IF; -- End of Lot Exists check
6244
6245 IF (x_return_status = lg_ret_sts_success) THEN
6246 IF (l_debug=1) THEN
6247 inv_log_util.trace('Call to inv_lot_api_pub.create_inv_lot was successful','INV_TXN_MANAGER_GRP', 9);
6248 END IF;
6249 -- Looping through every serials in the lot
6250 FOR rec_MSNI IN cur_MSNI(rec_MTLI.SERIAL_TRANSACTION_TEMP_ID)
6251 LOOP
6252 IF (l_debug=1) THEN
6253 inv_log_util.trace('About to call inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
6254 END IF;
6255
6256 l_qty := NULL;
6257 l_end_ser := NVL(rec_MSNI.TO_SERIAL_NUMBER,rec_MSNI.FM_SERIAL_NUMBER);
6258 l_start_qty := inv_serial_number_pub.get_serial_diff(rec_MSNI.FM_SERIAL_NUMBER,l_end_ser);
6259 l_ret_number := inv_serial_number_pub.validate_serials(
6260 p_org_id => p_org_id
6261 , p_item_id => p_item_id
6262 , p_qty => l_qty
6263 , p_rev => p_rev
6264 , p_lot => rec_MTLI.LOT_NUMBER
6265 , p_start_ser => rec_MSNI.FM_SERIAL_NUMBER
6266 , p_trx_src_id => p_trx_src_id
6267 , p_trx_action_id => p_trx_action_id
6268 , p_subinventory_code => p_subinventory_code
6269 , p_locator_id => p_locator_id
6270 , p_issue_receipt => 'R'
6271 , x_end_ser => l_end_ser
6272 , x_proc_msg => x_proc_msg
6273 , p_check_for_grp_mark_id => 'Y'
6274 );
6275 -- Check for group mark validations
6276 IF (l_start_qty <> l_qty) THEN
6277 x_return_status := lg_ret_sts_error;
6278 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6279 IF (l_debug = 1) THEN
6280 inv_log_util.trace('Group mark validations failed', 'INV_TXN_MANAGER_GRP', 9);
6281 END IF;
6282 RETURN;
6283 END IF; -- End of group mark validations
6284 IF (l_debug=1) THEN
6285 inv_log_util.trace('After call to inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
6286 inv_log_util.trace(' l_ret_number : ' || l_ret_number, 'INV_TXN_MANAGER_GRP', 9);
6287 END IF;
6288 IF (l_ret_number = 0) THEN -- Success from inv_serial_number_pub.validate_serials
6289 x_return_status := lg_ret_sts_success;
6290 IF (l_debug = 1) THEN
6291 inv_log_util.trace('Call to inv_serial_number_pub.validate_serials was successful','INV_TXN_MANAGER_GRP', 9);
6292 END IF;
6293 ELSIF (l_ret_number = 1) THEN
6294 x_return_status := lg_ret_sts_error;
6295 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6296 IF (l_debug = 1) THEN
6297 inv_log_util.trace('Error from inv_serial_number_pub.validate_serials'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
6298 END IF;
6299 RETURN;
6300 END IF;
6301 END LOOP; -- End of cur_MSNI cursor
6302
6303 ELSE -- Failure from inv_lot_api_pub.create_inv_lot
6304 x_return_status := lg_ret_sts_error;
6305 loaderrmsg('INV_INT_LOTCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6306 IF (l_debug = 1) THEN
6307 inv_log_util.trace('Error from inv_lot_api_pub.create_inv_lot'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
6308 END IF;
6309 RETURN;
6310 END IF;
6311
6312 END LOOP; -- End of cur_MTLI
6313
6314 -- Check for only serial controlled item
6315 ELSIF (p_lotctrl = 1 AND p_serctrl IN (2,5)) THEN
6316
6317 -- Looping through every serials in the table
6318 FOR rec_MSNI IN cur_MSNI(p_interface_id)
6319 LOOP
6320
6321 l_qty := NULL;
6322 l_end_ser := NVL(rec_MSNI.TO_SERIAL_NUMBER,rec_MSNI.FM_SERIAL_NUMBER);
6323 l_start_qty := inv_serial_number_pub.get_serial_diff(rec_MSNI.FM_SERIAL_NUMBER,l_end_ser);
6324 IF (l_debug=1) THEN
6325 inv_log_util.trace('About to call inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
6326 END IF;
6327 l_ret_number := inv_serial_number_pub.validate_serials(
6328 p_org_id => p_org_id
6329 , p_item_id => p_item_id
6330 , p_qty => l_qty
6331 , p_rev => p_rev
6332 , p_lot => null
6333 , p_start_ser => rec_MSNI.FM_SERIAL_NUMBER
6334 , p_trx_src_id => p_trx_src_id
6335 , p_trx_action_id => p_trx_action_id
6336 , p_subinventory_code => p_subinventory_code
6337 , p_locator_id => p_locator_id
6338 , p_issue_receipt => 'R'
6339 , x_end_ser => l_end_ser
6340 , x_proc_msg => x_proc_msg
6341 , p_check_for_grp_mark_id => 'Y'
6342 );
6343 --Check for Group mark validations
6344 IF (l_start_qty <> l_qty) THEN
6345 x_return_status := lg_ret_sts_error;
6346 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6347 IF (l_debug = 1) THEN
6348 inv_log_util.trace('Group mark validations failed', 'INV_TXN_MANAGER_GRP', 9);
6349 END IF;
6350 RETURN;
6351 END IF; -- End of check for group mark validations
6352 IF (l_debug=1) THEN
6353 inv_log_util.trace('After call to inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
6354 inv_log_util.trace(' l_ret_number : ' || l_ret_number, 'INV_TXN_MANAGER_GRP', 9);
6355 END IF;
6356
6357 IF (l_ret_number = 0) THEN -- Success from inv_serial_number_pub.validate_serials
6358 x_return_status := lg_ret_sts_success;
6359 IF (l_debug = 1) THEN
6360 inv_log_util.trace('Call to inv_serial_number_pub.validate_serials was successful','INV_TXN_MANAGER_GRP', 9);
6361 END IF;
6362 ELSIF (l_ret_number = 1) THEN -- Failure from inv_serial_number_pub.validate_serials
6363 x_return_status := lg_ret_sts_error;
6364 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6365 IF (l_debug = 1) THEN
6366 inv_log_util.trace('Error from inv_serial_number_pub.validate_serials'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
6367 END IF;
6368 RETURN;
6369 END IF;
6370
6371 END LOOP; -- End of cur_MSNI
6372 END IF;
6373 EXCEPTION
6374 WHEN OTHERS THEN
6375 x_return_status := lg_ret_sts_unexp_error;
6376 IF (l_debug = 1) THEN
6377 inv_log_util.trace(' x_return_status : ' || x_return_status, 'INV_TXN_MANAGER_GRP', 9);
6378 inv_log_util.trace('Exception in validate_lot_serial_for_rcpt '|| x_proc_msg || ':' || sqlerrm, 'INV_TXN_MANAGER_GRP', 9);
6379 END IF;
6380 loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6381
6382 END validate_lot_serial_for_rcpt;
6383
6384 /******************************************************************
6385 *
6386 * validate_lines() : Outer
6387 *
6388 ******************************************************************/
6389 PROCEDURE validate_lines(p_header_id NUMBER,
6390 p_commit VARCHAR2 := fnd_api.g_false ,
6391 p_validation_level NUMBER := fnd_api.g_valid_level_full ,
6392 x_return_status OUT NOCOPY VARCHAR2,
6393 x_msg_count OUT NOCOPY NUMBER,
6394 x_msg_data OUT NOCOPY VARCHAR2,
6395 p_userid NUMBER,
6396 p_loginid NUMBER,
6397 p_applid NUMBER,
6398 p_progid NUMBER)
6399 AS
6400
6401 CURSOR AA1 IS
6402 SELECT
6403 TRANSACTION_INTERFACE_ID,
6404 TRANSACTION_HEADER_ID,
6405 REQUEST_ID,
6406 INVENTORY_ITEM_ID,
6407 ORGANIZATION_ID,
6408 SUBINVENTORY_CODE,
6409 TRANSFER_ORGANIZATION,
6410 TRANSFER_SUBINVENTORY,
6411 TRANSACTION_UOM,
6412 TRANSACTION_DATE,
6413 TRANSACTION_QUANTITY,
6414 LOCATOR_ID,
6415 TRANSFER_LOCATOR,
6416 TRANSACTION_SOURCE_ID,
6417 TRANSACTION_SOURCE_TYPE_ID,
6418 TRANSACTION_ACTION_ID,
6419 TRANSACTION_TYPE_ID,
6420 DISTRIBUTION_ACCOUNT_ID,
6421 NVL(SHIPPABLE_FLAG,'Y'),
6422 ROWID,
6423 NEW_AVERAGE_COST,
6424 VALUE_CHANGE,
6425 PERCENTAGE_CHANGE,
6426 MATERIAL_ACCOUNT,
6427 MATERIAL_OVERHEAD_ACCOUNT,
6428 RESOURCE_ACCOUNT,
6429 OUTSIDE_PROCESSING_ACCOUNT,
6430 OVERHEAD_ACCOUNT,
6431 REQUISITION_LINE_ID,
6432 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
6433 END_ITEM_UNIT_NUMBER,
6434 SCHEDULED_PAYBACK_DATE, /* Borrow Payback */
6435 REVISION, /* Borrow Payback */
6436 ORG_COST_GROUP_ID, /* PCST */
6437 COST_TYPE_ID, /* PCST */
6438 PRIMARY_QUANTITY,
6439 SOURCE_LINE_ID,
6440 PROCESS_FLAG,
6441 TRANSACTION_SOURCE_NAME,
6442 TRX_SOURCE_DELIVERY_ID,
6443 TRX_SOURCE_LINE_ID,
6444 PARENT_ID,
6445 TRANSACTION_BATCH_ID,
6446 TRANSACTION_BATCH_SEQ,
6447 -- INVCONV start fabdi
6448 SECONDARY_TRANSACTION_QUANTITY,
6449 SECONDARY_UOM_CODE
6450 -- INVCONV end fabdi
6451 ,SHIP_TO_LOCATION_ID --eIB Build; Bug# 4348541
6452 , transfer_price -- OPM INVCONV umoogala Bug 4432078
6453 ,wip_entity_type -- Pawan 11th july added
6454 /*Bug:5392366. Added the following two columns. */
6455 ,completion_transaction_id
6456 ,move_transaction_id
6457 FROM MTL_TRANSACTIONS_INTERFACE
6458 WHERE TRANSACTION_HEADER_ID = p_header_id
6459 AND PROCESS_FLAG = 1
6460 ORDER BY ORGANIZATION_ID,INVENTORY_ITEM_ID,REVISION,
6461 SUBINVENTORY_CODE,LOCATOR_ID;
6462
6463
6464 line_vldn_error_flag VARCHAR(1);
6465 l_Line_Rec_Type inv_txn_manager_pub.Line_Rec_Type;
6466 l_count number;
6467
6468 BEGIN
6469 if ( l_debug is null) then
6470 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6471 end if;
6472
6473 fnd_flex_key_api.set_session_mode('seed_data');
6474
6475 FOR l_Line_rec_Type IN AA1 LOOP
6476 BEGIN
6477 savepoint line_validation_svpt;
6478 validate_lines(p_line_Rec_Type => l_Line_rec_type,
6479 p_commit => p_commit,
6480 p_validation_level => p_validation_level,
6481 p_error_flag => line_vldn_error_flag,
6482 p_userid => p_userid,
6483 p_loginid => p_loginid,
6484 p_applid => p_applid,
6485 p_progid => p_progid);
6486 IF (line_vldn_error_flag = 'Y') then
6487 IF (l_debug = 1) THEN
6488 inv_log_util.trace('Error in Line Validatin', 'INV_TXN_MANAGER_GRP', 9);
6489 END IF;
6490 END IF;
6491
6492 END;
6493 END LOOP;
6494
6495 x_return_status := FND_API.G_RET_STS_SUCCESS;
6496
6497 EXCEPTION
6498 WHEN OTHERS THEN
6499 IF (l_debug = 1) THEN
6500 inv_log_util.trace('Error in outer validate_lines'||substr(sqlerrm,1,240),
6501 'INV_TXN_MANAGER_GRP',1);
6502 END IF;
6503 x_return_status := FND_API.G_RET_STS_ERROR;
6504
6505 END validate_lines;
6506
6507
6508 /******************************************************************
6509 *
6510 * validate_lines()
6511 * Validate one transaction record in MTL_TRANSACTIONS_INTERFACE
6512 *
6513 ******************************************************************/
6514 PROCEDURE validate_lines(p_line_Rec_Type inv_txn_manager_pub.line_rec_type,
6515 p_commit VARCHAR2 := fnd_api.g_false ,
6516 p_validation_level NUMBER := fnd_api.g_valid_level_full ,
6517 p_error_flag OUT NOCOPY VARCHAR2,
6518 p_userid NUMBER,
6519 p_loginid NUMBER,
6520 p_applid NUMBER,
6521 p_progid NUMBER)
6522 AS
6523
6524 l_shlfdays NUMBER;
6525 l_count NUMBER;
6526 l_header_id NUMBER;
6527 l_intid NUMBER;
6528 l_itemid NUMBER;
6529 l_orgid NUMBER;
6530 l_xorgid NUMBER;
6531 l_locid NUMBER;
6532 l_loci NUMBER;
6533 l_prdid NUMBER;
6534 l_xlocid NUMBER;
6535 l_acttype NUMBER;
6536 l_trxtype NUMBER;
6537 l_srctypeid NUMBER;
6538 l_error_num NUMBER;
6539 l_mat_accnt NUMBER;
6540 l_mat_ovhd_accnt NUMBER;
6541 l_res_accnt NUMBER;
6542 l_osp_accnt NUMBER;
6543 l_ovhd_accnt NUMBER;
6544 l_srctype NUMBER;
6545 l_req_line_id NUMBER;
6546 l_primary_cost_method NUMBER;
6547 l_acct NUMBER;
6548 l_trxsrc VARCHAR(40);
6549 l_cost_type_id NUMBER;
6550 l_org_cost_group_id NUMBER; /* PCST (Periodic Cost Update) */
6551 l_default_locator_status NUMBER; /* Status Control */
6552 l_overcomp_txn_qty NUMBER;
6553 l_overcomp_primary_qty NUMBER :=0; /* Overcompletion Transactions */
6554 tev_flow_schedule NUMBER := 0;
6555 tev_scheduled_flag NUMBER := 1; --Bug #6449667, changing the default value from 0 to 1.
6556 l_trxqty NUMBER;
6557 l_priqty NUMBER;
6558 l_new_avg_cst NUMBER;
6559 l_val_chng NUMBER;
6560 l_per_chng NUMBER;
6561 l_rowid VARCHAR2(20);
6562 l_subinv VARCHAR2(11);
6563 l_xsubinv VARCHAR2(11);
6564 l_trxdate DATE;
6565 -- l_trxdate VARCHAR2(22);
6566 l_scheduled_payback_date VARCHAR2(22);
6567 l_trxuom VARCHAR2(4);
6568 l_priuom VARCHAR2(4);
6569 l_unit_number VARCHAR2(31);
6570 l_itmshpflag VARCHAR2(1);
6571 l_revision VARCHAR2(3); /* Borrow Payback */
6572 x_return_status VARCHAR2(1);
6573 l_locctrl NUMBER;
6574 l_xlocctrl NUMBER;
6575 l_lotctrl NUMBER;
6576 l_serctrl NUMBER;
6577 l_resloc NUMBER;
6578 l_xlotctrl NUMBER;
6579 l_xserctrl NUMBER;
6580 l_xresloc NUMBER;
6581 l_engitemflag NUMBER;
6582 l_lotuniq NUMBER;
6583 l_shlfcode VARCHAR2(40);
6584 l_avg_cost_update NUMBER;
6585 l_flow_schedule_children NUMBER;
6586 l_exp_type_required NUMBER :=1;
6587 l_tnum NUMBER;
6588 l_cst_temp NUMBER;
6589 l_reqstid NUMBER;
6590
6591 l_result NUMBER;
6592 l_lcm_enabled_org mtl_parameters.lcm_enabled_flag%type := 'N';
6593
6594
6595 /* WMS installed -- Installed:1, not installed: 0 */
6596 wms_installed NUMBER;
6597
6598 l_wms_installed boolean;
6599 l_return_status VARCHAR2(300);
6600 l_msg_count NUMBER;
6601 l_msg_data VARCHAR2(300);
6602 l_validate_full BOOLEAN :=TRUE;
6603
6604 l_cg_org NUMBER := NULL; -- Bug 6356567 Starting
6605 l_cost_group_id NUMBER := NULL;
6606 l_xfer_cost_group_id NUMBER := NULL;
6607 l_temp_cost_group_id NUMBER := NULL;
6608 l_temp_xfer_cost_group_id NUMBER := NULL; -- Bug 6356567 Ending
6609
6610 -- INVCONV fabdi start
6611 l_secondary_qty NUMBER;
6612 l_secondary_UOM VARCHAR2(3);
6613 -- INVCONV fabdi end
6614
6615 -- OPM INVCONV umoogala For Process-Discrete Enh.
6616 -- Bug 4432078
6617 l_pd_xfer_ind BINARY_INTEGER;
6618 l_transfer_price NUMBER;
6619 l_transfer_price_priuom NUMBER;
6620 l_from_ou BINARY_INTEGER;
6621 l_to_ou BINARY_INTEGER;
6622 /* l_order_line_id BINARY_INTEGER; commented for bug 10174613 */
6623 l_order_line_id NUMBER;
6624 l_xfer_type VARCHAR2(6);
6625 l_xfer_source VARCHAR2(6);
6626
6627 x_currency_code VARCHAR2(31);
6628 x_incr_transfer_price NUMBER;
6629 x_incr_currency_code VARCHAR2(31);
6630 x_msg_data VARCHAR2(3000);
6631 x_msg_count NUMBER;
6632
6633 l_process_enabled_flag_from VARCHAR2(1);
6634 l_process_enabled_flag_to VARCHAR2(1);
6635
6636 l_ic_invoicing_enabled NUMBER;
6637 -- End OPM INVCONV umoogala
6638
6639 l_is_wsm_enabled VARCHAR2(1);
6640 /*Bug#5205455. Added the below 2 variables*/
6641 l_fob_point NUMBER;
6642 l_validate_xfer_org BOOLEAN := FALSE;
6643
6644 --hjogleka
6645 --Bug #5497519
6646 l_lot_ser_qty NUMBER;
6647 l_account varchar2(100); /* Bug 6271039 */
6648
6649 --Start: Fix for Bug# 7323175
6650 l_project_ref_enabled NUMBER := 0;
6651 l_plocid NUMBER;
6652 l_xplocid NUMBER;
6653 --End: Fix for Bug# 7323175
6654
6655 -- Altered the changes made in the bug 7323175 for the bug 12922489
6656 v_result BOOLEAN := TRUE;
6657 v_mode VARCHAR2(10) := 'ANY';
6658 v_required_flag VARCHAR2(3) := 'N';
6659 v_project_id NUMBER := NULL;
6660 v_task_id NUMBER := NULL;
6661 -- Altered the changes made in the bug 7323175 for the bug 12922489
6662
6663 --serial tagging
6664 serial_tagged NUMBER := 0;
6665
6666 --bug#13527319
6667 l_operation_seq_num number;
6668 l_wip_supply_type number;
6669
6670 BEGIN
6671
6672 if (l_debug is null) then
6673 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6674 end if;
6675 IF (l_debug = 1) THEN
6676 inv_log_util.trace('in Validate_lines ....','INV_TXN_MANAGER_GRP', 9);
6677 END IF;
6678
6679 l_count := 0;
6680
6681 /*----------------------------------------
6682 | Checking whether WMS is installed
6683 +-----------------------------------------*/
6684 l_wms_installed := wms_install.check_install
6685 (x_return_status => l_return_status,
6686 x_msg_count => l_msg_count,
6687 x_msg_data => l_msg_data,
6688 p_organization_id => null );
6689
6690 IF l_wms_installed then
6691 wms_installed := 1;
6692 else
6693 wms_installed := 0;
6694 END IF;
6695
6696 /* ACP */
6697 l_avg_cost_update := 2;
6698
6699
6700 l_intid := p_line_Rec_Type.TRANSACTION_INTERFACE_ID;
6701 l_header_id:= p_line_Rec_Type.TRANSACTION_HEADER_ID;
6702 l_reqstid := p_line_Rec_Type.REQUEST_ID;
6703 l_itemid := p_line_Rec_Type.INVENTORY_ITEM_ID;
6704 l_orgid := p_line_Rec_Type.ORGANIZATION_ID;
6705 l_subinv := p_line_Rec_Type.SUBINVENTORY_CODE;
6706 l_xorgid := p_line_Rec_Type.TRANSFER_ORGANIZATION;
6707 l_xsubinv := p_line_Rec_Type.TRANSFER_SUBINVENTORY;
6708 l_trxuom := p_line_Rec_Type.TRANSACTION_UOM;
6709 l_trxdate := p_line_Rec_Type.TRANSACTION_DATE;
6710 l_trxqty := p_line_Rec_Type.TRANSACTION_QUANTITY;
6711 l_locid := p_line_Rec_Type.LOCATOR_ID;
6712 l_xlocid := p_line_Rec_Type.TRANSFER_LOCATOR;
6713 l_trxsrc := p_line_Rec_Type.TRANSACTION_SOURCE_ID;
6714 l_srctype := p_line_Rec_Type.TRANSACTION_SOURCE_TYPE_ID;
6715 l_acttype := p_line_Rec_Type.TRANSACTION_ACTION_ID;
6716 l_trxtype := p_line_Rec_Type.TRANSACTION_TYPE_ID;
6717 l_acct := p_line_Rec_Type.DISTRIBUTION_ACCOUNT_ID;
6718 l_itmshpflag := p_line_Rec_Type.SHIPPABLE_FLAG ;
6719 l_rowid := p_line_Rec_Type.ROWID;
6720 l_new_avg_cst := p_line_Rec_Type.NEW_AVERAGE_COST;
6721 l_val_chng := p_line_Rec_Type.VALUE_CHANGE;
6722 l_per_chng := p_line_Rec_Type.PERCENTAGE_CHANGE;
6723 l_mat_accnt := p_line_Rec_Type.MATERIAL_ACCOUNT;
6724 l_mat_ovhd_accnt := p_line_Rec_Type.MATERIAL_OVERHEAD_ACCOUNT;
6725 l_res_accnt := p_line_Rec_Type.RESOURCE_ACCOUNT;
6726 l_osp_accnt := p_line_Rec_Type.OUTSIDE_PROCESSING_ACCOUNT;
6727 l_ovhd_accnt := p_line_Rec_Type.OVERHEAD_ACCOUNT;
6728 l_req_line_id := p_line_Rec_Type.REQUISITION_LINE_ID;
6729 l_overcomp_txn_qty := p_line_Rec_Type.OVERCOMPLETION_TRANSACTION_QTY;
6730 l_unit_number := p_line_Rec_Type.END_ITEM_UNIT_NUMBER;
6731 l_scheduled_payback_date := p_line_Rec_Type.SCHEDULED_PAYBACK_DATE;
6732 l_revision := p_line_Rec_Type.REVISION ;
6733 l_org_cost_group_id := p_line_Rec_Type.ORG_COST_GROUP_ID;
6734 l_cost_type_id := p_line_Rec_Type.COST_TYPE_ID;
6735 l_secondary_qty := p_line_Rec_Type.SECONDARY_TRANSACTION_QUANTITY;
6736 l_secondary_uom := p_line_Rec_Type.SECONDARY_UOM_CODE;
6737 l_transfer_price := p_line_Rec_Type.TRANSFER_PRICE; -- INVCONV umoogala Bug 4432078
6738 l_order_line_id := p_line_Rec_Type.TRX_SOURCE_LINE_ID; -- INVCONV umoogala Bug 4432078
6739
6740 --bug#13527319 getting the op_seq and wip_supply information, we are to skip validation on phantom component
6741 --issue. the way to identify is wip_supply_type=6 and op_seq_num negative
6742 select nvl(operation_seq_num,1 ),nvl(wip_supply_type,1)
6743 into l_operation_seq_num, l_wip_supply_type
6744 from mtl_transactions_interface
6745 where ROWID = l_rowid;
6746 IF (l_debug = 1) THEN
6747 inv_log_util.trace('operation_seq_num '||l_operation_seq_num||' l_wip_supply_type '||l_wip_supply_type, 'INV_TXN_MANAGER_PUB', 9);
6748 END IF;
6749
6750 IF l_locid IS NOT NULL THEN
6751 l_loci := 1;
6752 ELSE
6753 l_loci := -1;
6754 END IF;
6755
6756 IF (l_debug = 1) THEN
6757 inv_log_util.trace('Before calling fnd_profile.put MFG_ORGANIZATION_ID','INV_TXN_MANAGER_PUB',9);
6758 END IF;
6759
6760 fnd_profile.put('MFG_ORGANIZATION_ID',l_orgid);
6761
6762 /**J-dev check we need to perform a full validation*/
6763 IF (l_debug = 1) THEN
6764 inv_log_util.trace('wip_constants.DMF_PATCHSET_LEVEL'||wip_constants.dmf_patchset_level,'INV_TXN_MANAGER_GRP', 9);
6765 inv_log_util.trace('wip_constants.DMF_PATCHSET_J_VALUE'||wip_constants.dmf_patchset_J_VALUE,'INV_TXN_MANAGER_GRP', 9);
6766 END IF;
6767
6768 IF (l_srctype = 5 AND wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE) THEN
6769 IF (p_validation_level <> fnd_api.g_valid_level_full) THEN
6770 l_validate_full := FALSE;
6771 /**implies this a WIP desktop transaction*/
6772 IF (l_debug = 1) THEN
6773 inv_log_util.trace('Val line:WIP desktop trx','INV_TXN_MANAGER_GRP', 9);
6774 END IF;
6775 ELSE
6776 IF (l_debug = 1) THEN
6777 inv_log_util.trace('Val line:WIP MTI trx','INV_TXN_MANAGER_GRP', 9);
6778 END IF;
6779 END IF;
6780 END IF;--J-dev
6781
6782 --serial tagging
6783 inv_serial_number_pub.is_serial_controlled(
6784 l_itemid,
6785 l_orgid,
6786 NULL,
6787 l_trxtype,
6788 l_srctype,
6789 l_acttype,
6790 l_serctrl,
6791 NULL,
6792 serial_tagged,
6793 l_return_status
6794 );
6795 IF l_return_status <> 'S' THEN
6796 serial_tagged := 1;
6797 END IF;
6798
6799
6800 --Begin Fix 2505534
6801
6802 IF (l_debug = 1) THEN
6803 inv_log_util.trace('Before calling setorgclientinfo with l_orgid '||l_orgid, 'INV_TXN_MANAGER_GRP', 9);
6804 END IF;
6805
6806 IF (NOT setorgclientinfo(l_orgid)) THEN
6807 RAISE fnd_api.g_exc_error;
6808 END IF;
6809
6810 IF (l_debug = 1) THEN
6811 inv_log_util.trace('After calling setorgclientinfo', 'INV_TXN_MANAGER_GRP',9);
6812 END IF;
6813
6814 /* load message to detect source project error */
6815 loaderrmsg('INV_PRJ_ERR','INV_PRJ_ERR');
6816
6817 IF (l_debug = 1) THEN
6818 inv_log_util.trace('After loaderrmsg INV_PRJ_ERR', 'INV_TXN_MANAGER_GRP',9);
6819 END IF;
6820
6821 /* validate source project id */
6822 IF (l_debug = 1) THEN
6823 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);
6824 inv_log_util.trace('#$l_rowid '||l_rowid, 'INV_TXN_MANAGER_GRP', 9);
6825 END IF;
6826
6827
6828 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
6829 SET LAST_UPDATE_DATE = SYSDATE,
6830 LAST_UPDATED_BY = p_userid,
6831 LAST_UPDATE_LOGIN = p_loginid,
6832 PROGRAM_UPDATE_DATE = SYSDATE,
6833 PROCESS_FLAG = 3,
6834 LOCK_FLAG = 2,
6835 ERROR_CODE = substrb(l_error_code,1,240),
6836 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
6837 WHERE ROWID = l_rowid
6838 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
6839 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
6840 AND TRANSACTION_ACTION_ID IN (1, 27 )
6841 AND PROCESS_FLAG = 1
6842 AND EXISTS (
6843 SELECT null
6844 FROM MTL_TRANSACTION_TYPES MTTY
6845 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
6846 AND MTTY.TYPE_CLASS = 1 )
6847 AND NOT EXISTS (
6848 SELECT null
6849 FROM pa_projects_expend_v prj1
6850 WHERE prj1.project_id = mti.source_project_id ) ;
6851
6852 if sql%notfound then
6853 IF (l_debug = 1) THEN
6854 inv_log_util.trace('Passed the source project Validation**', 'INV_TXN_MANAGER_GRP',9);
6855 END IF;
6856 else
6857 IF (l_debug = 1) THEN
6858 inv_log_util.trace('Failed the source project Validation**', 'INV_TXN_MANAGER_GRP',9);
6859 END IF;
6860 l_count := l_count + 1;
6861 RAISE fnd_api.g_exc_error;
6862 end if;
6863
6864 IF (l_debug = 1) THEN
6865 inv_log_util.trace('After update on MTI for INV_PRJ_ERR', 'INV_TXN_MANAGER_GRP',9);
6866 END IF;
6867
6868 /*
6869
6870 IF (SQL%FOUND) THEN
6871 l_count := l_count + 1;
6872 RAISE fnd_api.g_exc_error;
6873 END IF;
6874
6875 */
6876
6877 /*Fixe for bug#8819962
6878 Added validation for Negative transaction cost for
6879 issue and receipt transactions.
6880 */
6881
6882 IF (l_debug = 1) THEN
6883 inv_log_util.trace('Before loaderrmsg INV_UNIT_COST_NEG','INV_TXN_MANAGER_GRP',9);
6884 END IF;
6885
6886 /* validate Negative transaction cost */
6887
6888 loaderrmsg('INV_UNIT_COST_NEG','INV_UNIT_COST_NEG');
6889
6890 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
6891 SET LAST_UPDATE_DATE = SYSDATE,
6892 LAST_UPDATED_BY = p_userid,
6893 LAST_UPDATE_LOGIN = p_loginid,
6894 PROGRAM_UPDATE_DATE = SYSDATE,
6895 PROCESS_FLAG = 3,
6896 LOCK_FLAG = 2,
6897 ERROR_CODE = substrb(l_error_code,1,240),
6898 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
6899 WHERE ROWID = l_rowid
6900 AND TRANSACTION_ACTION_ID IN ( 1,27 )
6901 AND PROCESS_FLAG = 1
6902 AND TRANSACTION_COST <0
6903 and exists
6904 (
6905 SELECT organization_id
6906 FROM mtl_parameters
6907 WHERE organization_id = MTI.organization_id
6908 and NVL(process_enabled_flag, 'N') ='N'
6909 );
6910
6911 if sql%notfound then
6912 IF (l_debug = 1) THEN
6913 inv_log_util.trace('Passed the Negative Txn cost Validation**', 'INV_TXN_MANAGER_GRP',9);
6914 END IF;
6915 else
6916 IF (l_debug = 1) THEN
6917 inv_log_util.trace('Failed the Negative Txn cost Validation**', 'INV_TXN_MANAGER_GRP',9);
6918 END IF;
6919 l_count := l_count + 1;
6920 RAISE fnd_api.g_exc_error;
6921 end if;
6922
6923 IF (l_debug = 1) THEN
6924 inv_log_util.trace('After update on MTI for INV_UNIT_COST_NEG','INV_TXN_MANAGER_GRP',9);
6925 END IF;
6926
6927
6928 IF (l_debug = 1) THEN
6929 inv_log_util.trace('Before loaderrmsg INV_PAORG_ERR','INV_TXN_MANAGER_GRP',9);
6930 END IF;
6931
6932 /* validate expenditure org id */
6933
6934 loaderrmsg('INV_PAORG_ERR','INV_PAORG_ERR');
6935
6936 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
6937 SET LAST_UPDATE_DATE = SYSDATE,
6938 LAST_UPDATED_BY = p_userid,
6939 LAST_UPDATE_LOGIN = p_loginid,
6940 PROGRAM_UPDATE_DATE = SYSDATE,
6941 PROCESS_FLAG = 3,
6942 LOCK_FLAG = 2,
6943 ERROR_CODE = substrb(l_error_code,1,240),
6944 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
6945 WHERE ROWID = l_rowid
6946 AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
6947 (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
6948 AND TRANSACTION_ACTION_ID IN (1, 27 )
6949 AND PROCESS_FLAG = 1
6950 AND EXISTS (
6951 SELECT NULL
6952 FROM MTL_TRANSACTION_TYPES MTTY
6953 WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
6954 AND MTTY.TYPE_CLASS = 1 )
6955 AND NOT EXISTS (
6956 SELECT NULL
6957 FROM PA_ORGANIZATIONS_EXPEND_V POE
6958 WHERE POE.ORGANIZATION_ID = MTI.PA_EXPENDITURE_ORG_ID
6959 AND TRUNC(SYSDATE) BETWEEN POE.DATE_FROM
6960 AND NVL(POE.DATE_TO, TRUNC(SYSDATE)));
6961
6962 if sql%notfound then
6963 IF (l_debug = 1) THEN
6964 inv_log_util.trace('Passed the exp org Validation**', 'INV_TXN_MANAGER_GRP',9);
6965 END IF;
6966 else
6967 IF (l_debug = 1) THEN
6968 inv_log_util.trace('Failed the exp org Validation**', 'INV_TXN_MANAGER_GRP',9);
6969 END IF;
6970 l_count := l_count + 1;
6971 RAISE fnd_api.g_exc_error;
6972 end if;
6973
6974 IF (l_debug = 1) THEN
6975 inv_log_util.trace('After update on MTI for INV_PAORG_ERR','INV_TXN_MANAGER_GRP',9);
6976 END IF;
6977
6978 /*
6979 IF (SQL%ROWCOUNT > 0) THEN
6980 l_count := l_count + 1;
6981 RAISE fnd_api.g_exc_error;
6982 END IF;
6983 */
6984
6985 --End Fix 2505534
6986
6987 l_flow_schedule_children := 0;
6988
6989
6990 IF (l_acttype = 2) THEN
6991 l_xorgid := l_orgid;
6992 END IF;
6993
6994 IF ( ( l_srctype=INV_Globals.G_SourceType_SalesOrder OR
6995 l_srctype = INV_Globals.G_SourceType_Account OR
6996 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
6997 l_srctype = INV_Globals.G_SourceType_IntOrder)
6998 AND (l_trxsrc is NULL) ) THEN
6999 IF ( NOT getsrcid(l_trxsrc, l_srctype, l_orgid, l_rowid)) THEN
7000 FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
7001 l_error_code := FND_MESSAGE.get;
7002
7003 errupdate(l_rowid,null);
7004 --exit;
7005 RAISE fnd_api.g_exc_error;
7006 END IF;
7007 END IF;
7008
7009 IF l_itemid IS NULL THEN
7010 IF (NOT getitemid(l_itemid, l_orgid, l_rowid)) THEN
7011 FND_MESSAGE.set_name('INV', 'INV_INT_ITMSEGCODE');
7012 l_error_code := FND_MESSAGE.get;
7013
7014 errupdate(l_rowid,null);
7015 --exit;
7016 RAISE fnd_api.g_exc_error;
7017 END IF;
7018 END IF;
7019
7020 /* CFM Scrap Transactions */
7021 IF ((l_itmshpflag = 'N') OR l_acttype = 24 OR l_acttype = 30) THEN
7022 BEGIN
7023 SELECT PRIMARY_UOM_CODE,1,1,1,2
7024 INTO l_priuom,
7025 l_locctrl,
7026 l_lotctrl,
7027 l_serctrl,
7028 l_resloc
7029 FROM MTL_SYSTEM_ITEMS
7030 WHERE INVENTORY_ITEM_ID = l_itemid
7031 AND ORGANIZATION_ID = l_orgid;
7032
7033 /* Bug 12589617: For these transactions serial details are not
7034 * needed
7035 */
7036 IF (l_debug = 1) THEN
7037 inv_log_util.trace('setting the serial_tagged to 1 for Scrap transactions','INV_TXN_MANAGER_GRP',9);
7038 END IF;
7039
7040 serial_tagged := 1;
7041
7042 EXCEPTION
7043 WHEN NO_DATA_FOUND THEN
7044 loaderrmsg('INV_INT_ITMCODE','INV-No item record');
7045 errupdate(l_rowid,null);
7046 l_count := l_count + 1;
7047 --exit;
7048 RAISE fnd_api.g_exc_error;
7049 END;
7050
7051 ELSE
7052 BEGIN
7053 SELECT decode(P.STOCK_LOCATOR_CONTROL_CODE,4,
7054 decode(S.LOCATOR_TYPE,5,I.LOCATION_CONTROL_CODE,
7055 S.LOCATOR_TYPE),P.STOCK_LOCATOR_CONTROL_CODE),
7056 PRIMARY_UOM_CODE,
7057 LOT_CONTROL_CODE,
7058 SERIAL_NUMBER_CONTROL_CODE,
7059 RESTRICT_LOCATORS_CODE,
7060 SHELF_LIFE_CODE,
7061 SHELF_LIFE_DAYS,
7062 P.LOT_NUMBER_UNIQUENESS
7063 INTO l_locctrl ,
7064 l_priuom,
7065 l_lotctrl,
7066 l_serctrl,
7067 l_resloc,
7068 l_shlfcode,
7069 l_shlfdays,
7070 l_lotuniq
7071 FROM MTL_PARAMETERS P,
7072 MTL_SECONDARY_INVENTORIES S,
7073 MTL_SYSTEM_ITEMS I
7074 WHERE I.INVENTORY_ITEM_ID = l_itemid
7075 AND S.SECONDARY_INVENTORY_NAME = l_subinv
7076 AND P.ORGANIZATION_ID = l_orgid
7077 AND I.ORGANIZATION_ID = S.ORGANIZATION_ID
7078 AND P.ORGANIZATION_ID = S.ORGANIZATION_ID
7079 AND P.ORGANIZATION_ID = I.ORGANIZATION_ID;
7080 EXCEPTION
7081 WHEN NO_DATA_FOUND THEN
7082 loaderrmsg('INV_INT_ITMCODE','INV-No item record');
7083 errupdate(l_rowid,null);
7084 l_count := l_count + 1;
7085 --exit;
7086 RAISE fnd_api.g_exc_error;
7087 END;
7088 END IF;
7089
7090
7091 IF ((l_locctrl = 1) OR l_acttype = 24) THEN
7092 l_loci := -1;
7093 l_locid := NULL; --Added for bug 3703053
7094 END IF;
7095 /*For Bug#5044059, added the following code to read the profilele value
7096 'INV_CREATE_LOC_AT' that indicates whether locators should be created
7097 in autonomous mode or not*/
7098 IF (g_create_loc_at is null) THEN
7099 SELECT Nvl(FND_PROFILE.Value('INV_CREATE_LOC_AT'), 2)
7100 INTO g_create_loc_at
7101 FROM DUAL;
7102 END IF;
7103
7104 IF (l_debug = 1) THEN
7105 inv_log_util.trace('g_create_loc_at : '||g_create_loc_at, 'INV_TXN_MANAGER_GRP', 9);
7106 END IF;
7107
7108
7109 IF ((l_loci = -1) AND (l_locctrl <> 1 AND l_acttype <> 24)) THEN
7110 IF (l_resloc = 1) THEN
7111 l_locctrl := 2;
7112 END IF;
7113 IF ( NOT getlocid(l_locid, l_orgid, l_subinv, l_rowid, l_locctrl)) THEN
7114 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
7115 l_error_exp := FND_MESSAGE.get; --bug6679112, error_code=>error_exp
7116 errupdate(l_rowid,null);
7117 --exit;
7118 RAISE fnd_api.g_exc_error;
7119 END IF;
7120
7121 /* get the default locator status */
7122 IF l_wms_installed THEN
7123 l_default_locator_status :=INV_MATERIAL_STATUS_PKG.get_default_locator_status(
7124 l_orgid, l_subinv);
7125 ELSE
7126 l_default_locator_status := 1;
7127 END IF;
7128
7129 /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
7130 update Locators in autonomous mode*/
7131 IF (g_create_loc_at = 1) THEN
7132 update_mil( p_userid
7133 , p_loginid
7134 , p_applid
7135 , p_progid
7136 , l_reqstid
7137 , l_subinv
7138 , l_default_locator_status
7139 , l_orgid
7140 , l_locid);
7141 /* Added one more parameter l_plocid for Bug# 7323175 to update_mil() for the physical locator */
7142
7143 ELSE
7144 UPDATE MTL_ITEM_LOCATIONS
7145 SET LAST_UPDATE_DATE = SYSDATE,
7146 LAST_UPDATED_BY = p_userid,
7147 LAST_UPDATE_LOGIN = p_loginid,
7148 PROGRAM_APPLICATION_ID = p_applid,
7149 PROGRAM_ID = p_progid,
7150 PROGRAM_UPDATE_DATE = SYSDATE,
7151 REQUEST_ID = l_reqstid,
7152 SUBINVENTORY_CODE = l_subinv,
7153 STATUS_ID = l_default_locator_status
7154 /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
7155 physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
7156 p_plocid would be null */
7157 --PHYSICAL_LOCATION_ID = l_plocid
7158 /* End: Fix for Bug# 7323175 */
7159 WHERE ORGANIZATION_ID = l_orgid
7160 /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
7161 AND INVENTORY_LOCATION_ID = l_locid
7162 --AND INVENTORY_LOCATION_ID IN (l_locid,l_plocid)
7163 /* End: Fix for Bug# 7323175 */
7164 AND SUBINVENTORY_CODE is NULL;
7165
7166 END IF;
7167
7168 IF l_locid = -2 THEN
7169 l_loci := -1;
7170 END IF;
7171
7172 BEGIN
7173 SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
7174 INTO l_project_ref_enabled
7175 FROM MTL_PARAMETERS
7176 WHERE ORGANIZATION_ID = l_orgid ;
7177 EXCEPTION
7178 WHEN NO_DATA_FOUND THEN
7179 l_project_ref_enabled := 0;
7180 END;
7181
7182 IF l_project_ref_enabled = 1 THEN
7183
7184 v_result := inv_projectlocator_pub.check_project_references(
7185 arg_organization_id => l_orgid
7186 , arg_locator_id => l_locid
7187 , arg_validation_mode => v_mode
7188 , arg_required_flag => v_required_flag
7189 , arg_project_id => v_project_id
7190 , arg_task_id => v_task_id
7191 );
7192
7193 IF (v_result = FALSE) THEN
7194 l_error_exp := FND_MESSAGE.get;
7195 FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
7196 l_error_code := FND_MESSAGE.get;
7197 END IF;
7198
7199 END IF;
7200
7201 END IF;
7202
7203 /*------------------------------------------------------------------------+
7204 | Now check whether locator is valid under project
7205 | mfg. constraints. Validate newly created locator ids and
7206 | ids which are populated into the table.
7207 +------------------------------------------------------------------------*/
7208
7209 -- Bug #6721912, fetching FLOW_SCHEDULE, SCHEDULED_FLAG from MTI
7210 -- So that validate_loc_for_project is called with right parameters
7211 -- In future this select statement should be merged in cursor AA1.
7212 /*------------------------------------------------------+
7213 | get flow schedule control variables
7214 +------------------------------------------------------*/
7215 IF l_srctype = 5 THEN
7216 BEGIN
7217 SELECT DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y', 1, 0), NVL(SCHEDULED_FLAG, 0)
7218 INTO tev_flow_schedule, tev_scheduled_flag
7219 FROM MTL_TRANSACTIONS_INTERFACE
7220 WHERE ROWID = l_rowid;
7221 EXCEPTION
7222 WHEN NO_DATA_FOUND THEN
7223 tev_flow_schedule := 0;
7224 tev_scheduled_flag := 0;
7225 END;
7226
7227 IF (l_debug = 1) THEN
7228 inv_log_util.trace('flow_schedule = '|| tev_flow_schedule || ', scheduled_flag = ' || tev_scheduled_flag,'INV_TXN_MANAGER_GRP', 9);
7229 END IF;
7230 END IF;
7231
7232
7233 IF ( l_loci <> -1 AND (l_locctrl <>1 AND l_acttype <>24) ) THEN
7234 IF ( NOT validate_loc_for_project(l_locid, l_orgid, l_srctype,
7235 l_acttype, l_trxsrc, tev_flow_schedule, tev_scheduled_flag) ) THEN
7236
7237 l_error_exp := FND_MESSAGE.get;
7238
7239 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
7240 l_error_code := FND_MESSAGE.get;
7241
7242 errupdate(l_rowid,null);
7243 l_count := l_count + 1;
7244 --exit;
7245 RAISE fnd_api.g_exc_error;
7246 END IF;
7247
7248 END IF;
7249
7250 IF ((l_acttype = 2) OR (l_acttype=3)) THEN
7251 IF (l_xsubinv IS NULL) THEN
7252 IF (l_srctype = 8) THEN
7253 BEGIN
7254 SELECT SUBINVENTORY_CODE
7255 INTO l_xsubinv
7256 FROM MTL_ITEM_SUB_DEFAULTS
7257 WHERE INVENTORY_ITEM_ID = l_itemid
7258 AND ORGANIZATION_ID = l_xorgid
7259 AND DEFAULT_TYPE = 2;
7260 EXCEPTION
7261 WHEN NO_DATA_FOUND THEN
7262 loaderrmsg('INV_INT_XSUBCODE','INV_DEFAULT_SUB');
7263 errupdate(l_rowid,null);
7264 l_count := l_count + 1;
7265 --exit;
7266 RAISE fnd_api.g_exc_error;
7267 END;
7268 ELSE
7269 loaderrmsg('INV_INT_XSUBCODE','INV_INT_XSUBEXP');
7270 errupdate(l_rowid,null);
7271 l_count := l_count + 1;
7272 --exit;
7273 RAISE fnd_api.g_exc_error;
7274 END IF;
7275 END IF;
7276
7277
7278 BEGIN
7279 SELECT decode(P.STOCK_LOCATOR_CONTROL_CODE,4,
7280 decode(S.LOCATOR_TYPE,5,I.LOCATION_CONTROL_CODE,
7281 S.LOCATOR_TYPE),P.STOCK_LOCATOR_CONTROL_CODE),
7282 LOT_CONTROL_CODE,
7283 SERIAL_NUMBER_CONTROL_CODE,
7284 RESTRICT_LOCATORS_CODE
7285 INTO l_xlocctrl,
7286 l_xlotctrl,
7287 l_xserctrl,
7288 l_xresloc
7289 FROM MTL_PARAMETERS P,
7290 MTL_SECONDARY_INVENTORIES S,
7291 MTL_SYSTEM_ITEMS I
7292 WHERE I.INVENTORY_ITEM_ID = l_itemid
7293 AND S.SECONDARY_INVENTORY_NAME = l_xsubinv
7294 AND P.ORGANIZATION_ID = l_xorgid
7295 AND I.ORGANIZATION_ID = S.ORGANIZATION_ID
7296 AND P.ORGANIZATION_ID = S.ORGANIZATION_ID
7297 AND P.ORGANIZATION_ID = I.ORGANIZATION_ID;
7298
7299 EXCEPTION
7300 WHEN NO_DATA_FOUND THEN
7301 loaderrmsg('INV_INT_ITMCODE','INV-No item record');
7302 errupdate(l_rowid,null);
7303 l_count := l_count + 1;
7304 --exit;
7305 RAISE fnd_api.g_exc_error;
7306 END;
7307
7308 --IF (l_xlocctrl IS NULL) THEN bug2460745
7309
7310 /* Bug #2493941 - Call validation logic for destination locator
7311 * (getxlocid) only when locator control code != 1 and xferlocid is NULL
7312 */
7313 -- Begin changes for bug 3703053
7314 IF l_xlocctrl = 1 THEN
7315 l_xlocid := NULL;
7316 END IF;
7317 -- End changes for bug 3703053
7318 IF ((l_xlocctrl <> 1) AND (l_xlocid IS NULL)) THEN
7319 IF (l_xresloc = 1) THEN
7320 l_xlocctrl := 2;
7321 END IF;
7322
7323 IF (l_srctype = 8) THEN
7324 BEGIN
7325 SELECT LOCATOR_ID
7326 INTO l_xlocid
7327 FROM MTL_ITEM_LOC_DEFAULTS MTLD,
7328 MTL_ITEM_LOCATIONS MIL
7329 WHERE MTLD.LOCATOR_ID=MIL.INVENTORY_LOCATION_ID
7330 AND MTLD.ORGANIZATION_ID=MIL.ORGANIZATION_ID
7331 AND MTLD.INVENTORY_ITEM_ID = l_itemid
7332 AND MTLD.ORGANIZATION_ID = l_xorgid
7333 AND MTLD.SUBINVENTORY_CODE = l_xsubinv
7334 AND MTLD.DEFAULT_TYPE = 2
7335 AND NVL(MIL.DISABLE_DATE,SYSDATE+1) > SYSDATE;
7336
7337 EXCEPTION
7338 WHEN NO_DATA_FOUND THEN
7339 loaderrmsg('INV_INT_XLOCCODE','INV_DEFAULT_LOC');
7340 errupdate(l_rowid,null);
7341 l_count := l_count + 1;
7342 --exit;
7343 RAISE fnd_api.g_exc_error;
7344 END;
7345
7346 /* For srctype = 8 i.e internal order, the below code is added to append
7347 project and task from the requisition to a locator that is selected
7348 from locator defaults. If the transfer bet orgs is 'direct', the shipment
7349 transaction itself creates the recipt transaction and while doing so
7350 it picks up the default locator from the locator defaults.
7351 */
7352 IF (l_req_line_id IS NOT NULL) THEN
7353 INV_PROJECT.Get_project_loc_for_prj_Req(
7354 x_return_status,
7355 l_xlocid,
7356 l_xorgid,
7357 l_req_line_id);
7358
7359 IF (x_return_status <> 'S') THEN
7360 l_error_exp := FND_MESSAGE.get;
7361 FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
7362 l_error_code := FND_MESSAGE.get;
7363
7364 errupdate(l_rowid,null);
7365 l_count := l_count + 1;
7366 --exit;
7367 RAISE fnd_api.g_exc_error;
7368 END IF;
7369 END IF;
7370 ELSE
7371 -- Bug 5011566 setting transfer org as org context
7372 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) THEN
7373 IF (NOT setorgclientinfo(l_xorgid)) THEN
7374 RAISE fnd_api.g_exc_error;
7375 END IF;
7376 fnd_profile.put('MFG_ORGANIZATION_ID',l_xorgid);
7377 END IF;
7378
7379 IF (NOT getxlocid(l_xlocid, l_xorgid, l_xsubinv, l_rowid,
7380 l_xlocctrl)) THEN
7381 FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
7382 l_error_code := FND_MESSAGE.get;
7383 --exit;
7384 RAISE fnd_api.g_exc_error;
7385 END IF;
7386
7387 /* get the default locator status */
7388 IF l_wms_installed THEN
7389 l_default_locator_status :=INV_MATERIAL_STATUS_PKG.get_default_locator_status(
7390 l_xorgid, l_xsubinv);
7391 ELSE
7392 l_default_locator_status := 1;
7393 END IF;
7394
7395
7396 /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
7397 update Locators in autonomous mode*/
7398 IF (g_create_loc_at = 1) THEN
7399 update_mil( p_userid
7400 , p_loginid
7401 , p_applid
7402 , p_progid
7403 , l_reqstid
7404 , l_xsubinv
7405 , l_default_locator_status
7406 , l_xorgid
7407 , l_xlocid);
7408 /* Addded a parameter l_xplocid for Bug# 7323175 in update_mil */
7409 ELSE
7410 UPDATE MTL_ITEM_LOCATIONS
7411 SET LAST_UPDATE_DATE = SYSDATE,
7412 LAST_UPDATED_BY = p_userid,
7413 LAST_UPDATE_LOGIN = p_loginid,
7414 PROGRAM_APPLICATION_ID = p_applid,
7415 PROGRAM_ID = p_progid,
7416 PROGRAM_UPDATE_DATE = SYSDATE,
7417 REQUEST_ID = l_reqstid,
7418 SUBINVENTORY_CODE = l_xsubinv,
7419 STATUS_ID = l_default_locator_status
7420 /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
7421 physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
7422 l_xplocid would be null */
7423 --PHYSICAL_LOCATION_ID = l_xplocid
7424 /* End: Fix for Bug# 7323175 */
7425 WHERE ORGANIZATION_ID = l_xorgid
7426 /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
7427 AND INVENTORY_LOCATION_ID = l_xlocid
7428 --AND INVENTORY_LOCATION_ID IN (l_xlocid,l_xplocid)
7429 /* End: Fix for Bug# 7323175 */
7430 AND SUBINVENTORY_CODE is NULL;
7431 END IF;
7432
7433 BEGIN
7434 SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
7435 INTO l_project_ref_enabled
7436 FROM MTL_PARAMETERS
7437 WHERE ORGANIZATION_ID = l_xorgid ;
7438 EXCEPTION
7439 WHEN NO_DATA_FOUND THEN
7440 l_project_ref_enabled := 0;
7441 END;
7442
7443 IF l_project_ref_enabled = 1 THEN
7444 v_result := inv_projectlocator_pub.check_project_references(
7445 arg_organization_id => l_xorgid
7446 , arg_locator_id => l_xlocid
7447 , arg_validation_mode => v_mode
7448 , arg_required_flag => v_required_flag
7449 , arg_project_id => v_project_id
7450 , arg_task_id => v_task_id
7451 );
7452 IF (v_result = FALSE) THEN
7453 l_error_exp := FND_MESSAGE.get;
7454 FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
7455 l_error_code := FND_MESSAGE.get;
7456 END IF;
7457
7458 END IF;
7459 -- Bug 5011566 re-setting org as org context
7460 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) then
7461 IF (NOT setorgclientinfo(l_orgid)) THEN
7462 RAISE fnd_api.g_exc_error;
7463 END IF;
7464 fnd_profile.put('MFG_ORGANIZATION_ID',l_orgid);
7465 END IF;
7466 END IF;
7467 END IF;
7468 END IF;
7469
7470 /*------------------------------------------------------------------------+
7471 | Now check whether locator is valid under project
7472 | mfg. constraints. Validate newly created locator ids and
7473 | ids which are populated into the table.
7474 +------------------------------------------------------------------------*/
7475 IF ( (l_xlocid IS NOT NULL) AND (l_xlocctrl <> 1) AND (l_acttype = 2 OR l_acttype = 3)) THEN
7476
7477 -- Begin fix of bug 15931430
7478 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) THEN
7479 IF (l_debug = 1) THEN
7480 inv_log_util.trace('re-setting org context, before calling setorgclientinfo with l_orgid '||l_orgid, 'INV_TXN_MANAGER_GRP', 9);
7481 END IF;
7482
7483 IF (NOT setorgclientinfo(l_xorgid)) THEN
7484 RAISE fnd_api.g_exc_error;
7485 END IF;
7486 fnd_profile.put('MFG_ORGANIZATION_ID',l_xorgid);
7487
7488 IF (l_debug = 1) THEN
7489 inv_log_util.trace('re-setting org context, after calling setorgclientinfo', 'INV_TXN_MANAGER_GRP',9);
7490 END IF;
7491 END IF;
7492 -- end fix of bug 15931430
7493
7494 IF ( NOT validate_loc_for_project(l_xlocid, l_xorgid, l_srctype,
7495 l_acttype, l_trxsrc, tev_flow_schedule, tev_scheduled_flag) ) THEN
7496
7497 l_error_exp := FND_MESSAGE.get;
7498
7499 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
7500 l_error_code := FND_MESSAGE.get;
7501
7502 errupdate(l_rowid,null);
7503 l_count := l_count + 1;
7504 --exit;
7505 RAISE fnd_api.g_exc_error;
7506 END IF;
7507
7508 -- Begin fix of bug 15931430
7509 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) then
7510 IF (l_debug = 1) THEN
7511 inv_log_util.trace('For transfer org, before calling setorgclientinfo with l_orgid '||l_orgid, 'INV_TXN_MANAGER_GRP', 9);
7512 END IF;
7513 IF (NOT setorgclientinfo(l_orgid)) THEN
7514 RAISE fnd_api.g_exc_error;
7515 END IF;
7516 fnd_profile.put('MFG_ORGANIZATION_ID',l_orgid);
7517 IF (l_debug = 1) THEN
7518 inv_log_util.trace('For transfer org, after calling setorgclientinfo', 'INV_TXN_MANAGER_GRP',9);
7519 END IF;
7520 END IF;
7521 -- end fix of bug 15931430
7522
7523 END IF;
7524
7525
7526 BEGIN
7527 IF (l_srctype = 5) then
7528 l_priqty := inv_convert.inv_um_convert(l_itemid,6,l_trxqty,
7529 l_trxuom,l_priuom,'','');
7530 ELSE
7531 l_priqty := inv_convert.inv_um_convert(l_itemid,5,l_trxqty,
7532 l_trxuom,l_priuom,'','');
7533 END IF;
7534 EXCEPTION
7535 WHEN OTHERS THEN
7536 /*IF (NOT UomConvert(l_itemid,0,l_trxuom, '',
7537 l_priuom, '', l_trxqty,
7538 l_priqty, 0)) THEN */
7539 l_error_exp := FND_MESSAGE.get;
7540
7541 FND_MESSAGE.set_name('INV', 'INV_INT_UOMSEGCODE');
7542 l_error_code := FND_MESSAGE.get;
7543
7544 errupdate(l_rowid,null);
7545 l_count := l_count + 1;
7546 --exit;
7547 RAISE fnd_api.g_exc_error;
7548 END;
7549
7550 /* Borrow Payback */
7551 IF(l_acttype = 2) THEN
7552 l_result := PJM_BORROW_PAYBACK.validate_trx(l_trxtype,l_acttype,
7553 l_orgid,l_subinv,l_locid,
7554 l_xsubinv,l_xlocid,
7555 l_itemid,l_revision,
7556 l_priqty,l_trxdate, l_scheduled_payback_date,l_error_code);
7557
7558 IF(l_result = 1) THEN
7559
7560 l_error_exp := FND_MESSAGE.get;
7561
7562 errupdate(l_rowid,null);
7563 l_count := l_count + 1;
7564 --exit;
7565 RAISE fnd_api.g_exc_error;
7566 END IF;
7567 END IF;
7568 --prOR := 0;
7569 IF (l_srctype <> 14) THEN /* PCST */
7570
7571 IF l_trxdate <= sysdate THEN
7572 l_tnum := 1;
7573 ELSE
7574 loaderrmsg('INV_INT_TDATECODE','INV_INT_TDATEEX');
7575
7576 errupdate(l_rowid,null);
7577 l_count := l_count + 1;
7578 --exit;
7579 RAISE fnd_api.g_exc_error;
7580 END IF;
7581
7582 l_prdid := get_open_period(l_orgid,l_trxdate,0);
7583
7584
7585 IF (l_prdid = -1 OR l_prdid = 0) THEN
7586 FND_MESSAGE.set_name('INV', 'INV_INT_PRDCODE');
7587 l_error_code := FND_MESSAGE.get;
7588 FND_MESSAGE.set_name('INV', 'INV_NO_OPEN_PERIOD');
7589 /*END IF;*/
7590
7591 l_error_exp := FND_MESSAGE.get;
7592
7593 errupdate(l_rowid,null);
7594 l_count := l_count + 1;
7595 --exit;
7596 RAISE fnd_api.g_exc_error;
7597 END IF;
7598 /*Bug#5205455. Validation of the acc period for to_org */
7599 IF ( l_acttype IN ( 3, 21) OR
7600 (l_srctype = 8 AND l_acttype IN (1, 2)) ) THEN
7601 IF l_acttype IN ( 1, 2, 21) THEN
7602 IF (l_debug = 1) THEN
7603 inv_log_util.trace('l_acttype: '||l_acttype||' l_srctype: '||l_srctype, 'INV_TXN_MANAGER_GRP', 9);
7604 END IF;
7605
7606 BEGIN
7607 IF (l_debug = 1) THEN
7608 inv_log_util.trace('Getting the FOB Point between the orgs, '||l_orgid||' and '||l_xorgid, 'INV_TXN_MANAGER_GRP', 9);
7609 END IF;
7610
7611 SELECT fob_point
7612 INTO l_fob_point
7613 FROM mtl_interorg_parameters
7614 WHERE from_organization_id = l_orgid
7615 AND to_organization_id = l_xorgid;
7616
7617 IF (l_debug = 1) THEN
7618 inv_log_util.trace('FOB Point is: '||l_fob_point, 'INV_TXN_MANAGER_GRP', 9);
7619 END IF;
7620
7621 EXCEPTION
7622 WHEN OTHERS THEN
7623 IF (l_debug = 1) THEN
7624 inv_log_util.trace('Exception while finding the FOB Point.', 'INV_TXN_MANAGER_GRP', 9);
7625 END IF;
7626 l_fob_point := NULL;
7627 END;
7628 IF l_fob_point = 1 THEN
7629 l_validate_xfer_org := TRUE;
7630 ELSIF (l_fob_point = 2) THEN
7631 l_validate_xfer_org := FALSE;
7632 END IF;
7633 ELSE
7634 l_validate_xfer_org := TRUE;
7635 END IF;
7636 IF (l_validate_xfer_org) THEN
7637 IF (l_debug = 1) THEN
7638 inv_log_util.trace('l_validate_xfer_org is TRUE', 'INV_TXN_MANAGER_GRP', 9);
7639 END IF;
7640 IF ( get_open_period(l_xorgid,l_trxdate,0) IN (-1, 0)) THEN
7641 FND_MESSAGE.set_name('INV', 'INV_INT_PRDCODE');
7642 l_error_code := FND_MESSAGE.get;
7643 FND_MESSAGE.set_name('INV', 'INV_NO_OPEN_PERIOD_TOORG');
7644 l_error_exp := FND_MESSAGE.get;
7645 errupdate(l_rowid,null);
7646 l_count := l_count + 1;
7647 RAISE fnd_api.g_exc_error;
7648 END IF;
7649 END IF;
7650 END IF;
7651
7652
7653
7654 ELSE
7655 l_prdid := 0; /* Bug 4122107 */
7656 END IF;
7657
7658 /* Bug# 6271039, For average cost update and layer cost update, validate rows in
7659 * MTI for material account, material overhead account, resource account,
7660 * outside processing account, overhead account. */
7661
7662 IF ( l_acttype = 24 AND ((l_srctype = INV_Globals.G_SourceType_Inventory) OR (l_srctype = 15)) AND ( l_avg_cost_update = 2 ) )
7663 THEN
7664
7665 /*-----------------------------------------------------------+
7666 | Validate material account
7667 +-----------------------------------------------------------*/
7668
7669 IF (l_validate_full) THEN --J-dev
7670 FND_MESSAGE.set_name('INV','INV_MATERIAL_ACCOUNT');
7671 l_account := FND_MESSAGE.get ;
7672
7673 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7674 fnd_message.set_token('ACCOUNT',l_account);
7675 l_error_code := fnd_message.get;
7676
7677 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7678 fnd_message.set_token('ACCOUNT',l_account);
7679 l_error_exp := fnd_message.get;
7680
7681 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7682 SET LAST_UPDATE_DATE = SYSDATE,
7683 LAST_UPDATED_BY = p_userid,
7684 LAST_UPDATE_LOGIN = p_loginid,
7685 PROGRAM_UPDATE_DATE = SYSDATE,
7686 PROCESS_FLAG = 3,
7687 LOCK_FLAG = 2,
7688 ERROR_CODE = substrb(l_error_code,1,240),
7689 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7690 WHERE TRANSACTION_HEADER_ID = l_header_id
7691 AND PROCESS_FLAG = 1
7692 AND MATERIAL_ACCOUNT IS NOT NULL
7693 AND NOT EXISTS (
7694 SELECT NULL
7695 FROM GL_CODE_COMBINATIONS GCC
7696 WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_ACCOUNT
7697 AND GCC.CHART_OF_ACCOUNTS_ID
7698 = (SELECT CHART_OF_ACCOUNTS_ID
7699 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7700 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7701 AND GCC.ENABLED_FLAG = 'Y'
7702 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7703 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7704
7705 l_count := SQL%ROWCOUNT;
7706 IF (l_debug = 1) THEN
7707 inv_log_util.trace('Validating material account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7708 END IF;
7709
7710 END IF; --J-dev
7711
7712
7713 /*-----------------------------------------------------------+
7714 | Validate material overhead account
7715 +-----------------------------------------------------------*/
7716
7717 IF (l_validate_full) THEN --J-dev
7718 FND_MESSAGE.set_name('INV','INV_MAT_OVRHD_ACCOUNT');
7719 l_account := FND_MESSAGE.get ;
7720
7721 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7722 fnd_message.set_token('ACCOUNT',l_account);
7723 l_error_code := fnd_message.get;
7724
7725 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7726 fnd_message.set_token('ACCOUNT',l_account);
7727 l_error_exp := fnd_message.get;
7728
7729 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7730 SET LAST_UPDATE_DATE = SYSDATE,
7731 LAST_UPDATED_BY = p_userid,
7732 LAST_UPDATE_LOGIN = p_loginid,
7733 PROGRAM_UPDATE_DATE = SYSDATE,
7734 PROCESS_FLAG = 3,
7735 LOCK_FLAG = 2,
7736 ERROR_CODE = substrb(l_error_code,1,240),
7737 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7738 WHERE TRANSACTION_HEADER_ID = l_header_id
7739 AND PROCESS_FLAG = 1
7740 AND MATERIAL_OVERHEAD_ACCOUNT IS NOT NULL
7741 AND NOT EXISTS (
7742 SELECT NULL
7743 FROM GL_CODE_COMBINATIONS GCC
7744 WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_OVERHEAD_ACCOUNT
7745 AND GCC.CHART_OF_ACCOUNTS_ID
7746 = (SELECT CHART_OF_ACCOUNTS_ID
7747 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7748 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7749 AND GCC.ENABLED_FLAG = 'Y'
7750 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7751 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7752
7753 l_count := SQL%ROWCOUNT;
7754 IF (l_debug = 1) THEN
7755 inv_log_util.trace('Validating material overhead account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7756 END IF;
7757
7758 END IF; --J-dev
7759
7760 /*-----------------------------------------------------------+
7761 | Validate resource account
7762 +-----------------------------------------------------------*/
7763
7764 IF (l_validate_full) THEN --J-dev
7765 FND_MESSAGE.set_name('INV','INV_RESOURCE_ACCOUNT');
7766 l_account := FND_MESSAGE.get ;
7767
7768 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7769 fnd_message.set_token('ACCOUNT',l_account);
7770 l_error_code := fnd_message.get;
7771
7772 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7773 fnd_message.set_token('ACCOUNT',l_account);
7774 l_error_exp := fnd_message.get;
7775
7776 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7777 SET LAST_UPDATE_DATE = SYSDATE,
7778 LAST_UPDATED_BY = p_userid,
7779 LAST_UPDATE_LOGIN = p_loginid,
7780 PROGRAM_UPDATE_DATE = SYSDATE,
7781 PROCESS_FLAG = 3,
7782 LOCK_FLAG = 2,
7783 ERROR_CODE = substrb(l_error_code,1,240),
7784 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7785 WHERE TRANSACTION_HEADER_ID = l_header_id
7786 AND PROCESS_FLAG = 1
7787 AND RESOURCE_ACCOUNT IS NOT NULL
7788 AND NOT EXISTS (
7789 SELECT NULL
7790 FROM GL_CODE_COMBINATIONS GCC
7791 WHERE GCC.CODE_COMBINATION_ID = MTI.RESOURCE_ACCOUNT
7792 AND GCC.CHART_OF_ACCOUNTS_ID
7793 = (SELECT CHART_OF_ACCOUNTS_ID
7794 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7795 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7796 AND GCC.ENABLED_FLAG = 'Y'
7797 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7798 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7799
7800 l_count := SQL%ROWCOUNT;
7801 IF (l_debug = 1) THEN
7802 inv_log_util.trace('Validating resource account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7803 END IF;
7804
7805 END IF; --J-dev
7806
7807 /*-----------------------------------------------------------+
7808 | Validate outside processing account
7809 +-----------------------------------------------------------*/
7810
7811 IF (l_validate_full) THEN --J-dev
7812 FND_MESSAGE.set_name('INV','INV_OUTSIDE_PROC_ACCOUNT');
7813 l_account := FND_MESSAGE.get ;
7814
7815 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7816 fnd_message.set_token('ACCOUNT',l_account);
7817 l_error_code := fnd_message.get;
7818
7819 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7820 fnd_message.set_token('ACCOUNT',l_account);
7821 l_error_exp := fnd_message.get;
7822
7823 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7824 SET LAST_UPDATE_DATE = SYSDATE,
7825 LAST_UPDATED_BY = p_userid,
7826 LAST_UPDATE_LOGIN = p_loginid,
7827 PROGRAM_UPDATE_DATE = SYSDATE,
7828 PROCESS_FLAG = 3,
7829 LOCK_FLAG = 2,
7830 ERROR_CODE = substrb(l_error_code,1,240),
7831 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7832 WHERE TRANSACTION_HEADER_ID = l_header_id
7833 AND PROCESS_FLAG = 1
7834 AND OUTSIDE_PROCESSING_ACCOUNT IS NOT NULL
7835 AND NOT EXISTS (
7836 SELECT NULL
7837 FROM GL_CODE_COMBINATIONS GCC
7838 WHERE GCC.CODE_COMBINATION_ID = MTI.OUTSIDE_PROCESSING_ACCOUNT
7839 AND GCC.CHART_OF_ACCOUNTS_ID
7840 = (SELECT CHART_OF_ACCOUNTS_ID
7841 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7842 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7843 AND GCC.ENABLED_FLAG = 'Y'
7844 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7845 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7846
7847 l_count := SQL%ROWCOUNT;
7848 IF (l_debug = 1) THEN
7849 inv_log_util.trace('Validating outside processing account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7850 END IF;
7851
7852 END IF; --J-dev
7853
7854 /*-----------------------------------------------------------+
7855 | Validate overhead account
7856 +-----------------------------------------------------------*/
7857
7858 IF (l_validate_full) THEN --J-dev
7859 FND_MESSAGE.set_name('INV','INV_OVERHEAD_ACCOUNT');
7860 l_account := FND_MESSAGE.get ;
7861
7862 fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7863 fnd_message.set_token('ACCOUNT',l_account);
7864 l_error_code := fnd_message.get;
7865
7866 fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7867 fnd_message.set_token('ACCOUNT',l_account);
7868 l_error_exp := fnd_message.get;
7869
7870 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7871 SET LAST_UPDATE_DATE = SYSDATE,
7872 LAST_UPDATED_BY = p_userid,
7873 LAST_UPDATE_LOGIN = p_loginid,
7874 PROGRAM_UPDATE_DATE = SYSDATE,
7875 PROCESS_FLAG = 3,
7876 LOCK_FLAG = 2,
7877 ERROR_CODE = substrb(l_error_code,1,240),
7878 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7879 WHERE TRANSACTION_HEADER_ID = l_header_id
7880 AND PROCESS_FLAG = 1
7881 AND OVERHEAD_ACCOUNT IS NOT NULL
7882 AND NOT EXISTS (
7883 SELECT NULL
7884 FROM GL_CODE_COMBINATIONS GCC
7885 WHERE GCC.CODE_COMBINATION_ID = MTI.OVERHEAD_ACCOUNT
7886 AND GCC.CHART_OF_ACCOUNTS_ID
7887 = (SELECT CHART_OF_ACCOUNTS_ID
7888 FROM ORG_ORGANIZATION_DEFINITIONS OOD
7889 WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7890 AND GCC.ENABLED_FLAG = 'Y'
7891 AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <= trunc(mti.transaction_date)
7892 AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1)) >= trunc(mti.transaction_date));
7893
7894 l_count := SQL%ROWCOUNT;
7895 IF (l_debug = 1) THEN
7896 inv_log_util.trace('Validating overhead account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7897 END IF;
7898
7899 END IF; --J-dev
7900
7901
7902 END IF; /* l_acttype = 24 AND (l_srctype = 14 or l_srctype = 15*/
7903 /* End of Bug# 6271039 */
7904
7905 /* for average cost update and layer cost update, validate rows in */
7906 /* mtl_txn_cost_det_interface table , if R10 avg cost profile is set */
7907
7908
7909 IF ( l_acttype = 24 AND ((l_srctype = INV_Globals.G_SourceType_Inventory)
7910 OR (l_srctype = 15)) ) THEN
7911 IF ( l_avg_cost_update = 2 ) THEN
7912
7913 /* should we check also if interface id is not null and
7914 generate an id if it is null before calling validate */
7915 CSTPACIT.cost_det_validate(l_intid,
7916 l_orgid,
7917 l_itemid,
7918 l_new_avg_cst,
7919 l_per_chng,
7920 l_val_chng,
7921 l_mat_accnt,
7922 l_mat_ovhd_accnt,
7923 l_res_accnt,
7924 l_osp_accnt,
7925 l_ovhd_accnt,
7926 l_error_num,
7927 l_error_code,
7928 l_error_exp);
7929 IF ( l_error_exp IS NOT NULL) THEN
7930 errupdate(l_rowid,null);
7931 l_count := l_count + 1;
7932 --exit;
7933 RAISE fnd_api.g_exc_error;
7934 END IF;
7935 END IF;
7936 END IF;
7937
7938 IF ( l_acttype = 24 AND l_srctype = 14 ) THEN /* PCST */
7939 CSTPPCIT.periodic_cost_validate(
7940 l_org_cost_group_id,
7941 l_cost_type_id,
7942 l_trxdate,--Bug #4156979 Removed the call to fnd_date.canonical_to_date
7943 l_intid,
7944 l_orgid,
7945 l_itemid,
7946 l_new_avg_cst,
7947 l_per_chng,
7948 l_val_chng,
7949 l_mat_accnt,
7950 l_mat_ovhd_accnt,
7951 l_res_accnt,
7952 l_osp_accnt,
7953 l_ovhd_accnt,
7954 l_error_num,
7955 l_error_code,
7956 l_error_exp) ;
7957 IF l_error_exp IS NOT NULL THEN
7958 errupdate(l_rowid,null);
7959 l_count := l_count + 1;
7960 --exit;
7961 RAISE fnd_api.g_exc_error;
7962 END IF;
7963 END IF;
7964
7965 /* Do this snapshot moves for non-CFM WIP completions,returns,
7966 /*scraps */
7967 /* In J WIP will do this. move snapshot.*/
7968 IF ( wip_constants.DMF_PATCHSET_LEVEL < wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
7969 IF ( ( (l_acttype =30)
7970 OR (l_acttype =31)
7971 OR (l_acttype =32) )
7972 AND l_srctype = 5 AND
7973 tev_flow_schedule = 0) THEN
7974
7975 SELECT PRIMARY_COST_METHOD
7976 INTO l_primary_cost_method
7977 FROM MTL_PARAMETERS
7978 WHERE ORGANIZATION_ID = l_orgid ;
7979
7980 IF ( l_avg_cost_update = 2 AND (l_primary_cost_method = 2 OR
7981 l_primary_cost_method = 5 OR
7982 l_primary_cost_method = 6 ) )
7983 THEN
7984 l_cst_temp := CSTPACMS.validate_move_snap_to_temp
7985 (l_intid,
7986 l_intid,
7987 1, -- for inventory l_interface_table=1
7988 l_priqty,
7989 l_error_num,
7990 l_error_code,
7991 l_error_exp) ;
7992 IF l_error_exp IS NOT NULL THEN
7993 errupdate(l_rowid,null);
7994 l_count := l_count + 1;
7995 --exit;
7996 RAISE fnd_api.g_exc_error;
7997 END IF;
7998 END IF;
7999 END IF;
8000 END IF; --J-dev
8001
8002 -- hjogleka
8003 -- Bug #5497519, Added code to validate lot quantity and serial count
8004 -- against quantities in MTI/MLTI.
8005 -- Bug #5566760, added ABS() while comparing the quantities.
8006 --Bug #5614139
8007 --Do not validate lot/serial quantity for lot split, merge and translate
8008 --The inv_lot_trx_validations_pub API would already have done it by the
8009 --time control comes here
8010 IF (l_validate_full AND l_acttype NOT IN (
8011 INV_GLOBALS.G_ACTION_COSTUPDATE
8012 , INV_GLOBALS.G_ACTION_INV_LOT_SPLIT
8013 , INV_GLOBALS.G_ACTION_INV_LOT_MERGE
8014 , INV_GLOBALS.G_ACTION_INV_LOT_TRANSLATE)
8015 ) THEN
8016
8017 --Serial Tagging
8018
8019 /*
8020 IF (l_lotctrl = 2 AND
8021 (l_serctrl = 2 OR l_serctrl = 5 OR
8022 (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
8023 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
8024 (l_serctrl = 6 AND l_srctype = 8 AND l_acttype IN (3,21)) OR
8025 --serial tagging
8026 (l_serctrl = 6 AND l_trxtype in (93,94,35,43) )
8027 )
8028 */
8029 --bug#13527319 to skip validation for phantom component which has op_seq_num negative and wip_supply_type = 6
8030 IF (l_lotctrl = 2 AND
8031 serial_tagged = 2 and ( l_srctype <> 5 or (l_operation_seq_num > 0 and l_wip_supply_type <>6))
8032 ) THEN
8033 -- lot and serial controlled item
8034 -- validate lot quantities and mmtt quantity.
8035 BEGIN
8036 IF (l_debug = 1) THEN
8037 inv_log_util.trace('validating lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
8038 END IF;
8039
8040 SELECT NVL(SUM(ABS(NVL(mtli.transaction_quantity,0))), 0)
8041 INTO l_lot_ser_qty
8042 FROM mtl_transaction_lots_interface mtli
8043 WHERE mtli.transaction_interface_id =l_intid
8044 AND ABS(nvl(mtli.primary_quantity, inv_convert.inv_um_convert
8045 (l_itemid,5,mtli.transaction_quantity,l_trxuom,l_priuom,'','')))
8046 = (SELECT SUM(get_serial_diff_wrp
8047 (msni.fm_serial_number,nvl(msni.to_serial_number,msni.fm_serial_number)))
8048 FROM mtl_serial_numbers_interface msni
8049 WHERE msni.transaction_interface_id
8050 = mtli.serial_transaction_temp_id);
8051 EXCEPTION
8052 WHEN others THEN
8053 IF (l_debug = 1) THEN
8054 inv_log_util.trace('Ex.. while checking lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
8055 END IF;
8056 l_lot_ser_qty := 0;
8057 END;
8058
8059 IF (ABS(l_trxqty) <> l_lot_ser_qty) THEN
8060 IF (l_debug = 1) THEN
8061 inv_log_util.trace('mismatch in lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
8062 END IF;
8063 loaderrmsg('INV_INT_LOTCODE','INV_INVLTPU_LOTTRX_QTY');
8064 errupdate(l_rowid,null);
8065 l_count := l_count + 1;
8066 RAISE fnd_api.g_exc_error;
8067 ELSE
8068 IF (l_debug = 1) THEN
8069 inv_log_util.trace('no mismatch in lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
8070 END IF;
8071 END IF;
8072
8073 --Serial Tagging
8074 /*
8075 ELSIF ( l_serctrl = 2 OR l_serctrl = 5 OR
8076 (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
8077 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
8078 (l_serctrl = 6 AND l_srctype = 8 AND l_acttype IN (3,21)) OR
8079 --serial tagging
8080 (l_serctrl = 6 AND l_trxtype in (93,94,35,43) )
8081 */
8082 --bug#13527319 to skip validation for phantom component which has op_seq_num negative and wip_supply_type = 6
8083 ELSIF ( serial_tagged = 2 and ( l_srctype <> 5 or (l_operation_seq_num > 0 and l_wip_supply_type <>6))
8084 ) THEN
8085
8086 -- serial controlled item
8087 -- validate serial quantities only.
8088 BEGIN
8089 IF (l_debug = 1) THEN
8090 inv_log_util.trace('validating lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
8091 END IF;
8092
8093 SELECT SUM(get_serial_diff_wrp
8094 (fm_serial_number,NVL(to_serial_number,fm_serial_number)))
8095 INTO l_lot_ser_qty
8096 FROM mtl_serial_numbers_interface msni
8097 WHERE msni.transaction_interface_id =l_intid;
8098 EXCEPTION
8099 WHEN others THEN
8100 IF (l_debug = 1) THEN
8101 --serial tagging
8102 inv_log_util.trace('Exception '||SQLERRM,'INV_TXN_MANAGER_GRP', 9);
8103 inv_log_util.trace('Ex.. while checking lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
8104 END IF;
8105 l_lot_ser_qty := 0;
8106 END;
8107 IF (ABS(l_priqty) <> l_lot_ser_qty) THEN
8108 IF (l_debug = 1) THEN
8109 inv_log_util.trace('mismatch in serial quantities','INV_TXN_MANAGER_GRP', 9);
8110 END IF;
8111 loaderrmsg('INV_INT_SERMISCODE','INV_INVLTPU_LOTTRX_QTY');
8112 errupdate(l_rowid,null);
8113 l_count := l_count + 1;
8114 RAISE fnd_api.g_exc_error;
8115 ELSE
8116 IF (l_debug = 1) THEN
8117 inv_log_util.trace('no mismatch in serial quantities','INV_TXN_MANAGER_GRP', 9);
8118 END IF;
8119 END IF;
8120 END IF;
8121 END IF;
8122
8123 -- SDPAUL
8124 -- Bug# 5710830 Added code to validate serials and lots and insert into the corresponding
8125 -- master tables. These validations are only needed for Receipt into stores transaction -> 27
8126 -- and for the transaction sources -> 3,6 and 13.
8127 IF (l_acttype = 27 AND l_srctype IN(3,6,13)) THEN
8128
8129 IF (l_debug = 1) THEN
8130 inv_log_util.trace('Before calling validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
8131 END IF;
8132 SAVEPOINT val_lot_serial_for_rcpt_sp;
8133 validate_lot_serial_for_rcpt( p_interface_id => l_intid
8134 , p_org_id => l_orgid
8135 , p_item_id => l_itemid
8136 , p_lotctrl => l_lotctrl
8137 , p_serctrl => l_serctrl
8138 , p_rev => l_revision
8139 , p_trx_src_id => l_srctype
8140 , p_trx_action_id => l_acttype
8141 , p_subinventory_code => l_subinv
8142 , p_locator_id => l_locid
8143 , x_proc_msg => l_msg_data
8144 , x_return_status => l_return_status );
8145 IF (l_debug = 1) THEN
8146 inv_log_util.trace('After call to validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
8147 END IF;
8148
8149 IF (l_return_status <> lg_ret_sts_success) THEN -- Failure from validate_lot_serial_for_rcpt
8150 IF (l_debug = 1) THEN
8151 inv_log_util.trace('Error from validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
8152 END IF;
8153 errupdate(l_rowid,null);
8154 l_count := l_count + 1;
8155 ROLLBACK TO val_lot_serial_for_rcpt_sp;
8156 RAISE fnd_api.g_exc_error;
8157 ELSE
8158 IF (l_debug = 1) THEN
8159 inv_log_util.trace('Call to validate_lot_serial_for_rcpt successful','INV_TXN_MANAGER_GRP', 9);
8160 END IF;
8161 END IF;
8162
8163 END IF; -- End of fix for Bug# 5710830
8164
8165 --J-dev, do not do lot and serial validations for WIP desktop
8166 --transactions
8167 --bug#13527319 to skip validation for phantom component which has op_seq_num negative and wip_supply_type = 6
8168 /* for Bug # 15830160 added addition OR condition to do the lot chek for the wip completion transaction
8169 performed from move transaction form. As this for will not call lot entry form hence basic lot validation
8170 hence system bypasses the lot indivisible functionality*/
8171 If (L_Validate_Full
8172 Or (P_Line_Rec_Type.Completion_Transaction_Id Is Not Null --15830160
8173 And P_Line_Rec_Type.Move_Transaction_Id Is Not Null --15830160
8174 And L_Srctype=5 --15830160
8175 and l_acttype=31 )) then --15830160
8176 IF (l_lotctrl = 2 AND l_acttype <> 24 and ( l_srctype <> 5 or (l_operation_seq_num > 0 and l_wip_supply_type <>6)))
8177 THEN
8178 IF l_intid IS NOT NULL THEN
8179 BEGIN
8180 SELECT 1
8181 into l_tnum
8182 FROM MTL_TRANSACTION_LOTS_INTERFACE
8183 WHERE TRANSACTION_INTERFACE_ID = l_intid
8184 AND ROWNUM < 2;
8185
8186 /**********************************************************
8187 * we cannot call lotcheck for lot split and lot translate
8188 * since the resultant lot can be a new lot
8189 **********************************************************/
8190 if( l_acttype not in (40, 42)) then
8191 /** end of change for lot transactions **/
8192 IF(NOT lotcheck(l_rowid,l_orgid,l_itemid,l_intid,l_priuom,
8193 l_trxuom,l_lotuniq,l_shlfcode,l_shlfdays,
8194 l_serctrl, l_srctype, l_acttype, l_is_wsm_enabled,
8195 -- INVCONV start fabdi
8196 l_trxtype, l_revision, l_subinv, l_locid, serial_tagged))
8197 -- INVCONV end fabdi
8198 THEN
8199 l_count := l_count + 1;
8200 --exit;
8201 RAISE fnd_api.g_exc_error;
8202
8203 -- bug 8669802 When txn_uom is different from pri_uom, the primary qty on for item and lot could be
8204 -- different, if uom conversion setup for item is different from lot. We need honor
8205 -- lot primary_qty converion.
8206 ELSE
8207 if l_trxuom <> l_priuom then
8208 begin
8209 IF (l_debug = 1) THEN
8210 inv_log_util.trace('txn uom different from primary uom','INV_TXN_MANAGER_GRP', 9);
8211 END IF;
8212
8213 SELECT SUM(PRIMARY_QUANTITY)
8214 INTO l_lot_ser_qty
8215 FROM mtl_transaction_lots_interface
8216 WHERE transaction_interface_id =l_intid;
8217 inv_log_util.trace('total lot primary quantity '||l_lot_ser_qty,'INV_TXN_MANAGER_GRP', 9);
8218
8219 EXCEPTION
8220 WHEN others THEN
8221 IF (l_debug = 1) THEN
8222 inv_log_util.trace('Ex.. while checking lot primary quantities','INV_TXN_MANAGER_GRP', 9);
8223 END IF;
8224 l_lot_ser_qty := 0;
8225 end;
8226
8227 l_priqty :=l_lot_ser_qty;
8228 end if;
8229
8230 END IF;
8231 end if;--action
8232 EXCEPTION
8233 WHEN NO_DATA_FOUND THEN
8234 loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
8235 errupdate(l_rowid,null);
8236 l_count := l_count + 1;
8237 --exit;
8238 RAISE fnd_api.g_exc_error;
8239 END;
8240 ELSE
8241 loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
8242 errupdate(l_rowid,null);
8243 l_count := l_count + 1;
8244 --exit;
8245 RAISE fnd_api.g_exc_error;
8246 END IF;--l_intid is null
8247 ELSE
8248 IF l_intid IS NOT NULL THEN
8249 DELETE FROM MTL_TRANSACTION_LOTS_INTERFACE
8250 WHERE TRANSACTION_INTERFACE_ID = l_intid;
8251 END IF;
8252
8253 /* Additional checking for Dynamic SerCtrl and srctype = 8
8254 /* Changed the if condition for contracts validation */
8255
8256 --Serial Tagging
8257 /*
8258 IF ( (l_serctrl = 2 OR l_serctrl = 5 OR
8259 (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
8260 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
8261 (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1)OR
8262 (l_serctrl = 6 AND l_srctype = 8 ) OR
8263 --serial tagging
8264 (l_serctrl = 6 AND l_trxtype in (93,94,35,43) )
8265 */
8266 --bug#13527319 to skip validation for phantom component which has op_seq_num negative and wip_supply_type = 6
8267 IF (
8268 serial_tagged = 2
8269 AND l_acttype <> 24 and ( l_srctype <> 5 or (l_operation_seq_num > 0 and l_wip_supply_type <>6))
8270
8271 ) THEN
8272
8273 IF (l_intid IS NULL) THEN
8274 loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
8275 errupdate(l_rowid,null);
8276 l_count := l_count + 1;
8277 --exit;
8278 RAISE fnd_api.g_exc_error;
8279 ELSE
8280 BEGIN
8281 SELECT 1
8282 into l_tnum
8283 FROM MTL_SERIAL_NUMBERS_INTERFACE
8284 WHERE TRANSACTION_INTERFACE_ID = l_intid
8285 AND ROWNUM < 2;
8286 EXCEPTION
8287 WHEN NO_DATA_FOUND THEN
8288 loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
8289 errupdate(l_rowid,null);
8290 l_count := l_count + 1;
8291 RAISE fnd_api.g_exc_error;
8292 --exit;
8293 END;
8294 END IF;--l_intid is null
8295 ELSE
8296 IF (l_intid IS NOT NULL) THEN
8297 DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
8298 WHERE TRANSACTION_INTERFACE_ID = l_intid;
8299 END IF;
8300 END IF; --actions for serials.
8301 END IF;--if check actions for lots
8302
8303 -- R12 Genealogy Enhancement : Start
8304 IF (l_srctype = INV_GLOBALS.G_SOURCETYPE_WIP AND l_acttype = INV_GLOBALS.G_ACTION_ISSUE) THEN
8305 IF ((l_lotctrl = 1 AND l_acttype <> 24) AND
8306 (l_lotctrl = 1 AND (l_serctrl = 2 OR l_serctrl = 5)) )
8307 THEN
8308 IF (l_debug = 1) THEN
8309 INV_log_util.trace('{{- It is serial controlled item. Call validate_serial_genealogy_data }}'
8310 , 'INV_TXN_MANAGER_GRP', 9);
8311 END IF;
8312 validate_serial_genealogy_data ( p_interface_id => l_intid
8313 , p_org_id => l_orgid
8314 , x_return_status => l_return_status
8315 , x_msg_count => l_msg_count
8316 , x_msg_data => l_msg_data);
8317 IF l_return_status <> lg_ret_sts_success THEN
8318 IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
8319 --RAISE lg_exc_error; ????
8320 END IF;
8321 END IF;
8322 ELSE
8323 IF (l_debug = 1) THEN
8324 inv_log_util.trace('{{-It is not a WIP issue transactioon, so no validation/derivation of }}' ||
8325 '{{ parent object details will not happen }}' , 'INV_TXN_MANAGER_GRP', 9);
8326 END IF;
8327 END IF;
8328 -- R12 Genealogy Enhancement : End
8329
8330 END IF;--l_validate_full
8331 /*Bug#5125632. Calling 'update_status_id_in_mtli' to update the 'status_id' column
8332 of the table, 'MTLI', for the row corrsponding to the currnet line */
8333
8334 IF (l_lotctrl = 2) THEN
8335 update_status_id_in_mtli(l_intid
8336 ,l_orgid
8337 ,l_itemid);
8338 END IF;
8339
8340 l_acctid_validated := FALSE; --Bug#4247753
8341
8342 IF (l_acct IS NULL) THEN
8343 IF (l_srctype = 3 OR l_srctype = 6) THEN
8344 IF (l_srctype = 6) THEN
8345 SELECT DISTRIBUTION_ACCOUNT
8346 INTO l_acct
8347 FROM MTL_GENERIC_DISPOSITIONS
8348 WHERE ORGANIZATION_ID = l_orgid
8349 AND DISPOSITION_ID = l_trxsrc;
8350 ELSE
8351 l_acct := l_trxsrc;
8352 END IF;
8353
8354 ELSE
8355 /***************************************************************
8356 * Lot transaction open interface changes
8357 * We need to bypass the validation of distribution accout for
8358 * lot split and lot merge transactions
8359 **************************************************************/
8360 IF( l_acttype not in (40,41)) THEN
8361 /** end of changes for lot transactions **/
8362 IF (NOT getacctid(l_acct, l_orgid, l_rowid)) THEN
8363 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
8364 l_error_code := FND_MESSAGE.get;
8365
8366 errupdate(l_rowid,null);
8367 --exit;
8368 RAISE fnd_api.g_exc_error;
8369 END IF;
8370 END IF;
8371 END IF;
8372
8373 END IF;--l_acct is null
8374
8375 -- Bug#4247753. Calling the functon, validate_acctid() for validating the Account combination ID
8376 IF ( l_acct IS NOT NULL AND (NOT l_acctid_validated)) THEN
8377 IF ( NOT validate_acctid(l_acct, l_orgid, l_trxdate)) THEN
8378 FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
8379 l_error_code := FND_MESSAGE.get;
8380 errupdate(l_rowid,null);
8381 RAISE fnd_api.g_exc_error;
8382 END IF;
8383 END IF;
8384
8385 --J-dev
8386 /* Validate the unit number for unit_effectivity */
8387
8388 IF (NOT validate_unit_number(l_unit_number,l_orgid,l_itemid,l_srctype,l_acttype))
8389 THEN
8390 l_error_exp := FND_MESSAGE.get;
8391 l_error_exp := FND_MESSAGE.get;
8392
8393 FND_MESSAGE.set_name('INV', 'INV_INT_UNITNUMBER');
8394 l_error_code := FND_MESSAGE.get;
8395
8396 errupdate(l_rowid,null);
8397 l_count := l_count + 1;
8398 --exit;
8399 RAISE fnd_api.g_exc_error;
8400
8401 END IF;
8402
8403
8404 IF (l_overcomp_txn_qty IS NOT NULL) THEN /* Overcompletion Transactions */
8405 BEGIN
8406 IF (l_srctype=5)then
8407 l_overcomp_primary_qty := inv_convert.inv_um_convert(l_itemid,6,l_overcomp_txn_qty,
8408 l_trxuom,l_priuom,'','');
8409 ELSE
8410 l_overcomp_primary_qty := inv_convert.inv_um_convert(l_itemid,5,l_overcomp_txn_qty,
8411 l_trxuom,l_priuom,'','');
8412 END IF;
8413 EXCEPTION
8414 WHEN OTHERS THEN
8415 /*IF (NOT UomConvert(l_itemid,0,l_trxuom,'',l_priuom,'',
8416 l_overcomp_txn_qty, l_overcomp_primary_qty,0))
8417 THEN */
8418 l_error_exp := FND_MESSAGE.get;
8419
8420 FND_MESSAGE.set_name('INV', 'INV_INT_UOMCONVCODE');
8421 l_error_code := FND_MESSAGE.get;
8422
8423 errupdate(l_rowid,null);
8424 l_count := l_count + 1;
8425 END;
8426 END IF;
8427
8428 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8429 SET LAST_UPDATE_DATE = SYSDATE,
8430 LAST_UPDATED_BY = p_userid,
8431 LAST_UPDATE_LOGIN = p_loginid,
8432 PROGRAM_UPDATE_DATE = SYSDATE,
8433 INVENTORY_ITEM_ID = l_itemid,
8434 DISTRIBUTION_ACCOUNT_ID = l_acct,
8435 LOCATOR_ID = l_locid,
8436 TRANSACTION_SOURCE_ID = l_trxsrc,
8437 ACCT_PERIOD_ID = l_prdid,
8438 PRIMARY_QUANTITY = l_priqty,
8439 TRANSFER_ORGANIZATION = l_xorgid,
8440 TRANSFER_SUBINVENTORY = l_xsubinv,
8441 TRANSFER_LOCATOR = l_xlocid,
8442 TRANSACTION_INTERFACE_ID = l_intid,
8443 END_ITEM_UNIT_NUMBER = l_unit_number,
8444 OVERCOMPLETION_PRIMARY_QTY = l_overcomp_primary_qty
8445 WHERE ROWID = l_rowid;
8446
8447 --J-dev moving validate locators as version 115.80 incorrectly put
8448 --this validation IN outer validate_lines(). that would never get called.
8449 /* Moved the locator validation from validate_group to here
8450 /*So that the derived id's will get validated
8451 /*Begin changes for the bug 3015128 */
8452
8453 /* Bug 3703053 validation of locator and xfr locator was wrongly placed
8454 in the j-dev project.This validation should happen after populating
8455 the locator_id,trasfer_locator_id into MTI not before that .Moved it
8456 down so that the populated locators get validated. */
8457 /*-------------------------------------------------------------+
8458 | Validating locators
8459 +-------------------------------------------------------------*/
8460 loaderrmsg('INV_INT_LOCCODE','INV_INT_LOCEXP');
8461
8462 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8463 SET LAST_UPDATE_DATE = SYSDATE,
8464 LAST_UPDATED_BY = p_userid,
8465 LAST_UPDATE_LOGIN = p_loginid,
8466 PROGRAM_UPDATE_DATE = SYSDATE,
8467 PROCESS_FLAG = 3,
8468 LOCK_FLAG = 2,
8469 ERROR_CODE = substrb(l_error_code,1,240),
8470 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8471 WHERE rowid =l_rowid
8472 AND PROCESS_FLAG = 1
8473 AND LOCATOR_ID IS NOT NULL
8474 AND NOT EXISTS (
8475 SELECT NULL
8476 FROM MTL_ITEM_LOCATIONS MIL
8477 WHERE MIL.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8478 AND MIL.SUBINVENTORY_CODE = MTI.SUBINVENTORY_CODE
8479 AND MIL.INVENTORY_LOCATION_ID = MTI.LOCATOR_ID
8480 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(MIL.DISABLE_DATE,
8481 MTI.TRANSACTION_DATE + 1));
8482
8483
8484 loaderrmsg('INV_INT_LOCCODE','INV_INT_RESLOCEXP');
8485
8486 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8487 SET LAST_UPDATE_DATE = SYSDATE,
8488 LAST_UPDATED_BY = p_userid,
8489 LAST_UPDATE_LOGIN = p_loginid,
8490 PROGRAM_UPDATE_DATE = SYSDATE,
8491 PROCESS_FLAG = 3,
8492 LOCK_FLAG = 2,
8493 ERROR_CODE = substrb(l_error_code,1,240),
8494 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8495 WHERE rowid =l_rowid
8496 AND PROCESS_FLAG = 1
8497 AND LOCATOR_ID IS NOT NULL
8498 AND NOT EXISTS (
8499 SELECT NULL
8500 FROM MTL_SECONDARY_LOCATORS MSL,
8501 MTL_SYSTEM_ITEMS MSI
8502 WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8503 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8504 AND MSI.RESTRICT_LOCATORS_CODE = 1
8505 AND MSL.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8506 AND MSL.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8507 AND MSL.ORGANIZATION_ID = MSI.ORGANIZATION_ID
8508 AND MSL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
8509 AND MSL.SUBINVENTORY_CODE = MTI.SUBINVENTORY_CODE
8510 AND MSL.SECONDARY_LOCATOR = MTI.LOCATOR_ID
8511 UNION
8512 SELECT NULL
8513 FROM MTL_SYSTEM_ITEMS ITM
8514 WHERE ITM.RESTRICT_LOCATORS_CODE = 2
8515 AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8516 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID);
8517
8518 IF (l_debug = 1) THEN
8519 inv_log_util.trace('Validating locators','INV_TXN_MANAGER_GRP',9);
8520 END IF;
8521
8522
8523 /*-----------------------------------------------------------+
8524 | Validating transfer locators against transfer organization
8525 +-----------------------------------------------------------*/
8526
8527 loaderrmsg('INV_INT_XLOCCODE','INV_INT_XFRLOCEXP');
8528
8529 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8530 SET LAST_UPDATE_DATE = SYSDATE,
8531 LAST_UPDATED_BY = p_userid,
8532 LAST_UPDATE_LOGIN = p_loginid,
8533 PROGRAM_UPDATE_DATE = SYSDATE,
8534 PROCESS_FLAG = 3,
8535 LOCK_FLAG = 2,
8536 ERROR_CODE = substrb(l_error_code,1,240),
8537 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8538 WHERE ROWID = l_rowid
8539 AND PROCESS_FLAG = 1
8540 AND TRANSACTION_ACTION_ID IN (2,3,5)
8541 AND TRANSFER_LOCATOR IS NOT NULL
8542 AND NOT EXISTS (
8543 SELECT NULL
8544 FROM MTL_ITEM_LOCATIONS MIL
8545 WHERE MIL.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,3,
8546 MTI.TRANSFER_ORGANIZATION,MTI.ORGANIZATION_ID)
8547 AND MIL.SUBINVENTORY_CODE = MTI.TRANSFER_SUBINVENTORY
8548 AND MIL.INVENTORY_LOCATION_ID = MTI.TRANSFER_LOCATOR
8549 AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(MIL.DISABLE_DATE,
8550 MTI.TRANSACTION_DATE + 1));
8551
8552
8553
8554 /*------------------------------------------------------+
8555 | Validating transfer locators for restricted list
8556 +------------------------------------------------------*/
8557 loaderrmsg('INV_INT_XLOCCODE','INV_INT_RESXFRLOCEXP');
8558
8559 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8560 SET LAST_UPDATE_DATE = SYSDATE,
8561 LAST_UPDATED_BY = p_userid,
8562 LAST_UPDATE_LOGIN = p_loginid,
8563 PROGRAM_UPDATE_DATE = SYSDATE,
8564 PROCESS_FLAG = 3,
8565 LOCK_FLAG = 2,
8566 ERROR_CODE = substrb(l_error_code,1,240),
8567 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8568 WHERE ROWID=l_rowid
8569 AND PROCESS_FLAG = 1
8570 AND TRANSACTION_ACTION_ID in (2,21,3,5)
8571 AND TRANSFER_LOCATOR IS NOT NULL
8572 AND NOT EXISTS (
8573 SELECT NULL
8574 FROM MTL_SECONDARY_LOCATORS MSL,
8575 MTL_SYSTEM_ITEMS MSI
8576 WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8577 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8578 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8579 AND MSI.RESTRICT_LOCATORS_CODE = 1
8580 AND MSL.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8581 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8582 AND MSL.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8583 AND MSL.ORGANIZATION_ID = MSI.ORGANIZATION_ID
8584 AND MSL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
8585 AND MSL.SUBINVENTORY_CODE = MTI.TRANSFER_SUBINVENTORY
8586 AND MSL.SECONDARY_LOCATOR = MTI.TRANSFER_LOCATOR
8587 UNION
8588 SELECT NULL
8589 FROM MTL_SYSTEM_ITEMS MSI
8590 WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8591 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8592 AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8593 AND MSI.RESTRICT_LOCATORS_CODE = 2);
8594
8595
8596 IF (l_debug = 1) THEN
8597 inv_log_util.trace('Validating xfer locators ','INV_TXN_MANAGER_GRP',9);
8598 END IF;
8599 /* End changes for bug 3009135 */
8600
8601
8602 --============================================================
8603 -- Bug 4432078
8604 -- OPM INVCONV umoogala 05-Apr-2005
8605 -- For process-to-discrete call new transfer_price API.
8606 -- No change for discrete/discrete orders.
8607 --============================================================
8608
8609 --
8610 -- Bug 5230916: Added direct xfer txn
8611 -- Bug 5349860: Process/Discrete Xfer: stamp xfer price for internal order
8612 -- issues to expense destination also (src/act: 8/1)
8613 --
8614 IF (l_acttype = 21
8615 OR (l_acttype = 3 and l_trxqty < 0)
8616 OR (l_srctype = 8 and l_acttype = 1))
8617 THEN
8618
8619 --
8620 -- Get process mfg org flag for from and to orgs
8621 --
8622 SELECT mp_from.process_enabled_flag, mp_to.process_enabled_flag
8623 INTO l_process_enabled_flag_from, l_process_enabled_flag_to
8624 FROM mtl_parameters mp_from, mtl_parameters mp_to
8625 WHERE mp_from.organization_id = l_orgid
8626 AND mp_to.organization_id = l_xorgid;
8627
8628 --
8629 -- Get Operating Units for from and to orgs
8630 -- Bug 5240801: Was org_information2, which is legal entity.
8631 -- We need to get OU, so now using org_information3.
8632 --
8633 SELECT TO_NUMBER(src.org_information3) src_ou, TO_NUMBER(dest.org_information3) dest_ou
8634 INTO l_from_ou, l_to_ou
8635 FROM hr_organization_information src, hr_organization_information dest
8636 WHERE src.organization_id = l_orgid
8637 AND src.org_information_context = 'Accounting Information'
8638 AND dest.organization_id = l_xorgid
8639 AND dest.org_information_context = 'Accounting Information'
8640 ;
8641
8642 -- get transfer price for:
8643 -- 1. Process-Discrete Transfers
8644 -- 2. Process-to-Process Orgs transfer across OUs
8645 -- 3. Discrete-to-Discrete Orgs transfer across OUs with IC Invoicing enabled.
8646 --
8647 l_ic_invoicing_enabled := fnd_profile.value('INV_INTERCOMPANY_INVOICE_INTERNAL_ORDER');
8648
8649 IF (l_process_enabled_flag_from <> l_process_enabled_flag_to) OR
8650 (l_process_enabled_flag_from = 'Y' AND l_process_enabled_flag_to = 'Y' AND
8651 l_from_ou <> l_to_ou) OR
8652 (l_process_enabled_flag_from = 'N' AND l_process_enabled_flag_to = 'N' AND
8653 l_from_ou <> l_to_ou AND
8654 l_ic_invoicing_enabled = 1 AND
8655 l_srctype = 8 AND l_acttype = 21)
8656 THEN
8657
8658 IF (l_debug = 1) THEN
8659 IF (l_process_enabled_flag_from <> l_process_enabled_flag_to)
8660 THEN
8661 inv_log_util.trace('This is process-discrete xfer. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8662 ELSIF (l_process_enabled_flag_from = 'Y' AND
8663 l_process_enabled_flag_to = 'Y')
8664 THEN
8665 inv_log_util.trace('This is process-process xfer across OUs. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8666 ELSIF (l_process_enabled_flag_from = 'N' AND
8667 l_process_enabled_flag_to = 'N')
8668 THEN
8669 inv_log_util.trace('This is discrete-discrete xfer across OUs with IC enabled. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8670 END IF;
8671 END IF;
8672
8673 --
8674 -- For internal orders across OUs and IC Invoicing is enabled, then
8675 -- set transfer type to 'INTCOM'. IF transfer type is 'INTCOM' the
8676 -- API below calls INV_TRANSACTION_FLOW_PUB.get_transfer_price.
8677 --
8678 -- For INTORG transfers, new transfer price API is called.
8679 --
8680 IF l_from_ou <> l_to_ou
8681 AND l_srctype = 8
8682 -- Internal Orders across OUs
8683 THEN
8684 --
8685 -- Bug 5349354: direct xfers are not considered as inter-company txn.
8686 --
8687 IF l_ic_invoicing_enabled = 1 and l_acttype = 21
8688 THEN
8689 l_xfer_type := 'INTCOM';
8690 l_xfer_source := 'INTCOM';
8691 ELSE
8692 l_xfer_type := 'INTORD';
8693 l_xfer_source := 'INTORD';
8694 END IF;
8695 ELSIF l_from_ou = l_to_ou
8696 AND l_srctype = 8
8697 -- Internal Orders within same OUs
8698 THEN
8699 l_xfer_type := 'INTORD';
8700 l_xfer_source := 'INTORD';
8701 ELSE
8702 -- InterOrg xfers
8703 l_xfer_type := 'INTORG';
8704 l_xfer_source := 'INTORG';
8705 END IF;
8706
8707 -- call transfer price API
8708 GMF_get_transfer_price_PUB.get_transfer_price (
8709 p_api_version => 1.0
8710 , p_init_msg_list => 'FALSE'
8711
8712 , p_inventory_item_id => l_itemid
8713 , p_transaction_qty => l_trxqty
8714 , p_transaction_uom => l_trxuom
8715
8716 --Bug9227278 , passing the p_transaction_date parameter.
8717 , p_transaction_date => l_trxdate
8718
8719 , p_transaction_id => l_order_line_id
8720 , p_global_procurement_flag => 'N'
8721 , p_drop_ship_flag => 'N'
8722
8723 , p_from_organization_id => l_orgid
8724 , p_from_ou => l_from_ou
8725 , p_to_organization_id => l_xorgid
8726 , p_to_ou => l_to_ou
8727
8728 , p_transfer_type => l_xfer_type -- INTORG or INTCOM
8729 , p_transfer_source => l_xfer_source
8730
8731 , x_return_status => x_return_status
8732 , x_msg_data => x_msg_data
8733 , x_msg_count => x_msg_count
8734
8735 , x_transfer_price => l_transfer_price -- in base currency txn uom
8736 , x_transfer_price_priuom => l_transfer_price_priuom -- in base currency
8737 , x_currency_code => x_currency_code
8738 , x_incr_transfer_price => x_incr_transfer_price
8739 , x_incr_currency_code => x_incr_currency_code
8740 );
8741
8742 IF (l_debug = 1) THEN
8743 inv_log_util.trace('After getting transfer price. Status: ' || x_return_status, 'INV_TXN_MANAGER_GRP','1');
8744 END IF;
8745
8746 IF x_return_status = FND_API.G_RET_STS_SUCCESS
8747 THEN
8748
8749 --
8750 -- Bug 5136335
8751 -- l_transfer_price_priuom can be NULL for discrete/discrete intercompany xfers.
8752 -- We need to ignore this error when intercompany setup is not done. This is handled
8753 -- in above GMF API call.
8754 -- So, moved this condition from above condition to not to raise any error.
8755 --
8756 IF l_transfer_price_priuom IS NOT NULL
8757 THEN
8758
8759 IF (l_debug = 1) THEN
8760 inv_log_util.trace('Updating MTI with transfer price: ' || l_transfer_price_priuom, 'INV_TXN_MANAGER_GRP','1');
8761 END IF;
8762
8763 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8764 SET LAST_UPDATE_DATE = SYSDATE,
8765 LAST_UPDATED_BY = p_userid,
8766 LAST_UPDATE_LOGIN = p_loginid,
8767 transfer_price = l_transfer_price_priuom
8768 WHERE ROWID = l_rowid;
8769 END IF;
8770 ELSE
8771 l_error_exp := x_msg_data;
8772 FND_MESSAGE.set_name('BOM', 'CST_XFER_PRICE_ERROR');
8773 l_error_code := FND_MESSAGE.get;
8774 errupdate(l_rowid,null);
8775 l_count := l_count + 1;
8776 RAISE fnd_api.g_exc_error;
8777 END IF;
8778
8779 ELSE
8780 IF (l_debug = 1) THEN
8781 inv_log_util.trace('InterOrg Xfer. Skipping transfer price API call as all conditions are not met.' ||
8782 ' From/To ProcessFlags: ' || l_process_enabled_flag_from ||'/'|| l_process_enabled_flag_to ||
8783 ' From/To OUs: ' || l_from_ou ||'/'|| l_to_ou ||
8784 ' l_ic_invoicing_enabled: ' || l_ic_invoicing_enabled,
8785 'INV_TXN_MANAGER_GRP',9);
8786 END IF;
8787 -- Not a process-discrete xfer. So, set xfer price to NULL
8788 l_transfer_price := NULL;
8789 END IF;
8790 END IF;
8791 --============================================================
8792 -- End OPM INVCONV changes by umoogala
8793 --============================================================
8794 IF (l_debug = 1) THEN
8795 inv_log_util.trace('end of validate lines inner sec uom code='||p_line_Rec_Type.secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
8796 inv_log_util.trace('end of validate lines inner lot control='||to_char(l_lotctrl), 'INV_TXN_MANAGER_GRP', 9);
8797 END IF;
8798 --Jalaj Srivastava Bug 4969885
8799 IF (l_lotctrl=2 AND p_line_Rec_Type.secondary_uom_code IS NOT NULL) THEN
8800 IF (l_debug = 1) THEN
8801 inv_log_util.trace('update secondary quantity on line as sum of lot level secondary quantities', 'INV_TXN_MANAGER_GRP', 9);
8802 END IF;
8803 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8804 SET secondary_transaction_quantity = (SELECT SUM(SECONDARY_TRANSACTION_QUANTITY)
8805 FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI
8806 WHERE MTLI.TRANSACTION_INTERFACE_ID = p_line_Rec_Type.TRANSACTION_INTERFACE_ID)
8807 WHERE ROWID = l_rowid;
8808 END IF;
8809
8810 /* Bug 6356567 Changes Starting */
8811 /*--------------------------------------------------------------+
8812 Validating Cost group
8813 +--------------------------------------------------------------*/
8814
8815 SELECT cost_group_id, transfer_cost_group_id
8816 INTO l_cost_group_id, l_xfer_cost_group_id
8817 FROM MTL_TRANSACTIONS_INTERFACE
8818 WHERE ROWID = l_rowid
8819 AND PROCESS_FLAG = 1;
8820
8821 IF l_cost_group_id is not null and l_acttype not in (5,6,24,30,50,51,52) THEN -- Modified 7025628
8822 l_temp_cost_group_id := get_costgrpid(l_orgid, l_subinv, l_locid);
8823 loaderrmsg('INV_INT_CSTGRP','INV_INT_CSTEXP');
8824
8825 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8826 SET LAST_UPDATE_DATE = SYSDATE,
8827 LAST_UPDATED_BY = p_userid,
8828 LAST_UPDATE_LOGIN = p_loginid,
8829 PROGRAM_UPDATE_DATE = SYSDATE,
8830 PROCESS_FLAG = 3,
8831 LOCK_FLAG = 2,
8832 ERROR_CODE = substrb(l_error_code,1,240),
8833 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8834 WHERE ROWID = l_rowid
8835 AND PROCESS_FLAG = 1
8836 AND TRANSACTION_ACTION_ID NOT IN (5,6,24,30,50,51,52) -- Added 7025628
8837 AND COST_GROUP_ID IS NOT NULL
8838 AND COST_GROUP_ID <> l_temp_cost_group_id
8839 AND EXISTS ( SELECT 1 -- Bug 8345339 Changes Start
8840 FROM MTL_PARAMETERS
8841 WHERE ORGANIZATION_ID = l_orgid
8842 AND WMS_ENABLED_FLAG = 'N'); -- Bug 8345339 Changes End
8843
8844 IF (l_debug = 1) THEN
8845 inv_log_util.trace('Validating cost group ', 'INV_TXN_MANAGER_GRP', 9);
8846 END IF;
8847 END IF;
8848
8849 /*--------------------------------------------------------------+
8850 Validating Transfer Cost group
8851 +--------------------------------------------------------------*/
8852
8853 IF l_xfer_cost_group_id is not null and l_acttype in (2,5,3,21) THEN
8854 IF l_acttype in (2, 5) THEN
8855 l_cg_org := l_orgid;
8856 ELSIF l_acttype in (3, 21) THEN
8857 l_cg_org := l_xorgid;
8858 END IF;
8859
8860 l_temp_xfer_cost_group_id := get_costgrpid(l_cg_org, l_xsubinv, l_xlocid);
8861 loaderrmsg('INV_INT_XCSTGRP','INV_INT_XCSTEXP');
8862
8863 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8864 SET LAST_UPDATE_DATE = SYSDATE,
8865 LAST_UPDATED_BY = p_userid,
8866 LAST_UPDATE_LOGIN = p_loginid,
8867 PROGRAM_UPDATE_DATE = SYSDATE,
8868 PROCESS_FLAG = 3,
8869 LOCK_FLAG = 2,
8870 ERROR_CODE = substrb(l_error_code,1,240),
8871 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8872 WHERE ROWID = l_rowid
8873 AND PROCESS_FLAG = 1
8874 AND TRANSACTION_ACTION_ID IN (2,3,21,5)
8875 AND TRANSFER_COST_GROUP_ID IS NOT NULL
8876 AND TRANSFER_COST_GROUP_ID <> l_temp_xfer_cost_group_id
8877 AND EXISTS ( SELECT 1 -- Bug 8345339 Changes Start
8878 FROM MTL_PARAMETERS
8879 WHERE ORGANIZATION_ID = l_cg_org
8880 AND WMS_ENABLED_FLAG = 'N'); -- Bug 8345339 Changes End
8881
8882 IF (l_debug = 1) THEN
8883 inv_log_util.trace('Validating xfer cost group ', 'INV_TXN_MANAGER_GRP', 9);
8884 END IF;
8885 END IF;
8886
8887 /* Bug 6356567 Changes Ending */
8888
8889 /*---------------------------------------+
8890 | Commit work only if not a CFM WIP txn |
8891 +---------------------------------------*/
8892 IF (l_flow_schedule_children <> 1) AND FND_API.To_Boolean( p_commit ) THEN
8893 COMMIT WORK;
8894 END IF;
8895 -- END LOOP;
8896
8897 --Fix For 9186813
8898
8899 --Verifying whether any of the specified serials are Group Marked
8900 --Particularly cross checking the serials against MO Txr suggession
8901 --If any of the serials marked then update the MTI record with error
8902
8903 FND_MESSAGE.set_name('INV', 'INV_SERIAL_USED');
8904 l_error_code := FND_MESSAGE.get;
8905 l_error_exp := l_error_code;
8906
8907 UPDATE MTL_TRANSACTIONS_INTERFACE
8908 SET LAST_UPDATE_DATE = SYSDATE,
8909 LAST_UPDATED_BY = p_userid,
8910 LAST_UPDATE_LOGIN = p_loginid,
8911 PROGRAM_UPDATE_DATE = SYSDATE,
8912 PROCESS_FLAG = 3,
8913 LOCK_FLAG = 2,
8914 ERROR_CODE = substrb(l_error_code,1,240),
8915 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8916 WHERE ROWID = l_rowid
8917 AND PROCESS_FLAG = 1
8918 AND (
8919 EXISTS
8920 (
8921 select 1 FROM mtl_serial_numbers msn, mtl_serial_numbers_interface msni,
8922 mtl_transactions_interface mti, mtl_material_transactions_temp mmtt
8923 WHERE msn.serial_number BETWEEN msni.fm_serial_number AND msni.to_serial_number
8924 AND Length(msn.serial_number) = Length(msni.fm_serial_number)
8925 AND msn.current_organization_id = mti.organization_id
8926 AND msn.inventory_item_id = mti.inventory_item_id
8927 AND msni.transaction_interface_id = mti.transaction_interface_id
8928 AND mmtt.transaction_temp_id = msn.group_mark_id
8929 AND mmtt.inventory_item_id = mti.inventory_item_id
8930 AND mmtt.transaction_source_type_id = 4 AND mmtt.transaction_action_id = 2
8931 AND mmtt.transaction_type_id = 64
8932 AND mmtt.organization_id = mti.organization_id
8933 AND mti.ROWID = l_rowid
8934 )
8935 OR EXISTS
8936 (
8937 select msn.serial_number, msn.group_mark_id,mti.transaction_interface_id
8938 FROM mtl_serial_numbers msn, mtl_serial_numbers_interface msni,
8939 mtl_transactions_interface mti,mtl_transaction_lots_interface mtli,
8940 mtl_material_transactions_temp mmtt
8941 WHERE msn.serial_number BETWEEN msni.fm_serial_number AND msni.to_serial_number
8942 AND Length(msn.serial_number) = Length(msni.fm_serial_number)
8943 AND msn.current_organization_id = mti.organization_id
8944 AND msn.inventory_item_id = mti.inventory_item_id
8945 AND msni.transaction_interface_id = mtli.serial_transaction_temp_id
8946 AND mtli.transaction_interface_id = mti.transaction_interface_id
8947 AND mmtt.transaction_temp_id = msn.group_mark_id
8948 AND mmtt.inventory_item_id = mti.inventory_item_id
8949 AND mmtt.transaction_source_type_id = 4
8950 AND mmtt.transaction_action_id = 2
8951 AND mmtt.transaction_type_id = 64
8952 AND mmtt.organization_id = mti.organization_id
8953 AND mti.ROWID = l_rowid
8954 ));
8955
8956 --End of Fix 9186813
8957
8958 EXCEPTION
8959 WHEN OTHERS THEN
8960 p_error_flag:='Y';
8961 IF (l_debug = 1) THEN
8962 inv_log_util.trace('Error in validate_line : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
8963 inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
8964 END IF;
8965
8966 UPDATE MTL_TRANSACTIONS_INTERFACE
8967 SET LAST_UPDATE_DATE = SYSDATE,
8968 LAST_UPDATED_BY = p_userid,
8969 LAST_UPDATE_LOGIN = p_loginid,
8970 PROGRAM_UPDATE_DATE = SYSDATE,
8971 PROCESS_FLAG = 3,
8972 LOCK_FLAG = 2,
8973 ERROR_CODE = substrb(l_error_code,1,240),
8974 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8975 WHERE ROWID = l_rowid
8976 AND PROCESS_FLAG = 1;
8977
8978 /*---------------------------------------+
8979 | Commit work only if not a CFM WIP txn |
8980 +---------------------------------------*/
8981 IF (l_flow_schedule_children <> 1) AND FND_API.To_Boolean( p_commit ) THEN
8982 COMMIT WORK;
8983 END IF;
8984
8985 l_error_exp := '';
8986 l_error_code := '';
8987 FND_MESSAGE.clear;
8988 return;
8989 END validate_lines;
8990
8991
8992 /******************************************************************
8993 *
8994 * get_open_period()
8995 *
8996 ******************************************************************/
8997 FUNCTION get_open_period(p_org_id NUMBER,p_trans_date DATE,p_chk_date NUMBER) RETURN NUMBER IS
8998
8999 chk_date NUMBER; /* 0 ignore date,1-return 0 if date doesn't fall in current
9000 period, -1 if Oracle error, otherwise period id*/
9001 trans_date DATE; /* transaction_date */
9002 acct_period_id NUMBER; /* period_close_id of current period */
9003
9004 BEGIN
9005 if ( l_debug is null) then
9006 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
9007 end if;
9008
9009 acct_period_id := 0; /* default value */
9010
9011 if (chk_date = 1) THEN
9012
9013 SELECT ACCT_PERIOD_ID
9014 INTO acct_period_id
9015 FROM ORG_ACCT_PERIODS
9016 WHERE PERIOD_CLOSE_DATE IS NULL
9017 AND ORGANIZATION_ID = p_org_id
9018 AND INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id)
9019 BETWEEN PERIOD_START_DATE and SCHEDULE_CLOSE_DATE
9020 ORDER BY PERIOD_START_DATE DESC, SCHEDULE_CLOSE_DATE ASC;
9021
9022 else
9023
9024 SELECT ACCT_PERIOD_ID
9025 INTO acct_period_id
9026 FROM ORG_ACCT_PERIODS
9027 WHERE PERIOD_CLOSE_DATE IS NULL
9028 AND ORGANIZATION_ID = p_org_id
9029 AND TRUNC(SCHEDULE_CLOSE_DATE) >=
9030 INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id)
9031 AND TRUNC(PERIOD_START_DATE) <=
9032 INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id);
9033 end if;
9034
9035 return(acct_period_id);
9036
9037 exception
9038 when NO_DATA_FOUND then
9039 acct_period_id := 0;
9040 return(acct_period_id);
9041 when OTHERS then
9042 acct_period_id := -1;
9043 return(acct_period_id);
9044
9045
9046 end get_open_period;
9047
9048
9049
9050 /******************************************************************
9051 *
9052 * tmpinsert()
9053 *
9054 ******************************************************************/
9055 FUNCTION tmpinsert(p_header_id IN NUMBER,
9056 p_validation_level IN NUMBER := fnd_api.g_valid_level_full )
9057 RETURN BOOLEAN
9058 IS
9059
9060 l_lt_flow_schedule NUMBER;
9061 l_count NUMBER := 0;
9062 l_patchset_j NUMBER := 0; /* 0 = No 1 = Yes */
9063
9064 BEGIN
9065 IF (l_debug is null) then
9066 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
9067 end if;
9068
9069 --bug 4574806. this will be used in the statements below for final
9070 --completion flag AS a decode
9071 IF (wip_constants.DMF_PATCHSET_LEVEL>=
9072 wip_constants.DMF_PATCHSET_J_VALUE) THEN
9073 l_patchset_j := 1;
9074 END IF;
9075
9076 --J-dev
9077 /** For patchset J.wip will do the computation for the
9078 /*completion_transaction_id. For J new colmns have been added
9079 /* move_transaction_id (new)
9080 /*completion_transaction_id (new)
9081 /*wip_supply_type (new)*/
9082
9083 l_lt_flow_schedule := gi_flow_schedule ;
9084
9085 /*OSFM Support for Serialized Lot Items*/
9086 IF (l_debug = 1)
9087 THEN
9088 inv_log_util.TRACE ( 'In tmpinsert '
9089 , 'INV_TXN_MANAGER_GRP'
9090 , '9'
9091 );
9092 END IF;
9093 /*********************************************************************
9094 * In case there are only Lot Split/Merge/Translate Transactions only*
9095 * we do a successful return *
9096 *********************************************************************/
9097 BEGIN
9098 SELECT 1
9099 INTO l_count
9100 FROM DUAL
9101 WHERE EXISTS (SELECT transaction_interface_id
9102 FROM mtl_transactions_interface
9103 WHERE transaction_header_id = p_header_id
9104 AND process_flag = 1
9105 AND transaction_type_id NOT IN
9106 (inv_globals.g_type_inv_lot_split
9107 , inv_globals.g_type_inv_lot_merge
9108 , inv_globals.g_type_inv_lot_translate));
9109 EXCEPTION
9110 WHEN OTHERS THEN
9111 l_count := 0;
9112 IF(l_debug = 1) THEN
9113 inv_log_util.TRACE ( 'Exce. Section l_count => ' || l_count
9114 , 'INV_TXN_MANAGER_GRP'
9115 , '9'
9116 );
9117 END IF;
9118 END;
9119 IF(l_count = 0 OR l_count IS NULL) THEN
9120 IF (l_debug = 1)
9121 THEN
9122 inv_log_util.TRACE ( 'Returning from tmpinsert '
9123 , 'INV_TXN_MANAGER_GRP'
9124 , '9'
9125 );
9126 END IF;
9127 RETURN TRUE;
9128 END IF;
9129
9130 /*OSFM Support for Serialized Lot Items*/
9131
9132 IF ( l_lt_flow_schedule = 0) THEN
9133
9134 INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
9135 TRANSACTION_HEADER_ID,
9136 TRANSACTION_TEMP_ID,
9137 SOURCE_CODE,
9138 SOURCE_LINE_ID,
9139 PROCESS_FLAG,
9140 CREATION_DATE,
9141 CREATED_BY,
9142 LAST_UPDATE_DATE,
9143 LAST_UPDATED_BY,
9144 LAST_UPDATE_LOGIN,
9145 PROGRAM_ID,
9146 PROGRAM_UPDATE_DATE,
9147 PROGRAM_APPLICATION_ID,
9148 REQUEST_ID,
9149 ORGANIZATION_ID,
9150 SUBINVENTORY_CODE,
9151 LOCATOR_ID,
9152 INVENTORY_ITEM_ID,
9153 REVISION,
9154 TRANSACTION_TYPE_ID,
9155 TRANSACTION_ACTION_ID,
9156 TRANSACTION_SOURCE_TYPE_ID,
9157 TRANSACTION_SOURCE_ID,
9158 TRANSACTION_SOURCE_NAME,
9159 TRANSACTION_REFERENCE,
9160 REASON_ID,
9161 TRANSACTION_DATE,
9162 ACCT_PERIOD_ID,
9163 TRANSACTION_QUANTITY,
9164 TRANSACTION_UOM,
9165 PRIMARY_QUANTITY,
9166 TRANSACTION_COST,
9167 DISTRIBUTION_ACCOUNT_ID,
9168 TRANSFER_SUBINVENTORY,
9169 TRANSFER_ORGANIZATION,
9170 TRANSFER_TO_LOCATION,
9171 SHIPMENT_NUMBER,
9172 TRANSPORTATION_COST,
9173 TRANSFER_COST,
9174 TRANSPORTATION_ACCOUNT,
9175 FREIGHT_CODE,
9176 CONTAINERS,
9177 WAYBILL_AIRBILL,
9178 EXPECTED_ARRIVAL_DATE,
9179 CURRENCY_CODE,
9180 CURRENCY_CONVERSION_DATE,
9181 CURRENCY_CONVERSION_TYPE,
9182 CURRENCY_CONVERSION_RATE,
9183 NEW_AVERAGE_COST,
9184 VALUE_CHANGE,
9185 PERCENTAGE_CHANGE,
9186 DEMAND_ID,
9187 DEMAND_SOURCE_HEADER_ID,
9188 DEMAND_SOURCE_LINE,
9189 DEMAND_SOURCE_DELIVERY,
9190 CUSTOMER_SHIP_ID,
9191 TRX_SOURCE_DELIVERY_ID,
9192 TRX_SOURCE_LINE_ID,
9193 PICKING_LINE_ID,
9194 REQUIRED_FLAG,
9195 NEGATIVE_REQ_FLAG,
9196 REPETITIVE_LINE_ID,
9197 PRIMARY_SWITCH,
9198 OPERATION_SEQ_NUM,
9199 SETUP_TEARDOWN_CODE,
9200 SCHEDULE_UPDATE_CODE,
9201 DEPARTMENT_ID,
9202 EMPLOYEE_CODE,
9203 SCHEDULE_ID,
9204 WIP_ENTITY_TYPE,
9205 ENCUMBRANCE_AMOUNT,
9206 ENCUMBRANCE_ACCOUNT,
9207 USSGL_TRANSACTION_CODE,
9208 SHIPPABLE_FLAG,
9209 REQUISITION_LINE_ID,
9210 REQUISITION_DISTRIBUTION_ID,
9211 SHIP_TO_LOCATION,
9212 COMPLETION_TRANSACTION_ID,
9213 ATTRIBUTE_CATEGORY,
9214 ATTRIBUTE1,
9215 ATTRIBUTE2,
9216 ATTRIBUTE3,
9217 ATTRIBUTE4,
9218 ATTRIBUTE5,
9219 ATTRIBUTE6,
9220 ATTRIBUTE7,
9221 ATTRIBUTE8,
9222 ATTRIBUTE9,
9223 ATTRIBUTE10,
9224 ATTRIBUTE11,
9225 ATTRIBUTE12,
9226 ATTRIBUTE13,
9227 ATTRIBUTE14,
9228 ATTRIBUTE15,
9229 MOVEMENT_ID,
9230 SOURCE_PROJECT_ID,
9231 SOURCE_TASK_ID,
9232 EXPENDITURE_TYPE,
9233 PA_EXPENDITURE_ORG_ID,
9234 PROJECT_ID,
9235 TASK_ID,
9236 TO_PROJECT_ID,
9237 TO_TASK_ID,
9238 POSTING_FLAG,
9239 FINAL_COMPLETION_FLAG,
9240 TRANSFER_PERCENTAGE,
9241 MATERIAL_ACCOUNT,
9242 MATERIAL_OVERHEAD_ACCOUNT,
9243 RESOURCE_ACCOUNT,
9244 OUTSIDE_PROCESSING_ACCOUNT,
9245 OVERHEAD_ACCOUNT,
9246 COST_GROUP_ID,
9247 FLOW_SCHEDULE,
9248 QA_COLLECTION_ID,
9249 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9250 OVERCOMPLETION_PRIMARY_QTY,
9251 OVERCOMPLETION_TRANSACTION_ID,
9252 END_ITEM_UNIT_NUMBER,
9253 ORG_COST_GROUP_ID, /* PCST (Periodic Cost Update) */
9254 COST_TYPE_ID, /* PCST */
9255 MOVE_ORDER_LINE_ID,
9256 LPN_ID,
9257 CONTENT_LPN_ID,
9258 TRANSFER_LPN_ID,
9259 ORGANIZATION_TYPE,
9260 TRANSFER_ORGANIZATION_TYPE,
9261 OWNING_ORGANIZATION_ID,
9262 OWNING_TP_TYPE,
9263 XFR_OWNING_ORGANIZATION_ID,
9264 TRANSFER_OWNING_TP_TYPE,
9265 PLANNING_ORGANIZATION_ID,
9266 PLANNING_TP_TYPE,
9267 XFR_PLANNING_ORGANIZATION_ID,
9268 TRANSFER_PLANNING_TP_TYPE,
9269 TRANSACTION_BATCH_ID,
9270 TRANSACTION_BATCH_SEQ,
9271 TRANSFER_COST_GROUP_ID,
9272 TRANSACTION_MODE,
9273 -- start of fix for eam
9274 -- added following 4 columns
9275 REBUILD_ITEM_ID,
9276 REBUILD_ACTIVITY_ID,
9277 REBUILD_SERIAL_NUMBER,
9278 rebuild_job_name,
9279 kanban_card_id ,-- end of fix for eam
9280 class_code,--J dev (accounting_class in MTI)
9281 scheduled_flag,--J dev
9282 schedule_number,--J dev
9283 routing_revision_date,--J dev
9284 move_transaction_id,--J dev
9285 wip_supply_type,--J dev
9286 build_sequence,--J dev
9287 bom_revision,--J dev
9288 routing_revision,--J dev
9289 bom_revision_date,--J dev
9290 alternate_bom_designator,--J dev
9291 alternate_routing_designator, -- end of fix for eam
9292 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi start
9293 SECONDARY_UOM_CODE, -- INVCONV fabdi end
9294 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9295 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9296 TRANSFER_PRICE, -- INVCONV umoogala For Process-Discrete Transfer Enh.
9297 scheduled_payback_date --BUG 7683172
9298 )
9299 SELECT
9300 TRANSACTION_HEADER_ID,
9301 TRANSACTION_INTERFACE_ID,
9302 SOURCE_CODE,
9303 SOURCE_LINE_ID,
9304 'Y',
9305 SYSDATE,
9306 CREATED_BY,
9307 SYSDATE,
9308 LAST_UPDATED_BY,
9309 LAST_UPDATE_LOGIN,
9310 PROGRAM_ID,
9311 SYSDATE,
9312 PROGRAM_APPLICATION_ID,
9313 REQUEST_ID,
9314 ORGANIZATION_ID,
9315 SUBINVENTORY_CODE,
9316 LOCATOR_ID,
9317 INVENTORY_ITEM_ID,
9318 REVISION,
9319 TRANSACTION_TYPE_ID,
9320 TRANSACTION_ACTION_ID,
9321 TRANSACTION_SOURCE_TYPE_ID,
9322 TRANSACTION_SOURCE_ID,
9323 TRANSACTION_SOURCE_NAME,
9324 TRANSACTION_REFERENCE,
9325 REASON_ID,
9326 TRANSACTION_DATE,
9327 ACCT_PERIOD_ID,
9328 TRANSACTION_QUANTITY,
9329 TRANSACTION_UOM,
9330 PRIMARY_QUANTITY,
9331 TRANSACTION_COST,
9332 DISTRIBUTION_ACCOUNT_ID,
9333 TRANSFER_SUBINVENTORY,
9334 TRANSFER_ORGANIZATION,
9335 TRANSFER_LOCATOR,
9336 SHIPMENT_NUMBER,
9337 TRANSPORTATION_COST,
9338 TRANSFER_COST,
9339 TRANSPORTATION_ACCOUNT,
9340 FREIGHT_CODE,
9341 CONTAINERS,
9342 WAYBILL_AIRBILL,
9343 EXPECTED_ARRIVAL_DATE,
9344 CURRENCY_CODE,
9345 CURRENCY_CONVERSION_DATE,
9346 CURRENCY_CONVERSION_TYPE,
9347 CURRENCY_CONVERSION_RATE,
9348 NEW_AVERAGE_COST,
9349 VALUE_CHANGE,
9350 PERCENTAGE_CHANGE,
9351 DEMAND_ID,
9352 DEMAND_SOURCE_HEADER_ID,
9353 DEMAND_SOURCE_LINE,
9354 DEMAND_SOURCE_DELIVERY,
9355 CUSTOMER_SHIP_ID,
9356 TRX_SOURCE_DELIVERY_ID,
9357 TRX_SOURCE_LINE_ID,
9358 PICKING_LINE_ID,
9359 REQUIRED_FLAG,
9360 NEGATIVE_REQ_FLAG,
9361 REPETITIVE_LINE_ID,
9362 PRIMARY_SWITCH,
9363 OPERATION_SEQ_NUM,
9364 SETUP_TEARDOWN_CODE,
9365 SCHEDULE_UPDATE_CODE,
9366 DEPARTMENT_ID,
9367 EMPLOYEE_CODE,
9368 SCHEDULE_ID,
9369 WIP_ENTITY_TYPE,
9370 ENCUMBRANCE_AMOUNT,
9371 ENCUMBRANCE_ACCOUNT,
9372 USSGL_TRANSACTION_CODE,
9373 SHIPPABLE_FLAG,
9374 REQUISITION_LINE_ID,
9375 REQUISITION_DISTRIBUTION_ID,
9376 SHIP_TO_LOCATION_ID,
9377 Nvl(completion_transaction_id,DECODE(TRANSACTION_ACTION_ID,31,
9378 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.
9379 ATTRIBUTE_CATEGORY,
9380 ATTRIBUTE1,
9381 ATTRIBUTE2,
9382 ATTRIBUTE3,
9383 ATTRIBUTE4,
9384 ATTRIBUTE5,
9385 ATTRIBUTE6,
9386 ATTRIBUTE7,
9387 ATTRIBUTE8,
9388 ATTRIBUTE9,
9389 ATTRIBUTE10,
9390 ATTRIBUTE11,
9391 ATTRIBUTE12,
9392 ATTRIBUTE13,
9393 ATTRIBUTE14,
9394 ATTRIBUTE15,
9395 MOVEMENT_ID,
9396 SOURCE_PROJECT_ID,
9397 SOURCE_TASK_ID,
9398 EXPENDITURE_TYPE,
9399 PA_EXPENDITURE_ORG_ID,
9400 PROJECT_ID,
9401 TASK_ID,
9402 TO_PROJECT_ID,
9403 TO_TASK_ID,
9404 'N',
9405 NVL(FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,FINAL_COMPLETION_FLAG,
9406 'N')),
9407 TRANSFER_PERCENTAGE,
9408 MATERIAL_ACCOUNT,
9409 MATERIAL_OVERHEAD_ACCOUNT,
9410 RESOURCE_ACCOUNT,
9411 OUTSIDE_PROCESSING_ACCOUNT,
9412 OVERHEAD_ACCOUNT,
9413 COST_GROUP_ID,
9414 FLOW_SCHEDULE,
9415 QA_COLLECTION_ID,
9416 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9417 OVERCOMPLETION_PRIMARY_QTY,
9418 OVERCOMPLETION_TRANSACTION_ID,
9419 END_ITEM_UNIT_NUMBER,
9420 ORG_COST_GROUP_ID, /* PCST */
9421 COST_TYPE_ID,
9422 DECODE(TRANSACTION_SOURCE_TYPE_ID,4,SOURCE_LINE_ID,null), /* PCST */
9423 LPN_ID,
9424 CONTENT_LPN_ID,
9425 transfer_lpn_id,
9426 organization_type,
9427 transfer_organization_type,
9428 owning_organization_id,
9429 owning_tp_type,
9430 xfr_owning_organization_id,
9431 transfer_owning_tp_type,
9432 planning_organization_id,
9433 planning_tp_type,
9434 xfr_planning_organization_id,
9435 TRANSFER_PLANNING_TP_TYPE,
9436 TRANSACTION_BATCH_ID,
9437 TRANSACTION_BATCH_SEQ,
9438 TRANSFER_COST_GROUP_ID,
9439 Decode(p_validation_level,fnd_api.g_valid_level_none,transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9440 -- start of fix for eam
9441 -- added following 4 columns
9442 REBUILD_ITEM_ID,
9443 REBUILD_ACTIVITY_ID,
9444 REBUILD_SERIAL_NUMBER,
9445 rebuild_job_name,
9446 -- end of fix for eam
9447 kanban_card_id,
9448 accounting_class,--J dev (class_code in mmtt)
9449 scheduled_flag,--J dev
9450 schedule_number,--J dev
9451 routing_revision_date,--J dev
9452 move_transaction_id,--J dev
9453 wip_supply_type , --J dev
9454 build_sequence,--J dev
9455 bom_revision,--J dev
9456 routing_revision,--J dev
9457 bom_revision_date,--J dev
9458 alternate_bom_designator,--J dev
9459 alternate_routing_designator, --J-dev
9460 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV start fabdi
9461 SECONDARY_UOM_CODE, -- INVCONV fabdi end
9462 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9463 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9464 TRANSFER_PRICE, -- INVCONV umoogala For Process-Discrete Transfer Enh.
9465 scheduled_payback_date --BUG 7683172
9466 FROM MTL_TRANSACTIONS_INTERFACE
9467 --WHERE ROWID = p_rowid--J-dev
9468 WHERE transaction_header_id = p_header_id
9469 AND PROCESS_FLAG = 1
9470 AND transaction_type_id NOT IN /*OSFM Support for Lot Serialized Items*/
9471 (inv_globals.g_type_inv_lot_split
9472 , inv_globals.g_type_inv_lot_merge
9473 , inv_globals.g_type_inv_lot_translate
9474 );
9475
9476 ELSE
9477 IF ( l_lt_flow_schedule <> 0 ) THEN
9478 INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
9479 TRANSACTION_HEADER_ID,
9480 TRANSACTION_TEMP_ID,
9481 SOURCE_CODE,
9482 SOURCE_LINE_ID,
9483 PROCESS_FLAG,
9484 CREATION_DATE,
9485 CREATED_BY,
9486 LAST_UPDATE_DATE,
9487 LAST_UPDATED_BY,
9488 LAST_UPDATE_LOGIN,
9489 PROGRAM_ID,
9490 PROGRAM_UPDATE_DATE,
9491 PROGRAM_APPLICATION_ID,
9492 REQUEST_ID,
9493 ORGANIZATION_ID,
9494 SUBINVENTORY_CODE,
9495 LOCATOR_ID,
9496 INVENTORY_ITEM_ID,
9497 REVISION,
9498 TRANSACTION_TYPE_ID,
9499 TRANSACTION_ACTION_ID,
9500 TRANSACTION_SOURCE_TYPE_ID,
9501 TRANSACTION_SOURCE_ID,
9502 TRANSACTION_SOURCE_NAME,
9503 TRANSACTION_REFERENCE,
9504 REASON_ID,
9505 TRANSACTION_DATE,
9506 ACCT_PERIOD_ID,
9507 TRANSACTION_QUANTITY,
9508 TRANSACTION_UOM,
9509 PRIMARY_QUANTITY,
9510 TRANSACTION_COST,
9511 DISTRIBUTION_ACCOUNT_ID,
9512 TRANSFER_SUBINVENTORY,
9513 TRANSFER_ORGANIZATION,
9514 TRANSFER_TO_LOCATION,
9515 SHIPMENT_NUMBER,
9516 TRANSPORTATION_COST,
9517 TRANSFER_COST,
9518 TRANSPORTATION_ACCOUNT,
9519 FREIGHT_CODE,
9520 CONTAINERS,
9521 WAYBILL_AIRBILL,
9522 EXPECTED_ARRIVAL_DATE,
9523 CURRENCY_CODE,
9524 CURRENCY_CONVERSION_DATE,
9525 CURRENCY_CONVERSION_TYPE,
9526 CURRENCY_CONVERSION_RATE,
9527 NEW_AVERAGE_COST,
9528 VALUE_CHANGE,
9529 PERCENTAGE_CHANGE,
9530 DEMAND_ID,
9531 DEMAND_SOURCE_HEADER_ID,
9532 DEMAND_SOURCE_LINE,
9533 DEMAND_SOURCE_DELIVERY,
9534 DEMAND_CLASS,
9535 CUSTOMER_SHIP_ID,
9536 TRX_SOURCE_DELIVERY_ID,
9537 TRX_SOURCE_LINE_ID,
9538 PICKING_LINE_ID,
9539 REQUIRED_FLAG,
9540 NEGATIVE_REQ_FLAG,
9541 REPETITIVE_LINE_ID,
9542 PRIMARY_SWITCH,
9543 OPERATION_SEQ_NUM,
9544 SETUP_TEARDOWN_CODE,
9545 SCHEDULE_UPDATE_CODE,
9546 DEPARTMENT_ID,
9547 EMPLOYEE_CODE,
9548 SCHEDULE_ID,
9549 WIP_ENTITY_TYPE,
9550 ENCUMBRANCE_AMOUNT,
9551 ENCUMBRANCE_ACCOUNT,
9552 USSGL_TRANSACTION_CODE,
9553 SHIPPABLE_FLAG,
9554 REQUISITION_LINE_ID,
9555 REQUISITION_DISTRIBUTION_ID,
9556 SHIP_TO_LOCATION,
9557 COMPLETION_TRANSACTION_ID,
9558 ATTRIBUTE_CATEGORY,
9559 ATTRIBUTE1,
9560 ATTRIBUTE2,
9561 ATTRIBUTE3,
9562 ATTRIBUTE4,
9563 ATTRIBUTE5,
9564 ATTRIBUTE6,
9565 ATTRIBUTE7,
9566 ATTRIBUTE8,
9567 ATTRIBUTE9,
9568 ATTRIBUTE10,
9569 ATTRIBUTE11,
9570 ATTRIBUTE12,
9571 ATTRIBUTE13,
9572 ATTRIBUTE14,
9573 ATTRIBUTE15,
9574 MOVEMENT_ID,
9575 SOURCE_PROJECT_ID,
9576 SOURCE_TASK_ID,
9577 EXPENDITURE_TYPE,
9578 PA_EXPENDITURE_ORG_ID,
9579 PROJECT_ID,
9580 TASK_ID,
9581 TO_PROJECT_ID,
9582 TO_TASK_ID,
9583 POSTING_FLAG,
9584 FINAL_COMPLETION_FLAG,
9585 TRANSFER_PERCENTAGE,
9586 MATERIAL_ACCOUNT,
9587 MATERIAL_OVERHEAD_ACCOUNT,
9588 RESOURCE_ACCOUNT,
9589 OUTSIDE_PROCESSING_ACCOUNT,
9590 OVERHEAD_ACCOUNT,
9591 COST_GROUP_ID,
9592 FLOW_SCHEDULE,
9593 QA_COLLECTION_ID,
9594 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9595 OVERCOMPLETION_PRIMARY_QTY,
9596 OVERCOMPLETION_TRANSACTION_ID,
9597 END_ITEM_UNIT_NUMBER,
9598 COMMON_BOM_SEQ_ID,
9599 COMMON_ROUTING_SEQ_ID,
9600 ORG_COST_GROUP_ID, /* PCST */
9601 COST_TYPE_ID,
9602 LPN_ID,
9603 CONTENT_LPN_ID,
9604 transfer_lpn_id,
9605 organization_type,
9606 transfer_organization_type,
9607 owning_organization_id,
9608 owning_tp_type,
9609 xfr_owning_organization_id,
9610 transfer_owning_tp_type,
9611 planning_organization_id,
9612 planning_tp_type,
9613 xfr_planning_organization_id,
9614 TRANSFER_PLANNING_TP_TYPE,
9615 TRANSACTION_BATCH_ID,
9616 TRANSACTION_BATCH_SEQ,
9617 TRANSFER_COST_GROUP_ID,
9618 TRANSACTION_MODE,
9619 -- start of fix for eam
9620 -- added following 4 columns
9621 REBUILD_ITEM_ID,
9622 REBUILD_ACTIVITY_ID,
9623 REBUILD_SERIAL_NUMBER,
9624 rebuild_job_name,
9625 -- end of fix for eam
9626 kanban_card_id,
9627 class_code,--J dev (class_code in mmtt)
9628 scheduled_flag,--J dev
9629 schedule_number,--J dev
9630 routing_revision_date,--J dev
9631 move_transaction_id,--J dev
9632 wip_supply_type,
9633 build_sequence,--J dev
9634 bom_revision,--J dev
9635 routing_revision,--J dev
9636 bom_revision_date,--J dev
9637 alternate_bom_designator,--J dev
9638 alternate_routing_designator , --J dev
9639 SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi
9640 SECONDARY_UOM_CODE, -- INVCONV fabdi end
9641 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9642 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9643 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9644 )
9645 SELECT
9646 MTI.TRANSACTION_HEADER_ID,
9647 MTI.TRANSACTION_INTERFACE_ID,
9648 MTI.SOURCE_CODE,
9649 MTI.SOURCE_LINE_ID,
9650 'Y',
9651 SYSDATE,
9652 MTI.CREATED_BY,
9653 SYSDATE,
9654 MTI.LAST_UPDATED_BY,
9655 MTI.LAST_UPDATE_LOGIN,
9656 MTI.PROGRAM_ID,
9657 SYSDATE,
9658 MTI.PROGRAM_APPLICATION_ID,
9659 MTI.REQUEST_ID,
9660 MTI.ORGANIZATION_ID,
9661 MTI.SUBINVENTORY_CODE,
9662 MTI.LOCATOR_ID,
9663 MTI.INVENTORY_ITEM_ID,
9664 MTI.REVISION,
9665 MTI.TRANSACTION_TYPE_ID,
9666 MTI.TRANSACTION_ACTION_ID,
9667 MTI.TRANSACTION_SOURCE_TYPE_ID,
9668 MTI.TRANSACTION_SOURCE_ID,
9669 MTI.TRANSACTION_SOURCE_NAME,
9670 MTI.TRANSACTION_REFERENCE,
9671 MTI.REASON_ID,
9672 MTI.TRANSACTION_DATE,
9673 MTI.ACCT_PERIOD_ID,
9674 MTI.TRANSACTION_QUANTITY,
9675 MTI.TRANSACTION_UOM,
9676 MTI.PRIMARY_QUANTITY,
9677 MTI.TRANSACTION_COST,
9678 MTI.DISTRIBUTION_ACCOUNT_ID,
9679 MTI.TRANSFER_SUBINVENTORY,
9680 MTI.TRANSFER_ORGANIZATION,
9681 MTI.TRANSFER_LOCATOR,
9682 MTI.SHIPMENT_NUMBER,
9683 MTI.TRANSPORTATION_COST,
9684 MTI.TRANSFER_COST,
9685 MTI.TRANSPORTATION_ACCOUNT,
9686 MTI.FREIGHT_CODE,
9687 MTI.CONTAINERS,
9688 MTI.WAYBILL_AIRBILL,
9689 MTI.EXPECTED_ARRIVAL_DATE,
9690 MTI.CURRENCY_CODE,
9691 MTI.CURRENCY_CONVERSION_DATE,
9692 MTI.CURRENCY_CONVERSION_TYPE,
9693 MTI.CURRENCY_CONVERSION_RATE,
9694 MTI.NEW_AVERAGE_COST,
9695 MTI.VALUE_CHANGE,
9696 MTI.PERCENTAGE_CHANGE,
9697 MTI.DEMAND_ID,
9698 MTI.DEMAND_SOURCE_HEADER_ID,
9699 MTI.DEMAND_SOURCE_LINE,
9700 MTI.DEMAND_SOURCE_DELIVERY,
9701 MTI.DEMAND_CLASS,
9702 MTI.CUSTOMER_SHIP_ID,
9703 MTI.TRX_SOURCE_DELIVERY_ID,
9704 MTI.TRX_SOURCE_LINE_ID,
9705 MTI.PICKING_LINE_ID,
9706 MTI.REQUIRED_FLAG,
9707 MTI.NEGATIVE_REQ_FLAG,
9708 MTI.REPETITIVE_LINE_ID,
9709 MTI.PRIMARY_SWITCH,
9710 MTI.OPERATION_SEQ_NUM,
9711 MTI.SETUP_TEARDOWN_CODE,
9712 MTI.SCHEDULE_UPDATE_CODE,
9713 MTI.DEPARTMENT_ID,
9714 MTI.EMPLOYEE_CODE,
9715 MTI.SCHEDULE_ID,
9716 MTI.WIP_ENTITY_TYPE,
9717 MTI.ENCUMBRANCE_AMOUNT,
9718 MTI.ENCUMBRANCE_ACCOUNT,
9719 MTI.USSGL_TRANSACTION_CODE,
9720 MTI.SHIPPABLE_FLAG,
9721 MTI.REQUISITION_LINE_ID,
9722 MTI.REQUISITION_DISTRIBUTION_ID,
9723 MTI.SHIP_TO_LOCATION_ID,
9724 NVL(mti.completion_transaction_id,MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL),
9725 --J-dev as wip may pass this to us in J. NVL for I
9726 MTI.ATTRIBUTE_CATEGORY,
9727 MTI.ATTRIBUTE1,
9728 MTI.ATTRIBUTE2,
9729 MTI.ATTRIBUTE3,
9730 MTI.ATTRIBUTE4,
9731 MTI.ATTRIBUTE5,
9732 MTI.ATTRIBUTE6,
9733 MTI.ATTRIBUTE7,
9734 MTI.ATTRIBUTE8,
9735 MTI.ATTRIBUTE9,
9736 MTI.ATTRIBUTE10,
9737 MTI.ATTRIBUTE11,
9738 MTI.ATTRIBUTE12,
9739 MTI.ATTRIBUTE13,
9740 MTI.ATTRIBUTE14,
9741 MTI.ATTRIBUTE15,
9742 MTI.MOVEMENT_ID,
9743 MTI.SOURCE_PROJECT_ID,
9744 MTI.SOURCE_TASK_ID,
9745 MTI.EXPENDITURE_TYPE,
9746 MTI.PA_EXPENDITURE_ORG_ID,
9747 MTI.PROJECT_ID,
9748 MTI.TASK_ID,
9749 MTI.TO_PROJECT_ID,
9750 MTI.TO_TASK_ID,
9751 'Y',
9752 NVL(MTI.FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
9753 MTI.TRANSFER_PERCENTAGE,
9754 MTI.MATERIAL_ACCOUNT,
9755 MTI.MATERIAL_OVERHEAD_ACCOUNT,
9756 MTI.RESOURCE_ACCOUNT,
9757 MTI.OUTSIDE_PROCESSING_ACCOUNT,
9758 MTI.OVERHEAD_ACCOUNT,
9759 MTI.COST_GROUP_ID,
9760 MTI.FLOW_SCHEDULE,
9761 MTI.QA_COLLECTION_ID,
9762 MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9763 MTI.OVERCOMPLETION_PRIMARY_QTY,
9764 MTI.OVERCOMPLETION_TRANSACTION_ID,
9765 MTI.END_ITEM_UNIT_NUMBER,
9766 BOM.COMMON_BILL_SEQUENCE_ID,
9767 BOR.COMMON_ROUTING_SEQUENCE_ID,
9768 ORG_COST_GROUP_ID, /* PCST */
9769 COST_TYPE_ID, /* PCST */
9770 MTI.LPN_ID,
9771 MTI.CONTENT_LPN_ID,
9772 MTI.TRANSFER_LPN_ID,
9773 MTI.ORGANIZATION_TYPE,
9774 MTI.TRANSFER_ORGANIZATION_TYPE,
9775 MTI.OWNING_ORGANIZATION_ID,
9776 MTI.OWNING_TP_TYPE,
9777 MTI.XFR_OWNING_ORGANIZATION_ID,
9778 MTI.TRANSFER_OWNING_TP_TYPE,
9779 MTI.PLANNING_ORGANIZATION_ID,
9780 MTI.PLANNING_TP_TYPE,
9781 MTI.XFR_PLANNING_ORGANIZATION_ID,
9782 MTI.TRANSFER_PLANNING_TP_TYPE,
9783 MTI.TRANSACTION_BATCH_ID,
9784 MTI.TRANSACTION_BATCH_SEQ,
9785 MTI.TRANSFER_COST_GROUP_ID,
9786 Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9787 -- start of fix for eam
9788 -- added following 4 columns
9789 MTI.REBUILD_ITEM_ID,
9790 MTI.REBUILD_ACTIVITY_ID,
9791 MTI.REBUILD_SERIAL_NUMBER,
9792 MTI.rebuild_job_name,
9793 -- end of fix for eam
9794 mti.kanban_card_id,
9795 mti.accounting_class,--J dev (class_code in mmtt)
9796 mti.scheduled_flag,--J dev
9797 mti.schedule_number,--J dev
9798 mti.routing_revision_date,--J dev
9799 mti.move_transaction_id,--J dev
9800 mti.wip_supply_type,--J-dev
9801 mti.build_sequence,--J dev
9802 mti.bom_revision,--J dev
9803 mti.routing_revision,--J dev
9804 mti.bom_revision_date,--J dev
9805 mti.alternate_bom_designator,--J dev
9806 mti.alternate_routing_designator, --J dev
9807 mti.SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi
9808 mti.SECONDARY_UOM_CODE, -- INVCONV fabdi
9809 mti.RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9810 mti.RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9811 mti.TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
9812 FROM MTL_TRANSACTIONS_INTERFACE MTI,
9813 BOM_BILL_OF_MATERIALS BOM,
9814 BOM_OPERATIONAL_ROUTINGS BOR
9815 WHERE TRANSACTION_HEADER_ID = p_header_id
9816 /*WHERE MTI.ROWID = p_rowid*/--J-dev
9817 AND PROCESS_FLAG = 1
9818 AND TRANSACTION_ACTION_ID IN (30,31, 32) /* CFM Scrap Transactions */
9819 AND BOM.ASSEMBLY_ITEM_ID(+) = MTI.INVENTORY_ITEM_ID
9820 AND BOM.ORGANIZATION_ID(+) = MTI.ORGANIZATION_ID
9821 AND ((BOM.ALTERNATE_BOM_DESIGNATOR is null AND
9822 MTI.ALTERNATE_BOM_DESIGNATOR is null) OR
9823 (BOM.ALTERNATE_BOM_DESIGNATOR = MTI.ALTERNATE_BOM_DESIGNATOR))
9824 AND BOR.ASSEMBLY_ITEM_ID(+) = MTI.INVENTORY_ITEM_ID
9825 AND BOR.ORGANIZATION_ID(+) = MTI.ORGANIZATION_ID
9826 AND ((BOR.ALTERNATE_ROUTING_DESIGNATOR is null AND
9827 MTI.ALTERNATE_ROUTING_DESIGNATOR is null) OR
9828 (BOR.ALTERNATE_ROUTING_DESIGNATOR = MTI.ALTERNATE_ROUTING_DESIGNATOR));
9829
9830
9831 --J-dev IF WIP J is installed, directly copy all records for
9832 --action 1, 27, 33, 34. The parnet will be in MTI and not in
9833 --MMTT
9834 --In case for I, use the current statement.
9835
9836 IF (wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE) THEN
9837 INSERT INTO mtl_material_transactions_temp
9838 (
9839 TRANSACTION_HEADER_ID,
9840 TRANSACTION_TEMP_ID,
9841 SOURCE_CODE,
9842 SOURCE_LINE_ID,
9843 PROCESS_FLAG,
9844 CREATION_DATE,
9845 CREATED_BY,
9846 LAST_UPDATE_DATE,
9847 LAST_UPDATED_BY,
9848 LAST_UPDATE_LOGIN,
9849 PROGRAM_ID,
9850 PROGRAM_UPDATE_DATE,
9851 PROGRAM_APPLICATION_ID,
9852 REQUEST_ID,
9853 ORGANIZATION_ID,
9854 SUBINVENTORY_CODE,
9855 LOCATOR_ID,
9856 INVENTORY_ITEM_ID,
9857 REVISION,
9858 TRANSACTION_TYPE_ID,
9859 TRANSACTION_ACTION_ID,
9860 TRANSACTION_SOURCE_TYPE_ID,
9861 TRANSACTION_SOURCE_ID,
9862 TRANSACTION_SOURCE_NAME,
9863 TRANSACTION_REFERENCE,
9864 REASON_ID,
9865 TRANSACTION_DATE,
9866 ACCT_PERIOD_ID,
9867 TRANSACTION_QUANTITY,
9868 TRANSACTION_UOM,
9869 PRIMARY_QUANTITY,
9870 TRANSACTION_COST,
9871 DISTRIBUTION_ACCOUNT_ID,
9872 TRANSFER_SUBINVENTORY,
9873 TRANSFER_ORGANIZATION,
9874 TRANSFER_TO_LOCATION,
9875 SHIPMENT_NUMBER,
9876 TRANSPORTATION_COST,
9877 TRANSFER_COST,
9878 TRANSPORTATION_ACCOUNT,
9879 FREIGHT_CODE,
9880 CONTAINERS,
9881 WAYBILL_AIRBILL,
9882 EXPECTED_ARRIVAL_DATE,
9883 CURRENCY_CODE,
9884 CURRENCY_CONVERSION_DATE,
9885 CURRENCY_CONVERSION_TYPE,
9886 CURRENCY_CONVERSION_RATE,
9887 NEW_AVERAGE_COST,
9888 VALUE_CHANGE,
9889 PERCENTAGE_CHANGE,
9890 DEMAND_ID,
9891 DEMAND_SOURCE_HEADER_ID,
9892 DEMAND_SOURCE_LINE,
9893 DEMAND_SOURCE_DELIVERY,
9894 DEMAND_CLASS,
9895 CUSTOMER_SHIP_ID,
9896 TRX_SOURCE_DELIVERY_ID,
9897 TRX_SOURCE_LINE_ID,
9898 PICKING_LINE_ID,
9899 REQUIRED_FLAG,
9900 NEGATIVE_REQ_FLAG,
9901 REPETITIVE_LINE_ID,
9902 PRIMARY_SWITCH,
9903 OPERATION_SEQ_NUM,
9904 SETUP_TEARDOWN_CODE,
9905 SCHEDULE_UPDATE_CODE,
9906 DEPARTMENT_ID,
9907 EMPLOYEE_CODE,
9908 SCHEDULE_ID,
9909 WIP_ENTITY_TYPE,
9910 ENCUMBRANCE_AMOUNT,
9911 ENCUMBRANCE_ACCOUNT,
9912 USSGL_TRANSACTION_CODE,
9913 SHIPPABLE_FLAG,
9914 REQUISITION_LINE_ID,
9915 REQUISITION_DISTRIBUTION_ID,
9916 SHIP_TO_LOCATION,
9917 COMPLETION_TRANSACTION_ID,
9918 ATTRIBUTE_CATEGORY,
9919 ATTRIBUTE1,
9920 ATTRIBUTE2,
9921 ATTRIBUTE3,
9922 ATTRIBUTE4,
9923 ATTRIBUTE5,
9924 ATTRIBUTE6,
9925 ATTRIBUTE7,
9926 ATTRIBUTE8,
9927 ATTRIBUTE9,
9928 ATTRIBUTE10,
9929 ATTRIBUTE11,
9930 ATTRIBUTE12,
9931 ATTRIBUTE13,
9932 ATTRIBUTE14,
9933 ATTRIBUTE15,
9934 MOVEMENT_ID,
9935 SOURCE_PROJECT_ID,
9936 SOURCE_TASK_ID,
9937 EXPENDITURE_TYPE,
9938 PA_EXPENDITURE_ORG_ID,
9939 PROJECT_ID,
9940 TASK_ID,
9941 TO_PROJECT_ID,
9942 TO_TASK_ID,
9943 POSTING_FLAG,
9944 FINAL_COMPLETION_FLAG,
9945 TRANSFER_PERCENTAGE,
9946 MATERIAL_ACCOUNT,
9947 MATERIAL_OVERHEAD_ACCOUNT,
9948 RESOURCE_ACCOUNT,
9949 OUTSIDE_PROCESSING_ACCOUNT,
9950 OVERHEAD_ACCOUNT,
9951 COST_GROUP_ID,
9952 FLOW_SCHEDULE,
9953 QA_COLLECTION_ID,
9954 OVERCOMPLETION_TRANSACTION_QTY, -- Overcompletion Transactions --
9955 OVERCOMPLETION_PRIMARY_QTY,
9956 OVERCOMPLETION_TRANSACTION_ID,
9957 END_ITEM_UNIT_NUMBER,
9958 ORG_COST_GROUP_ID, -- PCST --
9959 COST_TYPE_ID, /* PCST */
9960 LPN_ID,
9961 CONTENT_LPN_ID,
9962 transfer_lpn_id,
9963 organization_type,
9964 transfer_organization_type,
9965 owning_organization_id,
9966 owning_tp_type,
9967 xfr_owning_organization_id,
9968 transfer_owning_tp_type,
9969 planning_organization_id,
9970 planning_tp_type,
9971 xfr_planning_organization_id,
9972 TRANSFER_PLANNING_TP_TYPE,
9973 TRANSACTION_BATCH_ID,
9974 TRANSACTION_BATCH_SEQ,
9975 TRANSFER_COST_GROUP_ID,
9976 TRANSACTION_MODE,
9977 -- start of fix for eam
9978 -- added following 4 columns
9979 REBUILD_ITEM_ID,
9980 REBUILD_ACTIVITY_ID,
9981 REBUILD_SERIAL_NUMBER,
9982 rebuild_job_name,
9983 kanban_card_id,
9984 class_code,--J dev (class_code in mmtt)
9985 scheduled_flag,--J dev
9986 schedule_number,--J dev
9987 routing_revision_date,--J dev
9988 move_transaction_id,--J dev
9989 wip_supply_type,
9990 build_sequence,--J dev
9991 bom_revision,--J dev
9992 routing_revision,--J dev
9993 bom_revision_date,--J dev
9994 alternate_bom_designator,--J dev
9995 alternate_routing_designator , -- end of fix for eam
9996 SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi start
9997 SECONDARY_UOM_CODE, -- INVCONV fabdi end
9998 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
9999 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
10000 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
10001 )
10002 SELECT
10003 MTI.TRANSACTION_HEADER_ID,
10004 MTI.TRANSACTION_INTERFACE_ID,
10005 MTI.SOURCE_CODE,
10006 MTI.SOURCE_LINE_ID,
10007 'Y',
10008 SYSDATE,
10009 MTI.CREATED_BY,
10010 SYSDATE,
10011 MTI.LAST_UPDATED_BY,
10012 MTI.LAST_UPDATE_LOGIN,
10013 MTI.PROGRAM_ID,
10014 SYSDATE,
10015 MTI.PROGRAM_APPLICATION_ID,
10016 MTI.REQUEST_ID,
10017 MTI.ORGANIZATION_ID,
10018 MTI.SUBINVENTORY_CODE,
10019 MTI.LOCATOR_ID,
10020 MTI.INVENTORY_ITEM_ID,
10021 MTI.REVISION,
10022 MTI.TRANSACTION_TYPE_ID,
10023 MTI.TRANSACTION_ACTION_ID,
10024 MTI.TRANSACTION_SOURCE_TYPE_ID,
10025 MTI.TRANSACTION_SOURCE_ID,
10026 MTI.TRANSACTION_SOURCE_NAME,
10027 MTI.TRANSACTION_REFERENCE,
10028 MTI.REASON_ID,
10029 MTI.TRANSACTION_DATE,
10030 MTI.ACCT_PERIOD_ID,
10031 MTI.TRANSACTION_QUANTITY,
10032 MTI.TRANSACTION_UOM,
10033 MTI.PRIMARY_QUANTITY,
10034 MTI.TRANSACTION_COST,
10035 MTI.DISTRIBUTION_ACCOUNT_ID,
10036 MTI.TRANSFER_SUBINVENTORY,
10037 MTI.TRANSFER_ORGANIZATION,
10038 MTI.TRANSFER_LOCATOR,
10039 MTI.SHIPMENT_NUMBER,
10040 MTI.TRANSPORTATION_COST,
10041 MTI.TRANSFER_COST,
10042 MTI.TRANSPORTATION_ACCOUNT,
10043 MTI.FREIGHT_CODE,
10044 MTI.CONTAINERS,
10045 MTI.WAYBILL_AIRBILL,
10046 MTI.EXPECTED_ARRIVAL_DATE,
10047 MTI.CURRENCY_CODE,
10048 MTI.CURRENCY_CONVERSION_DATE,
10049 MTI.CURRENCY_CONVERSION_TYPE,
10050 MTI.CURRENCY_CONVERSION_RATE,
10051 MTI.NEW_AVERAGE_COST,
10052 MTI.VALUE_CHANGE,
10053 MTI.PERCENTAGE_CHANGE,
10054 MTI.DEMAND_ID,
10055 MTI.DEMAND_SOURCE_HEADER_ID,
10056 MTI.DEMAND_SOURCE_LINE,
10057 MTI.DEMAND_SOURCE_DELIVERY,
10058 MTI.DEMAND_CLASS,
10059 MTI.CUSTOMER_SHIP_ID,
10060 MTI.TRX_SOURCE_DELIVERY_ID,
10061 MTI.TRX_SOURCE_LINE_ID,
10062 MTI.PICKING_LINE_ID,
10063 MTI.REQUIRED_FLAG,
10064 MTI.NEGATIVE_REQ_FLAG,
10065 MTI.REPETITIVE_LINE_ID,
10066 MTI.PRIMARY_SWITCH,
10067 MTI.OPERATION_SEQ_NUM,
10068 MTI.SETUP_TEARDOWN_CODE,
10069 MTI.SCHEDULE_UPDATE_CODE,
10070 MTI.DEPARTMENT_ID,
10071 MTI.EMPLOYEE_CODE,
10072 MTI.SCHEDULE_ID,
10073 MTI.WIP_ENTITY_TYPE,
10074 MTI.ENCUMBRANCE_AMOUNT,
10075 MTI.ENCUMBRANCE_ACCOUNT,
10076 MTI.USSGL_TRANSACTION_CODE,
10077 MTI.SHIPPABLE_FLAG,
10078 MTI.REQUISITION_LINE_ID,
10079 MTI.REQUISITION_DISTRIBUTION_ID,
10080 MTI.SHIP_TO_LOCATION_ID,
10081 MTI.COMPLETION_TRANSACTION_ID,
10082 MTI.ATTRIBUTE_CATEGORY,
10083 MTI.ATTRIBUTE1,
10084 MTI.ATTRIBUTE2,
10085 MTI.ATTRIBUTE3,
10086 MTI.ATTRIBUTE4,
10087 MTI.ATTRIBUTE5,
10088 MTI.ATTRIBUTE6,
10089 MTI.ATTRIBUTE7,
10090 MTI.ATTRIBUTE8,
10091 MTI.ATTRIBUTE9,
10092 MTI.ATTRIBUTE10,
10093 MTI.ATTRIBUTE11,
10094 MTI.ATTRIBUTE12,
10095 MTI.ATTRIBUTE13,
10096 MTI.ATTRIBUTE14,
10097 MTI.ATTRIBUTE15,
10098 MTI.MOVEMENT_ID,
10099 MTI.SOURCE_PROJECT_ID,
10100 MTI.SOURCE_TASK_ID,
10101 MTI.EXPENDITURE_TYPE,
10102 MTI.PA_EXPENDITURE_ORG_ID,
10103 MTI.PROJECT_ID,
10104 MTI.TASK_ID,
10105 MTI.TO_PROJECT_ID,
10106 MTI.TO_TASK_ID,
10107 'Y',
10108 NVL(MTI.FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
10109 MTI.TRANSFER_PERCENTAGE,
10110 MTI.MATERIAL_ACCOUNT,
10111 MTI.MATERIAL_OVERHEAD_ACCOUNT,
10112 MTI.RESOURCE_ACCOUNT,
10113 MTI.OUTSIDE_PROCESSING_ACCOUNT,
10114 MTI.OVERHEAD_ACCOUNT,
10115 MTI.COST_GROUP_ID,
10116 MTI.FLOW_SCHEDULE,
10117 MTI.QA_COLLECTION_ID,
10118 MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
10119 MTI.OVERCOMPLETION_PRIMARY_QTY,
10120 MTI.OVERCOMPLETION_TRANSACTION_ID,
10121 MTI.END_ITEM_UNIT_NUMBER,
10122 MTI.ORG_COST_GROUP_ID, /* PCST */
10123 MTI.COST_TYPE_ID, /* PCST */
10124 MTI.LPN_ID,
10125 MTI.CONTENT_LPN_ID,
10126 MTI.TRANSFER_LPN_ID , /* PCST */
10127 mti.organization_type,
10128 mti.transfer_organization_type,
10129 mti.owning_organization_id,
10130 mti.owning_tp_type,
10131 mti.xfr_owning_organization_id,
10132 mti.transfer_owning_tp_type,
10133 mti.planning_organization_id,
10134 mti.planning_tp_type,
10135 mti.xfr_planning_organization_id,
10136 mti.TRANSFER_PLANNING_TP_TYPE,
10137 MTI.TRANSACTION_BATCH_ID,
10138 MTI.TRANSACTION_BATCH_SEQ,
10139 MTI.TRANSFER_COST_GROUP_ID,
10140 Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
10141 -- start of fix for eam
10142 -- added following 4 columns
10143 MTI.REBUILD_ITEM_ID,
10144 MTI.REBUILD_ACTIVITY_ID,
10145 MTI.REBUILD_SERIAL_NUMBER,
10146 MTI.rebuild_job_name,
10147 -- end of fix for eam
10148 mti.kanban_card_id,
10149 mti.accounting_class,--J dev (class_code in mmtt)
10150 mti.scheduled_flag,--J dev
10151 mti.schedule_number,--J dev
10152 mti.routing_revision_date,--J dev
10153 mti.move_transaction_id,--J de
10154 mti.wip_supply_type,
10155 mti.build_sequence,--J dev
10156 mti.bom_revision,--J dev
10157 mti.routing_revision,--J dev
10158 mti.bom_revision_date,--J dev
10159 mti.alternate_bom_designator,--J dev
10160 mti.alternate_routing_designator ,
10161 mti.SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi start
10162 mti.SECONDARY_UOM_CODE, -- INVCONV fabdi end
10163 mti.RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
10164 mti.RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
10165 mti.TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
10166 FROM MTL_TRANSACTIONS_INTERFACE MTI
10167 WHERE MTI.TRANSACTION_HEADER_ID = p_header_id
10168 and MTI.PROCESS_FLAG = 1
10169 and MTI.TRANSACTION_ACTION_ID IN (1, 27, 33, 34) ;
10170
10171 ELSE
10172
10173 INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
10174 TRANSACTION_HEADER_ID,
10175 TRANSACTION_TEMP_ID,
10176 SOURCE_CODE,
10177 SOURCE_LINE_ID,
10178 PROCESS_FLAG,
10179 CREATION_DATE,
10180 CREATED_BY,
10181 LAST_UPDATE_DATE,
10182 LAST_UPDATED_BY,
10183 LAST_UPDATE_LOGIN,
10184 PROGRAM_ID,
10185 PROGRAM_UPDATE_DATE,
10186 PROGRAM_APPLICATION_ID,
10187 REQUEST_ID,
10188 ORGANIZATION_ID,
10189 SUBINVENTORY_CODE,
10190 LOCATOR_ID,
10191 INVENTORY_ITEM_ID,
10192 REVISION,
10193 TRANSACTION_TYPE_ID,
10194 TRANSACTION_ACTION_ID,
10195 TRANSACTION_SOURCE_TYPE_ID,
10196 TRANSACTION_SOURCE_ID,
10197 TRANSACTION_SOURCE_NAME,
10198 TRANSACTION_REFERENCE,
10199 REASON_ID,
10200 TRANSACTION_DATE,
10201 ACCT_PERIOD_ID,
10202 TRANSACTION_QUANTITY,
10203 TRANSACTION_UOM,
10204 PRIMARY_QUANTITY,
10205 TRANSACTION_COST,
10206 DISTRIBUTION_ACCOUNT_ID,
10207 TRANSFER_SUBINVENTORY,
10208 TRANSFER_ORGANIZATION,
10209 TRANSFER_TO_LOCATION,
10210 SHIPMENT_NUMBER,
10211 TRANSPORTATION_COST,
10212 TRANSFER_COST,
10213 TRANSPORTATION_ACCOUNT,
10214 FREIGHT_CODE,
10215 CONTAINERS,
10216 WAYBILL_AIRBILL,
10217 EXPECTED_ARRIVAL_DATE,
10218 CURRENCY_CODE,
10219 CURRENCY_CONVERSION_DATE,
10220 CURRENCY_CONVERSION_TYPE,
10221 CURRENCY_CONVERSION_RATE,
10222 NEW_AVERAGE_COST,
10223 VALUE_CHANGE,
10224 PERCENTAGE_CHANGE,
10225 DEMAND_ID,
10226 DEMAND_SOURCE_HEADER_ID,
10227 DEMAND_SOURCE_LINE,
10228 DEMAND_SOURCE_DELIVERY,
10229 DEMAND_CLASS,
10230 CUSTOMER_SHIP_ID,
10231 TRX_SOURCE_DELIVERY_ID,
10232 TRX_SOURCE_LINE_ID,
10233 PICKING_LINE_ID,
10234 REQUIRED_FLAG,
10235 NEGATIVE_REQ_FLAG,
10236 REPETITIVE_LINE_ID,
10237 PRIMARY_SWITCH,
10238 OPERATION_SEQ_NUM,
10239 SETUP_TEARDOWN_CODE,
10240 SCHEDULE_UPDATE_CODE,
10241 DEPARTMENT_ID,
10242 EMPLOYEE_CODE,
10243 SCHEDULE_ID,
10244 WIP_ENTITY_TYPE,
10245 ENCUMBRANCE_AMOUNT,
10246 ENCUMBRANCE_ACCOUNT,
10247 USSGL_TRANSACTION_CODE,
10248 SHIPPABLE_FLAG,
10249 REQUISITION_LINE_ID,
10250 REQUISITION_DISTRIBUTION_ID,
10251 SHIP_TO_LOCATION,
10252 COMPLETION_TRANSACTION_ID,
10253 ATTRIBUTE_CATEGORY,
10254 ATTRIBUTE1,
10255 ATTRIBUTE2,
10256 ATTRIBUTE3,
10257 ATTRIBUTE4,
10258 ATTRIBUTE5,
10259 ATTRIBUTE6,
10260 ATTRIBUTE7,
10261 ATTRIBUTE8,
10262 ATTRIBUTE9,
10263 ATTRIBUTE10,
10264 ATTRIBUTE11,
10265 ATTRIBUTE12,
10266 ATTRIBUTE13,
10267 ATTRIBUTE14,
10268 ATTRIBUTE15,
10269 MOVEMENT_ID,
10270 SOURCE_PROJECT_ID,
10271 SOURCE_TASK_ID,
10272 EXPENDITURE_TYPE,
10273 PA_EXPENDITURE_ORG_ID,
10274 PROJECT_ID,
10275 TASK_ID,
10276 TO_PROJECT_ID,
10277 TO_TASK_ID,
10278 POSTING_FLAG,
10279 FINAL_COMPLETION_FLAG,
10280 TRANSFER_PERCENTAGE,
10281 MATERIAL_ACCOUNT,
10282 MATERIAL_OVERHEAD_ACCOUNT,
10283 RESOURCE_ACCOUNT,
10284 OUTSIDE_PROCESSING_ACCOUNT,
10285 OVERHEAD_ACCOUNT,
10286 COST_GROUP_ID,
10287 FLOW_SCHEDULE,
10288 QA_COLLECTION_ID,
10289 OVERCOMPLETION_TRANSACTION_QTY, -- Overcompletion Transactions --
10290 OVERCOMPLETION_PRIMARY_QTY,
10291 OVERCOMPLETION_TRANSACTION_ID,
10292 END_ITEM_UNIT_NUMBER,
10293 ORG_COST_GROUP_ID, -- PCST --
10294 COST_TYPE_ID, /* PCST */
10295 LPN_ID,
10296 CONTENT_LPN_ID,
10297 transfer_lpn_id,
10298 organization_type,
10299 transfer_organization_type,
10300 owning_organization_id,
10301 owning_tp_type,
10302 xfr_owning_organization_id,
10303 transfer_owning_tp_type,
10304 planning_organization_id,
10305 planning_tp_type,
10306 xfr_planning_organization_id,
10307 TRANSFER_PLANNING_TP_TYPE,
10308 TRANSACTION_BATCH_ID,
10309 TRANSACTION_BATCH_SEQ,
10310 TRANSFER_COST_GROUP_ID,
10311 TRANSACTION_MODE,
10312 -- start of fix for eam
10313 -- added following 4 columns
10314 REBUILD_ITEM_ID,
10315 REBUILD_ACTIVITY_ID,
10316 REBUILD_SERIAL_NUMBER,
10317 rebuild_job_name,
10318 kanban_card_id,
10319 build_sequence,--J dev
10320 bom_revision,--J dev
10321 routing_revision,--J dev
10322 bom_revision_date,--J dev
10323 alternate_bom_designator,--J dev
10324 alternate_routing_designator,-- end of fix for eam
10325 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi
10326 SECONDARY_UOM_CODE, -- INVCONV fabdi end
10327 RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
10328 RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
10329 TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
10330 )
10331 SELECT
10332 MTI.TRANSACTION_HEADER_ID,
10333 MTI.TRANSACTION_INTERFACE_ID,
10334 MTI.SOURCE_CODE,
10335 MTI.SOURCE_LINE_ID,
10336 'Y',
10337 SYSDATE,
10338 MTI.CREATED_BY,
10339 SYSDATE,
10340 MTI.LAST_UPDATED_BY,
10341 MTI.LAST_UPDATE_LOGIN,
10342 MTI.PROGRAM_ID,
10343 SYSDATE,
10344 MTI.PROGRAM_APPLICATION_ID,
10345 MTI.REQUEST_ID,
10346 MTI.ORGANIZATION_ID,
10347 MTI.SUBINVENTORY_CODE,
10348 MTI.LOCATOR_ID,
10349 MTI.INVENTORY_ITEM_ID,
10350 MTI.REVISION,
10351 MTI.TRANSACTION_TYPE_ID,
10352 MTI.TRANSACTION_ACTION_ID,
10353 MTI.TRANSACTION_SOURCE_TYPE_ID,
10354 MTI.TRANSACTION_SOURCE_ID,
10355 MTI.TRANSACTION_SOURCE_NAME,
10356 MTI.TRANSACTION_REFERENCE,
10357 MTI.REASON_ID,
10358 MTI.TRANSACTION_DATE,
10359 MTI.ACCT_PERIOD_ID,
10360 MTI.TRANSACTION_QUANTITY,
10361 MTI.TRANSACTION_UOM,
10362 MTI.PRIMARY_QUANTITY,
10363 MTI.TRANSACTION_COST,
10364 MTI.DISTRIBUTION_ACCOUNT_ID,
10365 MTI.TRANSFER_SUBINVENTORY,
10366 MTI.TRANSFER_ORGANIZATION,
10367 MTI.TRANSFER_LOCATOR,
10368 MTI.SHIPMENT_NUMBER,
10369 MTI.TRANSPORTATION_COST,
10370 MTI.TRANSFER_COST,
10371 MTI.TRANSPORTATION_ACCOUNT,
10372 MTI.FREIGHT_CODE,
10373 MTI.CONTAINERS,
10374 MTI.WAYBILL_AIRBILL,
10375 MTI.EXPECTED_ARRIVAL_DATE,
10376 MTI.CURRENCY_CODE,
10377 MTI.CURRENCY_CONVERSION_DATE,
10378 MTI.CURRENCY_CONVERSION_TYPE,
10379 MTI.CURRENCY_CONVERSION_RATE,
10380 MTI.NEW_AVERAGE_COST,
10381 MTI.VALUE_CHANGE,
10382 MTI.PERCENTAGE_CHANGE,
10383 MTI.DEMAND_ID,
10384 MTI.DEMAND_SOURCE_HEADER_ID,
10385 MTI.DEMAND_SOURCE_LINE,
10386 MTI.DEMAND_SOURCE_DELIVERY,
10387 MTI.DEMAND_CLASS,
10388 MTI.CUSTOMER_SHIP_ID,
10389 MTI.TRX_SOURCE_DELIVERY_ID,
10390 MTI.TRX_SOURCE_LINE_ID,
10391 MTI.PICKING_LINE_ID,
10392 MTI.REQUIRED_FLAG,
10393 MTI.NEGATIVE_REQ_FLAG,
10394 MTI.REPETITIVE_LINE_ID,
10395 MTI.PRIMARY_SWITCH,
10396 MTI.OPERATION_SEQ_NUM,
10397 MTI.SETUP_TEARDOWN_CODE,
10398 MTI.SCHEDULE_UPDATE_CODE,
10399 MTI.DEPARTMENT_ID,
10400 MTI.EMPLOYEE_CODE,
10401 MTI.SCHEDULE_ID,
10402 MTI.WIP_ENTITY_TYPE,
10403 MTI.ENCUMBRANCE_AMOUNT,
10404 MTI.ENCUMBRANCE_ACCOUNT,
10405 MTI.USSGL_TRANSACTION_CODE,
10406 MTI.SHIPPABLE_FLAG,
10407 MTI.REQUISITION_LINE_ID,
10408 MTI.REQUISITION_DISTRIBUTION_ID,
10409 MTI.SHIP_TO_LOCATION_ID,
10410 MMTT.COMPLETION_TRANSACTION_ID,
10411 MTI.ATTRIBUTE_CATEGORY,
10412 MTI.ATTRIBUTE1,
10413 MTI.ATTRIBUTE2,
10414 MTI.ATTRIBUTE3,
10415 MTI.ATTRIBUTE4,
10416 MTI.ATTRIBUTE5,
10417 MTI.ATTRIBUTE6,
10418 MTI.ATTRIBUTE7,
10419 MTI.ATTRIBUTE8,
10420 MTI.ATTRIBUTE9,
10421 MTI.ATTRIBUTE10,
10422 MTI.ATTRIBUTE11,
10423 MTI.ATTRIBUTE12,
10424 MTI.ATTRIBUTE13,
10425 MTI.ATTRIBUTE14,
10426 MTI.ATTRIBUTE15,
10427 MTI.MOVEMENT_ID,
10428 MTI.SOURCE_PROJECT_ID,
10429 MTI.SOURCE_TASK_ID,
10430 MTI.EXPENDITURE_TYPE,
10431 MTI.PA_EXPENDITURE_ORG_ID,
10432 MTI.PROJECT_ID,
10433 MTI.TASK_ID,
10434 MTI.TO_PROJECT_ID,
10435 MTI.TO_TASK_ID,
10436 'Y',
10437 NVL(MTI.FINAL_COMPLETION_FLAG,
10438 Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
10439 MTI.TRANSFER_PERCENTAGE,
10440 MTI.MATERIAL_ACCOUNT,
10441 MTI.MATERIAL_OVERHEAD_ACCOUNT,
10442 MTI.RESOURCE_ACCOUNT,
10443 MTI.OUTSIDE_PROCESSING_ACCOUNT,
10444 MTI.OVERHEAD_ACCOUNT,
10445 MTI.COST_GROUP_ID,
10446 MTI.FLOW_SCHEDULE,
10447 MTI.QA_COLLECTION_ID,
10448 MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
10449 MTI.OVERCOMPLETION_PRIMARY_QTY,
10450 MTI.OVERCOMPLETION_TRANSACTION_ID,
10451 MTI.END_ITEM_UNIT_NUMBER,
10452 MTI.ORG_COST_GROUP_ID, /* PCST */
10453 MTI.COST_TYPE_ID, /* PCST */
10454 MTI.LPN_ID,
10455 MTI.CONTENT_LPN_ID,
10456 MTI.TRANSFER_LPN_ID , /* PCST */
10457 mti.organization_type,
10458 mti.transfer_organization_type,
10459 mti.owning_organization_id,
10460 mti.owning_tp_type,
10461 mti.xfr_owning_organization_id,
10462 mti.transfer_owning_tp_type,
10463 mti.planning_organization_id,
10464 mti.planning_tp_type,
10465 mti.xfr_planning_organization_id,
10466 mti.TRANSFER_PLANNING_TP_TYPE,
10467 MTI.TRANSACTION_BATCH_ID,
10468 MTI.TRANSACTION_BATCH_SEQ,
10469 MTI.TRANSFER_COST_GROUP_ID,
10470 Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
10471 -- start of fix for eam
10472 -- added following 4 columns
10473 MTI.REBUILD_ITEM_ID,
10474 MTI.REBUILD_ACTIVITY_ID,
10475 MTI.REBUILD_SERIAL_NUMBER,
10476 MTI.rebuild_job_name,
10477 -- end of fix for eam
10478 mti.kanban_card_id,
10479 mti.build_sequence,--J dev
10480 mti.bom_revision,--J dev
10481 mti.routing_revision,--J dev
10482 mti.bom_revision_date,--J dev
10483 mti.alternate_bom_designator,--J dev
10484 mti.alternate_routing_designator,
10485 mti.SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi
10486 mti.SECONDARY_UOM_CODE, -- INVCONV fabdi end
10487 mti.RELIEVE_RESERVATIONS_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
10488 mti.RELIEVE_HIGH_LEVEL_RSV_FLAG, /*** {{ R12 Enhanced reservations code changes ***/
10489 mti.TRANSFER_PRICE -- INVCONV umoogala For Process-Discrete Transfer Enh.
10490 FROM MTL_TRANSACTIONS_INTERFACE MTI,
10491 MTL_MATERIAL_TRANSACTIONS_TEMP MMTT
10492 WHERE MTI.TRANSACTION_HEADER_ID = p_header_id
10493 /* WHERE MTI.ROWID = p_rowid J-dev*/
10494 and MTI.PROCESS_FLAG = 1
10495 and MTI.TRANSACTION_ACTION_ID IN (1, 27, 33, 34)
10496 and MTI.PARENT_ID = MMTT.TRANSACTION_TEMP_ID
10497 and MTI.TRANSACTION_HEADER_ID = MMTT.TRANSACTION_HEADER_ID;
10498 END IF;
10499 END IF;
10500 END IF;--J-dev
10501
10502
10503 IF (l_debug = 1) THEN
10504 inv_log_util.trace('going to insert lot'||p_header_id,'INV_TXN_MANAGER_GRP','9');
10505 END IF;
10506
10507 /* Inserting LOT transactions */
10508 INSERT INTO MTL_TRANSACTION_LOTS_TEMP
10509 (TRANSACTION_TEMP_ID,
10510 LOT_NUMBER,
10511 LOT_EXPIRATION_DATE,
10512 LAST_UPDATED_BY,
10513 LAST_UPDATE_DATE,
10514 CREATION_DATE,
10515 CREATED_BY,
10516 LAST_UPDATE_LOGIN,
10517 PROGRAM_APPLICATION_ID,
10518 PROGRAM_ID,
10519 PROGRAM_UPDATE_DATE,
10520 REQUEST_ID,
10521 PRIMARY_QUANTITY,
10522 TRANSACTION_QUANTITY,
10523 serial_transaction_temp_id,
10524 LOT_ATTRIBUTE_CATEGORY, --Bug #3841935
10525 C_ATTRIBUTE1,
10526 C_ATTRIBUTE2,
10527 C_ATTRIBUTE3,
10528 C_ATTRIBUTE4,
10529 C_ATTRIBUTE5,
10530 C_ATTRIBUTE6,
10531 C_ATTRIBUTE7,
10532 C_ATTRIBUTE8,
10533 C_ATTRIBUTE9,
10534 C_ATTRIBUTE10,
10535 C_ATTRIBUTE11,
10536 C_ATTRIBUTE12,
10537 C_ATTRIBUTE13,
10538 C_ATTRIBUTE14,
10539 C_ATTRIBUTE15,
10540 C_ATTRIBUTE16,
10541 C_ATTRIBUTE17,
10542 C_ATTRIBUTE18,
10543 C_ATTRIBUTE19,
10544 C_ATTRIBUTE20,
10545 D_ATTRIBUTE1,
10546 D_ATTRIBUTE2,
10547 D_ATTRIBUTE3,
10548 D_ATTRIBUTE4,
10549 D_ATTRIBUTE5,
10550 D_ATTRIBUTE6,
10551 D_ATTRIBUTE7,
10552 D_ATTRIBUTE8,
10553 D_ATTRIBUTE9,
10554 D_ATTRIBUTE10,
10555 N_ATTRIBUTE1,
10556 N_ATTRIBUTE2,
10557 N_ATTRIBUTE3,
10558 N_ATTRIBUTE4,
10559 N_ATTRIBUTE5,
10560 N_ATTRIBUTE6,
10561 N_ATTRIBUTE7,
10562 N_ATTRIBUTE8,
10563 N_ATTRIBUTE9,
10564 n_attribute10,
10565 ATTRIBUTE1,
10566 ATTRIBUTE2,
10567 ATTRIBUTE3,
10568 ATTRIBUTE4,
10569 ATTRIBUTE5,
10570 ATTRIBUTE6,
10571 ATTRIBUTE7,
10572 ATTRIBUTE8,
10573 ATTRIBUTE9,
10574 ATTRIBUTE10,
10575 ATTRIBUTE11,
10576 ATTRIBUTE12,
10577 ATTRIBUTE13,
10578 ATTRIBUTE14,
10579 ATTRIBUTE15,
10580 ATTRIBUTE_CATEGORY ,
10581 group_header_id,--added for J
10582 DESCRIPTION,
10583 VENDOR_NAME,
10584 SUPPLIER_LOT_NUMBER,
10585 ORIGINATION_DATE,
10586 DATE_CODE,
10587 GRADE_CODE,
10588 CHANGE_DATE,
10589 MATURITY_DATE,
10590 STATUS_ID,
10591 RETEST_DATE,
10592 AGE,
10593 ITEM_SIZE,
10594 COLOR,
10595 VOLUME,
10596 VOLUME_UOM,
10597 PLACE_OF_ORIGIN,
10598 BEST_BY_DATE,
10599 LENGTH,
10600 LENGTH_UOM,
10601 RECYCLED_CONTENT,
10602 THICKNESS,
10603 THICKNESS_UOM,
10604 WIDTH,
10605 WIDTH_UOM,
10606 CURL_WRINKLE_FOLD,
10607 VENDOR_ID,
10608 TERRITORY_CODE,
10609 PARENT_LOT_NUMBER , -- INVCONV start fabdi
10610 ORIGINATION_TYPE ,
10611 EXPIRATION_ACTION_DATE ,
10612 EXPIRATION_ACTION_CODE,
10613 HOLD_DATE ,
10614 REASON_ID,
10615 SECONDARY_QUANTITY, -- INVCONV start fabdi
10616 parent_object_type, --R12 Genealogy enhancements
10617 parent_object_id, --R12 Genealogy enhancements
10618 parent_object_number, --R12 Genealogy enhancements
10619 parent_item_id, --R12 Genealogy enhancements
10620 parent_object_type2, --R12 Genealogy enhancements
10621 parent_object_id2, --R12 Genealogy enhancements
10622 parent_object_number2 --R12 Genealogy enhancements
10623 )
10624 SELECT
10625 TRANSACTION_INTERFACE_ID,
10626 ltrim(rtrim(LOT_NUMBER)), /*Bug 6390860 added ltrim, rtrim*/
10627 LOT_EXPIRATION_DATE,
10628 LAST_UPDATED_BY,
10629 SYSDATE,
10630 SYSDATE,
10631 CREATED_BY,
10632 LAST_UPDATE_LOGIN,
10633 PROGRAM_APPLICATION_ID,
10634 PROGRAM_ID,
10635 SYSDATE,
10636 REQUEST_ID,
10637 PRIMARY_QUANTITY,
10638 TRANSACTION_QUANTITY,
10639 serial_transaction_temp_id,
10640 LOT_ATTRIBUTE_CATEGORY,
10641 C_ATTRIBUTE1,
10642 C_ATTRIBUTE2,
10643 C_ATTRIBUTE3,
10644 C_ATTRIBUTE4,
10645 C_ATTRIBUTE5,
10646 C_ATTRIBUTE6,
10647 C_ATTRIBUTE7,
10648 C_ATTRIBUTE8,
10649 C_ATTRIBUTE9,
10650 C_ATTRIBUTE10,
10651 C_ATTRIBUTE11,
10652 C_ATTRIBUTE12,
10653 C_ATTRIBUTE13,
10654 C_ATTRIBUTE14,
10655 C_ATTRIBUTE15,
10656 C_ATTRIBUTE16,
10657 C_ATTRIBUTE17,
10658 C_ATTRIBUTE18,
10659 C_ATTRIBUTE19,
10660 C_ATTRIBUTE20,
10661 D_ATTRIBUTE1,
10662 D_ATTRIBUTE2,
10663 D_ATTRIBUTE3,
10664 D_ATTRIBUTE4,
10665 D_ATTRIBUTE5,
10666 D_ATTRIBUTE6,
10667 D_ATTRIBUTE7,
10668 D_ATTRIBUTE8,
10669 D_ATTRIBUTE9,
10670 D_ATTRIBUTE10,
10671 N_ATTRIBUTE1,
10672 N_ATTRIBUTE2,
10673 N_ATTRIBUTE3,
10674 N_ATTRIBUTE4,
10675 N_ATTRIBUTE5,
10676 N_ATTRIBUTE6,
10677 N_ATTRIBUTE7,
10678 N_ATTRIBUTE8,
10679 N_ATTRIBUTE9,
10680 n_attribute10,
10681 ATTRIBUTE1,
10682 ATTRIBUTE2,
10683 ATTRIBUTE3,
10684 ATTRIBUTE4,
10685 ATTRIBUTE5,
10686 ATTRIBUTE6,
10687 ATTRIBUTE7,
10688 ATTRIBUTE8,
10689 ATTRIBUTE9,
10690 ATTRIBUTE10,
10691 ATTRIBUTE11,
10692 ATTRIBUTE12,
10693 ATTRIBUTE13,
10694 ATTRIBUTE14,
10695 ATTRIBUTE15,
10696 ATTRIBUTE_CATEGORY ,
10697 p_header_id ,--J dev corresponds to the header_id
10698 DESCRIPTION,
10699 VENDOR_NAME,
10700 SUPPLIER_LOT_NUMBER,
10701 ORIGINATION_DATE,
10702 DATE_CODE,
10703 GRADE_CODE,
10704 CHANGE_DATE,
10705 MATURITY_DATE,
10706 STATUS_ID,
10707 RETEST_DATE,
10708 AGE,
10709 ITEM_SIZE,
10710 COLOR,
10711 VOLUME,
10712 VOLUME_UOM,
10713 PLACE_OF_ORIGIN,
10714 BEST_BY_DATE,
10715 LENGTH,
10716 LENGTH_UOM,
10717 RECYCLED_CONTENT,
10718 THICKNESS,
10719 THICKNESS_UOM,
10720 WIDTH,
10721 WIDTH_UOM,
10722 CURL_WRINKLE_FOLD,
10723 VENDOR_ID,
10724 TERRITORY_CODE,
10725 PARENT_LOT_NUMBER , -- INVCONV start fabdi
10726 ORIGINATION_TYPE ,
10727 EXPIRATION_ACTION_DATE ,
10728 EXPIRATION_ACTION_CODE,
10729 HOLD_DATE ,
10730 REASON_ID,
10731 SECONDARY_TRANSACTION_QUANTITY, -- INVCONV start fabdi
10732 parent_object_type, --R12 Genealogy enhancements
10733 parent_object_id, --R12 Genealogy enhancements
10734 parent_object_number, --R12 Genealogy enhancements
10735 parent_item_id, --R12 Genealogy enhancements
10736 parent_object_type2, --R12 Genealogy enhancements
10737 parent_object_id2, --R12 Genealogy enhancements
10738 parent_object_number2 --R12 Genealogy enhancements
10739 FROM MTL_TRANSACTION_LOTS_INTERFACE
10740 WHERE TRANSACTION_INTERFACE_ID IN (
10741 SELECT TRANSACTION_INTERFACE_ID
10742 FROM MTL_TRANSACTIONS_INTERFACE MTI
10743 WHERE mti.TRANSACTION_HEADER_ID = p_header_id
10744 /*WHERE MTI.ROWID = p_rowid J-dev*/
10745 AND mti.TRANSACTION_INTERFACE_ID IS NOT NULL
10746 AND mti.PROCESS_FLAG = 1
10747 AND transaction_type_id NOT IN /*OSFM Support for Lot Serialized Items*/
10748 (inv_globals.g_type_inv_lot_split
10749 , inv_globals.g_type_inv_lot_merge
10750 , inv_globals.g_type_inv_lot_translate
10751 ));
10752
10753
10754
10755 INSERT INTO MTL_SERIAL_NUMBERS_TEMP
10756 (TRANSACTION_TEMP_ID,
10757 LAST_UPDATE_DATE,
10758 LAST_UPDATED_BY,
10759 CREATION_DATE,
10760 CREATED_BY,
10761 LAST_UPDATE_LOGIN,
10762 REQUEST_ID,
10763 PROGRAM_APPLICATION_ID,
10764 PROGRAM_ID,
10765 PROGRAM_UPDATE_DATE,
10766 VENDOR_SERIAL_NUMBER,
10767 VENDOR_LOT_NUMBER,
10768 FM_SERIAL_NUMBER,
10769 TO_SERIAL_NUMBER,
10770 parent_serial_number,
10771 SERIAL_ATTRIBUTE_CATEGORY, --Bug #3841935
10772 C_ATTRIBUTE1,
10773 C_ATTRIBUTE2,
10774 C_ATTRIBUTE3,
10775 C_ATTRIBUTE4,
10776 C_ATTRIBUTE5,
10777 C_ATTRIBUTE6,
10778 C_ATTRIBUTE7,
10779 C_ATTRIBUTE8,
10780 C_ATTRIBUTE9,
10781 C_ATTRIBUTE10,
10782 C_ATTRIBUTE11,
10783 C_ATTRIBUTE12,
10784 C_ATTRIBUTE13,
10785 C_ATTRIBUTE14,
10786 C_ATTRIBUTE15,
10787 C_ATTRIBUTE16,
10788 C_ATTRIBUTE17,
10789 C_ATTRIBUTE18,
10790 C_ATTRIBUTE19,
10791 C_ATTRIBUTE20,
10792 D_ATTRIBUTE1,
10793 D_ATTRIBUTE2,
10794 D_ATTRIBUTE3,
10795 D_ATTRIBUTE4,
10796 D_ATTRIBUTE5,
10797 D_ATTRIBUTE6,
10798 D_ATTRIBUTE7,
10799 D_ATTRIBUTE8,
10800 D_ATTRIBUTE9,
10801 D_ATTRIBUTE10,
10802 N_ATTRIBUTE1,
10803 N_ATTRIBUTE2,
10804 N_ATTRIBUTE3,
10805 N_ATTRIBUTE4,
10806 N_ATTRIBUTE5,
10807 N_ATTRIBUTE6,
10808 N_ATTRIBUTE7,
10809 N_ATTRIBUTE8,
10810 N_ATTRIBUTE9,
10811 n_attribute10,
10812 group_header_id, --added for J
10813 attribute_category,
10814 attribute1,
10815 attribute2,
10816 attribute3,
10817 attribute4,
10818 attribute5,
10819 attribute6,
10820 attribute7,
10821 attribute8,
10822 attribute9,
10823 attribute10,
10824 attribute11,
10825 attribute12,
10826 attribute13,
10827 attribute14,
10828 attribute15,
10829 status_id, --Bug 5023244
10830 parent_object_type, --R12 Genealogy enhancements
10831 parent_object_id, --R12 Genealogy enhancements
10832 parent_object_number, --R12 Genealogy enhancements
10833 parent_item_id, --R12 Genealogy enhancements
10834 parent_object_type2, --R12 Genealogy enhancements
10835 parent_object_id2, --R12 Genealogy enhancements
10836 parent_object_number2) --R12 Genealogy enhancements
10837 SELECT
10838 TRANSACTION_INTERFACE_ID,
10839 LAST_UPDATE_DATE,
10840 LAST_UPDATED_BY,
10841 CREATION_DATE,
10842 CREATED_BY,
10843 LAST_UPDATE_LOGIN,
10844 REQUEST_ID,
10845 PROGRAM_APPLICATION_ID,
10846 PROGRAM_ID,
10847 PROGRAM_UPDATE_DATE,
10848 VENDOR_SERIAL_NUMBER,
10849 VENDOR_LOT_NUMBER,
10850 ltrim(rtrim(FM_SERIAL_NUMBER)),/*Bug 4764048 added ltrim,rtrim*/
10851 ltrim(rtrim(TO_SERIAL_NUMBER)),/*Bug 4764048 added ltrim,rtrim*/
10852 parent_serial_number,
10853 SERIAL_ATTRIBUTE_CATEGORY,
10854 C_ATTRIBUTE1,
10855 C_ATTRIBUTE2,
10856 C_ATTRIBUTE3,
10857 C_ATTRIBUTE4,
10858 C_ATTRIBUTE5,
10859 C_ATTRIBUTE6,
10860 C_ATTRIBUTE7,
10861 C_ATTRIBUTE8,
10862 C_ATTRIBUTE9,
10863 C_ATTRIBUTE10,
10864 C_ATTRIBUTE11,
10865 C_ATTRIBUTE12,
10866 C_ATTRIBUTE13,
10867 C_ATTRIBUTE14,
10868 C_ATTRIBUTE15,
10869 C_ATTRIBUTE16,
10870 C_ATTRIBUTE17,
10871 C_ATTRIBUTE18,
10872 C_ATTRIBUTE19,
10873 C_ATTRIBUTE20,
10874 D_ATTRIBUTE1,
10875 D_ATTRIBUTE2,
10876 D_ATTRIBUTE3,
10877 D_ATTRIBUTE4,
10878 D_ATTRIBUTE5,
10879 D_ATTRIBUTE6,
10880 D_ATTRIBUTE7,
10881 D_ATTRIBUTE8,
10882 D_ATTRIBUTE9,
10883 D_ATTRIBUTE10,
10884 N_ATTRIBUTE1,
10885 N_ATTRIBUTE2,
10886 N_ATTRIBUTE3,
10887 N_ATTRIBUTE4,
10888 N_ATTRIBUTE5,
10889 N_ATTRIBUTE6,
10890 N_ATTRIBUTE7,
10891 N_ATTRIBUTE8,
10892 N_ATTRIBUTE9,
10893 n_attribute10,
10894 p_header_id,
10895 attribute_category,
10896 attribute1,
10897 attribute2,
10898 attribute3,
10899 attribute4,
10900 attribute5,
10901 attribute6,
10902 attribute7,
10903 attribute8,
10904 attribute9,
10905 attribute10,
10906 attribute11,
10907 attribute12,
10908 attribute13,
10909 attribute14,
10910 attribute15,
10911 status_id, --Bug 5023244
10912 parent_object_type, --R12 Genealogy enhancements
10913 parent_object_id, --R12 Genealogy enhancements
10914 parent_object_number, --R12 Genealogy enhancements
10915 parent_item_id, --R12 Genealogy enhancements
10916 parent_object_type2, --R12 Genealogy enhancements
10917 parent_object_id2, --R12 Genealogy enhancements
10918 parent_object_number2 --R12 Genealogy enhancements
10919 FROM MTL_SERIAL_NUMBERS_INTERFACE
10920 WHERE (TRANSACTION_INTERFACE_ID IN (
10921 SELECT TRANSACTION_INTERFACE_ID
10922 FROM MTL_TRANSACTIONS_INTERFACE MTI
10923 WHERE TRANSACTION_HEADER_ID = p_header_id
10924 /*WHERE MTI.ROWID = p_rowid*/--J-dev
10925 AND TRANSACTION_INTERFACE_ID IS NOT NULL
10926 AND PROCESS_FLAG = 1
10927 AND transaction_type_id NOT IN
10928 (inv_globals.g_type_inv_lot_split
10929 , inv_globals.g_type_inv_lot_merge
10930 , inv_globals.g_type_inv_lot_translate
10931 )
10932 UNION ALL
10933 SELECT SERIAL_TRANSACTION_TEMP_ID
10934 FROM MTL_TRANSACTION_LOTS_INTERFACE
10935 WHERE TRANSACTION_INTERFACE_ID IN (
10936 SELECT TRANSACTION_INTERFACE_ID
10937 FROM MTL_TRANSACTIONS_INTERFACE
10938 WHERE TRANSACTION_HEADER_ID = p_header_id
10939 /*WHERE rowid = p_rowid J-dev*/
10940 AND TRANSACTION_INTERFACE_ID IS NOT NULL
10941 AND PROCESS_FLAG = 1
10942 AND transaction_type_id NOT IN
10943 (inv_globals.g_type_inv_lot_split
10944 , inv_globals.g_type_inv_lot_merge
10945 , inv_globals.g_type_inv_lot_translate
10946 )))
10947 );
10948
10949 RETURN TRUE;
10950
10951 EXCEPTION
10952 WHEN OTHERS THEN
10953 IF (l_debug = 1) THEN
10954 inv_log_util.trace('Error in tmpinsert: sqlerrm : ' || substr(sqlerrm, 1, 200),
10955 'INV_TXN_MANAGER_GRP','9');
10956 END IF;
10957 RETURN FALSE;
10958
10959 END tmpinsert;
10960
10961
10962 /*Bug:5408823. The following procedure populates the column name, data type
10963 and length of all the Serial Attributes into global table g_lot_ser_attr_tbl
10964 which will be later used in procedure get_serial_attr_record. */
10965
10966 PROCEDURE get_serial_attr_table
10967 IS
10968 l_lot_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
10969 l_debug NUMBER
10970 := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
10971
10972 BEGIN
10973
10974 inv_log_util.trace('Before setting all the column names and types' , 'get_serial_attr_table',9);
10975
10976
10977 l_lot_ser_attr_tbl (1).column_name := 'SERIAL_ATTRIBUTE_CATEGORY';
10978 l_lot_ser_attr_tbl (1).column_type := 'VARCHAR2';
10979 l_lot_ser_attr_tbl (1).column_length := 30;
10980 l_lot_ser_attr_tbl (2).column_name := 'C_ATTRIBUTE1';
10981 l_lot_ser_attr_tbl (2).column_type := 'VARCHAR2';
10982 l_lot_ser_attr_tbl (2).column_length := 150;
10983 l_lot_ser_attr_tbl (3).column_name := 'C_ATTRIBUTE2' ;
10984 l_lot_ser_attr_tbl (3).column_type := 'VARCHAR2';
10985 l_lot_ser_attr_tbl (3).column_length := 150;
10986 l_lot_ser_attr_tbl (4).column_name := 'C_ATTRIBUTE3';
10987 l_lot_ser_attr_tbl (4).column_type := 'VARCHAR2';
10988 l_lot_ser_attr_tbl (4).column_length := 150;
10989 l_lot_ser_attr_tbl (5).column_name := 'C_ATTRIBUTE4';
10990 l_lot_ser_attr_tbl (5).column_type := 'VARCHAR2';
10991 l_lot_ser_attr_tbl (5).column_length := 150;
10992 l_lot_ser_attr_tbl (6).column_name := 'C_ATTRIBUTE5';
10993 l_lot_ser_attr_tbl (6).column_type := 'VARCHAR2';
10994 l_lot_ser_attr_tbl (6).column_length := 150;
10995 l_lot_ser_attr_tbl (7).column_name := 'C_ATTRIBUTE6';
10996 l_lot_ser_attr_tbl (7).column_type := 'VARCHAR2';
10997 l_lot_ser_attr_tbl (7).column_length := 150;
10998 l_lot_ser_attr_tbl (8).column_name := 'C_ATTRIBUTE7';
10999 l_lot_ser_attr_tbl (8).column_type := 'VARCHAR2';
11000 l_lot_ser_attr_tbl (8).column_length := 150;
11001 l_lot_ser_attr_tbl (9).column_name := 'C_ATTRIBUTE8';
11002 l_lot_ser_attr_tbl (9).column_type := 'VARCHAR2';
11003 l_lot_ser_attr_tbl (9).column_length := 150;
11004 l_lot_ser_attr_tbl (10).column_name := 'C_ATTRIBUTE9';
11005 l_lot_ser_attr_tbl (10).column_type := 'VARCHAR2';
11006 l_lot_ser_attr_tbl (10).column_length := 150;
11007 l_lot_ser_attr_tbl (11).column_name := 'C_ATTRIBUTE10';
11008 l_lot_ser_attr_tbl (11).column_type := 'VARCHAR2';
11009 l_lot_ser_attr_tbl (11).column_length := 150;
11010 l_lot_ser_attr_tbl (12).column_name := 'C_ATTRIBUTE11';
11011 l_lot_ser_attr_tbl (12).column_type := 'VARCHAR2';
11012 l_lot_ser_attr_tbl (12).column_length := 150;
11013 l_lot_ser_attr_tbl (13).column_name := 'C_ATTRIBUTE12';
11014 l_lot_ser_attr_tbl (13).column_type := 'VARCHAR2';
11015 l_lot_ser_attr_tbl (13).column_length := 150;
11016 l_lot_ser_attr_tbl (14).column_name := 'C_ATTRIBUTE13';
11017 l_lot_ser_attr_tbl (14).column_type := 'VARCHAR2';
11018 l_lot_ser_attr_tbl (14).column_length := 150;
11019 l_lot_ser_attr_tbl (15).column_name := 'C_ATTRIBUTE14';
11020 l_lot_ser_attr_tbl (15).column_type := 'VARCHAR2';
11021 l_lot_ser_attr_tbl (15).column_length := 150;
11022 l_lot_ser_attr_tbl (16).column_name := 'C_ATTRIBUTE15';
11023 l_lot_ser_attr_tbl (16).column_type := 'VARCHAR2';
11024 l_lot_ser_attr_tbl (16).column_length := 150;
11025 l_lot_ser_attr_tbl (17).column_name := 'C_ATTRIBUTE16' ;
11026 l_lot_ser_attr_tbl (17).column_type := 'VARCHAR2';
11027 l_lot_ser_attr_tbl (17).column_length := 150;
11028 l_lot_ser_attr_tbl (18).column_name := 'C_ATTRIBUTE17';
11029 l_lot_ser_attr_tbl (18).column_type := 'VARCHAR2';
11030 l_lot_ser_attr_tbl (18).column_length := 150;
11031 l_lot_ser_attr_tbl (19).column_name := 'C_ATTRIBUTE18';
11032 l_lot_ser_attr_tbl (19).column_type := 'VARCHAR2';
11033 l_lot_ser_attr_tbl (19).column_length := 150;
11034 l_lot_ser_attr_tbl (20).column_name := 'C_ATTRIBUTE19';
11035 l_lot_ser_attr_tbl (20).column_type := 'VARCHAR2';
11036 l_lot_ser_attr_tbl (20).column_length := 150;
11037 l_lot_ser_attr_tbl (21).column_name := 'C_ATTRIBUTE20';
11038 l_lot_ser_attr_tbl (21).column_type := 'VARCHAR2';
11039 l_lot_ser_attr_tbl (21).column_length := 150;
11040 l_lot_ser_attr_tbl (22).column_name := 'D_ATTRIBUTE1';
11041 l_lot_ser_attr_tbl (22).column_type := 'DATE';
11042 l_lot_ser_attr_tbl (22).column_length := 11;
11043 l_lot_ser_attr_tbl (23).column_name := 'D_ATTRIBUTE2';
11044 l_lot_ser_attr_tbl (23).column_type := 'DATE';
11045 l_lot_ser_attr_tbl (23).column_length := 11;
11046 l_lot_ser_attr_tbl (24).column_name := 'D_ATTRIBUTE3';
11047 l_lot_ser_attr_tbl (24).column_type := 'DATE';
11048 l_lot_ser_attr_tbl (24).column_length := 11;
11049 l_lot_ser_attr_tbl (25).column_name := 'D_ATTRIBUTE4';
11050 l_lot_ser_attr_tbl (25).column_type := 'DATE';
11051 l_lot_ser_attr_tbl (25).column_length := 11;
11052 l_lot_ser_attr_tbl (26).column_name := 'D_ATTRIBUTE5';
11053 l_lot_ser_attr_tbl (26).column_type := 'DATE';
11054 l_lot_ser_attr_tbl (26).column_length := 11;
11055 l_lot_ser_attr_tbl (27).column_name := 'D_ATTRIBUTE6';
11056 l_lot_ser_attr_tbl (27).column_type := 'DATE';
11057 l_lot_ser_attr_tbl (27).column_length := 11;
11058 l_lot_ser_attr_tbl (28).column_name := 'D_ATTRIBUTE7';
11059 l_lot_ser_attr_tbl (28).column_type := 'DATE';
11060 l_lot_ser_attr_tbl (28).column_length := 11;
11061 l_lot_ser_attr_tbl (29).column_name := 'D_ATTRIBUTE8';
11062 l_lot_ser_attr_tbl (29).column_type := 'DATE';
11063 l_lot_ser_attr_tbl (29).column_length := 11;
11064 l_lot_ser_attr_tbl (30).column_name := 'D_ATTRIBUTE9';
11065 l_lot_ser_attr_tbl (30).column_type := 'DATE';
11066 l_lot_ser_attr_tbl (30).column_length := 11;
11067 l_lot_ser_attr_tbl (31).column_name := 'D_ATTRIBUTE10';
11068 l_lot_ser_attr_tbl (31).column_type := 'DATE';
11069 l_lot_ser_attr_tbl (31).column_length := 11;
11070 l_lot_ser_attr_tbl (32).column_name := 'N_ATTRIBUTE1';
11071 l_lot_ser_attr_tbl (32).column_type := 'NUMBER';
11072 l_lot_ser_attr_tbl (32).column_length := 38;
11073 l_lot_ser_attr_tbl (33).column_name := 'N_ATTRIBUTE2';
11074 l_lot_ser_attr_tbl (33).column_type := 'NUMBER';
11075 l_lot_ser_attr_tbl (33).column_length := 38;
11076 l_lot_ser_attr_tbl (34).column_name := 'N_ATTRIBUTE3';
11077 l_lot_ser_attr_tbl (34).column_type := 'NUMBER';
11078 l_lot_ser_attr_tbl (34).column_length := 38;
11079 l_lot_ser_attr_tbl (35).column_name := 'N_ATTRIBUTE4';
11080 l_lot_ser_attr_tbl (35).column_type := 'NUMBER';
11081 l_lot_ser_attr_tbl (35).column_length := 38;
11082 l_lot_ser_attr_tbl (36).column_name := 'N_ATTRIBUTE5';
11083 l_lot_ser_attr_tbl (36).column_type := 'NUMBER';
11084 l_lot_ser_attr_tbl (36).column_length := 38;
11085 l_lot_ser_attr_tbl (37).column_name := 'N_ATTRIBUTE6';
11086 l_lot_ser_attr_tbl (37).column_type := 'NUMBER';
11087 l_lot_ser_attr_tbl (37).column_length := 38;
11088 l_lot_ser_attr_tbl (38).column_name := 'N_ATTRIBUTE7';
11089 l_lot_ser_attr_tbl (38).column_type := 'NUMBER';
11090 l_lot_ser_attr_tbl (38).column_length := 38;
11091 l_lot_ser_attr_tbl (39).column_name := 'N_ATTRIBUTE8';
11092 l_lot_ser_attr_tbl (39).column_type := 'NUMBER';
11093 l_lot_ser_attr_tbl (39).column_length := 38;
11094 l_lot_ser_attr_tbl (40).column_name := 'N_ATTRIBUTE9';
11095 l_lot_ser_attr_tbl (40).column_type := 'NUMBER';
11096 l_lot_ser_attr_tbl (40).column_length := 38;
11097 l_lot_ser_attr_tbl (41).column_name := 'N_ATTRIBUTE10';
11098 l_lot_ser_attr_tbl (41).column_type := 'NUMBER';
11099 l_lot_ser_attr_tbl (41).column_length := 38;
11100 l_lot_ser_attr_tbl (42).column_name := 'TERRITORY_CODE';
11101 l_lot_ser_attr_tbl (42).column_type := 'VARCHAR2';
11102 l_lot_ser_attr_tbl (42).column_length := 30;
11103 l_lot_ser_attr_tbl (43).column_name := 'TIME_SINCE_NEW';
11104 l_lot_ser_attr_tbl (43).column_type := 'NUMBER';
11105 l_lot_ser_attr_tbl (43).column_length := 38;
11106 l_lot_ser_attr_tbl (44).column_name := 'CYCLES_SINCE_NEW';
11107 l_lot_ser_attr_tbl (44).column_type := 'NUMBER';
11108 l_lot_ser_attr_tbl (44).column_length := 38;
11109 l_lot_ser_attr_tbl (45).column_name := 'TIME_SINCE_OVERHAUL';
11110 l_lot_ser_attr_tbl (45).column_type := 'NUMBER';
11111 l_lot_ser_attr_tbl (45).column_length := 38;
11112 l_lot_ser_attr_tbl (46).column_name := 'CYCLES_SINCE_OVERHAUL';
11113 l_lot_ser_attr_tbl (46).column_type := 'NUMBER';
11114 l_lot_ser_attr_tbl (46).column_length := 38;
11115 l_lot_ser_attr_tbl (47).column_name := 'TIME_SINCE_REPAIR';
11116 l_lot_ser_attr_tbl (47).column_type := 'NUMBER';
11117 l_lot_ser_attr_tbl (47).column_length := 38;
11118 l_lot_ser_attr_tbl (48).column_name := 'CYCLES_SINCE_REPAIR';
11119 l_lot_ser_attr_tbl (48).column_type := 'NUMBER';
11120 l_lot_ser_attr_tbl (48).column_length := 38;
11121 l_lot_ser_attr_tbl (49).column_name := 'TIME_SINCE_VISIT';
11122 l_lot_ser_attr_tbl (49).column_type := 'NUMBER';
11123 l_lot_ser_attr_tbl (49).column_length := 38;
11124 l_lot_ser_attr_tbl (50).column_name := 'CYCLES_SINCE_VISIT';
11125 l_lot_ser_attr_tbl (50).column_type := 'NUMBER';
11126 l_lot_ser_attr_tbl (50).column_length := 38;
11127 l_lot_ser_attr_tbl (51).column_name := 'TIME_SINCE_MARK';
11128 l_lot_ser_attr_tbl (51).column_type := 'NUMBER';
11129 l_lot_ser_attr_tbl (51).column_length := 38;
11130 l_lot_ser_attr_tbl (52).column_name := 'CYCLES_SINCE_MARK';
11131 l_lot_ser_attr_tbl (52).column_type := 'NUMBER';
11132 l_lot_ser_attr_tbl (52).column_length := 38;
11133 l_lot_ser_attr_tbl (53).column_name := 'NUMBER_OF_REPAIRS';
11134 l_lot_ser_attr_tbl (53).column_type := 'NUMBER';
11135 l_lot_ser_attr_tbl (53).column_length := 38;
11136 l_lot_ser_attr_tbl (54).column_name := 'ATTRIBUTE_CATEGORY';
11137 l_lot_ser_attr_tbl (54).column_type := 'VARCHAR2';
11138 l_lot_ser_attr_tbl (54).column_length := 30;
11139 l_lot_ser_attr_tbl (55).column_name := 'ATTRIBUTE1';
11140 l_lot_ser_attr_tbl (55).column_type := 'VARCHAR2';
11141 l_lot_ser_attr_tbl (55).column_length := 150;
11142 l_lot_ser_attr_tbl (56).column_name := 'ATTRIBUTE2';
11143 l_lot_ser_attr_tbl (56).column_type := 'VARCHAR2';
11144 l_lot_ser_attr_tbl (56).column_length := 150;
11145 l_lot_ser_attr_tbl (57).column_name := 'ATTRIBUTE3';
11146 l_lot_ser_attr_tbl (57).column_type := 'VARCHAR2';
11147 l_lot_ser_attr_tbl (57).column_length := 150;
11148 l_lot_ser_attr_tbl (58).column_name := 'ATTRIBUTE4';
11149 l_lot_ser_attr_tbl (58).column_type := 'VARCHAR2';
11150 l_lot_ser_attr_tbl (58).column_length := 150;
11151 l_lot_ser_attr_tbl (59).column_name := 'ATTRIBUTE5';
11152 l_lot_ser_attr_tbl (59).column_type := 'VARCHAR2';
11153 l_lot_ser_attr_tbl (59).column_length := 150;
11154 l_lot_ser_attr_tbl (60).column_name := 'ATTRIBUTE6';
11155 l_lot_ser_attr_tbl (60).column_type := 'VARCHAR2';
11156 l_lot_ser_attr_tbl (60).column_length := 150;
11157 l_lot_ser_attr_tbl (61).column_name := 'ATTRIBUTE7';
11158 l_lot_ser_attr_tbl (61).column_type := 'VARCHAR2';
11159 l_lot_ser_attr_tbl (61).column_length := 150;
11160 l_lot_ser_attr_tbl (62).column_name := 'ATTRIBUTE8';
11161 l_lot_ser_attr_tbl (62).column_type := 'VARCHAR2';
11162 l_lot_ser_attr_tbl (62).column_length := 150;
11163 l_lot_ser_attr_tbl (63).column_name := 'ATTRIBUTE9';
11164 l_lot_ser_attr_tbl (63).column_type := 'VARCHAR2';
11165 l_lot_ser_attr_tbl (63).column_length := 150;
11166 l_lot_ser_attr_tbl (64).column_name := 'ATTRIBUTE10';
11167 l_lot_ser_attr_tbl (64).column_type := 'VARCHAR2';
11168 l_lot_ser_attr_tbl (64).column_length := 150;
11169 l_lot_ser_attr_tbl (65).column_name := 'ATTRIBUTE11';
11170 l_lot_ser_attr_tbl (65).column_type := 'VARCHAR2';
11171 l_lot_ser_attr_tbl (65).column_length := 150;
11172 l_lot_ser_attr_tbl (66).column_name := 'ATTRIBUTE12';
11173 l_lot_ser_attr_tbl (66).column_type := 'VARCHAR2';
11174 l_lot_ser_attr_tbl (66).column_length := 150;
11175 l_lot_ser_attr_tbl (67).column_name := 'ATTRIBUTE13';
11176 l_lot_ser_attr_tbl (67).column_type := 'VARCHAR2';
11177 l_lot_ser_attr_tbl (67).column_length := 150;
11178 l_lot_ser_attr_tbl (68).column_name := 'ATTRIBUTE14';
11179 l_lot_ser_attr_tbl (68).column_type := 'VARCHAR2';
11180 l_lot_ser_attr_tbl (68).column_length := 150;
11181 l_lot_ser_attr_tbl (69).column_name := 'ATTRIBUTE15';
11182 l_lot_ser_attr_tbl (69).column_type := 'VARCHAR2';
11183 l_lot_ser_attr_tbl (69).column_length := 150;
11184
11185 g_lot_ser_attr_tbl := l_lot_ser_attr_tbl;
11186
11187
11188 inv_log_util.trace('After setting all the column names and types' , 'get_serial_attr_table',9);
11189
11190 EXCEPTION
11191 WHEN OTHERS
11192 THEN
11193
11194 IF (l_debug = 1)
11195 THEN
11196 inv_log_util.trace('In Exception in get_serial_attr_table' , 'get_serial_attr_table',9);
11197 END IF;
11198
11199 END get_serial_attr_table;
11200
11201 /*****************************************************************************
11202 *Private procedure used in tmpinsert2(). This is used to get all the serial *
11203 *attributes from MSNI in x_lot_ser_attr_tbl which is then used for attr val.*
11204 *****************************************************************************/
11205
11206 PROCEDURE get_serial_attr_record (
11207 x_lot_ser_attr_tbl OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
11208 , p_transaction_interface_id IN NUMBER
11209 , p_fm_serial_number IN VARCHAR2
11210 , p_to_serial_number IN VARCHAR2
11211 , p_serial_number IN VARCHAR2
11212 , p_item_id IN NUMBER
11213 , p_org_id IN NUMBER
11214 , p_organization_id IN NUMBER
11215 , p_inventory_item_id IN NUMBER
11216 )
11217
11218 IS
11219 /*Bug:5408823.Commented out the following code as the code to
11220 populate metadata of the serial attributes is moved to
11221 get_serial_attr_table.
11222 */
11223 /*l_app_owner_schema VARCHAR2 (30);
11224 l_app_status VARCHAR2 (1);
11225 l_app_industry VARCHAR2 (1);
11226 l_app_info_status BOOLEAN
11227 := fnd_installation.get_app_info (application_short_name => 'INV'
11228 , status => l_app_status
11229 , industry => l_app_industry
11230 , oracle_schema => l_app_owner_schema
11231 );
11232
11233 CURSOR serial_column_csr (p_table_name VARCHAR2)
11234 IS
11235 SELECT column_name
11236 , data_type
11237 , data_length
11238 FROM all_tab_columns
11239 WHERE table_name = UPPER (p_table_name)
11240 AND owner = l_app_owner_schema
11241 Bug:4724150. Commented the following condition 1 as the attribute
11242 columns becomes out of range of 20 to 91 when some extraneous attributes are added
11243 --AND column_id BETWEEN 20 AND 101 --attribute columns.
11244 AND column_name NOT IN ('STATUS_ID','STATUS_NAME', 'ORIGINATION_DATE')
11245 ORDER BY column_id;
11246 */
11247
11248 l_column_id NUMBER;
11249 l_lot_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
11250 l_column_idx NUMBER;
11251 --l_select_stmt LONG;
11252 l_sql_p INTEGER;
11253 l_rows_processed INTEGER;
11254 l_line NUMBER;
11255 l_stmt LONG;
11256 l_debug NUMBER
11257 := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
11258 BEGIN
11259
11260 /*Bug:5408823. Copying the global table which is populated in get_serial_attr_table procedure. */
11261 l_lot_ser_attr_tbl := g_lot_ser_attr_tbl;
11262 l_sql_p := NULL;
11263 l_rows_processed := NULL;
11264 l_line := 1;
11265
11266
11267 IF (l_debug = 1)
11268 THEN
11269 mydebug ('breadcrumb 10', 'get_serial_attr_record');
11270 END IF;
11271
11272 /*Bug:5408823. Commenting the following code which popultes the column name,
11273 type and length of Serial Attributes, as this is being done in seperate procedure
11274 get_serial_attr_table. */
11275
11276 /*FOR l_lot_ser_column_csr IN
11277 serial_column_csr ('MTL_SERIAL_NUMBERS_INTERFACE')
11278 LOOP
11279 l_column_idx := l_column_idx + 1;
11280 l_lot_ser_attr_tbl (l_column_idx).column_name :=
11281 l_lot_ser_column_csr.column_name;
11282 l_lot_ser_attr_tbl (l_column_idx).column_type :=
11283 l_lot_ser_column_csr.data_type;
11284
11285 IF UPPER (l_lot_ser_column_csr.data_type) = 'DATE'
11286 THEN
11287 l_lot_ser_attr_tbl (l_column_idx).column_length := 11;
11288 ELSIF UPPER (l_lot_ser_column_csr.data_type) = 'NUMBER'
11289 THEN
11290 l_lot_ser_attr_tbl (l_column_idx).column_length := 38;
11291 ELSE
11292 l_lot_ser_attr_tbl (l_column_idx).column_length :=
11293 l_lot_ser_column_csr.data_length;
11294 END IF;
11295
11296 IF (l_column_idx = 1)
11297 THEN
11298 l_select_stmt :=
11299 l_select_stmt
11300 || ' NVL(MSNI.'
11301 || l_lot_ser_attr_tbl (l_column_idx).column_name
11302 || ', MSN.'
11303 || l_lot_ser_attr_tbl (l_column_idx).column_name
11304 || ')';
11305 ELSE
11306 l_select_stmt :=
11307 l_select_stmt
11308 || ', NVL(MSNI.'
11309 || l_lot_ser_attr_tbl (l_column_idx).column_name
11310 || ', MSN.'
11311 || l_lot_ser_attr_tbl (l_column_idx).column_name
11312 || ')';
11313 END IF;
11314
11315 END LOOP;*/
11316
11317 IF (l_debug = 1)
11318 THEN
11319 mydebug ('breadcrumb 20', 'get_serial_attr_record');
11320 END IF;
11321
11322
11323
11324 -- unlike lot case we do not need a condition for lot_number > 0 for the serials will exists
11325 -- in the system
11326 /*
11327 l_select_stmt :=
11328 l_select_stmt
11329 || ' from mtl_serial_numbers_interface msni,'
11330 || ' mtl_serial_numbers msn,'
11331 || ' mtl_transaction_lots_interface mtli,'
11332 || ' mtl_transactions_interface mti'
11333 || ' where mti.parent_id = :b_parent_id'
11334 || ' and mti.transaction_interface_id <> mti.parent_id'
11335 || ' and mtli.transaction_interface_id = mti.transaction_interface_id'
11336 || ' and msni.transaction_interface_id = mtli.serial_transaction_temp_id'
11337 || ' AND inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,:b_serial_number) <> -1'
11338 || ' and inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,nvl(msni.to_serial_number,msni.fm_serial_number)) >='
11339 || ' inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,:b_serial_number)'
11340 || ' AND msn.serial_number = :b_serial_number'
11341 || ' AND msn.inventory_item_id = mti.inventory_item_id '
11342 || ' AND msn.current_organization_id = mti.organization_id ';
11343 */
11344 l_sql_p := DBMS_SQL.open_cursor;
11345
11346 IF (l_debug = 1)
11347 THEN
11348 mydebug ('breadcrumb 30', 'get_serial_attr_record');
11349 END IF;
11350
11351 DBMS_SQL.parse (l_sql_p, g_select_stmt, DBMS_SQL.native);
11352
11353 IF (l_debug = 1)
11354 THEN
11355 mydebug ('breadcrumb 40', 'get_serial_attr_record');
11356 mydebug ('b_parent_id '|| p_transaction_interface_id, 'get_serial_attr_record');
11357 mydebug ('b_serial_number ' || p_serial_number, 'get_serial_attr_record');
11358 mydebug ('b_fm_serial_number ' ||p_fm_serial_number , 'get_serial_attr_record');
11359 mydebug ('b_to_serial_number ' ||p_to_serial_number , 'get_serial_attr_record');
11360 mydebug ('b_item_id ' ||p_item_id , 'get_serial_attr_record');
11361 mydebug ('b_org_id ' ||p_org_id , 'get_serial_attr_record');
11362 END IF;
11363
11364 DBMS_SQL.bind_variable (l_sql_p, 'B_PARENT_ID', p_transaction_interface_id);
11365 DBMS_SQL.bind_variable (l_sql_p, 'B_FM_SERIAL_NUMBER', p_fm_serial_number);
11366 DBMS_SQL.bind_variable (l_sql_p, 'B_TO_SERIAL_NUMBER', p_to_serial_number);
11367 DBMS_SQL.bind_variable (l_sql_p, 'B_SERIAL_NUMBER', p_serial_number);
11368 DBMS_SQL.bind_variable (l_sql_p, 'B_ITEM_ID', p_item_id);
11369 DBMS_SQL.bind_variable (l_sql_p, 'B_ORG_ID', p_org_id);
11370
11371 IF (l_debug = 1)
11372 THEN
11373 mydebug ('breadcrumb 50', 'get_serial_attr_record');
11374 END IF;
11375
11376 l_column_idx := 0;
11377
11378 FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
11379 LOOP
11380 l_column_idx := i;
11381 DBMS_SQL.define_column (l_sql_p
11382 , l_column_idx
11383 , l_lot_ser_attr_tbl (i).column_value
11384 , l_lot_ser_attr_tbl (i).column_length
11385 );
11386 END LOOP;
11387
11388 IF (l_debug = 1)
11389 THEN
11390 mydebug ('breadcrumb 60', 'get_serial_attr_record');
11391 END IF;
11392
11393 l_rows_processed := DBMS_SQL.EXECUTE (l_sql_p);
11394
11395 IF (l_debug = 1)
11396 THEN
11397 mydebug ('breadcrumb 70', 'get_serial_attr_record');
11398 END IF;
11399
11400 LOOP
11401 IF (DBMS_SQL.fetch_rows (l_sql_p) > 0)
11402 THEN
11403 l_column_idx := 0;
11404
11405 FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
11406 LOOP
11407 l_column_idx := i;
11408 DBMS_SQL.column_value (l_sql_p
11409 , l_column_idx
11410 , l_lot_ser_attr_tbl (i).column_value
11411 );
11412 END LOOP;
11413
11414 IF (l_debug = 1)
11415 THEN
11416 mydebug ('breadcrumb 80', 'get_serial_attr_record');
11417 END IF;
11418 ELSE
11419 EXIT;
11420 END IF;
11421
11422 EXIT;
11423 END LOOP;
11424
11425 DBMS_SQL.close_cursor (l_sql_p);
11426
11427 IF (l_debug = 1)
11428 THEN
11429 mydebug ('breadcrumb 90', 'get_serial_attr_record');
11430 mydebug ('l_lot_ser_attr_tbl.COUNT => ' || l_lot_ser_attr_tbl.COUNT
11431 , 'get_serial_attr_record'
11432 );
11433
11434 FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
11435 LOOP
11436 mydebug ( l_lot_ser_attr_tbl (i).column_name
11437 || ' => '
11438 || l_lot_ser_attr_tbl (i).column_value
11439 , 'get_serial_attr_record'
11440 );
11441 END LOOP;
11442 END IF;
11443
11444 x_lot_ser_attr_tbl := l_lot_ser_attr_tbl;
11445 EXCEPTION
11446 WHEN OTHERS
11447 THEN
11448 fnd_message.set_name ('WMS', 'WMS_GET_LOT_ATTR_ERROR');
11449 fnd_msg_pub.ADD;
11450
11451 IF (l_debug = 1)
11452 THEN
11453 mydebug ('Exception in get_serial_attr_record' || SQLERRM, 'get_lot_attr_record');
11454 END IF;
11455 END get_serial_attr_record;
11456
11457
11458 /***********************************************************************
11459 * tmpinsert2() : Procedure to insert records in to MMTT, MTLT and MSNT*
11460 * for lot split/merge/translate transactions *
11461 ***************************PSEUDO CODE*********************************
11462 * for each MTI fetched for the given header_id *
11463 * *
11464 * insert into MMTT *
11465 * fetch the MTLI corresponding to the MTI fetched above. *
11466 * insert into MTLT (there will be only one MTLI for a given MTI) *
11467 * if(Lot Split OR Lot Merge) then *
11468 * for each MSNI for the above MTLI *
11469 * Get the number of serials in MSNI (if frm_serial <> to_serial)*
11470 * Get the serial difference if serials present in range *
11471 * For each expanded serial Loop *
11472 * If Resulting Serial THEN *
11473 * Do Serial Attribute Validations *
11474 * Insert into MSNT *
11475 * Else IF Source Serial *
11476 * Insert into MSNT with serial attribts directly from MSNI*
11477 * End Loop *
11478 * Else If Lot Translate Then *
11479 * For each serial in MSN for the lot in MTI Loop *
11480 * Insert into MSNT *
11481 * End Loop *
11482 * Update the MTLT with the serial_txn_temp_id as txn_temp_id of *
11483 * the MSNTs inserted above. *
11484 * End If *
11485 * *
11486 * Populate the genealogy records for the MSNTs inserted. *
11487 * For lot split : populate the resulting MSNTs *
11488 * For lot merge : populate the source MSNTs *
11489 * For lot translate : populate the resulting MSNTs *
11490 ***********************************************************************/
11491 PROCEDURE tmpinsert2 (
11492 x_return_status OUT NOCOPY VARCHAR2
11493 , x_msg_count OUT NOCOPY NUMBER
11494 , x_msg_data OUT NOCOPY VARCHAR2
11495 , x_validation_status OUT NOCOPY VARCHAR2
11496 , p_header_id IN NUMBER
11497 , p_validation_level IN NUMBER
11498 := fnd_api.g_valid_level_full
11499 )
11500 IS
11501 /*Select only lot split/merge and translate transactions */
11502 CURSOR mti_csr(l_header_id IN NUMBER)
11503 IS
11504 SELECT mti.transaction_header_id
11505 , mti.parent_id
11506 , mti.transaction_interface_id
11507 , mti.source_code
11508 , mti.source_line_id
11509 , mti.created_by
11510 , mti.last_updated_by
11511 , mti.last_update_login
11512 , mti.program_id
11513 , mti.program_application_id
11514 , mti.request_id
11515 , mti.organization_id
11516 , mti.subinventory_code
11517 , mti.locator_id
11518 , mti.inventory_item_id
11519 , mti.revision
11520 , mti.transaction_type_id
11521 , mti.transaction_action_id
11522 , mti.transaction_source_type_id
11523 , mti.transaction_source_id
11524 , mti.transaction_source_name
11525 , mti.transaction_reference
11526 , mti.reason_id
11527 , mti.transaction_date
11528 , mti.acct_period_id
11529 , mti.transaction_quantity
11530 , mti.transaction_uom
11531 , mti.primary_quantity
11532 , mti.transaction_cost
11533 , mti.distribution_account_id
11534 , mti.transfer_subinventory
11535 , mti.transfer_organization
11536 , mti.transfer_locator
11537 , mti.shipment_number
11538 , mti.transportation_cost
11539 , mti.transfer_cost
11540 , mti.transportation_account
11541 , mti.freight_code
11542 , mti.containers
11543 , mti.waybill_airbill
11544 , mti.expected_arrival_date
11545 , mti.currency_code
11546 , mti.currency_conversion_date
11547 , mti.currency_conversion_type
11548 , mti.currency_conversion_rate
11549 , mti.new_average_cost
11550 , mti.value_change
11551 , mti.percentage_change
11552 , mti.demand_id
11553 , mti.demand_source_header_id
11554 , mti.demand_source_line
11555 , mti.demand_source_delivery
11556 , mti.customer_ship_id
11557 , mti.trx_source_delivery_id
11558 , mti.trx_source_line_id
11559 , mti.picking_line_id
11560 , mti.required_flag
11561 , mti.negative_req_flag
11562 , mti.repetitive_line_id
11563 , mti.primary_switch
11564 , mti.operation_seq_num
11565 , mti.setup_teardown_code
11566 , mti.schedule_update_code
11567 , mti.department_id
11568 , mti.employee_code
11569 , mti.schedule_id
11570 , mti.wip_entity_type
11571 , mti.encumbrance_amount
11572 , mti.encumbrance_account
11573 , mti.ussgl_transaction_code
11574 , mti.shippable_flag
11575 , mti.requisition_line_id
11576 , mti.requisition_distribution_id
11577 , mti.ship_to_location_id
11578 , mti.completion_transaction_id
11579 , mti.attribute_category
11580 , mti.attribute1
11581 , mti.attribute2
11582 , mti.attribute3
11583 , mti.attribute4
11584 , mti.attribute5
11585 , mti.attribute6
11586 , mti.attribute7
11587 , mti.attribute8
11588 , mti.attribute9
11589 , mti.attribute10
11590 , mti.attribute11
11591 , mti.attribute12
11592 , mti.attribute13
11593 , mti.attribute14
11594 , mti.attribute15
11595 , mti.movement_id
11596 , mti.source_project_id
11597 , mti.source_task_id
11598 , mti.expenditure_type
11599 , mti.pa_expenditure_org_id
11600 , mti.project_id
11601 , mti.task_id
11602 , mti.to_project_id
11603 , mti.to_task_id
11604 , mti.final_completion_flag
11605 , mti.transfer_percentage
11606 , mti.material_account
11607 , mti.material_overhead_account
11608 , mti.resource_account
11609 , mti.outside_processing_account
11610 , mti.overhead_account
11611 , mti.cost_group_id
11612 , mti.flow_schedule
11613 , mti.qa_collection_id
11614 , mti.overcompletion_transaction_qty
11615 , mti.overcompletion_primary_qty
11616 , mti.overcompletion_transaction_id
11617 , mti.end_item_unit_number
11618 , mti.org_cost_group_id
11619 , mti.cost_type_id
11620 , mti.lpn_id
11621 , mti.content_lpn_id
11622 , mti.transfer_lpn_id
11623 , mti.organization_type
11624 , mti.transfer_organization_type
11625 , mti.owning_organization_id
11626 , mti.owning_tp_type
11627 , mti.xfr_owning_organization_id
11628 , mti.transfer_owning_tp_type
11629 , mti.planning_organization_id
11630 , mti.planning_tp_type
11631 , mti.xfr_planning_organization_id
11632 , mti.transfer_planning_tp_type
11633 , mti.transaction_batch_id
11634 , mti.transaction_batch_seq
11635 , mti.transfer_cost_group_id
11636 , mti.transaction_mode
11637 , mti.rebuild_item_id
11638 , mti.rebuild_activity_id
11639 , mti.rebuild_serial_number
11640 , mti.rebuild_job_name
11641 , mti.kanban_card_id
11642 , mti.accounting_class
11643 , mti.scheduled_flag
11644 , mti.schedule_number
11645 , mti.routing_revision_date
11646 , mti.move_transaction_id
11647 , mti.wip_supply_type
11648 , mti.build_sequence
11649 , mti.bom_revision
11650 , mti.routing_revision
11651 , mti.bom_revision_date
11652 , mti.alternate_bom_designator
11653 , mti.alternate_routing_designator
11654 , mti.secondary_transaction_quantity
11655 , mti.secondary_uom_code
11656 , mti.relieve_reservations_flag /*** {{ R12 Enhanced reservations code changes ***/
11657 , mti.relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
11658 FROM mtl_transactions_interface mti
11659 WHERE mti.transaction_header_id = l_header_id
11660 AND mti.transaction_action_id IN
11661 (inv_globals.g_action_inv_lot_split
11662 , inv_globals.g_action_inv_lot_merge
11663 , inv_globals.g_action_inv_lot_translate
11664 )
11665 AND mti.transaction_source_type_id = 13
11666 AND mti.process_flag = 1
11667 ORDER BY mti.transaction_batch_id
11668 , mti.transaction_batch_seq
11669 , mti.organization_id
11670 , mti.inventory_item_id
11671 , mti.revision
11672 , mti.subinventory_code
11673 , mti.locator_id;
11674
11675 /*To this cursor we would pass the parent_id from each mti fetched frm the cursor MTI_CSR*/
11676 CURSOR mtli_csr (p_transaction_interface_id IN NUMBER)
11677 IS
11678 SELECT transaction_interface_id
11679 , ltrim(rtrim(lot_number)) lot_number /*Bug 6390860 added ltrim, rtrim and alias*/
11680 , lot_expiration_date
11681 , last_updated_by
11682 , created_by
11683 , last_update_login
11684 , program_update_date
11685 , program_application_id
11686 , program_id
11687 , request_id
11688 , primary_quantity
11689 , transaction_quantity
11690 , serial_transaction_temp_id
11691 , lot_attribute_category
11692 , c_attribute1
11693 , c_attribute2
11694 , c_attribute3
11695 , c_attribute4
11696 , c_attribute5
11697 , c_attribute6
11698 , c_attribute7
11699 , c_attribute8
11700 , c_attribute9
11701 , c_attribute10
11702 , c_attribute11
11703 , c_attribute12
11704 , c_attribute13
11705 , c_attribute14
11706 , c_attribute15
11707 , c_attribute16
11708 , c_attribute17
11709 , c_attribute18
11710 , c_attribute19
11711 , c_attribute20
11712 , d_attribute1
11713 , d_attribute2
11714 , d_attribute3
11715 , d_attribute4
11716 , d_attribute5
11717 , d_attribute6
11718 , d_attribute7
11719 , d_attribute8
11720 , d_attribute9
11721 , d_attribute10
11722 , n_attribute1
11723 , n_attribute2
11724 , n_attribute3
11725 , n_attribute4
11726 , n_attribute5
11727 , n_attribute6
11728 , n_attribute7
11729 , n_attribute8
11730 , n_attribute9
11731 , n_attribute10
11732 , attribute1
11733 , attribute2
11734 , attribute3
11735 , attribute4
11736 , attribute5
11737 , attribute6
11738 , attribute7
11739 , attribute8
11740 , attribute9
11741 , attribute10
11742 , attribute11
11743 , attribute12
11744 , attribute13
11745 , attribute14
11746 , attribute15
11747 , attribute_category
11748 , p_header_id
11749 , description
11750 , vendor_name
11751 , supplier_lot_number
11752 , origination_date
11753 , date_code
11754 , grade_code
11755 , change_date
11756 , maturity_date
11757 , status_id
11758 , retest_date
11759 , age
11760 , item_size
11761 , color
11762 , volume
11763 , volume_uom
11764 , place_of_origin
11765 , best_by_date
11766 , LENGTH
11767 , length_uom
11768 , recycled_content
11769 , thickness
11770 , thickness_uom
11771 , width
11772 , width_uom
11773 , curl_wrinkle_fold
11774 , vendor_id
11775 , territory_code
11776 , parent_lot_number
11777 , origination_type
11778 , expiration_action_date
11779 , expiration_action_code
11780 , hold_date
11781 , reason_id
11782 , secondary_transaction_quantity
11783 --R12 Genealogy enhancements
11784 , parent_object_type
11785 , parent_object_id
11786 , parent_object_number
11787 , parent_item_id
11788 , parent_object_type2
11789 , parent_object_id2
11790 , parent_object_number2 --R12 Genealogy enhancements
11791 FROM mtl_transaction_lots_interface
11792 WHERE transaction_interface_id = p_transaction_interface_id;
11793
11794 CURSOR msni_csr (l_serial_transaction_temp_id IN NUMBER)
11795 IS
11796 SELECT transaction_interface_id
11797 , last_update_date
11798 , last_updated_by
11799 , creation_date
11800 , created_by
11801 , last_update_login
11802 , request_id
11803 , program_application_id
11804 , program_id
11805 , program_update_date
11806 , vendor_serial_number
11807 , vendor_lot_number
11808 , ltrim(rtrim(fm_serial_number)) fm_serial_number /*Bug 4764048 added ltrim,rtrim*/
11809 , ltrim(rtrim(to_serial_number)) to_serial_number /*Bug 4764048 added ltrim,rtrim*/
11810 , parent_serial_number
11811 , serial_attribute_category
11812 , c_attribute1
11813 , c_attribute2
11814 , c_attribute3
11815 , c_attribute4
11816 , c_attribute5
11817 , c_attribute6
11818 , c_attribute7
11819 , c_attribute8
11820 , c_attribute9
11821 , c_attribute10
11822 , c_attribute11
11823 , c_attribute12
11824 , c_attribute13
11825 , c_attribute14
11826 , c_attribute15
11827 , c_attribute16
11828 , c_attribute17
11829 , c_attribute18
11830 , c_attribute19
11831 , c_attribute20
11832 , d_attribute1
11833 , d_attribute2
11834 , d_attribute3
11835 , d_attribute4
11836 , d_attribute5
11837 , d_attribute6
11838 , d_attribute7
11839 , d_attribute8
11840 , d_attribute9
11841 , d_attribute10
11842 , n_attribute1
11843 , n_attribute2
11844 , n_attribute3
11845 , n_attribute4
11846 , n_attribute5
11847 , n_attribute6
11848 , n_attribute7
11849 , n_attribute8
11850 , n_attribute9
11851 , n_attribute10
11852 , attribute_category
11853 , attribute1
11854 , attribute2
11855 , attribute3
11856 , attribute4
11857 , attribute5
11858 , attribute6
11859 , attribute7
11860 , attribute8
11861 , attribute9
11862 , attribute10
11863 , attribute11
11864 , attribute12
11865 , attribute13
11866 , attribute14
11867 , attribute15
11868 , status_id
11869 , territory_code
11870 , time_since_new
11871 , cycles_since_new
11872 , time_since_overhaul
11873 , cycles_since_overhaul
11874 , time_since_repair
11875 , cycles_since_repair
11876 , time_since_visit
11877 , cycles_since_visit
11878 , time_since_mark
11879 , cycles_since_mark
11880 , number_of_repairs
11881 FROM mtl_serial_numbers_interface msni
11882 WHERE transaction_interface_id = l_serial_transaction_temp_id;
11883
11884 CURSOR msn_serial_attributes_csr (
11885 l_serial_number IN VARCHAR2
11886 , l_inventory_item_id IN NUMBER
11887 , l_organization_id IN NUMBER
11888 )
11889 IS
11890 SELECT serial_attribute_category
11891 , c_attribute1
11892 , c_attribute2
11893 , c_attribute3
11894 , c_attribute4
11895 , c_attribute5
11896 , c_attribute6
11897 , c_attribute7
11898 , c_attribute8
11899 , c_attribute9
11900 , c_attribute10
11901 , c_attribute11
11902 , c_attribute12
11903 , c_attribute13
11904 , c_attribute14
11905 , c_attribute15
11906 , c_attribute16
11907 , c_attribute17
11908 , c_attribute18
11909 , c_attribute19
11910 , c_attribute20
11911 , d_attribute1
11912 , d_attribute2
11913 , d_attribute3
11914 , d_attribute4
11915 , d_attribute5
11916 , d_attribute6
11917 , d_attribute7
11918 , d_attribute8
11919 , d_attribute9
11920 , d_attribute10
11921 , n_attribute1
11922 , n_attribute2
11923 , n_attribute3
11924 , n_attribute4
11925 , n_attribute5
11926 , n_attribute6
11927 , n_attribute7
11928 , n_attribute8
11929 , n_attribute9
11930 , n_attribute10
11931 , attribute_category
11932 , attribute1
11933 , attribute2
11934 , attribute3
11935 , attribute4
11936 , attribute5
11937 , attribute6
11938 , attribute7
11939 , attribute8
11940 , attribute9
11941 , attribute10
11942 , attribute11
11943 , attribute12
11944 , attribute13
11945 , attribute14
11946 , attribute15
11947 , status_id
11948 , territory_code
11949 , time_since_new
11950 , cycles_since_new
11951 , time_since_overhaul
11952 , cycles_since_overhaul
11953 , time_since_repair
11954 , cycles_since_repair
11955 , time_since_visit
11956 , cycles_since_visit
11957 , time_since_mark
11958 , cycles_since_mark
11959 , number_of_repairs
11960 FROM mtl_serial_numbers msn
11961 WHERE msn.serial_number = l_serial_number
11962 AND msn.inventory_item_id = l_inventory_item_id
11963 AND msn.current_organization_id = l_organization_id;
11964
11965 /*Bug:5408823. Modified the where condition of the following cursor
11966 to add NVL to locator_id column and add a new parameter p_lpn_id which is
11967 used in the WHERE clause. */
11968 CURSOR msn_csr (
11969 p_lot_number IN VARCHAR2
11970 , p_inventory_item_id IN NUMBER
11971 , p_subinventory_code IN VARCHAR2
11972 , p_locator_id IN NUMBER
11973 , p_organization_id IN NUMBER
11974 , p_lpn_id IN NUMBER
11975 )
11976 IS
11977 SELECT last_update_date
11978 , last_updated_by
11979 , creation_date
11980 , created_by
11981 , last_update_login
11982 , request_id
11983 , program_application_id
11984 , program_id
11985 , program_update_date
11986 , vendor_serial_number
11987 , vendor_lot_number
11988 , serial_number
11989 , parent_serial_number
11990 , serial_attribute_category
11991 , c_attribute1
11992 , c_attribute2
11993 , c_attribute3
11994 , c_attribute4
11995 , c_attribute5
11996 , c_attribute6
11997 , c_attribute7
11998 , c_attribute8
11999 , c_attribute9
12000 , c_attribute10
12001 , c_attribute11
12002 , c_attribute12
12003 , c_attribute13
12004 , c_attribute14
12005 , c_attribute15
12006 , c_attribute16
12007 , c_attribute17
12008 , c_attribute18
12009 , c_attribute19
12010 , c_attribute20
12011 , d_attribute1
12012 , d_attribute2
12013 , d_attribute3
12014 , d_attribute4
12015 , d_attribute5
12016 , d_attribute6
12017 , d_attribute7
12018 , d_attribute8
12019 , d_attribute9
12020 , d_attribute10
12021 , n_attribute1
12022 , n_attribute2
12023 , n_attribute3
12024 , n_attribute4
12025 , n_attribute5
12026 , n_attribute6
12027 , n_attribute7
12028 , n_attribute8
12029 , n_attribute9
12030 , n_attribute10
12031 , p_header_id
12032 , attribute_category
12033 , attribute1
12034 , attribute2
12035 , attribute3
12036 , attribute4
12037 , attribute5
12038 , attribute6
12039 , attribute7
12040 , attribute8
12041 , attribute9
12042 , attribute10
12043 , attribute11
12044 , attribute12
12045 , attribute13
12046 , attribute14
12047 , attribute15
12048 , status_id
12049 , territory_code
12050 , time_since_new
12051 , cycles_since_new
12052 , time_since_overhaul
12053 , cycles_since_overhaul
12054 , time_since_repair
12055 , cycles_since_repair
12056 , time_since_visit
12057 , cycles_since_visit
12058 , time_since_mark
12059 , cycles_since_mark
12060 , number_of_repairs
12061 FROM mtl_serial_numbers
12062 WHERE inventory_item_id = p_inventory_item_id
12063 AND current_organization_id = p_organization_id
12064 AND current_status = 3
12065 AND current_subinventory_code = p_subinventory_code
12066 AND NVL(current_locator_id,-1) = NVL(p_locator_id, -1)
12067 AND NVL(lpn_id, -1) = NVL(p_lpn_id, -1)
12068 AND lot_number = p_lot_number ;
12069
12070 /*This cursor is used to get the serials in lot merge transaction for which the genealogy
12071 *columns need to be populated/updated. We will pass the serial_transaction_temp_id of the
12072 *resultant lot(l_mtli_csr.serial_transaction_temp_id)
12073 */
12074 CURSOR msnt_serials_csr (l_serial_transaction_temp_id IN NUMBER)
12075 IS
12076 SELECT fm_serial_number
12077 , transaction_temp_id
12078 FROM mtl_serial_numbers_temp
12079 WHERE transaction_temp_id = l_serial_transaction_temp_id
12080 FOR UPDATE NOWAIT;
12081
12082 CURSOR mtli_parent_lots_csr (l_transaction_interface_id IN NUMBER)
12083 IS
12084 SELECT mtli.lot_number
12085 , mtli.serial_transaction_temp_id
12086 FROM mtl_transaction_lots_interface mtli
12087 WHERE mtli.transaction_interface_id =
12088 (SELECT mti.transaction_interface_id
12089 FROM mtl_transactions_interface mti
12090 WHERE mti.parent_id = l_transaction_interface_id
12091 AND mti.transaction_interface_id <> mti.parent_id);
12092
12093 l_parent_id NUMBER;
12094 l_transaction_interface_id NUMBER;
12095 l_next_serial VARCHAR2(30);
12096 l_old_serial VARCHAR2(30);
12097 l_serial_diff NUMBER;
12098 l_serial_code NUMBER;
12099 l_parent_object_number2 VARCHAR2 (80);
12100 l_current_serial VARCHAR2 (30);
12101 l_is_parent_lot NUMBER;
12102 l_serial_temp_id NUMBER;
12103 l_current_parent_lot VARCHAR2 (30);
12104 l_current_serial_txn_temp_id NUMBER;
12105 l_user_id NUMBER;
12106 l_login_id NUMBER;
12107 l_sysdate DATE;
12108 l_mtli_csr mtli_csr%ROWTYPE;
12109 l_serial_attributes_csr msn_serial_attributes_csr%ROWTYPE;
12110 l_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
12111 l_validated_ser_attr_tbl inv_lot_sel_attr.lot_sel_attributes_tbl_type;
12112 l_debug NUMBER;
12113 l_indexed_ser_attr_tbl lot_sel_index_attr_tbl_type;
12114 l_sequence NUMBER;
12115 l_validation_status VARCHAR2 (1);
12116 l_old_item_id NUMBER;
12117 l_old_lot_num VARCHAR2(80);
12118 l_old_sub_code VARCHAR2(10);
12119 l_old_locator_id NUMBER;
12120 l_old_lpn_id NUMBER; --Bug 5408823
12121 l_context_value_dst mtl_flex_context.descriptive_flex_context_code%TYPE;
12122 l_context_value_src mtl_flex_context.descriptive_flex_context_code%TYPE;
12123 l_patchset_j NUMBER := 0; /* 0 = No 1 = Yes */
12124
12125 BEGIN
12126
12127 l_debug := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
12128
12129 IF (l_debug = 1)
12130 THEN
12131 mydebug ('breadcrumb 10', 'tmpinsert2');
12132 END IF;
12133
12134 l_validation_status := 'Y';
12135 x_return_status := fnd_api.g_ret_sts_success;
12136 l_sysdate := SYSDATE;
12137 l_user_id := fnd_global.user_id;
12138 l_login_id := fnd_global.login_id;
12139
12140 --bug 4574806. this will be used in the statements below for final
12141 --completion flag AS a decode
12142 IF (wip_constants.DMF_PATCHSET_LEVEL>=
12143 wip_constants.DMF_PATCHSET_J_VALUE) THEN
12144 l_patchset_j := 1;
12145 END IF;
12146
12147 /*Bug:5408823. The following procedure populates the column name, data type
12148 and length of all the Serial Attributes into global table g_lot_ser_attr_tbl
12149 which will be later used in procedure get_serial_attr_record. */
12150 get_serial_attr_table;
12151
12152 /* Insert the MMTT for each MTI. For each MTI insert the corresponding MTLT.
12153 * For each MTLT there might be several MSNIs. Populate these into MSNTs .
12154 * For lot translate there will be no MSNIs. In this case we have to get the
12155 * values from the MTLT and MSN.
12156 */
12157 BEGIN
12158 IF (l_debug = 1)
12159 THEN
12160 mydebug ('breadcrumb 20 header id ' || p_header_id, 'tmpinsert2');
12161 END IF;
12162
12163 FOR l_mti_csr IN mti_csr(p_header_id)
12164 LOOP
12165 l_parent_id := l_mti_csr.parent_id;
12166 l_transaction_interface_id := l_mti_csr.transaction_interface_id;
12167
12168 IF (l_debug = 1)
12169 THEN
12170 mydebug ('Inserting into MMTT',
12171 'tmpinsert2');
12172 mydebug ('l_parent_id => '|| l_parent_id,
12173 'tmpinsert2');
12174 mydebug ('l_transaction_interface_id => '|| l_transaction_interface_id
12175 , 'tmpinsert2'
12176 );
12177 END IF;
12178
12179 IF (l_debug = 1)
12180 THEN
12181 mydebug ('breadcrumb 30','tmpinsert2');
12182 END IF;
12183
12184 INSERT INTO mtl_material_transactions_temp
12185 (transaction_header_id
12186 , transaction_temp_id
12187 , source_code
12188 , source_line_id
12189 , process_flag
12190 , creation_date
12191 , created_by
12192 , last_update_date
12193 , last_updated_by
12194 , last_update_login
12195 , program_id
12196 , program_update_date
12197 , program_application_id
12198 , request_id
12199 , organization_id
12200 , subinventory_code
12201 , locator_id
12202 , inventory_item_id
12203 , revision
12204 , transaction_type_id
12205 , transaction_action_id
12206 , transaction_source_type_id
12207 , transaction_source_id
12208 , transaction_source_name
12209 , transaction_reference
12210 , reason_id
12211 , transaction_date
12212 , acct_period_id
12213 , transaction_quantity
12214 , transaction_uom
12215 , primary_quantity
12216 , transaction_cost
12217 , distribution_account_id
12218 , transfer_subinventory
12219 , transfer_organization
12220 , transfer_to_location
12221 , shipment_number
12222 , transportation_cost
12223 , transfer_cost
12224 , transportation_account
12225 , freight_code
12226 , containers
12227 , waybill_airbill
12228 , expected_arrival_date
12229 , currency_code
12230 , currency_conversion_date
12231 , currency_conversion_type
12232 , currency_conversion_rate
12233 , new_average_cost
12234 , value_change
12235 , percentage_change
12236 , demand_id
12237 , demand_source_header_id
12238 , demand_source_line
12239 , demand_source_delivery
12240 , customer_ship_id
12241 , trx_source_delivery_id
12242 , trx_source_line_id
12243 , picking_line_id
12244 , required_flag
12245 , negative_req_flag
12246 , repetitive_line_id
12247 , primary_switch
12248 , operation_seq_num
12249 , setup_teardown_code
12250 , schedule_update_code
12251 , department_id
12252 , employee_code
12253 , schedule_id
12254 , wip_entity_type
12255 , encumbrance_amount
12256 , encumbrance_account
12257 , ussgl_transaction_code
12258 , shippable_flag
12259 , requisition_line_id
12260 , requisition_distribution_id
12261 , ship_to_location
12262 , completion_transaction_id
12263 , attribute_category
12264 , attribute1
12265 , attribute2
12266 , attribute3
12267 , attribute4
12268 , attribute5
12269 , attribute6
12270 , attribute7
12271 , attribute8
12272 , attribute9
12273 , attribute10
12274 , attribute11
12275 , attribute12
12276 , attribute13
12277 , attribute14
12278 , attribute15
12279 , movement_id
12280 , source_project_id
12281 , source_task_id
12282 , expenditure_type
12283 , pa_expenditure_org_id
12284 , project_id
12285 , task_id
12286 , to_project_id
12287 , to_task_id
12288 , posting_flag
12289 , final_completion_flag
12290 , transfer_percentage
12291 , material_account
12292 , material_overhead_account
12293 , resource_account
12294 , outside_processing_account
12295 , overhead_account
12296 , cost_group_id
12297 , flow_schedule
12298 , qa_collection_id
12299 , overcompletion_transaction_qty
12300 , overcompletion_primary_qty
12301 , overcompletion_transaction_id
12302 , end_item_unit_number
12303 , org_cost_group_id
12304 , cost_type_id
12305 , move_order_line_id
12306 , lpn_id
12307 , content_lpn_id
12308 , transfer_lpn_id
12309 , organization_type
12310 , transfer_organization_type
12311 , owning_organization_id
12312 , owning_tp_type
12313 , xfr_owning_organization_id
12314 , transfer_owning_tp_type
12315 , planning_organization_id
12316 , planning_tp_type
12317 , xfr_planning_organization_id
12318 , transfer_planning_tp_type
12319 , transaction_batch_id
12320 , transaction_batch_seq
12321 , transfer_cost_group_id
12322 , transaction_mode
12323 , rebuild_item_id
12324 , rebuild_activity_id
12325 , rebuild_serial_number
12326 , rebuild_job_name
12327 , kanban_card_id
12328 , class_code
12329 , scheduled_flag
12330 , schedule_number
12331 , routing_revision_date
12332 , move_transaction_id
12333 , wip_supply_type
12334 , build_sequence
12335 , bom_revision
12336 , routing_revision
12337 , bom_revision_date
12338 , alternate_bom_designator
12339 , alternate_routing_designator
12340 , secondary_transaction_quantity
12341 , secondary_uom_code
12342 , parent_transaction_temp_id
12343 , relieve_reservations_flag /*** {{ R12 Enhanced reservations code changes ***/
12344 , relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
12345 )
12346 VALUES (l_mti_csr.transaction_header_id
12347 , l_mti_csr.transaction_interface_id
12348 , l_mti_csr.source_code
12349 , l_mti_csr.source_line_id
12350 , 'Y'
12351 , l_sysdate
12352 , l_user_id
12353 , l_sysdate
12354 , l_user_id
12355 , l_login_id
12356 , l_mti_csr.program_id
12357 , l_sysdate
12358 , l_mti_csr.program_application_id
12359 , l_mti_csr.request_id
12360 , l_mti_csr.organization_id
12361 , l_mti_csr.subinventory_code
12362 , l_mti_csr.locator_id
12363 , l_mti_csr.inventory_item_id
12364 , l_mti_csr.revision
12365 , l_mti_csr.transaction_type_id
12366 , l_mti_csr.transaction_action_id
12367 , l_mti_csr.transaction_source_type_id
12368 , l_mti_csr.transaction_source_id
12369 , l_mti_csr.transaction_source_name
12370 , l_mti_csr.transaction_reference
12371 , l_mti_csr.reason_id
12372 , l_mti_csr.transaction_date
12373 , l_mti_csr.acct_period_id
12374 , l_mti_csr.transaction_quantity
12375 , l_mti_csr.transaction_uom
12376 , l_mti_csr.primary_quantity
12377 , l_mti_csr.transaction_cost
12378 , l_mti_csr.distribution_account_id
12379 , l_mti_csr.transfer_subinventory
12380 , l_mti_csr.transfer_organization
12381 , l_mti_csr.transfer_locator
12382 , l_mti_csr.shipment_number
12383 , l_mti_csr.transportation_cost
12384 , l_mti_csr.transfer_cost
12385 , l_mti_csr.transportation_account
12386 , l_mti_csr.freight_code
12387 , l_mti_csr.containers
12388 , l_mti_csr.waybill_airbill
12389 , l_mti_csr.expected_arrival_date
12390 , l_mti_csr.currency_code
12391 , l_mti_csr.currency_conversion_date
12392 , l_mti_csr.currency_conversion_type
12393 , l_mti_csr.currency_conversion_rate
12394 , l_mti_csr.new_average_cost
12395 , l_mti_csr.value_change
12396 , l_mti_csr.percentage_change
12397 , l_mti_csr.demand_id
12398 , l_mti_csr.demand_source_header_id
12399 , l_mti_csr.demand_source_line
12400 , l_mti_csr.demand_source_delivery
12401 , l_mti_csr.customer_ship_id
12402 , l_mti_csr.trx_source_delivery_id
12403 , l_mti_csr.trx_source_line_id
12404 , l_mti_csr.picking_line_id
12405 , l_mti_csr.required_flag
12406 , l_mti_csr.negative_req_flag
12407 , l_mti_csr.repetitive_line_id
12408 , l_mti_csr.primary_switch
12409 , l_mti_csr.operation_seq_num
12410 , l_mti_csr.setup_teardown_code
12411 , l_mti_csr.schedule_update_code
12412 , l_mti_csr.department_id
12413 , l_mti_csr.employee_code
12414 , l_mti_csr.schedule_id
12415 , l_mti_csr.wip_entity_type
12416 , l_mti_csr.encumbrance_amount
12417 , l_mti_csr.encumbrance_account
12418 , l_mti_csr.ussgl_transaction_code
12419 , l_mti_csr.shippable_flag
12420 , l_mti_csr.requisition_line_id
12421 , l_mti_csr.requisition_distribution_id
12422 , l_mti_csr.ship_to_location_id
12423 , NVL (l_mti_csr.completion_transaction_id
12424 , DECODE (l_mti_csr.transaction_action_id
12425 , 31, mtl_material_transactions_s.NEXTVAL
12426 , 32, mtl_material_transactions_s.NEXTVAL
12427 , NULL
12428 )
12429 )
12430 , l_mti_csr.attribute_category
12431 , l_mti_csr.attribute1
12432 , l_mti_csr.attribute2
12433 , l_mti_csr.attribute3
12434 , l_mti_csr.attribute4
12435 , l_mti_csr.attribute5
12436 , l_mti_csr.attribute6
12437 , l_mti_csr.attribute7
12438 , l_mti_csr.attribute8
12439 , l_mti_csr.attribute9
12440 , l_mti_csr.attribute10
12441 , l_mti_csr.attribute11
12442 , l_mti_csr.attribute12
12443 , l_mti_csr.attribute13
12444 , l_mti_csr.attribute14
12445 , l_mti_csr.attribute15
12446 , l_mti_csr.movement_id
12447 , l_mti_csr.source_project_id
12448 , l_mti_csr.source_task_id
12449 , l_mti_csr.expenditure_type
12450 , l_mti_csr.pa_expenditure_org_id
12451 , l_mti_csr.project_id
12452 , l_mti_csr.task_id
12453 , l_mti_csr.to_project_id
12454 , l_mti_csr.to_task_id
12455 , 'N'
12456 , NVL(l_mti_csr.final_completion_flag,Decode(l_patchset_j,1,l_mti_csr.final_completion_flag,'N'))
12457 , l_mti_csr.transfer_percentage
12458 , l_mti_csr.material_account
12459 , l_mti_csr.material_overhead_account
12460 , l_mti_csr.resource_account
12461 , l_mti_csr.outside_processing_account
12462 , l_mti_csr.overhead_account
12463 , l_mti_csr.cost_group_id
12464 , l_mti_csr.flow_schedule
12465 , l_mti_csr.qa_collection_id
12466 , l_mti_csr.overcompletion_transaction_qty
12467 , /* Overcompletion Transactions */
12468 l_mti_csr.overcompletion_primary_qty
12469 , l_mti_csr.overcompletion_transaction_id
12470 , l_mti_csr.end_item_unit_number
12471 , l_mti_csr.org_cost_group_id
12472 , l_mti_csr.cost_type_id
12473 , DECODE (l_mti_csr.transaction_source_type_id
12474 , 4, l_mti_csr.source_line_id
12475 , NULL
12476 )
12477 , l_mti_csr.lpn_id
12478 , l_mti_csr.content_lpn_id
12479 , l_mti_csr.transfer_lpn_id
12480 , l_mti_csr.organization_type
12481 , l_mti_csr.transfer_organization_type
12482 , l_mti_csr.owning_organization_id
12483 , l_mti_csr.owning_tp_type
12484 , l_mti_csr.xfr_owning_organization_id
12485 , l_mti_csr.transfer_owning_tp_type
12486 , l_mti_csr.planning_organization_id
12487 , l_mti_csr.planning_tp_type
12488 , l_mti_csr.xfr_planning_organization_id
12489 , l_mti_csr.transfer_planning_tp_type
12490 , l_mti_csr.transaction_batch_id
12491 , l_mti_csr.transaction_batch_seq
12492 , l_mti_csr.transfer_cost_group_id
12493 ,
12494 --this goes into transaction_mode
12495 DECODE (p_validation_level
12496 , fnd_api.g_valid_level_none, l_mti_csr.transaction_mode
12497 , inv_txn_manager_grp.proc_mode_mti
12498 )
12499 , l_mti_csr.rebuild_item_id
12500 , l_mti_csr.rebuild_activity_id
12501 , l_mti_csr.rebuild_serial_number
12502 , l_mti_csr.rebuild_job_name
12503 , l_mti_csr.kanban_card_id
12504 , l_mti_csr.accounting_class
12505 , l_mti_csr.scheduled_flag
12506 , l_mti_csr.schedule_number
12507 , l_mti_csr.routing_revision_date
12508 , l_mti_csr.move_transaction_id
12509 , l_mti_csr.wip_supply_type
12510 , l_mti_csr.build_sequence
12511 , l_mti_csr.bom_revision
12512 , l_mti_csr.routing_revision
12513 , l_mti_csr.bom_revision_date
12514 , l_mti_csr.alternate_bom_designator
12515 , l_mti_csr.alternate_routing_designator
12516 , l_mti_csr.secondary_transaction_quantity
12517 , l_mti_csr.secondary_uom_code
12518 , l_mti_csr.parent_id
12519 , l_mti_csr.relieve_reservations_flag /*** {{ R12 Enhanced reservations code changes ***/
12520 , l_mti_csr.relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
12521 );
12522
12523 IF (l_debug = 1)
12524 THEN
12525 mydebug ('breadcrumb 40', 'tmpinsert2');
12526 END IF;
12527
12528
12529 --For each MTI there will be a corresponding only one MTLI
12530 FOR l_mtli_csr IN mtli_csr(l_transaction_interface_id) LOOP
12531
12532 IF (l_debug = 1)
12533 THEN
12534 mydebug ('breadcrumb 50', 'tmpinsert2');
12535 mydebug ('Inserting into MTLI', 'tmpinsert2');
12536 END IF;
12537
12538 INSERT INTO mtl_transaction_lots_temp
12539 (transaction_temp_id
12540 , lot_number
12541 , lot_expiration_date
12542 , last_updated_by
12543 , last_update_date
12544 , creation_date
12545 , created_by
12546 , last_update_login
12547 , program_application_id
12548 , program_id
12549 , program_update_date
12550 , request_id
12551 , primary_quantity
12552 , transaction_quantity
12553 , serial_transaction_temp_id
12554 , lot_attribute_category
12555 , c_attribute1
12556 , c_attribute2
12557 , c_attribute3
12558 , c_attribute4
12559 , c_attribute5
12560 , c_attribute6
12561 , c_attribute7
12562 , c_attribute8
12563 , c_attribute9
12564 , c_attribute10
12565 , c_attribute11
12566 , c_attribute12
12567 , c_attribute13
12568 , c_attribute14
12569 , c_attribute15
12570 , c_attribute16
12571 , c_attribute17
12572 , c_attribute18
12573 , c_attribute19
12574 , c_attribute20
12575 , d_attribute1
12576 , d_attribute2
12577 , d_attribute3
12578 , d_attribute4
12579 , d_attribute5
12580 , d_attribute6
12581 , d_attribute7
12582 , d_attribute8
12583 , d_attribute9
12584 , d_attribute10
12585 , n_attribute1
12586 , n_attribute2
12587 , n_attribute3
12588 , n_attribute4
12589 , n_attribute5
12590 , n_attribute6
12591 , n_attribute7
12592 , n_attribute8
12593 , n_attribute9
12594 , n_attribute10
12595 , attribute1
12596 , attribute2
12597 , attribute3
12598 , attribute4
12599 , attribute5
12600 , attribute6
12601 , attribute7
12602 , attribute8
12603 , attribute9
12604 , attribute10
12605 , attribute11
12606 , attribute12
12607 , attribute13
12608 , attribute14
12609 , attribute15
12610 , attribute_category
12611 , group_header_id
12612 , description
12613 , vendor_name
12614 , supplier_lot_number
12615 , origination_date
12616 , date_code
12617 , grade_code
12618 , change_date
12619 , maturity_date
12620 , status_id
12621 , retest_date
12622 , age
12623 , item_size
12624 , color
12625 , volume
12626 , volume_uom
12627 , place_of_origin
12628 , best_by_date
12629 , LENGTH
12630 , length_uom
12631 , recycled_content
12632 , thickness
12633 , thickness_uom
12634 , width
12635 , width_uom
12636 , curl_wrinkle_fold
12637 , vendor_id
12638 , territory_code
12639 , parent_lot_number
12640 , origination_type
12641 , expiration_action_date
12642 , expiration_action_code
12643 , hold_date
12644 , reason_id
12645 , secondary_quantity
12646 --R12 Genealogy enhancements
12647 , parent_object_type
12648 , parent_object_id
12649 , parent_object_number
12650 , parent_item_id
12651 , parent_object_type2
12652 , parent_object_id2
12653 , parent_object_number2
12654 --R12 Genealogy enhancements
12655 )
12656 VALUES (l_mtli_csr.transaction_interface_id
12657 , l_mtli_csr.lot_number
12658 , l_mtli_csr.lot_expiration_date
12659 , l_user_id
12660 , l_sysdate
12661 , l_sysdate
12662 , l_user_id
12663 , l_login_id
12664 , l_mtli_csr.program_application_id
12665 , l_mtli_csr.program_id
12666 , l_mtli_csr.program_update_date
12667 , l_mtli_csr.request_id
12668 , l_mtli_csr.primary_quantity
12669 , l_mtli_csr.transaction_quantity
12670 , l_mtli_csr.serial_transaction_temp_id
12671 , l_mtli_csr.lot_attribute_category
12672 , l_mtli_csr.c_attribute1
12673 , l_mtli_csr.c_attribute2
12674 , l_mtli_csr.c_attribute3
12675 , l_mtli_csr.c_attribute4
12676 , l_mtli_csr.c_attribute5
12677 , l_mtli_csr.c_attribute6
12678 , l_mtli_csr.c_attribute7
12679 , l_mtli_csr.c_attribute8
12680 , l_mtli_csr.c_attribute9
12681 , l_mtli_csr.c_attribute10
12682 , l_mtli_csr.c_attribute11
12683 , l_mtli_csr.c_attribute12
12684 , l_mtli_csr.c_attribute13
12685 , l_mtli_csr.c_attribute14
12686 , l_mtli_csr.c_attribute15
12687 , l_mtli_csr.c_attribute16
12688 , l_mtli_csr.c_attribute17
12689 , l_mtli_csr.c_attribute18
12690 , l_mtli_csr.c_attribute19
12691 , l_mtli_csr.c_attribute20
12692 , l_mtli_csr.d_attribute1
12693 , l_mtli_csr.d_attribute2
12694 , l_mtli_csr.d_attribute3
12695 , l_mtli_csr.d_attribute4
12696 , l_mtli_csr.d_attribute5
12697 , l_mtli_csr.d_attribute6
12698 , l_mtli_csr.d_attribute7
12699 , l_mtli_csr.d_attribute8
12700 , l_mtli_csr.d_attribute9
12701 , l_mtli_csr.d_attribute10
12702 , l_mtli_csr.n_attribute1
12703 , l_mtli_csr.n_attribute2
12704 , l_mtli_csr.n_attribute3
12705 , l_mtli_csr.n_attribute4
12706 , l_mtli_csr.n_attribute5
12707 , l_mtli_csr.n_attribute6
12708 , l_mtli_csr.n_attribute7
12709 , l_mtli_csr.n_attribute8
12710 , l_mtli_csr.n_attribute9
12711 , l_mtli_csr.n_attribute10
12712 , l_mtli_csr.attribute1
12713 , l_mtli_csr.attribute2
12714 , l_mtli_csr.attribute3
12715 , l_mtli_csr.attribute4
12716 , l_mtli_csr.attribute5
12717 , l_mtli_csr.attribute6
12718 , l_mtli_csr.attribute7
12719 , l_mtli_csr.attribute8
12720 , l_mtli_csr.attribute9
12721 , l_mtli_csr.attribute10
12722 , l_mtli_csr.attribute11
12723 , l_mtli_csr.attribute12
12724 , l_mtli_csr.attribute13
12725 , l_mtli_csr.attribute14
12726 , l_mtli_csr.attribute15
12727 , l_mtli_csr.attribute_category
12728 , l_mtli_csr.p_header_id
12729 , l_mtli_csr.description
12730 , l_mtli_csr.vendor_name
12731 , l_mtli_csr.supplier_lot_number
12732 , l_mtli_csr.origination_date
12733 , l_mtli_csr.date_code
12734 , l_mtli_csr.grade_code
12735 , l_mtli_csr.change_date
12736 , l_mtli_csr.maturity_date
12737 , l_mtli_csr.status_id
12738 , l_mtli_csr.retest_date
12739 , l_mtli_csr.age
12740 , l_mtli_csr.item_size
12741 , l_mtli_csr.color
12742 , l_mtli_csr.volume
12743 , l_mtli_csr.volume_uom
12744 , l_mtli_csr.place_of_origin
12745 , l_mtli_csr.best_by_date
12746 , l_mtli_csr.LENGTH
12747 , l_mtli_csr.length_uom
12748 , l_mtli_csr.recycled_content
12749 , l_mtli_csr.thickness
12750 , l_mtli_csr.thickness_uom
12751 , l_mtli_csr.width
12752 , l_mtli_csr.width_uom
12753 , l_mtli_csr.curl_wrinkle_fold
12754 , l_mtli_csr.vendor_id
12755 , l_mtli_csr.territory_code
12756 , l_mtli_csr.parent_lot_number
12757 , l_mtli_csr.origination_type
12758 , l_mtli_csr.expiration_action_date
12759 , l_mtli_csr.expiration_action_code
12760 , l_mtli_csr.hold_date
12761 , l_mtli_csr.reason_id
12762 , l_mtli_csr.secondary_transaction_quantity
12763 --R12 Genealogy enhancements
12764 , l_mtli_csr.parent_object_type
12765 , l_mtli_csr.parent_object_id
12766 , l_mtli_csr.parent_object_number
12767 , l_mtli_csr.parent_item_id
12768 , l_mtli_csr.parent_object_type2
12769 , l_mtli_csr.parent_object_id2
12770 , l_mtli_csr.parent_object_number2
12771 --R12 Genealogy enhancements
12772 );
12773
12774 IF (l_debug = 1)
12775 THEN
12776 mydebug ('breadcrumb 60', 'tmpinsert2');
12777 END IF;
12778
12779 /* Need to insert the MSNTs if the item is serial controlled as well */
12780 BEGIN
12781 IF (l_debug = 1)
12782 THEN
12783 mydebug ('Determine the serial control code', 'tmpinsert2');
12784 END IF;
12785
12786 SELECT serial_number_control_code
12787 INTO l_serial_code
12788 FROM mtl_system_items
12789 WHERE inventory_item_id = l_mti_csr.inventory_item_id
12790 AND organization_id = l_mti_csr.organization_id;
12791 EXCEPTION
12792 WHEN OTHERS
12793 THEN
12794 IF (l_debug = 1)
12795 THEN
12796 mydebug
12797 ('Cannot fetch the serial control code for the item'
12798 , 'tmpinsert2'
12799 );
12800 END IF;
12801
12802 x_validation_status := 'N';
12803 RAISE fnd_api.g_exc_unexpected_error;
12804 END;
12805
12806 IF (l_debug = 1)
12807 THEN
12808 mydebug ('breadcrumb 70', 'tmpinsert2');
12809 mydebug ('Serial control code is ' || l_serial_code
12810 , 'tmpinsert2'
12811 );
12812 END IF;
12813
12814 IF (l_serial_code IN (2, 5))
12815 THEN
12816 IF ( l_mti_csr.transaction_action_id =
12817 inv_globals.g_action_inv_lot_split
12818 OR l_mti_csr.transaction_action_id =
12819 inv_globals.g_action_inv_lot_merge
12820 )
12821 THEN
12822 BEGIN
12823 IF (l_debug = 1)
12824 THEN
12825 mydebug ('breadcrumb 80', 'tmpinsert2');
12826 mydebug ('Lot Split/merge transaction', 'tmpinsert2');
12827 mydebug ('l_mti_csr.transaction_action_id => ' || l_mti_csr.transaction_action_id
12828 , 'tmpinsert2'
12829 );
12830 mydebug ( 'l_mtli_csr.serial_transaction_temp_id => '|| l_mtli_csr.serial_transaction_temp_id
12831 , 'tmpinsert2'
12832 );
12833 END IF;
12834
12835
12836 FOR l_ser_csr IN msni_csr (l_mtli_csr.serial_transaction_temp_id)
12837 LOOP
12838 l_next_serial := l_ser_csr.fm_serial_number;
12839 l_serial_diff :=
12840 inv_serial_number_pub.get_serial_diff
12841 (l_ser_csr.fm_serial_number
12842 , l_ser_csr.to_serial_number
12843 );
12844
12845 IF (l_debug = 1)
12846 THEN
12847 mydebug ('breadcrumb 90', 'tmpinsert2');
12848 mydebug ('l_next_serial => ' || l_next_serial
12849 , 'tmpinsert2'
12850 );
12851 mydebug ('l_serial_diff => ' || l_serial_diff
12852 , 'tmpinsert2'
12853 );
12854 END IF;
12855
12856 IF (l_serial_diff = -1)
12857 THEN
12858 fnd_message.set_name ('INV', 'INV_INVALID_SERIAL_RANGE');
12859 fnd_msg_pub.ADD;
12860 l_validation_status := 'N';
12861 RAISE fnd_api.g_exc_error;
12862 END IF;
12863
12864 /***********************************************************************
12865 * Each MSNI can have a range of serials. Need to expand them and *
12866 * process each one individually. *
12867 ***********************************************************************/
12868
12869
12870 l_next_serial := l_ser_csr.fm_serial_number;
12871 FOR i IN 1 .. l_serial_diff
12872 LOOP
12873 IF (l_debug = 1)
12874 THEN
12875 mydebug ('breadcrumb 100', 'tmpinsert2');
12876 END IF;
12877 l_old_serial := l_next_serial;
12878
12879
12880 IF (l_debug = 1)
12881 THEN
12882 mydebug ('processing serial => ' || l_next_serial
12883 , 'tmpinsert2'
12884 );
12885 mydebug ('breadcrumb 110', 'tmpinsert2');
12886 END IF;
12887
12888 /************************************************************************************
12889 * Need to see wether the attributes are present in the MSNI. If yes copy from there*
12890 * ..if not copy from MSN...then call validate_serial_attributes.... *
12891 * Will validate only the resulting MSNTs while for the source MSNTs we will *
12892 * just copy the serial attributes from the MSNI to MSNT. *
12893 ************************************************************************************/
12894 IF ( ( l_mtli_csr.transaction_interface_id <>
12895 l_mti_csr.parent_id
12896 AND l_mti_csr.transaction_action_id =
12897 inv_globals.g_action_inv_lot_split
12898 )
12899 OR ( l_mtli_csr.transaction_interface_id =
12900 l_mti_csr.parent_id
12901 AND l_mti_csr.transaction_action_id =
12902 inv_globals.g_action_inv_lot_merge
12903 )
12904 )
12905 THEN
12906 BEGIN
12907 IF (l_debug = 1)
12908 THEN
12909 mydebug ('breadcrumb 120', 'tmpinsert2');
12910 mydebug
12911 ('Processing the child record attrs for split/merge'
12912 , 'tmpinsert2'
12913 );
12914 mydebug ('Calling get_serial_attr_record'
12915 , 'tmpinsert2'
12916 );
12917 END IF;
12918
12919 get_serial_attr_record
12920 (x_lot_ser_attr_tbl => l_ser_attr_tbl
12921 , p_transaction_interface_id => l_ser_csr.transaction_interface_id
12922 , p_serial_number => l_next_serial
12923 , p_item_id => l_mti_csr.inventory_item_id
12924 , p_org_id => l_mti_csr.organization_id
12925 , p_fm_serial_number => l_ser_csr.fm_serial_number
12926 , p_to_serial_number => l_ser_csr.to_serial_number
12927 , p_organization_id => l_mti_csr.organization_id
12928 , p_inventory_item_id => l_mti_csr.inventory_item_id
12929 );
12930 IF(l_debug = 1) THEN
12931 mydebug ('Done with get_serial_attr_record'
12932 , 'tmpinsert2'
12933 );
12934 mydebug ('l_ser_attr_tbl.count => ' || l_ser_attr_tbl.COUNT
12935 , 'tmpinsert2'
12936 );
12937 END IF;
12938
12939
12940 EXCEPTION
12941 WHEN OTHERS
12942 THEN
12943 IF (l_debug = 1)
12944 THEN
12945 mydebug
12946 ('Exception while calling get_Serial_attr_record'
12947 , 'tmpinsert2'
12948 );
12949 END IF;
12950
12951 fnd_message.set_name ('WMS', 'WMS_GET_LOT_ATTR_ERROR');
12952 fnd_msg_pub.ADD;
12953 l_validation_status := 'N';
12954 RAISE fnd_api.g_exc_unexpected_error;
12955 END;
12956
12957 BEGIN
12958 IF (l_debug = 1)
12959 THEN
12960 mydebug ('breadcrumb 130', 'tmpinsert2');
12961 mydebug ('Calling validate_serial_attributes'
12962 , 'tmpinsert2'
12963 );
12964 END IF;
12965
12966 inv_lot_trx_validation_pub.validate_serial_attributes
12967 (x_return_status => x_return_status
12968 , x_msg_count => x_msg_count
12969 , x_msg_data => x_msg_data
12970 , x_validation_status => x_validation_status
12971 , x_ser_attr_tbl => l_validated_ser_attr_tbl
12972 , p_ser_number => l_next_serial
12973 , p_organization_id => l_mti_csr.organization_id
12974 , p_inventory_item_id => l_mti_csr.inventory_item_id
12975 , p_result_ser_attr_tbl => l_ser_attr_tbl
12976 );
12977 EXCEPTION
12978 WHEN OTHERS
12979 THEN
12980 IF (l_debug = 1)
12981 THEN
12982 mydebug
12983 ('validate_serial_attributes rasied exception'
12984 , 'tmpinsert2'
12985 );
12986 END IF;
12987
12988 fnd_message.set_name ('WMS'
12989 , 'WMS_VALIDATE_ATTR_ERROR');
12990 fnd_msg_pub.ADD;
12991 l_validation_status := 'N';
12992 RAISE fnd_api.g_exc_unexpected_error;
12993 END;
12994
12995 IF ( x_return_status <> fnd_api.g_ret_sts_success
12996 OR x_validation_status <> 'Y'
12997 )
12998 THEN
12999 IF (l_debug = 1)
13000 THEN
13001 mydebug
13002 ('validate_serial_attributes returned with error'
13003 , 'tmpinsert2'
13004 );
13005 END IF;
13006 l_validation_status := 'N';
13007 RAISE fnd_api.g_exc_error;
13008 END IF;
13009
13010 IF (l_debug = 1)
13011 THEN
13012 mydebug ('breadcrumb 140', 'tmpinsert2');
13013 mydebug ('l_validated_ser_attr_tbl.COUNT => ' || l_validated_ser_attr_tbl.COUNT, 'tmpinsert2');
13014 END IF;
13015
13016 FOR j IN 1 .. l_validated_ser_attr_tbl.COUNT
13017 LOOP
13018 l_indexed_ser_attr_tbl
13019 (l_validated_ser_attr_tbl (j).column_name
13020 ).column_value :=
13021 l_validated_ser_attr_tbl (j).column_value;
13022 --mydebug (l_validated_ser_attr_tbl (j).column_name || ' => ' || l_validated_ser_attr_tbl (j).column_value, 'tmpinsert2');
13023 END LOOP;
13024
13025 IF (l_debug = 1)
13026 THEN
13027 mydebug ('Inserting into MSNT', 'tmpinsert2');
13028 END IF;
13029
13030 INSERT INTO mtl_serial_numbers_temp
13031 (transaction_temp_id
13032 , last_update_date
13033 , last_updated_by
13034 , creation_date
13035 , created_by
13036 , last_update_login
13037 , request_id
13038 , program_application_id
13039 , program_id
13040 , program_update_date
13041 , vendor_serial_number
13042 , vendor_lot_number
13043 , fm_serial_number
13044 , to_serial_number
13045 , parent_serial_number
13046 , dff_updated_flag
13047 , serial_attribute_category
13048 , c_attribute1
13049 , c_attribute2
13050 , c_attribute3
13051 , c_attribute4
13052 , c_attribute5
13053 , c_attribute6
13054 , c_attribute7
13055 , c_attribute8
13056 , c_attribute9
13057 , c_attribute10
13058 , c_attribute11
13059 , c_attribute12
13060 , c_attribute13
13061 , c_attribute14
13062 , c_attribute15
13063 , c_attribute16
13064 , c_attribute17
13065 , c_attribute18
13066 , c_attribute19
13067 , c_attribute20
13068 , d_attribute1
13069 , d_attribute2
13070 , d_attribute3
13071 , d_attribute4
13072 , d_attribute5
13073 , d_attribute6
13074 , d_attribute7
13075 , d_attribute8
13076 , d_attribute9
13077 , d_attribute10
13078 , n_attribute1
13079 , n_attribute2
13080 , n_attribute3
13081 , n_attribute4
13082 , n_attribute5
13083 , n_attribute6
13084 , n_attribute7
13085 , n_attribute8
13086 , n_attribute9
13087 , n_attribute10
13088 , group_header_id
13089 , attribute_category
13090 , attribute1
13091 , attribute2
13092 , attribute3
13093 , attribute4
13094 , attribute5
13095 , attribute6
13096 , attribute7
13097 , attribute8
13098 , attribute9
13099 , attribute10
13100 , attribute11
13101 , attribute12
13102 , attribute13
13103 , attribute14
13104 , attribute15
13105 , status_id
13106 , territory_code
13107 , time_since_new
13108 , cycles_since_new
13109 , time_since_overhaul
13110 , cycles_since_overhaul
13111 , time_since_repair
13112 , cycles_since_repair
13113 , time_since_visit
13114 , cycles_since_visit
13115 , time_since_mark
13116 , cycles_since_mark
13117 , number_of_repairs
13118 )
13119 VALUES (l_ser_csr.transaction_interface_id
13120 , l_sysdate
13121 , l_ser_csr.last_updated_by
13122 , l_sysdate
13123 , l_ser_csr.created_by
13124 , l_ser_csr.last_update_login
13125 , l_ser_csr.request_id
13126 , l_ser_csr.program_application_id
13127 , l_ser_csr.program_id
13128 , l_ser_csr.program_update_date
13129 , l_ser_csr.vendor_serial_number
13130 , l_ser_csr.vendor_lot_number
13131 , l_next_serial
13132 , l_next_serial
13133 , l_ser_csr.parent_serial_number
13134 , 'Y'
13135 , l_indexed_ser_attr_tbl('SERIAL_ATTRIBUTE_CATEGORY').column_value
13136 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE1').column_value
13137 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE2').column_value
13138 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE3').column_value
13139 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE4').column_value
13140 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE5').column_value
13141 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE6').column_value
13142 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE7').column_value
13143 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE8').column_value
13144 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE9').column_value
13145 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE10').column_value
13146 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE11').column_value
13147 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE12').column_value
13148 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE13').column_value
13149 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE14').column_value
13150 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE15').column_value
13151 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE16').column_value
13152 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE17').column_value
13153 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE18').column_value
13154 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE19').column_value
13155 , l_indexed_ser_attr_tbl ('C_ATTRIBUTE20').column_value
13156 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE1').column_value
13157 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE2').column_value
13158 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE3').column_value
13159 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE4').column_value
13160 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE5').column_value
13161 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE6').column_value
13162 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE7').column_value
13163 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE8').column_value
13164 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE9').column_value
13165 , l_indexed_ser_attr_tbl ('D_ATTRIBUTE10').column_value
13166 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE1').column_value
13167 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE2').column_value
13168 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE3').column_value
13169 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE4').column_value
13170 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE5').column_value
13171 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE6').column_value
13172 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE7').column_value
13173 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE8').column_value
13174 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE9').column_value
13175 , l_indexed_ser_attr_tbl ('N_ATTRIBUTE10').column_value
13176 , p_header_id -- Added for J
13177 , l_indexed_ser_attr_tbl ('ATTRIBUTE_CATEGORY').column_value
13178 , l_indexed_ser_attr_tbl ('ATTRIBUTE1').column_value
13179 , l_indexed_ser_attr_tbl ('ATTRIBUTE2').column_value
13180 , l_indexed_ser_attr_tbl ('ATTRIBUTE3').column_value
13181 , l_indexed_ser_attr_tbl ('ATTRIBUTE4').column_value
13182 , l_indexed_ser_attr_tbl ('ATTRIBUTE5').column_value
13183 , l_indexed_ser_attr_tbl ('ATTRIBUTE6').column_value
13184 , l_indexed_ser_attr_tbl ('ATTRIBUTE7').column_value
13185 , l_indexed_ser_attr_tbl ('ATTRIBUTE8').column_value
13186 , l_indexed_ser_attr_tbl ('ATTRIBUTE9').column_value
13187 , l_indexed_ser_attr_tbl ('ATTRIBUTE10').column_value
13188 , l_indexed_ser_attr_tbl ('ATTRIBUTE11').column_value
13189 , l_indexed_ser_attr_tbl ('ATTRIBUTE12').column_value
13190 , l_indexed_ser_attr_tbl ('ATTRIBUTE13').column_value
13191 , l_indexed_ser_attr_tbl ('ATTRIBUTE14').column_value
13192 , l_indexed_ser_attr_tbl ('ATTRIBUTE15').column_value
13193 , l_ser_csr.status_id
13194 , l_indexed_ser_attr_tbl ('TERRITORY_CODE').column_value
13195 , l_indexed_ser_attr_tbl ('TIME_SINCE_NEW').column_value
13196 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_NEW').column_value
13197 , l_indexed_ser_attr_tbl ('TIME_SINCE_OVERHAUL').column_value
13198 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_OVERHAUL').column_value
13199 , l_indexed_ser_attr_tbl ('TIME_SINCE_REPAIR').column_value
13200 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_REPAIR').column_value
13201 , l_indexed_ser_attr_tbl ('TIME_SINCE_VISIT').column_value
13202 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_VISIT').column_value
13203 , l_indexed_ser_attr_tbl ('TIME_SINCE_MARK').column_value
13204 , l_indexed_ser_attr_tbl ('CYCLES_SINCE_MARK').column_value
13205 , l_indexed_ser_attr_tbl ('NUMBER_OF_REPAIRS').column_value
13206 );
13207
13208 IF (l_debug = 1)
13209 THEN
13210 mydebug ('breadcrumb 150', 'tmpinsert2');
13211 END IF;
13212 ELSE
13213 /*These are the source MSNTs ...no need to validate the source MSNT attrs*/
13214 IF (l_debug = 1)
13215 THEN
13216 mydebug ('breadcrumb 160', 'tmpinsert2');
13217 mydebug
13218 ('Inserting MSNTs for the source for split/merge'
13219 , 'tmpinsert2'
13220 );
13221 END IF;
13222
13223 INSERT INTO mtl_serial_numbers_temp
13224 (transaction_temp_id
13225 , last_update_date
13226 , last_updated_by
13227 , creation_date
13228 , created_by
13229 , last_update_login
13230 , request_id
13231 , program_application_id
13232 , program_id
13233 , program_update_date
13234 , vendor_serial_number
13235 , vendor_lot_number
13236 , fm_serial_number
13237 , to_serial_number
13238 , parent_serial_number
13239 , dff_updated_flag
13240 , serial_attribute_category
13241 , c_attribute1
13242 , c_attribute2
13243 , c_attribute3
13244 , c_attribute4
13245 , c_attribute5
13246 , c_attribute6
13247 , c_attribute7
13248 , c_attribute8
13249 , c_attribute9
13250 , c_attribute10
13251 , c_attribute11
13252 , c_attribute12
13253 , c_attribute13
13254 , c_attribute14
13255 , c_attribute15
13256 , c_attribute16
13257 , c_attribute17
13258 , c_attribute18
13259 , c_attribute19
13260 , c_attribute20
13261 , d_attribute1
13262 , d_attribute2
13263 , d_attribute3
13264 , d_attribute4
13265 , d_attribute5
13266 , d_attribute6
13267 , d_attribute7
13268 , d_attribute8
13269 , d_attribute9
13270 , d_attribute10
13271 , n_attribute1
13272 , n_attribute2
13273 , n_attribute3
13274 , n_attribute4
13275 , n_attribute5
13276 , n_attribute6
13277 , n_attribute7
13278 , n_attribute8
13279 , n_attribute9
13280 , n_attribute10
13281 , group_header_id
13282 , attribute_category
13283 , attribute1
13284 , attribute2
13285 , attribute3
13286 , attribute4
13287 , attribute5
13288 , attribute6
13289 , attribute7
13290 , attribute8
13291 , attribute9
13292 , attribute10
13293 , attribute11
13294 , attribute12
13295 , attribute13
13296 , attribute14
13297 , attribute15
13298 , status_id
13299 , territory_code
13300 , time_since_new
13301 , cycles_since_new
13302 , time_since_overhaul
13303 , cycles_since_overhaul
13304 , time_since_repair
13305 , cycles_since_repair
13306 , time_since_visit
13307 , cycles_since_visit
13308 , time_since_mark
13309 , cycles_since_mark
13310 , number_of_repairs
13311 )
13312 VALUES (l_ser_csr.transaction_interface_id
13313 , l_sysdate
13314 , l_user_id
13315 , l_sysdate
13316 , l_user_id
13317 , l_login_id
13318 , l_ser_csr.request_id
13319 , l_ser_csr.program_application_id
13320 , l_ser_csr.program_id
13321 , l_ser_csr.program_update_date
13322 , l_ser_csr.vendor_serial_number
13323 , l_ser_csr.vendor_lot_number
13324 , l_next_serial
13325 , l_next_serial
13326 , l_ser_csr.parent_serial_number
13327 , 'Y'
13328 , l_ser_csr.serial_attribute_category
13329 , l_ser_csr.c_attribute1
13330 , l_ser_csr.c_attribute2
13331 , l_ser_csr.c_attribute3
13332 , l_ser_csr.c_attribute4
13333 , l_ser_csr.c_attribute5
13334 , l_ser_csr.c_attribute6
13335 , l_ser_csr.c_attribute7
13336 , l_ser_csr.c_attribute8
13337 , l_ser_csr.c_attribute9
13338 , l_ser_csr.c_attribute10
13339 , l_ser_csr.c_attribute11
13340 , l_ser_csr.c_attribute12
13341 , l_ser_csr.c_attribute13
13342 , l_ser_csr.c_attribute14
13343 , l_ser_csr.c_attribute15
13344 , l_ser_csr.c_attribute16
13345 , l_ser_csr.c_attribute17
13346 , l_ser_csr.c_attribute18
13347 , l_ser_csr.c_attribute19
13348 , l_ser_csr.c_attribute20
13349 , l_ser_csr.d_attribute1
13350 , l_ser_csr.d_attribute2
13351 , l_ser_csr.d_attribute3
13352 , l_ser_csr.d_attribute4
13353 , l_ser_csr.d_attribute5
13354 , l_ser_csr.d_attribute6
13355 , l_ser_csr.d_attribute7
13356 , l_ser_csr.d_attribute8
13357 , l_ser_csr.d_attribute9
13358 , l_ser_csr.d_attribute10
13359 , l_ser_csr.n_attribute1
13360 , l_ser_csr.n_attribute2
13361 , l_ser_csr.n_attribute3
13362 , l_ser_csr.n_attribute4
13363 , l_ser_csr.n_attribute5
13364 , l_ser_csr.n_attribute6
13365 , l_ser_csr.n_attribute7
13366 , l_ser_csr.n_attribute8
13367 , l_ser_csr.n_attribute9
13368 , l_ser_csr.n_attribute10
13369 , p_header_id
13370 , l_ser_csr.attribute_category
13371 , l_ser_csr.attribute1
13372 , l_ser_csr.attribute2
13373 , l_ser_csr.attribute3
13374 , l_ser_csr.attribute4
13375 , l_ser_csr.attribute5
13376 , l_ser_csr.attribute6
13377 , l_ser_csr.attribute7
13378 , l_ser_csr.attribute8
13379 , l_ser_csr.attribute9
13380 , l_ser_csr.attribute10
13381 , l_ser_csr.attribute11
13382 , l_ser_csr.attribute12
13383 , l_ser_csr.attribute13
13384 , l_ser_csr.attribute14
13385 , l_ser_csr.attribute15
13386 , l_ser_csr.status_id
13387 , l_ser_csr.territory_code
13388 , l_ser_csr.time_since_new
13389 , l_ser_csr.cycles_since_new
13390 , l_ser_csr.time_since_overhaul
13391 , l_ser_csr.cycles_since_overhaul
13392 , l_ser_csr.time_since_repair
13393 , l_ser_csr.cycles_since_repair
13394 , l_ser_csr.time_since_visit
13395 , l_ser_csr.cycles_since_visit
13396 , l_ser_csr.time_since_mark
13397 , l_ser_csr.cycles_since_mark
13398 , l_ser_csr.number_of_repairs
13399 );
13400 END IF;
13401 l_next_serial :=
13402 inv_serial_number_pub.increment_ser_num
13403 (l_old_serial
13404 , 1
13405 );
13406
13407 IF (l_next_serial = l_old_serial)
13408 THEN
13409 IF (l_debug = 1)
13410 THEN
13411 mydebug ('Error in increment_serial_number '
13412 , 'tmpinsert2'
13413 );
13414 END IF;
13415
13416 fnd_message.set_name ('INV', 'INVALID_SERIAL_NUMBER');
13417 fnd_msg_pub.ADD;
13418 l_validation_status := 'N';
13419 RAISE fnd_api.g_exc_error;
13420 END IF;
13421
13422 END LOOP;
13423 END LOOP;
13424
13425 IF (l_debug = 1)
13426 THEN
13427 mydebug ('breadcrumb 170', 'tmpinsert2');
13428 END IF;
13429 EXCEPTION
13430 WHEN NO_DATA_FOUND
13431 THEN
13432 IF (l_debug = 1)
13433 THEN
13434 mydebug
13435 ('NO_DATA_FOUND while inserting into MSNT for lot /split'
13436 , ''
13437 );
13438 END IF;
13439
13440 l_validation_status := 'N';
13441 RAISE fnd_api.g_exc_unexpected_error;
13442 WHEN OTHERS
13443 THEN
13444 IF (l_debug = 1)
13445 THEN
13446 mydebug
13447 ('exception raised while inserting into MSNT for lot split/merge'
13448 , SQLERRM
13449 );
13450 END IF;
13451 RAISE fnd_api.g_exc_unexpected_error;
13452 END;
13453 ELSE
13454 IF (l_debug = 1)
13455 THEN
13456 mydebug ('This is lot translate transaction', 'tmpinsert2');
13457 mydebug ('breadcrumb 180', 'tmpinsert2');
13458 END IF;
13459
13460 /******************************************************************************
13461 *Lot translate transaction. Users are not expected to populate the MSNIs for *
13462 *Lot Translate txns. We need to generate the MSNTs based on MTLIs and MSN. *
13463 ******************************************************************************/
13464 SELECT mtl_material_transactions_s.NEXTVAL
13465 INTO l_sequence
13466 FROM DUAL;
13467 /******************************************************************************
13468 *If this is the resulting MTIs then we need to query the against the source *
13469 *item, lot and subinventory because after lot translate these may get changed*
13470 *and there wil be no record in the MSN for the new lot etc. *
13471 ******************************************************************************/
13472
13473 /* Bug:5408823. Also fetching lpn_id column from MTI. */
13474 IF(l_mti_csr.transaction_interface_id <> l_mti_csr.parent_id) THEN
13475 SELECT mti.inventory_item_id
13476 , mtli.lot_number
13477 , mti.subinventory_code
13478 , mti.locator_id
13479 , mti.lpn_id
13480 INTO l_old_item_id
13481 ,l_old_lot_num
13482 ,l_old_sub_code
13483 ,l_old_locator_id
13484 ,l_old_lpn_id
13485 FROM mtl_transactions_interface mti
13486 ,mtl_transaction_lots_interface mtli
13487 WHERE mti.transaction_interface_id = mtli.transaction_interface_id
13488 AND mti.transaction_interface_id = mti.parent_id
13489 AND mti.transaction_interface_id = l_mti_csr.parent_id;
13490 IF(l_old_item_id <> l_mti_csr.inventory_item_id) THEN
13491 --Check if the source and destination Items have the attribute context.
13492 IF(l_debug = 1) THEN
13493 mydebug('In Lot translate : dest Records : checking DFF context', 'tmpinsert2');
13494 END IF;
13495 inv_lot_sel_attr.get_context_code(
13496 context_value => l_context_value_src
13497 ,org_id => l_mti_csr.organization_id
13498 ,item_id => l_old_item_id
13499 ,flex_name => 'Serial Attributes'
13500 ,p_lot_serial_number => null);
13501
13502 IF(l_debug = 1) THEN
13503 mydebug('l_context_value_src => '|| l_context_value_src, 'tmpinsert2');
13504 END IF;
13505
13506 inv_lot_sel_attr.get_context_code(
13507 context_value => l_context_value_dst
13508 ,org_id => l_mti_csr.organization_id
13509 ,item_id => l_mti_csr.inventory_item_id
13510 ,flex_name => 'Serial Attributes'
13511 ,p_lot_serial_number => null);
13512
13513 IF(l_debug = 1) THEN
13514 mydebug('l_context_value_dst => '|| l_context_value_dst, 'tmpinsert2');
13515 END IF;
13516
13517 IF( NOT(
13518 (l_context_value_src IS NULL AND l_context_value_dst IS NULL) OR
13519 (l_context_value_src = l_context_value_dst)
13520 )
13521 ) THEN
13522 IF(l_debug = 1) THEN
13523 mydebug('breadcrumb 185', 'tmpinsert2');
13524 mydebug('Lot translate : Items have different Serial Attr Context', 'tmpinsert2');
13525 END IF;
13526 fnd_message.set_name ('INV', 'INV_SERIAL_CONTEXT_DIFF');
13527 fnd_msg_pub.ADD;
13528 RAISE fnd_api.g_exc_error;
13529 l_validation_status := 'N';
13530 END IF;
13531 END IF;
13532 ELSE /*Source MTIs*/
13533 l_old_item_id := l_mti_csr.inventory_item_id;
13534 l_old_lot_num := l_mtli_csr.lot_number;
13535 l_old_sub_code := l_mti_csr.subinventory_code;
13536 l_old_locator_id := l_mti_csr.locator_id;
13537 l_old_lpn_id := l_mti_csr.lpn_id; --Bug 5408823
13538 END IF;
13539
13540 /*Bug:5408823. Added new parameter l_old_lpn_id to pass lpn_id. */
13541 FOR l_ser_csr IN msn_csr (l_old_lot_num
13542 , l_old_item_id
13543 , l_old_sub_code
13544 , l_old_locator_id
13545 , l_mti_csr.organization_id
13546 , l_old_lpn_id
13547 )
13548 LOOP
13549 IF (l_debug = 1)
13550 THEN
13551 mydebug ('breadcrumb 190', 'tmpinsert2');
13552 mydebug ('In loop Inserting MSNT for serial => ' || l_ser_csr.serial_number
13553 , 'tmpinsert2'
13554 );
13555 END IF;
13556
13557 INSERT INTO mtl_serial_numbers_temp
13558 (transaction_temp_id
13559 , last_update_date
13560 , last_updated_by
13561 , creation_date
13562 , created_by
13563 , last_update_login
13564 , request_id
13565 , program_application_id
13566 , program_id
13567 , program_update_date
13568 , vendor_serial_number
13569 , vendor_lot_number
13570 , fm_serial_number
13571 , to_serial_number
13572 , parent_serial_number
13573 , serial_attribute_category
13574 , c_attribute1
13575 , c_attribute2
13576 , c_attribute3
13577 , c_attribute4
13578 , c_attribute5
13579 , c_attribute6
13580 , c_attribute7
13581 , c_attribute8
13582 , c_attribute9
13583 , c_attribute10
13584 , c_attribute11
13585 , c_attribute12
13586 , c_attribute13
13587 , c_attribute14
13588 , c_attribute15
13589 , c_attribute16
13590 , c_attribute17
13591 , c_attribute18
13592 , c_attribute19
13593 , c_attribute20
13594 , d_attribute1
13595 , d_attribute2
13596 , d_attribute3
13597 , d_attribute4
13598 , d_attribute5
13599 , d_attribute6
13600 , d_attribute7
13601 , d_attribute8
13602 , d_attribute9
13603 , d_attribute10
13604 , n_attribute1
13605 , n_attribute2
13606 , n_attribute3
13607 , n_attribute4
13608 , n_attribute5
13609 , n_attribute6
13610 , n_attribute7
13611 , n_attribute8
13612 , n_attribute9
13613 , n_attribute10
13614 , group_header_id
13615 , attribute_category
13616 , attribute1
13617 , attribute2
13618 , attribute3
13619 , attribute4
13620 , attribute5
13621 , attribute6
13622 , attribute7
13623 , attribute8
13624 , attribute9
13625 , attribute10
13626 , attribute11
13627 , attribute12
13628 , attribute13
13629 , attribute14
13630 , attribute15
13631 , status_id
13632 , territory_code
13633 , time_since_new
13634 , cycles_since_new
13635 , time_since_overhaul
13636 , cycles_since_overhaul
13637 , time_since_repair
13638 , cycles_since_repair
13639 , time_since_visit
13640 , cycles_since_visit
13641 , time_since_mark
13642 , cycles_since_mark
13643 , number_of_repairs
13644 )
13645 VALUES (l_sequence
13646 , l_sysdate
13647 , l_user_id
13648 , l_sysdate
13649 , l_user_id
13650 , l_login_id
13651 , l_ser_csr.request_id
13652 , l_ser_csr.program_application_id
13653 , l_ser_csr.program_id
13654 , l_ser_csr.program_update_date
13655 , l_ser_csr.vendor_serial_number
13656 , l_ser_csr.vendor_lot_number
13657 , l_ser_csr.serial_number
13658 , l_ser_csr.serial_number
13659 , l_ser_csr.parent_serial_number
13660 , l_ser_csr.serial_attribute_category
13661 , l_ser_csr.c_attribute1
13662 , l_ser_csr.c_attribute2
13663 , l_ser_csr.c_attribute3
13664 , l_ser_csr.c_attribute4
13665 , l_ser_csr.c_attribute5
13666 , l_ser_csr.c_attribute6
13667 , l_ser_csr.c_attribute7
13668 , l_ser_csr.c_attribute8
13669 , l_ser_csr.c_attribute9
13670 , l_ser_csr.c_attribute10
13671 , l_ser_csr.c_attribute11
13672 , l_ser_csr.c_attribute12
13673 , l_ser_csr.c_attribute13
13674 , l_ser_csr.c_attribute14
13675 , l_ser_csr.c_attribute15
13676 , l_ser_csr.c_attribute16
13677 , l_ser_csr.c_attribute17
13678 , l_ser_csr.c_attribute18
13679 , l_ser_csr.c_attribute19
13680 , l_ser_csr.c_attribute20
13681 , l_ser_csr.d_attribute1
13682 , l_ser_csr.d_attribute2
13683 , l_ser_csr.d_attribute3
13684 , l_ser_csr.d_attribute4
13685 , l_ser_csr.d_attribute5
13686 , l_ser_csr.d_attribute6
13687 , l_ser_csr.d_attribute7
13688 , l_ser_csr.d_attribute8
13689 , l_ser_csr.d_attribute9
13690 , l_ser_csr.d_attribute10
13691 , l_ser_csr.n_attribute1
13692 , l_ser_csr.n_attribute2
13693 , l_ser_csr.n_attribute3
13694 , l_ser_csr.n_attribute4
13695 , l_ser_csr.n_attribute5
13696 , l_ser_csr.n_attribute6
13697 , l_ser_csr.n_attribute7
13698 , l_ser_csr.n_attribute8
13699 , l_ser_csr.n_attribute9
13700 , l_ser_csr.n_attribute10
13701 , p_header_id
13702 , l_ser_csr.attribute_category
13703 , l_ser_csr.attribute1
13704 , l_ser_csr.attribute2
13705 , l_ser_csr.attribute3
13706 , l_ser_csr.attribute4
13707 , l_ser_csr.attribute5
13708 , l_ser_csr.attribute6
13709 , l_ser_csr.attribute7
13710 , l_ser_csr.attribute8
13711 , l_ser_csr.attribute9
13712 , l_ser_csr.attribute10
13713 , l_ser_csr.attribute11
13714 , l_ser_csr.attribute12
13715 , l_ser_csr.attribute13
13716 , l_ser_csr.attribute14
13717 , l_ser_csr.attribute15
13718 , l_ser_csr.status_id
13719 , l_ser_csr.territory_code
13720 , l_ser_csr.time_since_new
13721 , l_ser_csr.cycles_since_new
13722 , l_ser_csr.time_since_overhaul
13723 , l_ser_csr.cycles_since_overhaul
13724 , l_ser_csr.time_since_repair
13725 , l_ser_csr.cycles_since_repair
13726 , l_ser_csr.time_since_visit
13727 , l_ser_csr.cycles_since_visit
13728 , l_ser_csr.time_since_mark
13729 , l_ser_csr.cycles_since_mark
13730 , l_ser_csr.number_of_repairs
13731 );
13732
13733 IF (l_debug = 1)
13734 THEN
13735 mydebug ('breadcrumb 200', 'tmpinsert2');
13736 END IF;
13737 END LOOP;
13738
13739 /*Need to update the MTLT with the serial_transaction_temp_id generated above */
13740 IF (l_debug = 1)
13741 THEN
13742 mydebug
13743 (' update the MTLT with the serial transaction temp_id '
13744 , 'tmpinsert2'
13745 );
13746 mydebug (' serial_txn_temp_id => ' || l_sequence
13747 , 'tmpinsert2'
13748 );
13749 END IF;
13750
13751 UPDATE mtl_transaction_lots_temp
13752 SET serial_transaction_temp_id = l_sequence
13753 WHERE transaction_temp_id = l_mtli_csr.transaction_interface_id;
13754 END IF; --if transaction lot split/merge
13755
13756 IF (l_debug = 1)
13757 THEN
13758 mydebug ('Abt to populate the genealogy columns '
13759 , 'tmpinsert2'
13760 );
13761 mydebug ('breadcrumb 210', 'tmpinsert2');
13762 END IF;
13763
13764 /*****************************************************************************************
13765 * Following genealogy columns need to be populated :- *
13766 * parent_object_number : parent_serial_number *
13767 * object_number2 : current lot to which the serial number belong to *
13768 * parent_object_number2 : previous lot to which the serial number belonged to*
13769 * Object_type2/parent_object_type2 : The type of object *
13770 * This is how the colums are populated:- *
13771 * For lot split : populate the resulting MSNTs *
13772 * For lot merge : populate the source MSNTs *
13773 * For lot translate : populate the resulting MSNTs *
13774 *****************************************************************************************/
13775 IF (l_mtli_csr.transaction_interface_id <> l_mti_csr.parent_id)
13776 THEN
13777 BEGIN
13778 IF (l_debug = 1)
13779 THEN
13780 mydebug ('breadcrumb 220', 'tmpinsert2');
13781 END IF;
13782
13783 SELECT lot_number
13784 INTO l_parent_object_number2
13785 FROM mtl_transaction_lots_interface
13786 WHERE transaction_interface_id = l_mti_csr.parent_id;
13787
13788 SELECT serial_transaction_temp_id
13789 INTO l_serial_temp_id
13790 FROM mtl_transaction_lots_temp
13791 WHERE transaction_temp_id = l_mtli_csr.transaction_interface_id;
13792
13793 IF (l_debug = 1)
13794 THEN
13795 mydebug ( 'l_parent_object_number2 => '
13796 || l_parent_object_number2
13797 , 'tmpinsert2'
13798 );
13799 mydebug ('l_serial_temp_id => ' || l_serial_temp_id
13800 , 'tmpinsert2'
13801 );
13802 END IF;
13803
13804 IF (( l_mti_csr.transaction_action_id =
13805 inv_globals.g_action_inv_lot_split
13806 OR l_mti_csr.transaction_action_id =
13807 inv_globals.g_action_inv_lot_translate
13808 )
13809 )
13810 THEN
13811 IF (l_debug = 1)
13812 THEN
13813 mydebug ('breadcrumb 230', 'tmpinsert2');
13814 mydebug (' Genealogy columns for lot split/translate '
13815 , 'tmpinsert2'
13816 );
13817 mydebug ( 'parent_object_number2 => '
13818 || l_mtli_csr.lot_number
13819 , 'tmpinsert2'
13820 );
13821 mydebug ('object_number2 => ' || l_parent_object_number2
13822 , 'tmpinsert2'
13823 );
13824 END IF;
13825 /*The behaviour here is taken from LotTrxManager.Bit Strange!*/
13826 UPDATE mtl_serial_numbers_temp
13827 SET parent_object_number2 = l_mtli_csr.lot_number
13828 , parent_object_number = fm_serial_number
13829 , object_number2 = l_parent_object_number2
13830 , object_type2 = 1
13831 , parent_object_type2 = 1
13832 WHERE transaction_temp_id =
13833 NVL (l_mtli_csr.serial_transaction_temp_id --For Lot translate
13834 , l_serial_temp_id
13835 );
13836 ELSIF (l_mti_csr.transaction_action_id =
13837 inv_globals.g_action_inv_lot_merge
13838 )
13839 THEN
13840 IF (l_debug = 1)
13841 THEN
13842 mydebug ('breadcrumb 240', 'tmpinsert2');
13843 mydebug (' Genealogy columns for lot merge '
13844 , 'tmpinsert2'
13845 );
13846 mydebug ( 'parent_object_number2 => '|| l_parent_object_number2
13847 , 'tmpinsert2'
13848 );
13849 mydebug ('object_number2 => '|| l_mtli_csr.lot_number
13850 , 'tmpinsert2'
13851 );
13852 END IF;
13853
13854 UPDATE mtl_serial_numbers_temp
13855 SET parent_object_number2 = l_parent_object_number2
13856 , parent_object_number = fm_serial_number
13857 , object_number2 = l_mtli_csr.lot_number
13858 , object_type2 = 1
13859 , parent_object_type2 = 1
13860 WHERE transaction_temp_id =
13861 l_mtli_csr.serial_transaction_temp_id;
13862 END IF;
13863
13864 IF (l_debug = 1)
13865 THEN
13866 mydebug ('breadcrumb 250', 'tmpinsert2');
13867 END IF;
13868 EXCEPTION
13869 WHEN NO_DATA_FOUND
13870 THEN
13871 IF (l_debug = 1)
13872 THEN
13873 mydebug ('breadcrumb 260', 'tmpinsert2');
13874 mydebug
13875 ('NO_DATA_FOUND while fetching the genealogy columns'
13876 , 'tmpinsert2'
13877 );
13878 END IF;
13879
13880 l_validation_status := 'N';
13881 RAISE fnd_api.g_exc_unexpected_error;
13882 WHEN OTHERS
13883 THEN
13884 IF (l_debug = 1)
13885 THEN
13886 mydebug ('breadcrumb 270', 'tmpinsert2');
13887 mydebug
13888 ('exception while fetching the genealogy columns'
13889 , 'tmpinsert2'
13890 );
13891 END IF;
13892
13893 l_validation_status := 'N';
13894 RAISE fnd_api.g_exc_unexpected_error;
13895 END;
13896 END IF;
13897 END IF; --if serial_controlled
13898 END LOOP;--loop of MTLI
13899 END LOOP; --loop of MTI
13900 EXCEPTION
13901 WHEN OTHERS
13902 THEN
13903 IF (l_debug = 1)
13904 THEN
13905 mydebug ('breadcrumb 280', 'tmpinsert2');
13906 mydebug (' exception happened in tmpinsert2 ' || SQLERRM, 'tmpinsert2');
13907 END IF;
13908
13909 l_validation_status := 'N';
13910 RAISE fnd_api.g_exc_unexpected_error;
13911 END;
13912
13913 /*All records processed successfully*/
13914 IF (l_debug = 1)
13915 THEN
13916 mydebug (' insertions done .. !! ', 'tmpinsert2');
13917 END IF;
13918
13919 x_validation_status := 'Y';
13920 x_return_status := fnd_api.g_ret_sts_success;
13921 EXCEPTION
13922 WHEN fnd_api.g_exc_error
13923 THEN
13924 IF (l_debug = 1)
13925 THEN
13926 mydebug ('breadcrumb 290', 'tmpinsert2');
13927 END IF;
13928
13929 x_validation_status := l_validation_status;
13930 x_return_status := fnd_api.g_ret_sts_error;
13931 fnd_msg_pub.count_and_get (p_count => x_msg_count
13932 , p_data => x_msg_data);
13933 WHEN fnd_api.g_exc_unexpected_error
13934 THEN
13935 x_validation_status := l_validation_status;
13936 x_return_status := fnd_api.g_ret_sts_unexp_error;
13937 fnd_msg_pub.count_and_get (p_count => x_msg_count
13938 , p_data => x_msg_data);
13939 WHEN OTHERS
13940 THEN
13941 x_validation_status := l_validation_status;
13942 x_return_status := fnd_api.g_ret_sts_unexp_error;
13943
13944 IF fnd_msg_pub.check_msg_level (fnd_msg_pub.g_msg_lvl_unexp_error)
13945 THEN
13946 fnd_msg_pub.add_exc_msg (g_pkg_name, 'tmpinert2');
13947 END IF;
13948
13949 fnd_msg_pub.count_and_get (p_count => x_msg_count
13950 , p_data => x_msg_data);
13951 END tmpinsert2;
13952
13953
13954
13955
13956
13957
13958
13959
13960 /******************************************************************
13961 *
13962 * poget()
13963 *
13964 ******************************************************************/
13965 PROCEDURE poget(p_prof IN VARCHAR2, x_ret OUT NOCOPY VARCHAR2)
13966 IS
13967 BEGIN
13968 SELECT FND_PROFILE.value(p_prof)
13969 INTO x_ret
13970 FROM dual;
13971 END poget;
13972
13973
13974
13975
13976
13977
13978
13979 -----------------------------------------------------------------------
13980 -- Name : Validate_Transactions
13981 -- Desc : This procedure is used ot validate record inserted in MYI
13982 --through desktop forms AND moved TO mmtt. it does NOT call the
13983 -- transaction manager TO process the transactions.
13984 -- It is called to validate a batch of transaction_records .
13985 --
13986 -- I/P Params :
13987 -- p_header_id : Transaction Header Id
13988 -- O/P Params :
13989 -- x_trans_count : count of transaction records validate
13990 --History
13991 -- Jalaj Srivastava Bug 5155661
13992 -- Add new parameter p_free_tree
13993 -- Namit Singhi Bug 5286961.
13994 -- Do not call the query_tree for gme yield transactions.
13995 -----------------------------------------------------------------------
13996 FUNCTION Validate_Transactions(
13997 p_api_version IN NUMBER ,
13998 p_init_msg_list IN VARCHAR2 := fnd_api.g_false ,
13999 p_validation_level IN NUMBER := fnd_api.g_valid_level_full ,
14000 p_header_id IN NUMBER,
14001 x_return_status OUT NOCOPY VARCHAR2 ,
14002 x_msg_count OUT NOCOPY NUMBER ,
14003 x_msg_data OUT NOCOPY VARCHAR2 ,
14004 x_trans_count OUT NOCOPY NUMBER ,
14005 p_free_tree IN VARCHAR2 := fnd_api.g_true)
14006
14007 RETURN NUMBER
14008 IS
14009 l_header_id NUMBER;
14010 l_source_header_id NUMBER;
14011 l_totrows NUMBER;
14012 l_initotrows NUMBER;
14013 l_midtotrows NUMBER;
14014 l_userid NUMBER;
14015 l_loginid NUMBER;
14016 l_progid NUMBER;
14017 l_applid NUMBER;
14018 l_reqstid NUMBER;
14019 l_trx_batch_id NUMBER;
14020 batch_error BOOLEAN;
14021 l_last_trx_batch_id NUMBER;
14022 line_vldn_error_flag VARCHAR(1);
14023 l_Line_Rec_Type inv_txn_manager_pub.Line_Rec_Type;
14024
14025 l_tempid NUMBER;
14026 l_item_id NUMBER;
14027 l_org_id NUMBER;
14028 l_locid NUMBER;
14029 l_srctypeid NUMBER;
14030 l_actid NUMBER;
14031 l_srcid NUMBER;
14032 l_xlocid NUMBER;
14033 l_temp_rowid VARCHAR2(21);
14034 l_sub_code VARCHAR2(11);
14035 -- Increased lot size to 80 Char - Mercy Thomas - B4625329
14036 l_lotnum VARCHAR2(80);
14037 l_src_code VARCHAR2(30);
14038 l_xfrsub VARCHAR2(11);
14039 l_rev VARCHAR2(4);
14040 l_srclineid VARCHAR2(40);
14041 l_trxdate DATE;
14042 l_qoh NUMBER;
14043 l_rqoh NUMBER;
14044 l_pqoh NUMBER;
14045 l_qr NUMBER;
14046 l_qs NUMBER;
14047 l_att NUMBER;
14048 l_atr NUMBER;
14049
14050 /* Added the following variables for Bug 3679189 */
14051 l_neg_inv_rcpt number;
14052 l_cnt_res number;
14053 l_item_qoh NUMBER;
14054 l_item_rqoh NUMBER;
14055 l_item_pqoh NUMBER;
14056 l_item_qr NUMBER;
14057 l_item_qs NUMBER;
14058 l_item_att NUMBER;
14059 l_item_atr NUMBER;
14060
14061 /*Added following variables for Bug 4194323 */
14062 l_dem_hdr_id NUMBER ;
14063 l_dem_line_id NUMBER ;
14064
14065
14066 l_rctrl NUMBER;
14067 l_lctrl NUMBER;
14068 l_flow_schedule NUMBER;
14069 l_trx_qty NUMBER;
14070 l_qty NUMBER := 0;
14071 tree_exists BOOLEAN;
14072 l_revision_control BOOLEAN;
14073 l_lot_control BOOLEAN;
14074 l_disp VARCHAR2(3000);
14075 l_msg_count NUMBER;
14076 l_msg_data VARCHAR2(2000);
14077 l_return_status VARCHAR2(1);
14078 l_tree_id NUMBER;
14079 l_override_neg_for_backflush NUMBER := 0;
14080 l_override_rsv_for_backflush NUMBER := 2; --Bug 4764343 Base 4645686.Added for a specific customer.Default value is set to 'NO'(value 2)
14081 l_translate BOOLEAN := TRUE;
14082 /*Bug#5075521. Added the below 3 variables.*/
14083 l_current_batch_failed BOOLEAN := FALSE;
14084 l_current_err_batch_id NUMBER;
14085 l_count_success NUMBER;
14086
14087
14088 CURSOR AA1 IS
14089 SELECT
14090 TRANSACTION_INTERFACE_ID,
14091 TRANSACTION_HEADER_ID,
14092 REQUEST_ID,
14093 INVENTORY_ITEM_ID,
14094 ORGANIZATION_ID,
14095 SUBINVENTORY_CODE,
14096 TRANSFER_ORGANIZATION,
14097 TRANSFER_SUBINVENTORY,
14098 TRANSACTION_UOM,
14099 TRANSACTION_DATE,
14100 TRANSACTION_QUANTITY,
14101 LOCATOR_ID,
14102 TRANSFER_LOCATOR,
14103 TRANSACTION_SOURCE_ID,
14104 TRANSACTION_SOURCE_TYPE_ID,
14105 TRANSACTION_ACTION_ID,
14106 TRANSACTION_TYPE_ID,
14107 DISTRIBUTION_ACCOUNT_ID,
14108 NVL(SHIPPABLE_FLAG,'Y'),
14109 ROWID,
14110 NEW_AVERAGE_COST,
14111 VALUE_CHANGE,
14112 PERCENTAGE_CHANGE,
14113 MATERIAL_ACCOUNT,
14114 MATERIAL_OVERHEAD_ACCOUNT,
14115 RESOURCE_ACCOUNT,
14116 OUTSIDE_PROCESSING_ACCOUNT,
14117 OVERHEAD_ACCOUNT,
14118 REQUISITION_LINE_ID,
14119 OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
14120 END_ITEM_UNIT_NUMBER,
14121 SCHEDULED_PAYBACK_DATE, /* Borrow Payback */
14122 REVISION, /* Borrow Payback */
14123 ORG_COST_GROUP_ID, /* PCST */
14124 COST_TYPE_ID, /* PCST */
14125 PRIMARY_QUANTITY,
14126 SOURCE_LINE_ID,
14127 PROCESS_FLAG,
14128 TRANSACTION_SOURCE_NAME,
14129 TRX_SOURCE_DELIVERY_ID,
14130 TRX_SOURCE_LINE_ID,
14131 PARENT_ID,
14132 TRANSACTION_BATCH_ID,
14133 TRANSACTION_BATCH_SEQ,
14134 -- INVCONV start fabdi
14135 SECONDARY_TRANSACTION_QUANTITY,
14136 SECONDARY_UOM_CODE
14137 -- INVCONV end fabdi
14138 ,SHIP_TO_LOCATION_ID -- eIB Build; Bug# 4348541
14139 ,TRANSFER_PRICE -- OPM INVCONV umoogala Process-Discrete Xfers Enh.
14140 ,WIP_ENTITY_TYPE -- Pawan 11th july added for subinventory issue
14141 /*Bug:5392366. Added following two columns. */
14142 ,COMPLETION_TRANSACTION_ID
14143 ,MOVE_TRANSACTION_ID
14144 FROM MTL_TRANSACTIONS_INTERFACE
14145 WHERE TRANSACTION_HEADER_ID = p_header_id
14146 AND PROCESS_FLAG = 1
14147 /* added for bug 4634810 */
14148 AND NOT( transaction_source_type_id = 5 AND
14149 NVL(operation_seq_num, 1) < 0 AND
14150 NVL(wip_supply_type, 0) = 6
14151 )
14152 ORDER BY TRANSACTION_BATCH_ID,TRANSACTION_BATCH_SEQ,ORGANIZATION_ID,
14153 INVENTORY_ITEM_ID,REVISION,SUBINVENTORY_CODE,LOCATOR_ID;
14154
14155
14156
14157 CURSOR Z1 (p_flow_sch NUMBER,p_line_rec_type inv_txn_manager_pub.line_rec_type) IS
14158 SELECT
14159 p_line_rec_type.ROWID,
14160 p_line_rec_type.INVENTORY_ITEM_ID,
14161 p_line_rec_type.REVISION,
14162 p_line_rec_type.ORGANIZATION_ID,
14163 p_line_rec_type.SUBINVENTORY_CODE,
14164 p_line_rec_type.LOCATOR_ID,
14165 ABS(p_line_rec_type.PRIMARY_QUANTITY) PRIMARY_QUANTITY,
14166 NULL LOT_NUMBER,
14167 p_line_rec_type.TRANSACTION_SOURCE_TYPE_ID,
14168 p_line_rec_type.TRANSACTION_ACTION_ID,
14169 p_line_rec_type.TRANSACTION_SOURCE_ID,
14170 p_line_rec_type.TRANSACTION_SOURCE_NAME,
14171 --Jalaj Srivastava 5010595
14172 --for GME (wip_enity_type=10) select trx_source_line_id as source_line_id
14173 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,
14174 MSI.REVISION_QTY_CONTROL_CODE,
14175 decode(p_line_rec_type.transaction_source_type_id,5,1,MSI.lot_control_code) lot_control_code,--j-dev
14176 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,
14177 p_line_rec_type.TRANSFER_LOCATOR,
14178 p_line_rec_type.transaction_date,
14179 MP.NEGATIVE_INV_RECEIPT_CODE
14180 FROM MTL_PARAMETERS MP,
14181 MTL_SYSTEM_ITEMS MSI
14182 WHERE MP.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
14183 -- AND MP.NEGATIVE_INV_RECEIPT_CODE = 2 'bug 3679189'
14184 AND p_line_rec_type.PROCESS_FLAG = 1
14185 --Jalaj Srivastava 5010595
14186 --for GME (wip_enity_type=10) select only non lot controlled items
14187 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
14188 AND ( ( (p_line_rec_type.wip_entity_type <> 10)
14189 AND ( (p_flow_sch <> 1
14190 AND p_line_rec_type.TRANSACTION_ACTION_ID IN (1,2,3,21,32,34,5) )
14191 OR (p_flow_sch = 1
14192 AND p_line_rec_type.TRANSACTION_ACTION_ID = 32 )
14193 )
14194 )
14195 --Jalaj Srivastava 5232394
14196 --select all transactions for GME
14197 OR (p_line_rec_type.wip_entity_type = 10)
14198 )
14199 AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
14200 AND MSI.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
14201 AND MSI.INVENTORY_ITEM_ID = p_line_rec_type.INVENTORY_ITEM_ID
14202 UNION
14203 SELECT
14204 p_line_rec_type.ROWID,
14205 p_line_rec_type.INVENTORY_ITEM_ID,
14206 p_line_rec_type.REVISION,
14207 p_line_rec_type.ORGANIZATION_ID,
14208 p_line_rec_type.SUBINVENTORY_CODE,
14209 p_line_rec_type.LOCATOR_ID,
14210 ABS(MTLI.PRIMARY_QUANTITY) PRIMARY_QUANTITY,
14211 MTLI.lot_number LOT_NUMBER,
14212 p_line_rec_type.TRANSACTION_SOURCE_TYPE_ID,
14213 p_line_rec_type.TRANSACTION_ACTION_ID,
14214 p_line_rec_type.TRANSACTION_SOURCE_ID,
14215 p_line_rec_type.TRANSACTION_SOURCE_NAME,
14216 --Jalaj Srivastava 5010595
14217 --for GME (wip_enity_type=10) select trx_source_line_id as source_line_id
14218 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,
14219 MSI.REVISION_QTY_CONTROL_CODE,
14220 MSI.lot_control_code lot_control_code,
14221 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,
14222 p_line_rec_type.TRANSFER_LOCATOR,
14223 p_line_rec_type.transaction_date,
14224 MP.NEGATIVE_INV_RECEIPT_CODE
14225 FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI,
14226 MTL_PARAMETERS MP,
14227 MTL_SYSTEM_ITEMS MSI
14228 WHERE MP.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
14229 --AND MP.NEGATIVE_INV_RECEIPT_CODE = 2 'bug 3679189'
14230 AND MTLI.TRANSACTION_INTERFACE_ID = p_line_rec_type.TRANSACTION_INTERFACE_ID
14231 AND p_line_rec_type.PROCESS_FLAG = 1
14232 AND MSI.LOT_CONTROL_CODE = 2
14233 AND ( ( (p_line_rec_type.wip_entity_type <> 10)
14234 AND ( (p_flow_sch <> 1
14235 AND p_line_rec_type.TRANSACTION_ACTION_ID IN (1,2,3,21,32,34,5) )
14236 OR (p_flow_sch = 1
14237 AND p_line_rec_type.TRANSACTION_ACTION_ID = 32 )
14238 )
14239 )
14240 --Jalaj Srivastava 5232394
14241 --select all transactions for GME
14242 OR (p_line_rec_type.wip_entity_type = 10)
14243 )
14244 AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
14245 AND MSI.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
14246 AND MSI.INVENTORY_ITEM_ID = p_line_rec_type.INVENTORY_ITEM_ID
14247 -- Pawan 11th july added this for validation of lot for GME only
14248 AND ((p_line_rec_type.transaction_source_type_id <> 5) OR
14249 (p_line_rec_type.transaction_source_type_id = 5 AND
14250 p_line_rec_type.wip_entity_type = 10 ));--J-dev verify
14251
14252 BEGIN
14253 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
14254
14255 l_header_id := p_header_id;
14256
14257 IF (l_debug = 1)
14258 THEN
14259 inv_log_util.trace('-----Inside validate_Transactions-------.trxhdr='||p_header_id, 'INV_TXN_MANAGER_GRP', 9);
14260 END IF;
14261
14262
14263 /*----------------------------------------------------------+
14264 | retrieving information
14265 +----------------------------------------------------------*/
14266
14267 poget('LOGIN_ID', l_loginid);
14268 poget('USER_ID', l_userid);
14269 poget('CONC_PROGRAM_ID', l_progid);
14270 poget('CONC_REQUEST_ID', l_reqstid);
14271 poget('PROG_APPL_ID', l_applid);
14272
14273 IF l_loginid is NULL THEN
14274 l_loginid := -1;
14275 END IF;
14276 IF l_userid is NULL THEN
14277 l_userid := -1;
14278 END IF;
14279
14280 x_return_status := FND_API.G_RET_STS_ERROR;
14281 x_msg_count := 0;
14282 x_msg_data := '';
14283 x_trans_count := 0;
14284
14285
14286 /*+--------------------------------------------------------------+
14287 | The global gi_flow_schedule will be '1' (or true) for |
14288 | WIP flow schedules ONLY. |
14289 +--------------------------------------------------------------+ */
14290 BEGIN
14291 SELECT DECODE(UPPER(FLOW_SCHEDULE),'Y', 1, 0)
14292 INTO gi_flow_schedule
14293 FROM MTL_TRANSACTIONS_INTERFACE
14294 WHERE TRANSACTION_HEADER_ID = l_header_id
14295 AND TRANSACTION_SOURCE_TYPE_ID = 5
14296 AND TRANSACTION_ACTION_ID IN (30,31, 32) --CFM Scrap Transactions
14297 AND PROCESS_FLAG = 1
14298 AND ROWNUM < 2 ;
14299 EXCEPTION
14300 WHEN NO_DATA_FOUND THEN
14301 gi_flow_schedule := 0;
14302 END;
14303
14304 --Group Validate
14305 /***** Group Validation *******************************/
14306 validate_group(l_header_id,
14307 x_return_status,
14308 x_msg_count,
14309 x_msg_data,
14310 l_userid,
14311 l_loginid,
14312 p_validation_level);
14313
14314 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
14315 IF (l_debug = 1) THEN
14316 inv_log_util.trace('Unexpected Error in Validate Group : ' || x_msg_data,'INV_TXN_MANAGER_GRP', 9);
14317 END IF;
14318 RAISE fnd_api.g_exc_unexpected_error;
14319 END IF;
14320
14321 batch_error := FALSE;
14322
14323 FOR l_Line_rec_Type IN AA1 LOOP
14324
14325 l_trx_batch_id := l_Line_rec_Type.TRANSACTION_BATCH_ID;
14326 IF batch_error AND l_trx_batch_id = l_last_trx_batch_id THEN
14327 /** This group of transactions has failed move on to next **/
14328 /** UPDATE MTI row with Group Failure Message **/
14329 null;
14330 ELSE
14331 batch_error := FALSE;
14332 l_last_trx_batch_id := l_trx_batch_id;
14333
14334 /* Bug 6679112, adding BEGIN-EXCEPTION-END */
14335 BEGIN --validate_lines block
14336
14337 validate_lines( p_line_Rec_Type =>l_Line_rec_type,
14338 p_validation_level =>p_validation_level,
14339 p_error_flag =>line_vldn_error_flag,
14340 p_userid => l_userid,
14341 p_loginid => l_loginid,
14342 p_applid => l_applid,
14343 p_progid => l_progid
14344 );
14345 IF (line_vldn_error_flag = 'Y') then
14346 IF (l_debug = 1) THEN
14347 inv_log_util.trace('Error in Line Validatin', 'INV_TXN_MANAGER_GRP', 9);
14348 END IF;
14349 RAISE fnd_api.g_exc_unexpected_error;
14350 --SQL error
14351 END IF;
14352 EXCEPTION
14353 /* Added for Bug 6679112 */
14354 WHEN others THEN
14355 batch_error := TRUE;
14356 IF (l_debug = 1) THEN
14357 inv_log_util.trace('Error:'||sqlerrm,'INV_TXN_MANAGER_GRP', 9);
14358 END IF;
14359 END; --validate_lines block
14360 /* Changes for bug 6679112 end */
14361
14362 END IF;--BatchId
14363 END LOOP;--AA1
14364
14365
14366 /*-------------------------------------------------------------+
14367 | If a single transaction within a group fails all transactions
14368 | in that group should not be processed.
14369 +--------------------------------------------------------------*/
14370
14371
14372 --check for batch error at line validation
14373 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14374
14375 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
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 WHERE TRANSACTION_HEADER_ID = l_header_id
14384 AND PROCESS_FLAG = 1
14385 AND EXISTS
14386 (SELECT 'Y'
14387 FROM MTL_TRANSACTIONS_INTERFACE MTI2
14388 WHERE MTI2.TRANSACTION_HEADER_ID = l_header_id
14389 AND MTI2.PROCESS_FLAG = 3
14390 AND MTI2.ERROR_CODE IS NOT NULL
14391 AND MTI2.TRANSACTION_BATCH_ID = MTI.TRANSACTION_BATCH_ID);
14392
14393 /* Commented following and Added EXISTS clause above for bug 8444982
14394 AND TRANSACTION_BATCH_ID IN
14395 (SELECT DISTINCT MTI2.TRANSACTION_BATCH_ID
14396 FROM MTL_TRANSACTIONS_INTERFACE MTI2
14397 WHERE MTI2.TRANSACTION_HEADER_ID = l_header_id
14398 AND MTI2.PROCESS_FLAG = 3
14399 AND MTI2.ERROR_CODE IS NOT NULL);
14400 */
14401 -- group error changes.
14402
14403
14404
14405 --Need to call the qty tree.
14406 --LOOP for each record
14407 --create tree
14408 --query tree
14409 --compare qty
14410 --UPDATE tree
14411 --END LOOP
14412 --clear all tree cache.
14413
14414 IF (l_debug = 1) THEN
14415 inv_log_util.trace('Going to open cursor AA1', 'INV_TXN_MANAGER_GRP', 9);
14416 END IF;
14417
14418 FOR l_Line_rec_Type IN AA1 LOOP
14419 /*Bug#5075521. Moved all the validation code inside the below IF condition so that
14420 the validation is done only if the current record does not belong to an errored
14421 batch.*/
14422 IF ( l_current_err_batch_id IS NULL
14423 OR l_Line_rec_Type.transaction_batch_id IS NULL
14424 OR l_current_err_batch_id <> l_Line_rec_Type.transaction_batch_id )THEN --050
14425 l_current_batch_failed := FALSE;
14426 FOR z1_rec IN
14427 Z1(gi_flow_schedule,l_Line_rec_type) LOOP
14428
14429 tree_exists := FALSE;
14430
14431 IF (l_debug = 1) THEN
14432 inv_log_util.trace('Getting values from Z1 cursor', 'INV_TXN_MANAGER_GRP', 9);
14433 END IF;
14434
14435 l_temp_rowid :=z1_rec.ROWID;
14436 l_item_id:=z1_rec.inventory_item_id;
14437 l_rev:=z1_rec.revision;
14438 l_org_id:=z1_rec.organization_id;
14439 l_sub_code:=z1_rec.subinventory_code;
14440 l_locid :=z1_rec.locator_id;
14441 l_trx_qty:=z1_rec.primary_quantity;
14442 l_lotnum:=z1_rec.lot_number;
14443 l_srctypeid:=z1_rec.transaction_source_type_id;
14444 l_actid:=z1_rec.transaction_action_id;
14445 l_srcid:=z1_rec.transaction_source_id;
14446 l_src_code:=z1_rec.transaction_source_name;
14447 l_srclineid:=z1_rec.source_line_id;
14448 l_rctrl:=z1_rec.revision_qty_control_code;
14449 l_lctrl:=z1_rec.lot_control_code;
14450 l_xfrsub:=z1_rec.transfer_subinventory;
14451 l_xlocid:=z1_rec.transfer_locator;
14452 l_trxdate:=z1_rec.TRANSACTION_DATE;
14453 l_neg_inv_rcpt:=z1_rec.negative_inv_receipt_code;
14454
14455
14456 IF l_rctrl = 1 THEN
14457 l_revision_control := FALSE;
14458 ELSE
14459 l_revision_control := TRUE;
14460 END IF;
14461
14462 IF l_lctrl = 1 THEN
14463 l_lot_control := FALSE;
14464 ELSE
14465 l_lot_control := TRUE;
14466 END IF;
14467
14468 IF (l_debug = 1) THEN
14469 inv_log_util.trace('Calling Create tree', 'INV_TXN_MANAGER_GRP', 9);
14470 END IF;
14471
14472 -- Bug 4194323 WIP Assembly Return transactions need to look for Available Quantity against the Sales Order
14473 -- if it's linked to job
14474
14475 IF ( NOT l_current_batch_failed) THEN --350
14476 BEGIN
14477 SELECT demand_source_header_id , demand_source_line
14478 INTO l_dem_hdr_id,l_dem_line_id
14479 FROM mtl_transactions_interface
14480 WHERE
14481 ROWID = l_temp_rowid ;
14482 EXCEPTION
14483 WHEN OTHERS THEN
14484 IF (l_debug = 1) THEN
14485 inv_log_util.trace('Error in getting Demand Info : '
14486 || x_msg_data,'INV_TXN_MANAGER_GRP', 9);
14487 END IF;
14488 l_error_code := 'Error in getting Demand Info';
14489 l_error_exp := 'Error in getting Demand Info';
14490
14491 UPDATE MTL_TRANSACTIONS_INTERFACE
14492 SET LAST_UPDATE_DATE = SYSDATE,
14493 LAST_UPDATED_BY = l_userid,
14494 LAST_UPDATE_LOGIN = l_loginid,
14495 PROGRAM_UPDATE_DATE = SYSDATE,
14496 PROCESS_FLAG = 3,
14497 LOCK_FLAG = 2,
14498 ERROR_CODE = substrb(l_error_code,1,240),
14499 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14500 WHERE ROWID = l_temp_rowid
14501 AND PROCESS_FLAG = 1;
14502
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
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 ;
14521
14522 IF ( NOT l_current_batch_failed) THEN --400
14523 IF ( l_srctypeid = INv_GLOBALS.G_SOURCETYPE_WIP AND
14524 l_actid = INV_GLOBALS.G_ACTION_ASSYRETURN AND l_dem_hdr_id IS NOT NULL ) then
14525
14526 INV_QUANTITY_TREE_PVT.create_tree
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_include_suggestion => FALSE
14539 , p_demand_source_type_id => 2
14540 , p_demand_source_header_id => nvl(l_dem_hdr_id,-9999)
14541 , p_demand_source_line_id => nvl(l_dem_line_id,-9999)
14542 , p_demand_source_name => l_src_code
14543 , p_demand_source_delivery => NULL
14544 , p_lot_expiration_date => NULL
14545 , x_tree_id => l_tree_id
14546 , p_onhand_source => 3 --g_all_subs
14547 , p_exclusive => 0 --g_non_exclusive
14548 , p_pick_release => 0 --g_pick_release_no
14549 ) ;
14550 ELSE
14551
14552 INV_QUANTITY_TREE_PVT.create_tree
14553 ( p_api_version_number => 1.0
14554 , p_init_msg_lst => fnd_api.g_false
14555 , x_return_status => l_return_status
14556 , x_msg_count => l_msg_count
14557 , x_msg_data => l_msg_data
14558 , p_organization_id => l_org_id
14559 , p_inventory_item_id => l_item_id
14560 , p_tree_mode => 2
14561 , p_is_revision_control => l_revision_control
14562 , p_is_lot_control => l_lot_control
14563 , p_is_serial_control => FALSE
14564 , p_include_suggestion => FALSE
14565 , p_demand_source_type_id => nvl(l_srctypeid,-9999)
14566 , p_demand_source_header_id => nvl(l_srcid,-9999)
14567 , p_demand_source_line_id => nvl(l_srclineid,-9999)
14568 , p_demand_source_name => l_src_code
14569 , p_demand_source_delivery => NULL
14570 , p_lot_expiration_date => NULL
14571 , x_tree_id => l_tree_id
14572 , p_onhand_source => 3 --g_all_subs
14573 , p_exclusive => 0 --g_non_exclusive
14574 , p_pick_release => 0 --g_pick_release_no
14575 ) ;
14576 END IF;
14577 -- Bug 4194323 Ends
14578
14579 IF (l_debug = 1) THEN
14580 inv_log_util.trace('After create tree tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14581 END IF;
14582
14583
14584
14585 IF l_return_status IN (fnd_api.g_ret_sts_error, fnd_api.g_ret_sts_unexp_error) THEN
14586 IF (l_debug = 1) THEN
14587 inv_log_util.trace('Error while creating tree : x_msg_data = ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14588 END IF;
14589 FND_MESSAGE.set_name('INV','INV_ERR_CREATETREE');
14590 FND_MESSAGE.set_token('ROUTINE','UE:AVAIL_TO_TRX');
14591 l_error_code := FND_MESSAGE.get;
14592 l_error_exp := l_msg_data;
14593 x_msg_data := l_msg_data;
14594 UPDATE MTL_TRANSACTIONS_INTERFACE
14595 SET LAST_UPDATE_DATE = SYSDATE,
14596 LAST_UPDATED_BY = l_userid,
14597 LAST_UPDATE_LOGIN = l_loginid,
14598 PROGRAM_UPDATE_DATE = SYSDATE,
14599 PROCESS_FLAG = 3,
14600 LOCK_FLAG = 2,
14601 ERROR_CODE = substrb(l_error_code,1,240),
14602 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14603 WHERE ROWID = l_temp_rowid
14604 AND PROCESS_FLAG = 1;
14605
14606 --check for batch error
14607 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14608
14609 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14610 SET LAST_UPDATE_DATE = SYSDATE,
14611 LAST_UPDATED_BY = l_userid,
14612 LAST_UPDATE_LOGIN = l_loginid,
14613 PROGRAM_UPDATE_DATE = SYSDATE,
14614 PROCESS_FLAG = 3,
14615 LOCK_FLAG = 2,
14616 ERROR_CODE = substrb(l_error_code,1,240)
14617 WHERE TRANSACTION_HEADER_ID = l_header_id
14618 AND PROCESS_FLAG = 1
14619 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id; --Bug#5075521
14620 -- group error changes.
14621
14622 l_current_batch_failed := TRUE;--Bug#5075521
14623 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14624 END IF ;
14625 END IF; --400
14626 END IF;--350
14627
14628 IF ( NOT l_current_batch_failed) THEN --100
14629
14630 INV_QUANTITY_TREE_PVT.query_tree
14631 ( p_api_version_number => 1.0
14632 , p_init_msg_lst => fnd_api.g_false
14633 , x_return_status => l_return_status
14634 , x_msg_count => l_msg_count
14635 , x_msg_data => l_msg_data
14636 , p_tree_id => l_tree_id
14637 , p_revision => l_rev
14638 , p_lot_number => l_lotnum
14639 , p_subinventory_code => l_sub_code
14640 , p_transfer_subinventory_code => l_xfrsub
14641 , p_locator_id => l_locid
14642 , x_qoh => l_qoh
14643 , x_rqoh => l_rqoh
14644 , x_pqoh => l_pqoh
14645 , x_qr => l_qr
14646 , x_qs => l_qs
14647 , x_att => l_att
14648 , x_atr => l_atr
14649 );
14650
14651 IF l_return_status = fnd_api.g_ret_sts_error THEN
14652 IF (l_debug = 1) THEN
14653 inv_log_util.trace('Expected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14654 END IF;
14655
14656 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14657 FND_MESSAGE.set_token('token1','XACT_QTY1');
14658 l_error_code := FND_MESSAGE.get;
14659 l_error_exp := l_msg_data;
14660 x_msg_data := l_msg_data;
14661 UPDATE MTL_TRANSACTIONS_INTERFACE
14662 SET LAST_UPDATE_DATE = SYSDATE,
14663 LAST_UPDATED_BY = l_userid,
14664 LAST_UPDATE_LOGIN = l_loginid,
14665 PROGRAM_UPDATE_DATE = SYSDATE,
14666 PROCESS_FLAG = 3,
14667 LOCK_FLAG = 2,
14668 ERROR_CODE = substrb(l_error_code,1,240),
14669 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14670 WHERE TRANSACTION_interface_id = l_temp_rowid
14671 AND PROCESS_FLAG = 1;
14672 --check for batch error
14673 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14674
14675 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14676 SET LAST_UPDATE_DATE = SYSDATE,
14677 LAST_UPDATED_BY = l_userid,
14678 LAST_UPDATE_LOGIN = l_loginid,
14679 PROGRAM_UPDATE_DATE = SYSDATE,
14680 PROCESS_FLAG = 3,
14681 LOCK_FLAG = 2,
14682 ERROR_CODE = substrb(l_error_code,1,240)
14683 WHERE TRANSACTION_HEADER_ID = l_header_id
14684 AND PROCESS_FLAG = 1
14685 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id; --Bug#5075521
14686 -- group error changes.
14687 l_current_batch_failed := TRUE;--Bug#5075521
14688 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14689
14690 END IF ;
14691
14692 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
14693 IF (l_debug = 1) THEN
14694 inv_log_util.trace('UnExpected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14695 END IF;
14696
14697 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14698 FND_MESSAGE.set_token('token1','XACT_QTY1');
14699 l_error_code := FND_MESSAGE.get;
14700 l_error_exp := l_msg_data;
14701 x_msg_data := l_msg_data;
14702 UPDATE MTL_TRANSACTIONS_INTERFACE
14703 SET LAST_UPDATE_DATE = SYSDATE,
14704 LAST_UPDATED_BY = l_userid,
14705 LAST_UPDATE_LOGIN = l_loginid,
14706 PROGRAM_UPDATE_DATE = SYSDATE,
14707 PROCESS_FLAG = 3,
14708 LOCK_FLAG = 2,
14709 ERROR_CODE = substrb(l_error_code,1,240),
14710 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14711 WHERE ROWID = l_temp_rowid
14712 AND PROCESS_FLAG = 1;
14713 --check for batch error
14714 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14715
14716 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14717 SET LAST_UPDATE_DATE = SYSDATE,
14718 LAST_UPDATED_BY = l_userid,
14719 LAST_UPDATE_LOGIN = l_loginid,
14720 PROGRAM_UPDATE_DATE = SYSDATE,
14721 PROCESS_FLAG = 3,
14722 LOCK_FLAG = 2,
14723 ERROR_CODE = substrb(l_error_code,1,240)
14724 WHERE TRANSACTION_HEADER_ID = l_header_id
14725 AND PROCESS_FLAG = 1
14726 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14727 --group error changes.
14728 l_current_batch_failed := TRUE;--Bug#5075521
14729 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14730 END IF;
14731
14732 IF (l_debug = 1) THEN
14733 inv_log_util.trace('L_QOH : ' || l_qoh,'INV_TXN_MANAGER_GRP', 9);
14734 inv_log_util.trace('L_RQOH : ' || l_rqoh,'INV_TXN_MANAGER_GRP', 9);
14735 inv_log_util.trace('L_PQOH : ' || l_pqoh,'INV_TXN_MANAGER_GRP', 9);
14736 inv_log_util.trace('L_QR : ' || l_qr,'INV_TXN_MANAGER_GRP', 9);
14737 inv_log_util.trace('L_QS : ' || l_qs,'INV_TXN_MANAGER_GRP', 9);
14738 inv_log_util.trace('L_ATT : ' || l_att,'INV_TXN_MANAGER_GRP', 9);
14739 inv_log_util.trace('L_ATR : ' || l_atr,'INV_TXN_MANAGER_GRP', 9);
14740 END IF;
14741 END IF;--100
14742
14743 -- Bug 3427817: For WIP backflush transactions, we should not
14744 -- check for negative availability. If it is
14745 -- a backflush transaction, then get the
14746 -- profile value and do not check for
14747 -- availability if the profile is set to
14748 -- YES.
14749
14750 IF ( NOT l_current_batch_failed ) THEN--150
14751
14752 -- nsinghi bug#5286961. Do not call the query_tree for gme yield transactions.
14753
14754 IF ((l_Line_rec_Type.wip_entity_type <> 10) OR -- not GME
14755 (l_Line_rec_Type.wip_entity_type = 10 AND
14756 l_line_rec_Type.transaction_type_id NOT IN (43, 44, 1002))) THEN
14757
14758 /*Bug:5392366. Modified the following condition to also check
14759 completion_transaction_id and move_transaction_id to make sure it
14760 is a backflush transaction. If both these values are null then
14761 it is is not a backflush transaction*/
14762 IF ((l_line_rec_Type.transaction_source_type_id = inv_globals.G_SOURCETYPE_WIP) AND
14763 (l_line_rec_Type.transaction_action_id
14764 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
14765 -- It is a backflush transaction. Get the
14766 -- override flag.
14767 l_override_neg_for_backflush :=
14768 fnd_profile.value('INV_OVERRIDE_NEG_FOR_BACKFLUSH');
14769 /*Bug 4764343 Base Bug:4645686. Introducing a new profile
14770 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' for a specific customer.If set to 'Yes',
14771 backflush transaction can drive inventory negative, even if any reservations
14772 exist for the item*/
14773 l_override_rsv_for_backflush := NVL(fnd_profile.value('INV_OVERRIDE_RSV_FOR_BACKFLUSH'), 2);
14774 ELSE
14775 l_override_neg_for_backflush := 0;
14776 l_override_rsv_for_backflush := 2;
14777 END IF;
14778 IF (l_debug = 1) THEN
14779 inv_log_util.trace('l_override_neg_for_backflush ' || l_override_neg_for_backflush,'INV_TXN_MANAGER_GRP', 9);
14780 inv_log_util.trace('l_override_rsv_for_backflush ' || l_override_rsv_for_backflush,'INV_TXN_MANAGER_GRP', 9);
14781 END IF;
14782
14783 --Bug 3487453: Added and set the variable l_translate
14784 -- to true for the token to be translated.
14785 /*Modified the below if condition to fail the WIP move transaction from open interface in sync with WIP move
14786 order form behavior for assembly return type transaction per bug 14058360 */
14787
14788 IF (l_att < l_trx_qty) THEN
14789 IF (l_neg_inv_rcpt = 1 OR l_override_neg_for_backflush = 1) THEN
14790
14791 IF ( l_qr >l_trx_qty OR l_qs >0 OR ((l_line_rec_Type.transaction_source_type_id = inv_globals.G_SOURCETYPE_WIP) AND
14792 (l_line_rec_Type.transaction_action_id = INV_GLOBALS.G_ACTION_ASSYRETURN)) )THEN
14793 /*Bug 4764343 base Bug::4645686. This condition is added for a specific customer by introducing
14794 a new profile 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' . If this profile is not set to 'Yes'
14795 then the backflush transaction can not consume existing reservations.Else it can consume
14796 existing reservation and can drive inventory go negative. */
14797 IF (l_override_rsv_for_backflush <> 1 ) THEN
14798 inv_log_util.trace('Transaction quantity must be less than or equal to available quantity','INV_TXN_MANAGER_GRP', 9);
14799 FND_MESSAGE.set_name('INV','INV_INT_PROCCODE');
14800 l_error_code := FND_MESSAGE.get;
14801 FND_MESSAGE.set_name('INV','INV_QTY_LESS_OR_EQUAL');
14802 l_error_exp := FND_MESSAGE.get;
14803 x_msg_data := l_error_exp;
14804 UPDATE MTL_TRANSACTIONS_INTERFACE
14805 SET LAST_UPDATE_DATE = SYSDATE,
14806 LAST_UPDATED_BY = l_userid,
14807 LAST_UPDATE_LOGIN = l_loginid,
14808 PROGRAM_UPDATE_DATE = SYSDATE,
14809 PROCESS_FLAG = 3,
14810 LOCK_FLAG = 2,
14811 ERROR_CODE = substrb(l_error_code,1,240),
14812 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14813 WHERE ROWID = l_temp_rowid
14814 AND PROCESS_FLAG = 1;
14815 --check for batch error
14816 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14817
14818 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14819 SET LAST_UPDATE_DATE = SYSDATE,
14820 LAST_UPDATED_BY = l_userid,
14821 LAST_UPDATE_LOGIN = l_loginid,
14822 PROGRAM_UPDATE_DATE = SYSDATE,
14823 PROCESS_FLAG = 3,
14824 LOCK_FLAG = 2,
14825 ERROR_CODE = substrb(l_error_code,1,240)
14826 WHERE TRANSACTION_HEADER_ID = l_header_id
14827 AND PROCESS_FLAG = 1
14828 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14829 -- group error changes.
14830 l_current_batch_failed := TRUE;--Bug#5075521
14831 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14832 END IF; --override_rsv_for_backflush
14833 END IF;
14834
14835 IF (NOT l_current_batch_failed ) THEN --200
14836 INV_QUANTITY_TREE_PVT.query_tree
14837 ( p_api_version_number => 1.0
14838 , p_init_msg_lst => fnd_api.g_false
14839 , x_return_status => l_return_status
14840 , x_msg_count => l_msg_count
14841 , x_msg_data => l_msg_data
14842 , p_tree_id => l_tree_id
14843 , p_revision => NULL
14844 , p_lot_number => NULL
14845 , p_subinventory_code => NULL
14846 , p_locator_id => NULL
14847 , x_qoh => l_item_qoh
14848 , x_rqoh => l_item_rqoh
14849 , x_pqoh => l_item_pqoh
14850 , x_qr => l_item_qr
14851 , x_qs => l_item_qs
14852 , x_att => l_item_att
14853 , x_atr => l_item_atr
14854 );
14855
14856 IF l_return_status = fnd_api.g_ret_sts_error THEN
14857 IF (l_debug = 1) THEN
14858 inv_log_util.trace('Expected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14859 END IF;
14860
14861 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14862 FND_MESSAGE.set_token('token1','XACT_QTY1');
14863 l_error_code := FND_MESSAGE.get;
14864 l_error_exp := l_msg_data;
14865 x_msg_data := l_msg_data;
14866 UPDATE MTL_TRANSACTIONS_INTERFACE
14867 SET LAST_UPDATE_DATE = SYSDATE,
14868 LAST_UPDATED_BY = l_userid,
14869 LAST_UPDATE_LOGIN = l_loginid,
14870 PROGRAM_UPDATE_DATE = SYSDATE,
14871 PROCESS_FLAG = 3,
14872 LOCK_FLAG = 2,
14873 ERROR_CODE = substrb(l_error_code,1,240),
14874 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14875 WHERE TRANSACTION_interface_id = l_temp_rowid
14876 AND PROCESS_FLAG = 1;
14877 --check for batch error
14878 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14879
14880 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14881 SET LAST_UPDATE_DATE = SYSDATE,
14882 LAST_UPDATED_BY = l_userid,
14883 LAST_UPDATE_LOGIN = l_loginid,
14884 PROGRAM_UPDATE_DATE = SYSDATE,
14885 PROCESS_FLAG = 3,
14886 LOCK_FLAG = 2,
14887 ERROR_CODE = substrb(l_error_code,1,240)
14888 WHERE TRANSACTION_HEADER_ID = l_header_id
14889 AND PROCESS_FLAG = 1
14890 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14891 -- group error changes.
14892 l_current_batch_failed := TRUE;--Bug#5075521
14893 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14894 END IF ;
14895
14896 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
14897 IF (l_debug = 1) THEN
14898 inv_log_util.trace('UnExpected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14899 END IF;
14900
14901 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14902 FND_MESSAGE.set_token('token1','XACT_QTY1');
14903 l_error_code := FND_MESSAGE.get;
14904 l_error_exp := l_msg_data;
14905 x_msg_data := l_msg_data;
14906 UPDATE MTL_TRANSACTIONS_INTERFACE
14907 SET LAST_UPDATE_DATE = SYSDATE,
14908 LAST_UPDATED_BY = l_userid,
14909 LAST_UPDATE_LOGIN = l_loginid,
14910 PROGRAM_UPDATE_DATE = SYSDATE,
14911 PROCESS_FLAG = 3,
14912 LOCK_FLAG = 2,
14913 ERROR_CODE = substrb(l_error_code,1,240),
14914 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14915 WHERE ROWID = l_temp_rowid
14916 AND PROCESS_FLAG = 1;
14917 --check for batch error
14918 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14919
14920 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14921 SET LAST_UPDATE_DATE = SYSDATE,
14922 LAST_UPDATED_BY = l_userid,
14923 LAST_UPDATE_LOGIN = l_loginid,
14924 PROGRAM_UPDATE_DATE = SYSDATE,
14925 PROCESS_FLAG = 3,
14926 LOCK_FLAG = 2,
14927 ERROR_CODE = substrb(l_error_code,1,240)
14928 WHERE TRANSACTION_HEADER_ID = l_header_id
14929 AND PROCESS_FLAG = 1
14930 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14931 --group error changes.
14932 l_current_batch_failed := TRUE;--Bug#5075521
14933 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14934 END IF;
14935 END IF; --200
14936 inv_log_util.trace('L_ITEM_QOH : ' || l_item_qoh,'INV_TXN_MANAGER_GRP', 9);
14937 inv_log_util.trace('L_ITEM_RQOH : ' || l_item_rqoh,'INV_TXN_MANAGER_GRP', 9);
14938 inv_log_util.trace('L_ITEM_PQOH : ' || l_item_pqoh,'INV_TXN_MANAGER_GRP', 9);
14939 inv_log_util.trace('L_ITEM_QR : ' || l_item_qr,'INV_TXN_MANAGER_GRP', 9);
14940 inv_log_util.trace('L_ITEM_QS : ' || l_item_qs,'INV_TXN_MANAGER_GRP', 9);
14941 inv_log_util.trace('L_ITEM_ATT : ' || l_item_att,'INV_TXN_MANAGER_GRP', 9);
14942 inv_log_util.trace('L_ITEM_ATR : ' || l_item_atr,'INV_TXN_MANAGER_GRP', 9);
14943 inv_log_util.trace('L_TRX_QTY : ' || l_trx_qty,'INV_TXN_MANAGER_GRP', 9);
14944
14945 IF ( NOT l_current_batch_failed) THEN --250
14946 IF (l_item_qoh <> l_item_att) THEN -- Higher Level Reservations
14947 IF (l_item_att < l_trx_qty AND l_item_qr > 0) THEN
14948 /*Bug 4764343 Base Bug::4645686. This condition is added for a specific customer by introducing
14949 a new profile 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' . If this profile is not set to 'Yes'then the
14950 backflush transaction can not consume existing reservations.Else it can consume existing
14951 reservation and can drive inventory negative. */
14952 IF (l_override_rsv_for_backflush <> 1 ) THEN
14953 inv_log_util.trace('Total Org quantity cannot become negative when there are reservations present','INV_TXN_MANAGER_GRP', 9);
14954 FND_MESSAGE.set_name('INV','INV_INT_PROCCODE');
14955 l_error_code := FND_MESSAGE.get;
14956 FND_MESSAGE.set_name('INV','INV_ORG_QUANTITY');
14957 l_error_exp := FND_MESSAGE.get;
14958 FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14959 x_msg_data := l_error_exp;
14960 UPDATE MTL_TRANSACTIONS_INTERFACE
14961 SET LAST_UPDATE_DATE = SYSDATE,
14962 LAST_UPDATED_BY = l_userid,
14963 LAST_UPDATE_LOGIN = l_loginid,
14964 PROGRAM_UPDATE_DATE = SYSDATE,
14965 PROCESS_FLAG = 3,
14966 LOCK_FLAG = 2,
14967 ERROR_CODE = substrb(l_error_code,1,240),
14968 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14969 WHERE ROWID = l_temp_rowid
14970 AND PROCESS_FLAG = 1;
14971 --check for batch error
14972 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14973
14974 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14975 SET LAST_UPDATE_DATE = SYSDATE,
14976 LAST_UPDATED_BY = l_userid,
14977 LAST_UPDATE_LOGIN = l_loginid,
14978 PROGRAM_UPDATE_DATE = SYSDATE,
14979 PROCESS_FLAG = 3,
14980 LOCK_FLAG = 2,
14981 ERROR_CODE = substrb(l_error_code,1,240)
14982 WHERE TRANSACTION_HEADER_ID = l_header_id
14983 AND PROCESS_FLAG = 1
14984 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14985 --group error changes.
14986 l_current_batch_failed := TRUE;--Bug#5075521
14987 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14988 END IF;-- override_rsv_for_backflush
14989 END IF;--total org quantity
14990 END IF;--high level
14991 END IF; --250
14992
14993 ELSE --(neg_inv_rcpt = 1)
14994 IF (l_debug = 1) THEN
14995 inv_log_util.trace('Not Enough Qty: l_att,l_trx_qty:' || l_att||','||l_trx_qty,'INV_TXN_MANAGER_GRP', 9);
14996 END IF;
14997 FND_MESSAGE.set_name('INV','INV_NO_NEG_BALANCES');
14998 l_error_code := FND_MESSAGE.get;
14999 FND_MESSAGE.set_name('INV','INV_LESS_OR_EQUAL');
15000 FND_MESSAGE.set_token('ENTITY1','INV_QUANTITY',l_translate);
15001 FND_MESSAGE.set_token('ENTITY2','AVAIL_TO_TRANSACT',l_translate);
15002 l_error_exp := FND_MESSAGE.get;
15003 x_msg_data := l_error_exp;
15004 UPDATE MTL_TRANSACTIONS_INTERFACE
15005 SET LAST_UPDATE_DATE = SYSDATE,
15006 LAST_UPDATED_BY = l_userid,
15007 LAST_UPDATE_LOGIN = l_loginid,
15008 PROGRAM_UPDATE_DATE = SYSDATE,
15009 PROCESS_FLAG = 3,
15010 LOCK_FLAG = 2,
15011 ERROR_CODE = substrb(l_error_code,1,240),
15012 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
15013 WHERE ROWID = l_temp_rowid
15014 AND PROCESS_FLAG = 1;
15015 --check for batch error
15016 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
15017
15018 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
15019 SET LAST_UPDATE_DATE = SYSDATE,
15020 LAST_UPDATED_BY = l_userid,
15021 LAST_UPDATE_LOGIN = l_loginid,
15022 PROGRAM_UPDATE_DATE = SYSDATE,
15023 PROCESS_FLAG = 3,
15024 LOCK_FLAG = 2,
15025 ERROR_CODE = substrb(l_error_code,1,240)
15026 WHERE TRANSACTION_HEADER_ID = l_header_id
15027 AND PROCESS_FLAG = 1
15028 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
15029 -- group error changes.
15030 l_current_batch_failed := TRUE;--Bug#5075521
15031 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
15032 END IF;
15033 END IF;--check for att and trx qty
15034 END IF; --nsinghi bug#5286961 l_Line_rec_Type.wip_entity_type = 10
15035
15036
15037 -- update the qty
15038 -- Pawan 11th july Added - GME does not have transfer subinventory
15039 IF ( NOT l_current_batch_failed ) THEN --300
15040 IF (l_actid in (2,28)) then
15041 inv_quantity_tree_pub.update_quantities
15042 (p_api_version_number => 1.0,
15043 p_init_msg_lst => fnd_api.g_false,
15044 x_return_status => l_return_status,
15045 x_msg_count => l_msg_count,
15046 x_msg_data => l_msg_data,
15047 p_organization_id => l_org_id,
15048 p_inventory_item_id => l_item_id,
15049 p_tree_mode => 2,
15050 p_is_revision_control => l_revision_control,
15051 p_is_lot_control => l_lot_control,
15052 p_is_serial_control => FALSE,
15053 p_demand_source_type_id => nvl(l_srctypeid,-9999),
15054 p_demand_source_header_id => nvl(l_srcid,-9999),
15055 p_demand_source_line_id => nvl(l_srclineid,-9999),
15056 p_revision => l_rev,
15057 p_lot_number => l_lotnum,
15058 p_subinventory_code => l_xfrsub,
15059 p_locator_id => l_xlocid,
15060 p_primary_quantity => l_trx_qty,
15061 p_quantity_type => inv_quantity_tree_pvt.g_qoh,
15062 p_onhand_source => inv_quantity_tree_pvt.g_all_subs,
15063 x_qoh => l_qoh,
15064 x_rqoh => l_rqoh,
15065 x_qr => l_qr,
15066 x_qs => l_qs,
15067 x_att => l_att,
15068 x_atr => l_atr);
15069
15070
15071 IF l_return_status <> fnd_api.g_ret_sts_success THEN
15072 FND_MESSAGE.set_name('INV', 'INV_ERR_CREATETREE');
15073 FND_MESSAGE.set_token('ROUTINE','INV_QUANTITY_TREE_PUB.UPDATE_QUANTITIES');
15074 l_error_code:= fnd_message.get;
15075 l_error_exp :=l_msg_data;
15076 x_msg_data := l_msg_data;
15077 UPDATE MTL_TRANSACTIONS_INTERFACE
15078 SET LAST_UPDATE_DATE = SYSDATE,
15079 LAST_UPDATED_BY = l_userid,
15080 LAST_UPDATE_LOGIN = l_loginid,
15081 PROGRAM_UPDATE_DATE = SYSDATE,
15082 PROCESS_FLAG = 3,
15083 LOCK_FLAG = 2,
15084 ERROR_CODE = substrb(l_error_code,1,240),
15085 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
15086 WHERE ROWID = l_temp_rowid
15087 AND PROCESS_FLAG = 1;
15088 --check for batch error
15089 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
15090
15091 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
15092 SET LAST_UPDATE_DATE = SYSDATE,
15093 LAST_UPDATED_BY = l_userid,
15094 LAST_UPDATE_LOGIN = l_loginid,
15095 PROGRAM_UPDATE_DATE = SYSDATE,
15096 PROCESS_FLAG = 3,
15097 LOCK_FLAG = 2,
15098 ERROR_CODE = substrb(l_error_code,1,240)
15099 WHERE TRANSACTION_HEADER_ID = l_header_id
15100 AND PROCESS_FLAG = 1
15101 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
15102 -- group error changes.
15103 l_current_batch_failed := TRUE;--Bug#5075521
15104 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
15105 END IF;
15106 ELSE
15107 /* Jalaj Srivastava Bug 5232394
15108 update tree with correct sign.
15109 sign is derived from transaction_quantity */
15110
15111 inv_quantity_tree_pub.update_quantities
15112 (p_api_version_number => 1.0,
15113 p_init_msg_lst => fnd_api.g_false,
15114 x_return_status => l_return_status,
15115 x_msg_count => l_msg_count,
15116 x_msg_data => l_msg_data,
15117 p_organization_id => l_org_id,
15118 p_inventory_item_id => l_item_id,
15119 p_tree_mode => 2,
15120 p_is_revision_control => l_revision_control,
15121 p_is_lot_control => l_lot_control,
15122 p_is_serial_control => FALSE,
15123 p_demand_source_type_id => nvl(l_srctypeid,-9999),
15124 p_demand_source_header_id => nvl(l_srcid,-9999),
15125 p_demand_source_line_id => nvl(l_srclineid,-9999),
15126 p_revision => l_rev,
15127 p_lot_number => l_lotnum,
15128 p_subinventory_code => l_sub_code,
15129 p_locator_id => l_locid,
15130 p_primary_quantity => (sign(l_line_rec_type.transaction_quantity)*(l_trx_qty)),
15131 p_quantity_type => inv_quantity_tree_pvt.g_qoh,
15132 p_onhand_source => inv_quantity_tree_pvt.g_all_subs,
15133 x_qoh => l_qoh,
15134 x_rqoh => l_rqoh,
15135 x_qr => l_qr,
15136 x_qs => l_qs,
15137 x_att => l_att,
15138 x_atr => l_atr);
15139
15140 IF l_return_status <> fnd_api.g_ret_sts_success THEN
15141 FND_MESSAGE.set_name('INV', 'INV_ERR_CREATETREE');
15142 FND_MESSAGE.set_token('ROUTINE','INV_QUANTITY_TREE_PUB.UPDATE_QUANTITIES');
15143 l_error_code:= fnd_message.get;
15144 l_error_exp :=l_msg_data;
15145 x_msg_data := l_msg_data;
15146 UPDATE MTL_TRANSACTIONS_INTERFACE
15147 SET LAST_UPDATE_DATE = SYSDATE,
15148 LAST_UPDATED_BY = l_userid,
15149 LAST_UPDATE_LOGIN = l_loginid,
15150 PROGRAM_UPDATE_DATE = SYSDATE,
15151 PROCESS_FLAG = 3,
15152 LOCK_FLAG = 2,
15153 ERROR_CODE = substrb(l_error_code,1,240),
15154 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
15155 WHERE ROWID = l_temp_rowid
15156 AND PROCESS_FLAG = 1;
15157 --check for batch error
15158 loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
15159
15160 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
15161 SET LAST_UPDATE_DATE = SYSDATE,
15162 LAST_UPDATED_BY = l_userid,
15163 LAST_UPDATE_LOGIN = l_loginid,
15164 PROGRAM_UPDATE_DATE = SYSDATE,
15165 PROCESS_FLAG = 3,
15166 LOCK_FLAG = 2,
15167 ERROR_CODE = substrb(l_error_code,1,240)
15168 WHERE TRANSACTION_HEADER_ID = l_header_id
15169 AND PROCESS_FLAG = 1
15170 AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
15171 -- group error changes.
15172 l_current_batch_failed := TRUE;--Bug#5075521
15173 l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
15174 ELSE
15175 --qty tree update was successful
15176 IF (l_debug = 1) THEN
15177 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);
15178 END IF;
15179 END IF;
15180 END IF;-- Pawan Added for IF (l_actid in (2,28))
15181 END IF; --300
15182 END IF; --150
15183 END LOOP;--
15184 END IF;--050
15185 /* This should be for any error other than not found */
15186 --IF z1%OPEN
15187 --CLOSE Z1;
15188 --------------Qty tree end
15189
15190 END LOOP; --AA1
15191
15192 --free all trees created so far.
15193 /* INV_QUANTITY_TREE_PVT.free_All
15194 ( p_api_version_number => 1.0
15195 , p_init_msg_lst => fnd_api.g_false
15196 , x_return_status => l_return_status
15197 , x_msg_count => l_msg_count
15198 , x_msg_data => l_msg_data); */
15199
15200 --Jalaj Srivastava Bug 4672291
15201 --Call free_tree only when l_tree_id is not null
15202 --Jalaj Srivastava Bug 5155661
15203 --free the tree only if p_free_tree is true
15204 IF (p_free_tree = fnd_api.G_TRUE)
15205 AND (l_tree_id IS NOT NULL) THEN
15206 INV_QUANTITY_TREE_PVT.free_tree
15207 ( p_api_version_number => 1.0
15208 , p_init_msg_lst => fnd_api.g_false
15209 , x_return_status => l_return_status
15210 , x_msg_count => l_msg_count
15211 , x_msg_data => l_msg_data
15212 , p_tree_id => l_tree_id );
15213 END IF;
15214
15215 SELECT COUNT(*)
15216 INTO l_count_success
15217 FROM mtl_transactions_interface
15218 WHERE transaction_header_id = l_header_id
15219 AND process_flag = 1;
15220
15221 IF (l_count_success = 0) THEN
15222 RETURN -1;
15223 END IF;
15224
15225 -- ADD tmp Insert here. In case of an error
15226 --return -1.
15227 --J-dev
15228
15229 IF (NOT tmpinsert(l_header_id,p_validation_level)) THEN
15230 l_error_exp := FND_MESSAGE.get;
15231 IF (l_debug = 1) THEN
15232 inv_log_util.trace('Error in tmpinsert='|| l_error_exp, 'INV_TXN_MANAGER_GRP', 9);
15233 END IF;
15234 FND_MESSAGE.set_name('INV','INV_INT_TMPXFRCODE');
15235 l_error_code := FND_MESSAGE.get;
15236 x_msg_data := l_error_exp;
15237 UPDATE MTL_TRANSACTIONS_INTERFACE
15238 SET LAST_UPDATE_DATE = SYSDATE,
15239 LAST_UPDATED_BY = l_userid,
15240 LAST_UPDATE_LOGIN = l_loginid,
15241 PROGRAM_UPDATE_DATE = SYSDATE,
15242 PROCESS_FLAG = 3,
15243 LOCK_FLAG = 2,
15244 ERROR_CODE = substrb(l_error_code,1,240),
15245 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
15246 WHERE TRANSACTION_HEADER_ID =l_header_id
15247 AND PROCESS_FLAG = 1;
15248
15249 return -1;
15250 ELSE
15251 --delete from mti/mtli/msni
15252
15253 DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
15254 WHERE TRANSACTION_INTERFACE_ID
15255 IN(
15256 SELECT TRANSACTION_INTERFACE_ID
15257 FROM MTL_TRANSACTIONS_INTERFACE
15258 WHERE TRANSACTION_HEADER_ID =l_header_id
15259 AND PROCESS_FLAG <> 3
15260 union all
15261 SELECT SERIAL_TRANSACTION_TEMP_ID
15262 FROM MTL_TRANSACTION_LOTS_INTERFACE
15263 WHERE TRANSACTION_INTERFACE_ID
15264 IN (
15265 SELECT TRANSACTION_INTERFACE_ID
15266 FROM MTL_TRANSACTIONS_INTERFACE
15267 WHERE TRANSACTION_HEADER_ID = l_header_id
15268 AND PROCESS_FLAG <> 3 )) ;
15269 DELETE FROM MTL_TRANSACTION_LOTS_INTERFACE
15270 WHERE TRANSACTION_INTERFACE_ID IN
15271 (SELECT TRANSACTION_INTERFACE_ID
15272 FROM MTL_TRANSACTIONS_INTERFACE
15273 WHERE TRANSACTION_HEADER_ID =l_header_id
15274 AND PROCESS_FLAG <> 3);
15275 DELETE FROM MTL_TRANSACTIONS_INTERFACE
15276 WHERE TRANSACTION_HEADER_ID = l_header_id
15277 AND PROCESS_FLAG <> 3;
15278 IF (l_debug = 1) THEN
15279 inv_log_util.trace('*** Del recs mti valid trx', 'INV_TXN_MANAGER_GRP',9);
15280 END IF;
15281 END IF;--tmpinsert
15282
15283 return 0;--return success.
15284
15285
15286 EXCEPTION
15287 WHEN OTHERS THEN
15288 IF (l_debug = 1) THEN
15289 inv_log_util.trace('*** SQL error '||substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP',9);
15290 END IF;
15291
15292 FND_MESSAGE.set_name('INV','INV_INT_SQLCODE');
15293 l_error_code := FND_MESSAGE.get;
15294
15295 UPDATE MTL_TRANSACTIONS_INTERFACE
15296 SET LAST_UPDATE_DATE = SYSDATE,
15297 LAST_UPDATED_BY = l_userid,
15298 LAST_UPDATE_LOGIN = l_loginid,
15299 PROGRAM_UPDATE_DATE = SYSDATE,
15300 PROCESS_FLAG = 3,
15301 LOCK_FLAG = 2,
15302 ERROR_CODE = substrb(l_error_code,1,240),
15303 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
15304 WHERE TRANSACTION_HEADER_ID = l_header_id
15305 AND PROCESS_FLAG = 1;
15306
15307 return -1;
15308
15309
15310 END Validate_Transactions;
15311
15312
15313
15314 FUNCTION Validate_Additional_Attr(
15315 p_api_version IN NUMBER
15316 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
15317 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
15318 , p_intid IN NUMBER
15319 , p_rowid IN VARCHAR2
15320 , p_inventory_item_id IN NUMBER
15321 , p_organization_id IN NUMBER
15322 , p_lot_number IN VARCHAR2
15323 , p_grade_code IN OUT NOCOPY VARCHAR2
15324 , p_retest_date IN OUT NOCOPY DATE
15325 , p_maturity_date IN OUT NOCOPY DATE
15326 , p_parent_lot_number IN OUT NOCOPY VARCHAR2
15327 , p_origination_date IN OUT NOCOPY DATE
15328 , p_origination_type IN OUT NOCOPY NUMBER
15329 , p_expiration_action_code IN OUT NOCOPY VARCHAR2
15330 , p_expiration_action_date IN OUT NOCOPY DATE
15331 , p_expiration_date IN OUT NOCOPY DATE
15332 , p_hold_date IN OUT NOCOPY DATE
15333 , p_reason_id IN OUT NOCOPY NUMBER
15334 , p_copy_lot_attribute_flag IN VARCHAR2
15335 , x_return_status OUT NOCOPY VARCHAR2
15336 , x_msg_count OUT NOCOPY NUMBER
15337 , x_msg_data OUT NOCOPY VARCHAR2 )
15338 RETURN BOOLEAN
15339 IS
15340
15341 /* get lot record info */
15342 CURSOR c_get_lot_record ( p_orgid NUMBER, p_itemid NUMBER, p_lotnum VARCHAR2)
15343 IS
15344 SELECT *
15345 FROM mtl_lot_numbers
15346 WHERE lot_number = p_lotnum
15347 AND inventory_item_id = p_itemid
15348 AND organization_id = p_orgid;
15349
15350 l_lot_record c_get_lot_record%ROWTYPE;
15351 l_parent_lot_record c_get_lot_record%ROWTYPE;
15352
15353 /* Get reason code info */
15354 CURSOR c_get_reason_info IS
15355 SELECT MTR.REASON_ID
15356 FROM MTL_TRANSACTION_REASONS MTR
15357 WHERE MTR.REASON_ID = p_reason_id
15358 AND NVL(MTR.DISABLE_DATE, SYSDATE + 1) > SYSDATE;
15359
15360 /* get item information */
15361 CURSOR c_get_item_info IS
15362 select RETEST_INTERVAL,
15363 EXPIRATION_ACTION_INTERVAL ,
15364 SHELF_LIFE_CODE,
15365 MATURITY_DAYS,
15366 HOLD_DAYS,
15367 CHILD_LOT_FLAG ,
15368 GRADE_CONTROL_FLAG
15369 from mtl_system_items
15370 WHERE inventory_item_id = p_inventory_item_id
15371 AND organization_id = p_organization_id;
15372
15373 /* Bug# 13539797 cursor to get the txn date from MTI */
15374 CURSOR c_get_txn_date IS
15375 SELECT transaction_date
15376 FROM mtl_transactions_interface
15377 WHERE transaction_interface_id = p_intid;
15378
15379 l_transaction_date DATE; -- Bug# 13539797
15380
15381 l_return_status VARCHAR2(1);
15382 l_msg_count NUMBER;
15383 l_msg_data VARCHAR2(3000);
15384
15385
15386 l_api_version NUMBER := 1.0;
15387 l_init_msg_list VARCHAR2(3) := 'F';
15388 l_commit VARCHAR2(3) := 'F';
15389
15390
15391 -- FABDI
15392 l_userid NUMBER := -1; --prg_info.userid;
15393 l_reqstid NUMBER := -1; -- prg_info.reqstid;
15394 l_applid NUMBER := -1; -- prg_info.appid;
15395 l_progid NUMBER := -1; -- prg_info.progid;
15396 l_loginid NUMBER := -1; -- prg_info.loginid;
15397
15398 l_retest_interval NUMBER;
15399 l_exp_action_interval NUMBER;
15400 l_shelf_life_code NUMBER;
15401 l_maturity_days NUMBER;
15402 l_hold_days NUMBER;
15403 l_reason_id NUMBER;
15404 l_check BOOLEAN := TRUE;
15405
15406 l_parent_lot_number VARCHAR2(80);
15407 l_lot_number VARCHAR2(80);
15408 l_itemid NUMBER;
15409 l_orgid NUMBER;
15410
15411 l_child_lot_flag VARCHAR2(1);
15412 l_grade_control_flag VARCHAR2(1);
15413
15414 l_new_parent_lot BOOLEAN ;
15415 l_new_child_lot BOOLEAN ;
15416 l_lot_onhand NUMBER; --Bug#7139549
15417 l_orig_date DATE;
15418 l_existing_pending_lot NUMBER := 0; --bug#7425435
15419 --bug#7425435
15420 x_lot_rec MTL_LOT_NUMBERS%ROWTYPE;
15421 l_in_lot_rec MTL_LOT_NUMBERS%ROWTYPE;
15422 l_source NUMBER;
15423
15424 BEGIN
15425
15426 IF (l_debug is null)
15427 THEN
15428 l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
15429 END IF;
15430
15431 IF (l_debug = 1) THEN
15432 inv_log_util.trace('inside Validate_Additional_Attr' , 'INV_TXN_MANAGER_GRP', 9);
15433 END IF;
15434
15435
15436
15437 /* Get Lot Child Information*/
15438 OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, p_lot_number);
15439 FETCH c_get_lot_record INTO l_lot_record;
15440
15441 IF c_get_lot_record%NOTFOUND
15442 THEN
15443 -- dbms_output.put_line('New Lot Child ');
15444 l_new_child_lot := TRUE;
15445 ELSE
15446 /*Bug#7139549 check if the lot exists but it is a pending product lot */
15447
15448 SELECT count(1) into l_lot_onhand
15449 FROM mtl_onhand_quantities_detail
15450 WHERE INVENTORY_ITEM_ID = p_inventory_item_id
15451 AND ORGANIZATION_ID = p_organization_id
15452 AND lot_number = p_lot_number
15453 AND PRIMARY_TRANSACTION_QUANTITY > 0
15454 AND rownum = 1;
15455
15456 IF (l_lot_onhand = 0) THEN
15457 l_existing_pending_lot := 1; --Bug#9761494
15458 inv_calculate_exp_date.get_origination_date
15459 ( p_inventory_item_id => p_inventory_item_id
15460 ,p_organization_id => p_organization_id
15461 ,p_lot_number => p_lot_number
15462 ,x_orig_date => l_orig_date
15463 ,x_return_status => l_return_status
15464 );
15465
15466 IF l_return_status <> 'S' THEN
15467 IF (l_debug = 1) THEN
15468 inv_log_util.trace('Error from get_origination_date', 'INV_TXN_MANAGER_GRP', 9);
15469 END IF;
15470 CLOSE c_get_lot_record;
15471 RAISE FND_API.G_EXC_ERROR;
15472 END IF;
15473 -- dbms_output.put_line('Existing Lot Child ');
15474 IF (l_orig_date IS NULL AND p_expiration_date IS NULL) THEN
15475 IF (l_debug = 1) THEN
15476 inv_log_util.trace('existing pending lot having no expiry date', 'INV_TXN_MANAGER_GRP', 9);
15477 END IF;
15478 l_new_child_lot := TRUE;
15479 END IF; --expiration date null
15480 ELSE
15481 IF (l_debug = 1) THEN
15482 inv_log_util.trace('new lot', 'INV_TXN_MANAGER_GRP', 9);
15483 END IF;
15484 l_new_child_lot := FALSE;
15485 END IF; --lot onhand condition
15486 END IF;
15487
15488 CLOSE c_get_lot_record;
15489
15490 if p_parent_lot_number IS NOT NULL
15491 THEN
15492 /* Get Parent Lot Child Information*/
15493 OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, p_parent_lot_number);
15494 FETCH c_get_lot_record INTO l_parent_lot_record;
15495
15496 IF c_get_lot_record%NOTFOUND
15497 THEN
15498 -- dbms_output.put_line('New Lot Parent Lot ' );
15499 l_new_parent_lot := TRUE;
15500 Else
15501 -- dbms_output.put_line('Existing Parent Lot ' );
15502 l_new_parent_lot := FALSE;
15503 END IF;
15504 CLOSE c_get_lot_record;
15505 ELSE
15506 -- dbms_output.put_line('No Parent Lot ' );
15507 l_new_parent_lot := FALSE;
15508 END IF;
15509
15510
15511
15512 /* Get item info */
15513 OPEN c_get_item_info;
15514 FETCH c_get_item_info INTO l_retest_interval, l_exp_action_interval, l_shelf_life_code,
15515 l_maturity_days, l_hold_days, l_child_lot_flag, l_grade_control_flag;
15516 CLOSE c_get_item_info;
15517
15518 /* Check Lot */
15519 IF (l_new_child_lot) THEN
15520
15521 IF (l_debug = 1) THEN
15522 inv_log_util.trace('Validate_Additional_Attr: This is a New Lot : ' , 'INV_TXN_MANAGER_GRP', 9);
15523 END IF;
15524
15525 /* defult missing values */
15526 l_lot_record.inventory_item_id := p_inventory_item_id ;
15527 l_lot_record.organization_id := p_organization_id ;
15528
15529 l_lot_record.lot_number := p_lot_number ;
15530 /*Bug#9007238 Added the below nvl condition */
15531 l_lot_record.parent_lot_number := nvl(p_parent_lot_number,l_lot_record.parent_lot_number);
15532
15533 l_lot_record.grade_code := p_grade_code ;
15534 l_lot_record.retest_date := p_retest_date ;
15535 l_lot_record.maturity_date := p_maturity_date ;
15536
15537 /* Bug# 13539797 Fetch the txn date and recorded as origination date if
15538 p_origination_date is null BEGIN */
15539 OPEN c_get_txn_date;
15540 FETCH c_get_txn_date INTO l_transaction_date;
15541 CLOSE c_get_txn_date;
15542 --l_lot_record.origination_date := NVL(p_origination_date, SYSDATE);
15543 l_lot_record.origination_date := NVL(p_origination_date, NVL(l_transaction_date, SYSDATE));
15544 /* Bug# 13539797 END */
15545
15546 l_lot_record.origination_type := p_origination_type ;
15547 l_lot_record.expiration_action_code := p_expiration_action_code ;
15548 l_lot_record.expiration_action_date := p_expiration_action_date ;
15549 l_lot_record.hold_date := p_hold_date ;
15550 /*Fixed for bug#6626120
15551 Lot record is initialized with exp date if lot expiration is 'user defined'.
15552 This code ensure that for user defined the exp date passed is not ignored
15553 and not assigned to null.
15554 For shelf life day the exp date is always calcualted so no need to
15555 initialize for that case. If we initalize for that as well then
15556 system will not calculate the exp date for shel life days hence will
15557 break the functionality. Hence the initialzation is done
15558 conditionally.
15559 */
15560 if l_shelf_life_code = 4 and p_expiration_date is not null then
15561 l_lot_record.expiration_date :=p_expiration_date;
15562 end if;
15563
15564 -- dbms_output.put_line('l_copy_lot_attribute_flag ' || p_copy_lot_attribute_flag );
15565
15566 IF (l_debug = 1) THEN
15567 inv_log_util.trace('Validate_Additional_Attr: p_copy_lot_attribute_flag ' || p_copy_lot_attribute_flag , 'INV_TXN_MANAGER_GRP', 9);
15568 END IF;
15569
15570 IF ((p_parent_lot_number IS NOT NULL) AND
15571 (l_child_lot_flag = 'Y'))
15572 THEN
15573 IF p_copy_lot_attribute_flag = 'N'
15574 THEN
15575 IF (l_debug = 1) THEN
15576 inv_log_util.trace('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (1) ' , 'INV_TXN_MANAGER_GRP', 9);
15577 END IF;
15578 -- dbms_output.put_line('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (1 )');
15579 /* Default attributes for lot from item master */
15580 -- inv_lot_api_pub.Set_Msi_Default_Attr(p_lot_rec => l_lot_record);
15581
15582 Inv_Lot_API_PKG.Set_Msi_Default_Attr ( p_lot_rec => l_lot_record
15583 , x_return_status => l_return_status
15584 , x_msg_count => l_msg_count
15585 , x_msg_data => l_msg_data);
15586
15587 IF l_return_status <> fnd_api.g_ret_sts_success
15588 THEN
15589 l_error_code := l_msg_data;
15590 l_error_exp := l_msg_data;
15591 RAISE FND_API.G_EXC_ERROR;
15592 END IF;
15593
15594 p_grade_code := l_lot_record.grade_code;
15595 p_retest_date := l_lot_record.retest_date;
15596 p_maturity_date := l_lot_record.maturity_date;
15597 p_origination_date := l_lot_record.origination_date;
15598 p_origination_type := l_lot_record.origination_type;
15599 p_expiration_action_code := l_lot_record.expiration_action_code;
15600 p_expiration_action_date := l_lot_record.expiration_action_date;
15601 p_hold_date := l_lot_record.hold_date;
15602 p_expiration_date := l_lot_record.expiration_date;
15603 ELSE
15604 -- Default attributes form Parent lot
15605 OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, l_lot_record.parent_lot_number);
15606 FETCH c_get_lot_record INTO l_parent_lot_record;
15607 CLOSE c_get_lot_record;
15608 /* Check if Parent lot exists */
15609 IF NOT (l_new_parent_lot)
15610 THEN
15611 IF (l_debug = 1) THEN
15612 inv_log_util.trace('Validate_Additional_Attr: Parent lot EXISTS ' , 'INV_TXN_MANAGER_GRP', 9);
15613 END IF;
15614 if p_expiration_date is null
15615 then
15616 p_expiration_date := l_parent_lot_record.expiration_date;
15617 end if;
15618
15619 IF p_grade_code IS NULL
15620 THEN
15621 p_grade_code := l_parent_lot_record.grade_code;
15622 END IF;
15623 IF p_retest_date IS NULL
15624 THEN
15625 p_retest_date := l_parent_lot_record.retest_date;
15626 END IF;
15627 IF p_maturity_date IS NULL
15628 THEN
15629 p_maturity_date := l_parent_lot_record.maturity_date;
15630 END IF;
15631 IF p_origination_date IS NULL
15632 THEN
15633 p_origination_date := l_parent_lot_record.origination_date;
15634 END IF;
15635 IF p_origination_type IS NULL
15636 THEN
15637 p_origination_type := l_parent_lot_record.origination_type;
15638 END IF;
15639 IF p_expiration_action_code IS NULL
15640 THEN
15641 p_expiration_action_code := l_parent_lot_record.expiration_action_code;
15642 END IF;
15643 IF p_expiration_action_date IS NULL
15644 THEN
15645 p_expiration_action_date := l_parent_lot_record.expiration_action_date;
15646 END IF;
15647 IF p_hold_date IS NULL
15648 THEN
15649 p_hold_date := l_parent_lot_record.hold_date;
15650 END IF;
15651 Else
15652 -- dbms_output.put_line('Parent lot does not EXISTS, default from item ' );
15653 IF (l_debug = 1) THEN
15654 inv_log_util.trace('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (2) ' , 'INV_TXN_MANAGER_GRP', 9);
15655 END IF;
15656
15657 /* new parent lot , default from item master */
15658
15659 Inv_Lot_API_PKG.Set_Msi_Default_Attr (
15660 p_lot_rec => l_lot_record
15661 , x_return_status => l_return_status
15662 , x_msg_count => l_msg_count
15663 , x_msg_data => l_msg_data
15664 );
15665
15666 IF l_return_status <> fnd_api.g_ret_sts_success THEN
15667 l_error_code := l_msg_data;
15668 l_error_exp := l_msg_data;
15669 RAISE FND_API.G_EXC_ERROR;
15670 END IF;
15671
15672 p_grade_code := l_lot_record.grade_code;
15673 p_retest_date := l_lot_record.retest_date;
15674 p_maturity_date := l_lot_record.maturity_date;
15675 p_origination_date := l_lot_record.origination_date;
15676 p_origination_type := l_lot_record.origination_type;
15677 p_expiration_action_code := l_lot_record.expiration_action_code;
15678 p_expiration_action_date := l_lot_record.expiration_action_date;
15679 p_hold_date := l_lot_record.hold_date;
15680 p_expiration_date := l_lot_record.expiration_date;
15681 END IF;
15682 END IF; -- end copy lot attrib check
15683 ELSE
15684 -- dbms_output.put_line('lot is new and Item is not child lot enabled ' );
15685 /* lot is new and Item is not child lot enabled */
15686
15687 IF (l_debug = 1) THEN
15688 inv_log_util.trace('Calling Inv_Lot_API_PKG.Set_Msi_Default_Attr (3) ' , 'INV_TXN_MANAGER_GRP', 9);
15689 END IF;
15690
15691 Inv_Lot_API_PKG.Set_Msi_Default_Attr (
15692 p_lot_rec => l_lot_record
15693 , x_return_status => l_return_status
15694 , x_msg_count => l_msg_count
15695 , x_msg_data => l_msg_data
15696 );
15697
15698 IF l_return_status <> fnd_api.g_ret_sts_success THEN
15699 l_error_code := l_msg_data;
15700 l_error_exp := l_msg_data;
15701 RAISE FND_API.G_EXC_ERROR;
15702 END IF;
15703
15704 p_grade_code := l_lot_record.grade_code;
15705 p_retest_date := l_lot_record.retest_date;
15706 p_maturity_date := l_lot_record.maturity_date;
15707 p_origination_date := l_lot_record.origination_date;
15708 p_origination_type := l_lot_record.origination_type;
15709 p_expiration_action_code := l_lot_record.expiration_action_code;
15710 p_expiration_action_date := l_lot_record.expiration_action_date;
15711 p_hold_date := l_lot_record.hold_date;
15712 p_expiration_date := l_lot_record.expiration_date;
15713 END IF;
15714
15715
15716
15717 l_itemid := p_inventory_item_id;
15718 l_orgid := p_organization_id;
15719 /*
15720 dbms_output.put_line('***************************************' );
15721 dbms_output.put_line('grade code ' || p_grade_code );
15722 dbms_output.put_line('retest date ' || p_retest_date );
15723 dbms_output.put_line('maturity date ' || p_maturity_date );
15724 dbms_output.put_line('origination date ' || p_origination_date ) ;
15725 dbms_output.put_line('origination type ' || p_origination_type );
15726 dbms_output.put_line('expiration action Code ' || p_expiration_action_code );
15727 dbms_output.put_line('expiration action date ' || p_expiration_action_date );
15728 dbms_output.put_line('Hold date ' || p_hold_date );
15729 dbms_output.put_line('expiration date ' || p_expiration_date );
15730 dbms_output.put_line('***************************************' );
15731 */
15732
15733 /* VALIDATE parent/child lot number */
15734 l_check := INV_LOT_ATTR_PUB.validate_child_lot( p_parent_lot_number => p_parent_lot_number
15735 ,p_lot_number => p_lot_number
15736 ,p_org_id => l_orgid
15737 ,p_inventory_item_id => l_itemid
15738 ,p_child_lot_flag => l_child_lot_flag
15739 ,x_return_status => l_return_status
15740 ,x_msg_count => l_msg_count
15741 ,x_msg_data => l_msg_data);
15742 IF NOT(l_check)
15743 THEN
15744 l_error_code := l_msg_data;
15745 l_error_exp := l_msg_data;
15746 RAISE FND_API.G_EXC_ERROR;
15747
15748 END IF;
15749
15750 IF (l_debug = 1) THEN
15751 inv_log_util.trace('validate_child_lot pass', 'INV_TXN_MANAGER_GRP', 9);
15752 END IF;
15753
15754
15755 /******************* START Grade Code validation logic ********************/
15756 l_check := INV_LOT_ATTR_PUB.validate_grade_code( p_grade_code => p_grade_code
15757 , p_org_id => l_orgid
15758 , p_inventory_item_id => l_itemid
15759 , p_grade_control_flag => l_grade_control_flag
15760 , x_return_status => l_return_status
15761 , x_msg_count => l_msg_count
15762 , x_msg_data => l_msg_data);
15763 IF NOT(l_check)
15764 THEN
15765 l_error_code := l_msg_data;
15766 l_error_exp := l_msg_data;
15767 RAISE FND_API.G_EXC_ERROR;
15768 END IF;
15769
15770 IF (l_debug = 1) THEN
15771 inv_log_util.trace('validate_grade_code pass', 'INV_TXN_MANAGER_GRP', 9);
15772 END IF;
15773
15774 /******************* START Origination Type validation logic ********************/
15775 l_check := INV_LOT_ATTR_PUB.validate_origination_type( p_origination_type => p_origination_type
15776 , x_return_status => l_return_status
15777 , x_msg_count => l_msg_count
15778 , x_msg_data => l_msg_data);
15779 IF NOT(l_check)
15780 THEN
15781 l_error_code := l_msg_data;
15782 l_error_exp := l_msg_data;
15783 RAISE FND_API.G_EXC_ERROR;
15784 END IF;
15785 IF (l_debug = 1) THEN
15786 inv_log_util.trace('validate_origination_type pass', 'INV_TXN_MANAGER_GRP', 9);
15787 END IF;
15788
15789
15790 -- dbms_output.put_line('Validate_Additional_Attr: Origination type validation - PASS...');
15791
15792 /******************* START Expiration Action Code validation logic ********************/
15793 l_check := INV_LOT_ATTR_PUB.validate_exp_action_code( p_expiration_action_code => p_expiration_action_code
15794 , p_org_id => l_orgid
15795 , p_inventory_item_id => l_itemid
15796 , p_shelf_life_code => l_shelf_life_code
15797 , x_return_status => l_return_status
15798 , x_msg_count => l_msg_count
15799 , x_msg_data => l_msg_data);
15800 IF NOT(l_check)
15801 THEN
15802 l_error_code := l_msg_data;
15803 l_error_exp := l_msg_data;
15804 RAISE FND_API.G_EXC_ERROR;
15805 END IF;
15806 IF (l_debug = 1) THEN
15807 inv_log_util.trace('validate_exp_action_code pass', 'INV_TXN_MANAGER_GRP', 9);
15808 END IF;
15809
15810 -- dbms_output.put_line('Validate_Additional_Attr: Expiration Action Code validation - PASS...');
15811
15812 /******************* START Retest Date validation logic ********************/
15813 l_check := INV_LOT_ATTR_PUB.validate_retest_date(p_retest_date => p_retest_date
15814 ,p_origination_date => p_origination_date
15815 ,x_return_status => l_return_status
15816 ,x_msg_count => l_msg_count
15817 ,x_msg_data => l_msg_data);
15818 IF NOT(l_check)
15819 THEN
15820 l_error_code := l_msg_data;
15821 l_error_exp := l_msg_data;
15822 RAISE FND_API.G_EXC_ERROR;
15823 END IF;
15824 IF (l_debug = 1) THEN
15825 inv_log_util.trace('validate_retest_date pass', 'INV_TXN_MANAGER_GRP', 9);
15826 END IF;
15827
15828 /******************* START Expiration Action Date validation logic ********************/
15829 l_check := INV_LOT_ATTR_PUB.validate_exp_action_date( p_expiration_action_date => p_expiration_action_date
15830 , p_expiration_date => p_expiration_date
15831 , x_return_status => l_return_status
15832 , x_msg_count => l_msg_count
15833 , x_msg_data => l_msg_data);
15834 IF NOT(l_check)
15835 THEN
15836 l_error_code := l_msg_data;
15837 l_error_exp := l_msg_data;
15838 RAISE FND_API.G_EXC_ERROR;
15839
15840 END IF;
15841 IF (l_debug = 1) THEN
15842 inv_log_util.trace('validate_exp_action_date pass', 'INV_TXN_MANAGER_GRP', 9);
15843 END IF;
15844
15845
15846 /******************* START Maturity Date validation logic ********************/
15847 l_check := INV_LOT_ATTR_PUB.validate_maturity_date( p_maturity_date => p_maturity_date
15848 ,p_origination_date => p_origination_date
15849 ,x_return_status => l_return_status
15850 ,x_msg_count => l_msg_count
15851 ,x_msg_data => l_msg_data);
15852 IF NOT(l_check)
15853 THEN
15854 l_error_code := l_msg_data;
15855 l_error_exp := l_msg_data;
15856 RAISE FND_API.G_EXC_ERROR;
15857 END IF;
15858 IF (l_debug = 1) THEN
15859 inv_log_util.trace('validate_maturity_date pass', 'INV_TXN_MANAGER_GRP', 9);
15860 END IF;
15861
15862 /******************* START Hold Date validation logic ********************/
15863 l_check := INV_LOT_ATTR_PUB.validate_hold_date( p_hold_date => p_hold_date
15864 ,p_origination_date => p_origination_date
15865 ,x_return_status => l_return_status
15866 ,x_msg_count => l_msg_count
15867 ,x_msg_data => l_msg_data);
15868 IF NOT(l_check)
15869 THEN
15870 l_error_code := l_msg_data;
15871 l_error_exp := l_msg_data;
15872 RAISE FND_API.G_EXC_ERROR;
15873 END IF;
15874 IF (l_debug = 1) THEN
15875 inv_log_util.trace('validate_hold_date pass', 'INV_TXN_MANAGER_GRP', 9);
15876 END IF;
15877
15878 /******************* START Reason Code validation logic ********************/
15879 l_check := INV_LOT_ATTR_PUB.validate_reason_code( p_reason_code => null
15880 ,p_reason_id => p_reason_id
15881 ,x_return_status => l_return_status
15882 ,x_msg_count => l_msg_count
15883 ,x_msg_data => l_msg_count);
15884 IF NOT(l_check)
15885 THEN
15886 l_error_code := l_msg_data;
15887 l_error_exp := l_msg_data;
15888 RAISE FND_API.G_EXC_ERROR;
15889 END IF;
15890 IF (l_debug = 1) THEN
15891 inv_log_util.trace('validate_reason_code pass', 'INV_TXN_MANAGER_GRP', 9);
15892 END IF;
15893
15894 ELSE
15895 IF (l_debug = 1) THEN
15896 inv_log_util.trace('Validate_Additional_Attr: NO NEED FOR VALIDATION.. just default ',
15897 'INV_TXN_MANAGER_GRP', 9);
15898 END IF;
15899
15900 -- dbms_output.put_line('Validate_Additional_Attr: LOT EXISTS, NO NEED FOR VALIDATION.. just default from MLN : '||
15901 -- l_lot_record.lot_number);
15902
15903 p_parent_lot_number := l_lot_record.parent_lot_number;
15904 p_expiration_date := l_lot_record.expiration_date;
15905 p_grade_code := l_lot_record.grade_code;
15906 p_retest_date := l_lot_record.retest_date;
15907 p_maturity_date := l_lot_record.maturity_date;
15908 p_origination_date := l_lot_record.origination_date;
15909 p_origination_type := l_lot_record.origination_type;
15910 p_expiration_action_code := l_lot_record.expiration_action_code;
15911 p_expiration_action_date := l_lot_record.expiration_action_date;
15912 p_hold_date := l_lot_record.hold_date;
15913 /*
15914 dbms_output.put_line('***************************************' );
15915 dbms_output.put_line('p_parent_lot_number ' || p_parent_lot_number );
15916 dbms_output.put_line('grade code ' || p_grade_code );
15917 dbms_output.put_line('retest date ' || p_retest_date );
15918 dbms_output.put_line('maturity date ' || p_maturity_date );
15919 dbms_output.put_line('origination date ' || p_origination_date ) ;
15920 dbms_output.put_line('origination type ' || p_origination_type );
15921 dbms_output.put_line('expiration action Code ' || p_expiration_action_code );
15922 dbms_output.put_line('expiration action date ' || p_expiration_action_date );
15923 dbms_output.put_line('Hold date ' || p_hold_date );
15924 dbms_output.put_line('expiration date ' || p_expiration_date );
15925 dbms_output.put_line('***************************************' );
15926 */
15927
15928 END IF;
15929 /*Bug#7425435 for the newlots created from the pending lots window of the
15930 batch details form, the attribured should be updated to the lots table */
15931 IF (l_new_child_lot) and l_existing_pending_lot = 1 THEN
15932 l_in_lot_rec := l_lot_record;
15933 INV_LOT_API_PUB.Update_Inv_lot(
15934 x_return_status => l_return_status
15935 , x_msg_count => l_msg_count
15936 , x_msg_data => l_msg_data
15937 , x_lot_rec => x_lot_rec
15938 , p_lot_rec => l_in_lot_rec
15939 , p_source => l_source
15940 , p_api_version => l_api_version
15941 , p_init_msg_list => l_init_msg_list
15942 , p_commit => l_commit
15943 );
15944 IF l_return_status <> 'S' THEN
15945 l_error_code := l_msg_data;
15946 l_error_exp := l_msg_data;
15947 RAISE FND_API.G_EXC_ERROR;
15948 END IF;
15949
15950 END IF;
15951
15952 return true;
15953 /******************* END Perform Date validation logic ********************/
15954 EXCEPTION
15955 WHEN FND_API.G_EXC_ERROR THEN
15956 x_return_status := FND_API.G_RET_STS_ERROR;
15957 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15958 SET LAST_UPDATE_DATE = SYSDATE,
15959 LAST_UPDATED_BY = l_userid,
15960 LAST_UPDATE_LOGIN = l_loginid,
15961 PROGRAM_APPLICATION_ID = l_applid,
15962 PROGRAM_ID = l_progid,
15963 PROGRAM_UPDATE_DATE = SYSDATE,
15964 REQUEST_ID = l_reqstid,
15965 ERROR_CODE = substrb(l_error_code,1,240)
15966 WHERE TRANSACTION_INTERFACE_ID = p_intid;
15967
15968 errupdate(p_rowid,null);
15969
15970 RETURN FALSE;
15971
15972 WHEN NO_DATA_FOUND THEN
15973 IF (l_debug = 1) THEN
15974 inv_log_util.trace('Validate_Additional_Attr: error NO_DATA_FOUND' , 'INV_TXN_MANAGER_GRP', 9);
15975 END IF;
15976
15977 x_return_status := fnd_api.g_ret_sts_error;
15978
15979 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
15980 p_count => x_msg_count,
15981 p_data => x_msg_data);
15982 if( x_msg_count > 1 ) then
15983 x_msg_data := fnd_msg_pub.get(x_msg_count, FND_API.G_FALSE);
15984 end if;
15985
15986 l_error_code := x_msg_data;
15987 l_error_exp := x_msg_data;
15988 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15989 SET LAST_UPDATE_DATE = SYSDATE,
15990 LAST_UPDATED_BY = l_userid,
15991 LAST_UPDATE_LOGIN = l_loginid,
15992 PROGRAM_APPLICATION_ID = l_applid,
15993 PROGRAM_ID = l_progid,
15994 PROGRAM_UPDATE_DATE = SYSDATE,
15995 REQUEST_ID = l_reqstid,
15996 ERROR_CODE = substrb(l_error_code,1,240)
15997 WHERE TRANSACTION_INTERFACE_ID = p_intid;
15998
15999 errupdate(p_rowid,null);
16000 RETURN FALSE;
16001
16002
16003 WHEN OTHERS THEN
16004 IF (l_debug = 1) THEN
16005 inv_log_util.trace('Validate_Additional_Attr: error OTHERS exception' , 'INV_TXN_MANAGER_GRP', 9);
16006 END IF;
16007
16008 x_return_status := fnd_api.g_ret_sts_unexp_error;
16009
16010 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
16011 p_count => x_msg_count,
16012 p_data => x_msg_data);
16013 if( x_msg_count > 1 ) then
16014 x_msg_data := fnd_msg_pub.get(x_msg_count, FND_API.G_FALSE);
16015 end if;
16016
16017 l_error_code := x_msg_data;
16018 l_error_exp := x_msg_data;
16019
16020 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
16021 SET LAST_UPDATE_DATE = SYSDATE,
16022 LAST_UPDATED_BY = l_userid,
16023 LAST_UPDATE_LOGIN = l_loginid,
16024 PROGRAM_APPLICATION_ID = l_applid,
16025 PROGRAM_ID = l_progid,
16026 PROGRAM_UPDATE_DATE = SYSDATE,
16027 REQUEST_ID = l_reqstid,
16028 ERROR_CODE = substrb(l_error_code,1,240)
16029 WHERE TRANSACTION_INTERFACE_ID = p_intid;
16030
16031 errupdate(p_rowid,null);
16032
16033 RETURN FALSE;
16034
16035
16036 END Validate_Additional_Attr;
16037
16038
16039 PROCEDURE validate_derive_object_details
16040 ( p_org_id IN NUMBER
16041 , p_object_type IN NUMBER
16042 , p_object_id IN NUMBER
16043 , p_object_number IN VARCHAR2
16044 , p_item_id IN NUMBER
16045 , p_object_type2 IN NUMBER
16046 , p_object_id2 IN NUMBER
16047 , p_object_number2 IN VARCHAR2
16048 , p_serctrl IN NUMBER
16049 , p_lotctrl IN NUMBER
16050 , p_rowid IN ROWID
16051 , p_table IN VARCHAR2
16052 , x_return_status OUT NOCOPY VARCHAR2
16053 , x_msg_count OUT NOCOPY NUMBER
16054 , x_msg_data OUT NOCOPY VARCHAR2)
16055 IS
16056 l_api_name CONSTANT VARCHAR2(30) := 'validate_derive_object_details';
16057 l_object_id NUMBER;
16058 l_object_id2 NUMBER;
16059 l_object_number VARCHAR2(240);
16060 l_object_number2 VARCHAR2(240);
16061 l_inventory_item_id NUMBER;
16062
16063 BEGIN
16064 x_return_status := lg_ret_sts_success;
16065 -- Standard Start of API savepoint
16066 SAVEPOINT sp_validations;
16067
16068 g_pkg_name := l_api_name;
16069 IF (l_debug = 1) THEN
16070 mydebug('Entered validate_derive_object_details ...');
16071 mydebug ('p_org_id : ' || p_org_id );
16072 mydebug ('p_object_type : ' || p_object_type );
16073 mydebug ('p_object_id : ' || p_object_id );
16074 mydebug ('p_object_number : ' || p_object_number);
16075 mydebug ('p_item_id : ' || p_item_id );
16076 mydebug ('p_object_type2 : ' || p_object_type2 );
16077 mydebug ('p_object_id2 : ' || p_object_id2 );
16078 mydebug ('p_object_number2: ' || p_object_number2);
16079 mydebug ('p_serctrl : ' || p_serctrl );
16080 mydebug ('p_lotctrl : ' || p_lotctrl );
16081 mydebug ('p_rowid : ' || p_rowid );
16082 mydebug ('p_table : ' || p_table );
16083 END IF;
16084 l_object_id := p_object_id;
16085 l_object_id2 := p_object_id2;
16086 l_object_number := p_object_number;
16087 l_object_number2 := p_object_number2;
16088
16089 IF p_object_id is NOT NULL and p_object_type is NOT NULL
16090 THEN
16091 IF (l_debug = 1) THEN mydebug('{{- Use p_object_id and p_object_type to - }}' ); END IF;
16092 IF p_object_type = 1 THEN
16093 IF (l_debug = 1) THEN mydebug('{{ Select lot_number from MLN}}' ); END IF;
16094 select lot_number
16095 INTO l_object_number
16096 FROM mtl_lot_numbers
16097 WHERE gen_object_id = p_object_id;
16098 ELSIF p_object_type = 2 THEN
16099 IF (l_debug = 1) THEN mydebug('{{ Select serial_number from MSN }}' ); END IF;
16100 SELECT serial_number
16101 INTO l_object_number
16102 FROM mtl_serial_numbers
16103 WHERE gen_object_id = p_object_id;
16104 END IF;
16105 IF (l_debug = 1) THEN mydebug('l_object_number : ' || l_object_number ); END IF;
16106
16107 ELSIF p_object_type is NOT NULL AND p_object_number IS NOT NULL AND p_item_id IS NOT NULL
16108 THEN
16109 IF (l_debug = 1) THEN mydebug('{{- Use p_object_number,p_item_id, p_org_id to - }}' ); END IF;
16110 IF p_object_type = 1 THEN
16111 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MLN }}' ); END IF;
16112 select gen_object_id
16113 INTO l_object_id
16114 FROM mtl_lot_numbers
16115 WHERE organization_id = p_org_id
16116 AND inventory_item_id = p_item_id
16117 AND lot_number = p_object_number;
16118 ELSIF p_object_type = 2 THEN
16119 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MSN}}' ); END IF;
16120 SELECT gen_object_id
16121 INTO l_object_id
16122 FROM mtl_serial_numbers
16123 WHERE current_organization_id = p_org_id
16124 AND inventory_item_id = p_item_id
16125 AND serial_number = p_object_number;
16126 END IF;
16127 IF (l_debug = 1) THEN mydebug('l_object_id2 : ' || l_object_id2 ); END IF;
16128 END IF;
16129 IF p_object_id2 is NOT NULL and p_object_type2 is NOT NULL
16130 THEN
16131 IF (l_debug = 1) THEN mydebug('{{- Use p_object_id2 and p_object_type2 to - }}' ); END IF;
16132 IF p_object_type2 = 1 THEN
16133 IF (l_debug = 1) THEN mydebug('{{ Select lot_number from MLN}}' ); END IF;
16134 select lot_number
16135 INTO l_object_number2
16136 FROM mtl_lot_numbers
16137 WHERE gen_object_id = p_object_id2;
16138 ELSIF p_object_type2 = 2 THEN
16139 IF (l_debug = 1) THEN mydebug('{{ Select serial_number from MSN }}' ); END IF;
16140 SELECT serial_number
16141 INTO l_object_number2
16142 FROM mtl_serial_numbers
16143 WHERE gen_object_id = p_object_id2;
16144 END IF;
16145 IF (l_debug = 1) THEN mydebug('l_object_number2 : ' || l_object_number2 ); END IF;
16146 ELSIF p_object_type2 is NOT NULL AND p_object_number2 IS NOT NULL AND p_item_id IS NOT NULL
16147 THEN
16148 IF (l_debug = 1) THEN mydebug('{{- Use p_object_number2,p_item_id, p_org_id to - }}' ); END IF;
16149 IF p_object_type2 = 1 THEN
16150 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MLN }}' ); END IF;
16151 select gen_object_id
16152 INTO l_object_id2
16153 FROM mtl_lot_numbers
16154 WHERE organization_id = p_org_id
16155 AND inventory_item_id = p_item_id
16156 AND lot_number = p_object_number2;
16157 ELSIF p_object_type = 2 THEN
16158 IF (l_debug = 1) THEN mydebug('{{ Select gen_object_id from MSN}}' ); END IF;
16159 SELECT gen_object_id
16160 INTO l_object_id2
16161 FROM mtl_serial_numbers
16162 WHERE current_organization_id = p_org_id
16163 AND inventory_item_id = p_item_id
16164 AND serial_number = p_object_number2;
16165 END IF;
16166 IF (l_debug = 1) THEN mydebug('l_object_id2 : ' || l_object_id2 ); END IF;
16167 END IF;
16168
16169 IF l_object_id IS NOT NULL OR l_object_number IS NOT NULL OR
16170 l_object_number2 IS NOT NULL OR l_object_id2 IS NOT NULL
16171 THEN
16172 IF p_table = 'MTLI' THEN
16173 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
16174 SET parent_object_id = l_object_id
16175 ,parent_object_id2 = l_object_id2
16176 ,parent_object_number = l_object_number
16177 ,parent_object_number2 = l_object_number2
16178 WHERE ROWID = p_rowid;
16179 ELSIF p_table = 'MSNI' THEN
16180 UPDATE MTL_SERIAL_NUMBERS_INTERFACE MSNI
16181 SET parent_object_id = l_object_id
16182 ,parent_object_id2 = l_object_id2
16183 ,parent_object_number = l_object_number
16184 ,parent_object_number2 = l_object_number2
16185 WHERE ROWID = p_rowid;
16186 END IF;
16187 END IF;
16188
16189 EXCEPTION
16190 WHEN OTHERS THEN
16191 IF (l_debug = 1) THEN mydebug('exception WHEN OTHERS'|| x_msg_data || ':' || sqlerrm); END IF;
16192 x_return_status := lg_ret_sts_unexp_error;
16193 ROLLBACK TO sp_validations;
16194
16195 END validate_derive_object_details;
16196
16197
16198 PROCEDURE validate_serial_genealogy_data
16199 ( p_interface_id IN NUMBER
16200 , p_org_id IN NUMBER
16201 , x_return_status OUT NOCOPY VARCHAR2
16202 , x_msg_count OUT NOCOPY NUMBER
16203 , x_msg_data OUT NOCOPY VARCHAR2)
16204 IS
16205 CURSOR cur_MSNI IS
16206 SELECT FM_SERIAL_NUMBER
16207 ,TO_SERIAL_NUMBER
16208 ,PARENT_SERIAL_NUMBER
16209 ,PARENT_OBJECT_TYPE
16210 ,PARENT_OBJECT_ID
16211 ,PARENT_OBJECT_NUMBER
16212 ,PARENT_OBJECT_TYPE2
16213 ,PARENT_OBJECT_ID2
16214 ,PARENT_OBJECT_NUMBER2
16215 ,PARENT_ITEM_ID
16216 ,ROWID
16217 FROM MTL_SERIAL_NUMBERS_INTERFACE
16218 WHERE TRANSACTION_INTERFACE_ID = p_interface_id;
16219
16220 BEGIN
16221 x_return_status := lg_ret_sts_success;
16222 -- Standard Start of API savepoint
16223 SAVEPOINT sp_gen_validations;
16224
16225 g_pkg_name := 'validate_serial_genealogy_data';
16226 IF (l_debug = 1) THEN
16227 mydebug ('p_interface_id : ' || p_interface_id);
16228 mydebug ('p_org_id : ' || p_org_id );
16229 END IF;
16230
16231
16232 FOR rec_MSNI in cur_MSNI
16233 LOOP
16234
16235 IF (l_debug = 1) THEN
16236 mydebug ('FM_SERIAL_NUMBER : ' || rec_MSNI.FM_SERIAL_NUMBER);
16237 mydebug ('TO_SERIAL_NUMBER : ' || rec_MSNI.TO_SERIAL_NUMBER );
16238 mydebug('PARENT_OBJECT_TYPE :' || rec_MSNI.PARENT_OBJECT_TYPE );
16239 mydebug('PARENT_OBJECT_ID :' || rec_MSNI.PARENT_OBJECT_ID );
16240 mydebug('PARENT_OBJECT_NUMBER :' || rec_MSNI.PARENT_OBJECT_NUMBER );
16241 mydebug('PARENT_OBJECT_TYPE2 :' || rec_MSNI.PARENT_OBJECT_TYPE2 );
16242 mydebug('PARENT_OBJECT_ID2 :' || rec_MSNI.PARENT_OBJECT_ID2 );
16243 mydebug('PARENT_OBJECT_NUMBER2:' || rec_MSNI.PARENT_OBJECT_NUMBER2);
16244 mydebug('PARENT_ITEM_ID:' || rec_MSNI.PARENT_ITEM_ID);
16245 mydebug('PARENT_SERIAL_NUMBER:' || rec_MSNI.PARENT_SERIAL_NUMBER);
16246 mydebug('ROWID:' || rec_MSNI.ROWID);
16247 END IF;
16248
16249
16250 IF (rec_MSNI.parent_object_id is NOT NULL AND rec_MSNI.parent_object_type is NOT NULL) OR
16251 (rec_MSNI.parent_object_type is NOT NULL AND rec_MSNI.parent_object_number is NOT NULL
16252 AND rec_MSNI.parent_Item_id IS NOT NULL) THEN
16253 IF (l_debug = 1) THEN
16254 mydebug('{{- Parent details are available - Validation/derivation of }} ' ||
16255 '{{ parent object details is called here}}' );
16256 END IF;
16257 validate_derive_object_details
16258 ( p_org_id => p_org_id
16259 , p_object_type => rec_MSNI.parent_object_type
16260 , p_object_id => rec_MSNI.parent_object_id
16261 , p_object_number => rec_MSNI.parent_object_number
16262 , p_item_id => rec_MSNI.parent_Item_id
16263 , p_object_type2 => rec_MSNI.parent_object_type2
16264 , p_object_id2 => rec_MSNI.parent_object_id2
16265 , p_object_number2 => rec_MSNI.parent_object_number2
16266 , p_serctrl => NULL
16267 , p_lotctrl => NULL
16268 , p_rowid => rec_MSNI.rowid
16269 , p_table => 'MSNI'
16270 , x_return_status => x_return_status
16271 , x_msg_count => x_msg_count
16272 , x_msg_data => x_msg_data);
16273 IF x_return_status <> lg_ret_sts_success THEN
16274 IF (l_debug=1) THEN mydebug(' x_return_status: ' || x_return_status); END IF;
16275 --RAISE lg_exc_error; ????
16276 END IF;
16277 ELSE
16278 IF (l_debug = 1) THEN
16279 mydebug('{{- Parent details are NOT available, so no validations }}' );
16280 END IF;
16281 END IF;
16282 END LOOP;
16283
16284 EXCEPTION WHEN OTHERS THEN
16285 IF (l_debug = 1) THEN mydebug('exception WHEN OTHERS'|| x_msg_data || ':' || sqlerrm); END IF;
16286 x_return_status := lg_ret_sts_unexp_error;
16287 ROLLBACK TO sp_gen_validations;
16288
16289
16290 NULL;
16291
16292 END validate_serial_genealogy_data;
16293
16294 --
16295 -- Name: GET_SERIAL_DIFF_WRP
16296 --
16297 -- Input parameters:
16298 -- p_fm_serial 'from' Serial Number
16299 -- p_to_serial 'to' Serial Number
16300 --
16301 -- Output parameters:
16302 -- return_status quantity between passed serial numbers,
16303 -- 0 if pased serial numbers are invalid.
16304 --
16305 FUNCTION get_serial_diff_wrp(p_fm_serial IN VARCHAR2, p_to_serial IN VARCHAR2)
16306 RETURN NUMBER AS
16307 l_qty NUMBER := 0;
16308 BEGIN
16309 l_qty := inv_serial_number_pub.get_serial_diff(p_fm_serial, p_to_serial);
16310 IF (l_qty <= 0) THEN
16311 return 0;
16312 ELSE
16313 return l_qty;
16314 END IF;
16315
16316 END get_serial_diff_wrp;
16317
16318 END INV_TXN_MANAGER_GRP;