DBA Data[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;