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.72.12010000.6 2008/10/08 11:58:11 ckrishna ship $ */
3 
4 --------------------------------------------------
5 -- Private Procedures and Functions
6 --------------------------------------------------
7 
8 /** Following portion of the code is the common objects DECLARATION/DEFINITION
9     that are used in the Package **/
10 
11 l_error_code         VARCHAR2(3000);
12 l_error_exp          VARCHAR2(3000);
13 l_debug              number := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
14 l_acctid_validated   BOOLEAN := FALSE ; --Bug#4247753. Added this variable
15                                        --to indicate if 'validate_acctid' has
16                                        --already been called in 'GETACCTID'
17 g_pkg_name    VARCHAR2(80) ;
18 g_lot_ser_attr_tbl   inv_lot_sel_attr.lot_sel_attributes_tbl_type;
19 g_select_stmt LONG :=
20  'SELECT NVL(MSNI.SERIAL_ATTRIBUTE_CATEGORY,
21       MSN.SERIAL_ATTRIBUTE_CATEGORY),
22   NVL(MSNI.C_ATTRIBUTE1,
23       MSN.C_ATTRIBUTE1),
24   NVL(MSNI.C_ATTRIBUTE2,
25       MSN.C_ATTRIBUTE2),
26   NVL(MSNI.C_ATTRIBUTE3,
27       MSN.C_ATTRIBUTE3),
28   NVL(MSNI.C_ATTRIBUTE4,
29       MSN.C_ATTRIBUTE4),
30   NVL(MSNI.C_ATTRIBUTE5,
31       MSN.C_ATTRIBUTE5),
32   NVL(MSNI.C_ATTRIBUTE6,
33       MSN.C_ATTRIBUTE6),
34   NVL(MSNI.C_ATTRIBUTE7,
35       MSN.C_ATTRIBUTE7),
36   NVL(MSNI.C_ATTRIBUTE8,
37       MSN.C_ATTRIBUTE8),
38   NVL(MSNI.C_ATTRIBUTE9,
39       MSN.C_ATTRIBUTE9),
40   NVL(MSNI.C_ATTRIBUTE10,
41       MSN.C_ATTRIBUTE10),
42   NVL(MSNI.C_ATTRIBUTE11,
43       MSN.C_ATTRIBUTE11),
44   NVL(MSNI.C_ATTRIBUTE12,
45       MSN.C_ATTRIBUTE12),
46   NVL(MSNI.C_ATTRIBUTE13,
47       MSN.C_ATTRIBUTE13),
48   NVL(MSNI.C_ATTRIBUTE14,
49       MSN.C_ATTRIBUTE14),
50   NVL(MSNI.C_ATTRIBUTE15,
51       MSN.C_ATTRIBUTE15),
52   NVL(MSNI.C_ATTRIBUTE16,
53       MSN.C_ATTRIBUTE16),
54   NVL(MSNI.C_ATTRIBUTE17,
55       MSN.C_ATTRIBUTE17),
56   NVL(MSNI.C_ATTRIBUTE18,
57       MSN.C_ATTRIBUTE18),
58   NVL(MSNI.C_ATTRIBUTE19,
59       MSN.C_ATTRIBUTE19),
60   NVL(MSNI.C_ATTRIBUTE20,
61       MSN.C_ATTRIBUTE20),
62   NVL(MSNI.D_ATTRIBUTE1,
63       MSN.D_ATTRIBUTE1),
64   NVL(MSNI.D_ATTRIBUTE2,
65       MSN.D_ATTRIBUTE2),
66   NVL(MSNI.D_ATTRIBUTE3,
67       MSN.D_ATTRIBUTE3),
68   NVL(MSNI.D_ATTRIBUTE4,
69       MSN.D_ATTRIBUTE4),
70   NVL(MSNI.D_ATTRIBUTE5,
71       MSN.D_ATTRIBUTE5),
72   NVL(MSNI.D_ATTRIBUTE6,
73       MSN.D_ATTRIBUTE6),
74   NVL(MSNI.D_ATTRIBUTE7,
75       MSN.D_ATTRIBUTE7),
76   NVL(MSNI.D_ATTRIBUTE8,
77       MSN.D_ATTRIBUTE8),
78   NVL(MSNI.D_ATTRIBUTE9,
79       MSN.D_ATTRIBUTE9),
80   NVL(MSNI.D_ATTRIBUTE10,
81       MSN.D_ATTRIBUTE10),
82   NVL(MSNI.N_ATTRIBUTE1,
83       MSN.N_ATTRIBUTE1),
84   NVL(MSNI.N_ATTRIBUTE2,
85       MSN.N_ATTRIBUTE2),
86   NVL(MSNI.N_ATTRIBUTE3,
87       MSN.N_ATTRIBUTE3),
88   NVL(MSNI.N_ATTRIBUTE4,
89       MSN.N_ATTRIBUTE4),
90   NVL(MSNI.N_ATTRIBUTE5,
91       MSN.N_ATTRIBUTE5),
92   NVL(MSNI.N_ATTRIBUTE6,
93       MSN.N_ATTRIBUTE6),
94   NVL(MSNI.N_ATTRIBUTE7,
95       MSN.N_ATTRIBUTE7),
96   NVL(MSNI.N_ATTRIBUTE8,
97       MSN.N_ATTRIBUTE8),
98   NVL(MSNI.N_ATTRIBUTE9,
99       MSN.N_ATTRIBUTE9),
100   NVL(MSNI.N_ATTRIBUTE10,
101       MSN.N_ATTRIBUTE10),
102   NVL(MSNI.TERRITORY_CODE,
103       MSN.TERRITORY_CODE),
104   NVL(MSNI.TIME_SINCE_NEW,
105       MSN.TIME_SINCE_NEW),
106   NVL(MSNI.CYCLES_SINCE_NEW,
107       MSN.CYCLES_SINCE_NEW),
108   NVL(MSNI.TIME_SINCE_OVERHAUL,
109       MSN.TIME_SINCE_OVERHAUL),
110   NVL(MSNI.CYCLES_SINCE_OVERHAUL,
111       MSN.CYCLES_SINCE_OVERHAUL),
112   NVL(MSNI.TIME_SINCE_REPAIR,
113       MSN.TIME_SINCE_REPAIR),
114   NVL(MSNI.CYCLES_SINCE_REPAIR,
115       MSN.CYCLES_SINCE_REPAIR),
116   NVL(MSNI.TIME_SINCE_VISIT,
117       MSN.TIME_SINCE_VISIT),
118   NVL(MSNI.CYCLES_SINCE_VISIT,
119       MSN.CYCLES_SINCE_VISIT),
120   NVL(MSNI.TIME_SINCE_MARK,
121       MSN.TIME_SINCE_MARK),
122   NVL(MSNI.CYCLES_SINCE_MARK,
123       MSN.CYCLES_SINCE_MARK),
124   NVL(MSNI.NUMBER_OF_REPAIRS,
125       MSN.NUMBER_OF_REPAIRS),
126   NVL(MSNI.ATTRIBUTE_CATEGORY,
127       MSN.ATTRIBUTE_CATEGORY),
128   NVL(MSNI.ATTRIBUTE1,
129       MSN.ATTRIBUTE1),
130   NVL(MSNI.ATTRIBUTE2,
131       MSN.ATTRIBUTE2),
132   NVL(MSNI.ATTRIBUTE3,
133       MSN.ATTRIBUTE3),
134   NVL(MSNI.ATTRIBUTE4,
135       MSN.ATTRIBUTE4),
136   NVL(MSNI.ATTRIBUTE5,
137       MSN.ATTRIBUTE5),
138   NVL(MSNI.ATTRIBUTE6,
139       MSN.ATTRIBUTE6),
140   NVL(MSNI.ATTRIBUTE7,
141       MSN.ATTRIBUTE7),
142   NVL(MSNI.ATTRIBUTE8,
143       MSN.ATTRIBUTE8),
144   NVL(MSNI.ATTRIBUTE9,
145       MSN.ATTRIBUTE9),
146   NVL(MSNI.ATTRIBUTE10,
147       MSN.ATTRIBUTE10),
148   NVL(MSNI.ATTRIBUTE11,
149       MSN.ATTRIBUTE11),
150   NVL(MSNI.ATTRIBUTE12,
151       MSN.ATTRIBUTE12),
152   NVL(MSNI.ATTRIBUTE13,
153       MSN.ATTRIBUTE13),
154   NVL(MSNI.ATTRIBUTE14,
155       MSN.ATTRIBUTE14),
156   NVL(MSNI.ATTRIBUTE15,
157       MSN.ATTRIBUTE15)
158 FROM
159   MTL_SERIAL_NUMBERS_INTERFACE MSNI,
160   MTL_SERIAL_NUMBERS MSN
161 WHERE
162   MSNI.TRANSACTION_INTERFACE_ID = :B_PARENT_ID   AND
163   MSNI.FM_SERIAL_NUMBER = :B_FM_SERIAL_NUMBER   AND
164   MSNI.TO_SERIAL_NUMBER = :B_TO_SERIAL_NUMBER   AND
165   MSN.SERIAL_NUMBER = :B_SERIAL_NUMBER   AND
166   MSN.INVENTORY_ITEM_ID = :B_ITEM_ID    AND
167   MSN.CURRENT_ORGANIZATION_ID = :B_ORG_ID';
168 
169 lg_ret_sts_error         CONSTANT VARCHAR2(30) := fnd_api.g_ret_sts_error;
170 lg_ret_sts_unexp_error   CONSTANT VARCHAR2(30) := fnd_api.g_ret_sts_unexp_error;
171 lg_ret_sts_success       CONSTANT VARCHAR2(30) := fnd_api.g_ret_sts_success;
172 
173 lg_exc_error             EXCEPTION  ; --fnd_api.g_exc_error;
174 lg_exc_unexpected_error  EXCEPTION  ; --fnd_api.g_exc_unexpected_error;
175 
176 
177 TYPE seg_rec_type IS RECORD
178    (colname    varchar2(30),
179     colvalue   varchar2(150));
180 TYPE bool_array IS TABLE OF NUMBER
181   INDEX BY BINARY_INTEGER;
182 
183 
184 client_info_org_id NUMBER := -1;
185 pjm_installed NUMBER := -1;
186 
187 TS_DEFAULT    NUMBER := 1;
188 TS_SAVE_ONLY  NUMBER := 2;
189 TS_PROCESS    NUMBER := 3;
190 SALORDER      NUMBER := 2;
191 INTORDER      NUMBER := 8;
192 MDS_RELIEF    NUMBER := 1;
193 MPS_RELIEF    NUMBER := 2;
194 
195 R_WORK_ORDER  NUMBER := 1;
196 R_PURCH_ORDER NUMBER := 2;
197 R_SALES_ORDER NUMBER := 3;
198 TO_BE_PROCESSED NUMBER := 2;
199 NOT_TO_BE_PROCESSED NUMBER := 1;
200 
201 g_true        NUMBER := 1;
202 g_false       NUMBER := 0;
203 
204 g_create_loc_at NUMBER; --Bug#5044059
205 
206 
207 /*FUNCTION getitemid( itemid OUT nocopy NUMBER, orgid IN NUMBER, rowid VARCHAR2);
208 FUNCTION getacctid( acct OUT nocopy NUMBER, orgid IN NUMBER, rowid VARCHAR2);
209 FUNCTION setorgclientinfo(orgid IN NUMBER);
210 FUNCTION getlocid(locid OUT nocopy NUMBER, orgid IN NUMBER, subinv NUMBER,
211                         rowid VARCHAR2, locctrl NUMBER);
212 FUNCTION getxlocid(locid OUT nocopy NUMBER, orgid IN NUMBER, subinv IN VARCHAR2,
213                         rowid IN VARCHAR2, locctrl IN NUMBER);
214 FUNCTION getsrcid(trxsrc OUT nocopy NUMBER, srctype IN NUMBER, orgid IN NUMBER,
215                         rowid IN VARCHAR2);
216 PROCEDURE errupdate(p_rowid IN VARCHAR2, lot_rowid IN VARCHAR2 DEFAULT NULL);
217 FUNCTION lotcheck(rowid IN VARCHAR2, orgid IN NUMBER, itemid IN NUMBER, intid IN NUMBER,
218                       priuom IN VARCHAR2, trxuom VARCHAR2, lotuniq IN NUMBER,
219                       shlfcode IN NUMBER, shlfdays IN NUMBER, serctrl IN NUMBER,
220                             srctype IN NUMBER, acttype IN NUMBER);
221 FUNCTION validate_loc_for_project(ltv_locid IN NUMBER, ltv_orgid IN NUMBER,
222                                      ltv_srctype IN NUMBER, ltv_trxact IN NUMBER,
223                                      ltv_trx_src_id IN NUMBER, tev_flow_schedule  IN NUMBER);
224 FUNCTION validate_unit_number(unit_number IN NUMBER, orgid IN NUMBER,
225                                  itemid IN NUMBER, srctype IN NUMBER, acttype IN NUMBER);
226 */
227 
228 
229 TYPE seg_arr_type IS TABLE OF seg_rec_type INDEX BY BINARY_INTEGER;
230 
231 --TYPE segment_array IS TABLE OF segment_rec_type INDEX BY BINARY_INTEGER;
232 
233 TYPE segment_array IS TABLE OF VARCHAR2(200);
234 
235 
236 /******************************************************************
237  *
238  * loaderrmsg
239  *
240  ******************************************************************/
241 PROCEDURE mydebug( p_msg        IN        VARCHAR2
242                   ,p_module     IN        VARCHAR2 DEFAULT NULL)
243 IS
244 BEGIN
245 
246 inv_log_util.trace( p_message => p_msg,
247 p_module  => g_pkg_name ||'.'||p_module ,
248 p_level => 9);
249 
250 --dbms_output.put_line( p_msg );
251 END mydebug;
252 
253 PROCEDURE validate_derive_object_details  -- R12 Genealogy Enhancements  - New Procedure
254 ( p_org_id              IN   NUMBER
255 , p_object_type         IN   NUMBER
256 , p_object_id           IN   NUMBER
257 , p_object_number       IN   VARCHAR2
258 , p_item_id             IN   NUMBER
259 , p_object_type2        IN   NUMBER
260 , p_object_id2          IN   NUMBER
261 , p_object_number2      IN   VARCHAR2
262 , p_serctrl             IN   NUMBER
263 , p_lotctrl             IN   NUMBER
264 , p_rowid               IN  rowid
265 , p_table               IN  VARCHAR2
266 , x_return_status       OUT NOCOPY VARCHAR2
267 , x_msg_count           OUT NOCOPY NUMBER
268 , x_msg_data            OUT NOCOPY VARCHAR2);
269 
270 PROCEDURE validate_serial_genealogy_data-- R12 Genealogy Enhancements  - New Procedure
271 ( p_interface_id        IN    NUMBER
272 , p_org_id              IN    NUMBER
273 , x_return_status       OUT NOCOPY VARCHAR2
274 , x_msg_count           OUT NOCOPY NUMBER
275 , x_msg_data            OUT NOCOPY VARCHAR2);
276 
277 PROCEDURE loaderrmsg(mesg1 IN VARCHAR2, mesg2 IN VARCHAR2) IS
278 BEGIN
279       fnd_message.set_name('INV', mesg1);
280       l_error_code := fnd_message.get;
281 
282       fnd_message.set_name('INV', mesg2);
283       l_error_exp := fnd_message.get;
284 END;
285 
286 
287 
288 /** end of lot transactions changes **/
289 
290 /******************************************************************
291  * Check_Partial_Split - private procedure to check if the lot split
292  * transaction is a partial split, i.e., there are remaining qty
293  * in the parent lots. In this case, we need to insert additional
294  * record in mmtt for the remaining qty
295  * This procedure assumes that the primary qty is already calculated
296  * and the qty comparison is done with the primary qty.
297  * This procedure is called after calling LotTrxInsert
298  * As part of J-dev, we will use tmpInsert to
299  * move lot transaction records from MTI to MMTT. (also for I)
300  * Some changes have been made in this API  for I + J, to enable bulk
301  * insert. do not re-insert the parent transaction.
302  *  do not insert into MMTT here, but into MTI only, if we are
303  *  creating a new record for this transaction
304  *******************************************************************/
305 Function Check_Partial_Split(
306     p_parent_id         IN NUMBER,
307     p_current_index     IN NUMBER
308 ) RETURN boolean
309 IS
310     cursor mti_csr(p_interface_id NUMBER) IS
311        select mti.transaction_header_id,
312          mti.acct_period_id,
313          mti.distribution_account_id,
314          mti.transaction_interface_id,
315          mti.transaction_Type_id,
316          mti.inventory_item_id,
317          mti.revision,
318          mti.organization_id,
319          mti.subinventory_code,
320          mti.locator_id,
321          mti.transaction_quantity,
322          mti.primary_quantity,
323          mti.transaction_uom,
324          mti.lpn_id,
325          mti.transfer_lpn_id,
326          mti.cost_group_id,
327          mti.transaction_source_type_id,
328          mti.transaction_Action_id,
329          mti.parent_id,
330          mti.created_by,
331          mtli.lot_number,
332          mtli.lot_expiration_date,
333          mtli.description,
334          mtli.vendor_id,
335          mtli.supplier_lot_number,
336          mtli.territory_code,
337          mtli.grade_code,
338          mtli.origination_date,
339          mtli.date_code,
340          mtli.status_id,
341          mtli.change_date,
342          mtli.age,
343          mtli.retest_date,
344          mtli.maturity_date,
345          mtli.lot_attribute_category,
346          mtli.item_size,
347          mtli.color,
348          mtli.volume,
349          mtli.volume_uom,
350          mtli.place_of_origin,
351          mtli.best_by_date,
352          mtli.length,
353          mtli.length_uom,
354          mtli.recycled_content,
355          mtli.thickness,
356          mtli.thickness_uom,
357          mtli.width,
358          mtli.width_uom,
359          mtli.curl_wrinkle_fold,
360          mtli.c_attribute1,
361          mtli.c_Attribute2,
362          mtli.c_attribute3,
363          mtli.c_attribute4,
364          mtli.c_attribute5,
365          mtli.c_attribute6,
366          mtli.c_attribute7,
367          mtli.c_attribute8,
368          mtli.c_attribute9,
369          mtli.c_attribute10,
370          mtli.c_attribute11,
371          mtli.c_attribute12,
372          mtli.c_attribute13,
373          mtli.c_attribute14,
374          mtli.c_attribute15,
375          mtli.c_attribute16,
376          mtli.c_attribute17,
377          mtli.c_attribute18,
378          mtli.c_attribute19,
379          mtli.c_attribute20,
380          mtli.d_attribute1,
381          mtli.d_attribute2,
382          mtli.d_attribute3,
383          mtli.d_attribute4,
384          mtli.d_attribute5,
385          mtli.d_attribute6,
386          mtli.d_attribute7,
387          mtli.d_attribute8,
388          mtli.d_attribute9,
389          mtli.d_attribute10,
390          mtli.n_attribute1,
391          mtli.n_attribute2,
392          mtli.n_attribute3,
393          mtli.n_attribute4,
394          mtli.n_attribute5,
395          mtli.n_attribute6,
396          mtli.n_attribute7,
397          mtli.n_attribute8,
398          mtli.n_attribute9,
399          mtli.n_attribute10,
400          mtli.attribute1,
401          mtli.attribute2,
402          mtli.attribute3,
403          mtli.attribute4,
404          mtli.attribute5,
405          mtli.attribute6,
406          mtli.attribute7,
407          mtli.attribute8,
408          mtli.attribute9,
409          mtli.attribute10,
410          mtli.attribute11,
411          mtli.attribute12,
412          mtli.attribute13,
413          mtli.attribute14,
414          mtli.attribute15,
415          mtli.attribute_category,
416          mtli.parent_object_type,     --R12 Genealogy enhancements
417          mtli.parent_object_id,       --R12 Genealogy enhancements
418          mtli.parent_object_number,   --R12 Genealogy enhancements
419          mtli.parent_item_id,         --R12 Genealogy enhancements
420          mtli.parent_object_type2,    --R12 Genealogy enhancements
421          mtli.parent_object_id2,      --R12 Genealogy enhancements
422          mtli.parent_object_number2,  --R12 Genealogy enhancements
423          msi.description item_description,
424          msi.location_control_code,
425          msi.restrict_subinventories_code,
426          msi.restrict_locators_code,
427          msi.revision_qty_control_code,
428          msi.primary_uom_code,
429          msi.shelf_life_code,
430          msi.shelf_life_days,
431          msi.allowed_units_lookup_code,
432          mti.transaction_batch_id,
433          mti.transaction_batch_seq,
434          mti.kanban_card_id,
435          mti.transaction_mode --J-dev
436          FROM MTL_TRANSACTIONS_INTERFACE MTI,
437          MTL_TRANSACTION_LOTS_INTERFACE MTLI,
438          MTL_SYSTEM_ITEMS_B MSI
439          WHERE mti.transaction_interface_id = p_interface_id
440          AND MTI.transaction_interface_id = mtli.transaction_interface_id
441          AND MTI.organization_id = msi.organization_id
442          AND mti.inventory_item_id = msi.inventory_item_id
443          and mti.process_flag = 1;
444     l_count NUMBER := 0;
445     l_partial_total_qty NUMBER :=0;
446     l_remaining_qty NUMBER := 0;
447     l_split_qty NUMBER := 0;
448     l_split_uom VARCHAR2(3);
449     l_transaction_interface_id NUMBER; --J-dev
450 BEGIN
451 
452    SELECT count(parent_id)
453      INTO   l_count
454      FROM   mtl_transactions_interface
455      WHERE  parent_id = p_parent_id;
456 
457    SELECT abs(primary_quantity)
458      INTO   l_split_qty
459      FROM   mtl_transactions_interface
460      WHERE  transaction_interface_id = p_parent_id;
461 
462    SELECT sum(abs(primary_quantity))
463      INTO l_partial_total_qty
464      FROM   mtl_transactions_interface
465      WHERE  parent_id = p_parent_id
466      AND    transaction_interface_id <> p_parent_id;
467 
468    l_remaining_qty := l_split_qty - l_partial_total_qty;
469 
470    if( p_current_index = l_count AND  l_remaining_qty > 0 ) then
471       select mtl_material_transactions_s.nextval
472         into l_transaction_interface_id --J-dev
473         FROM dual;
474       for l_mti_csr in mti_csr(p_parent_id ) LOOP
475          IF (l_debug = 1) THEN
476             inv_log_util.trace('insert into mmti is ' || l_mti_csr.transaction_interface_id, 'INV_TXN_MANAGER_GRP', 9);
477          END IF;
478 
479             INSERT INTO   mtl_transactions_interface
480               ( transaction_header_id ,
481                 transaction_interface_id ,
482                 transaction_mode ,
483                 lock_flag ,
484                 Process_flag
485                 ,last_update_date ,
486                 last_updated_by ,
487                 creation_date ,
488                 created_by ,
489                 last_update_login
490                 ,request_id ,
491                 program_application_id ,
492                 program_id ,
493                 program_update_date
494                 ,inventory_item_id ,
495                 revision ,
496                 organization_id
497                 ,subinventory_code ,
498                 locator_id
499                 ,transaction_quantity ,
500                 primary_quantity ,
501                 transaction_uom
502                 ,transaction_type_id ,
503                 transaction_action_id ,
504                 transaction_source_type_id
505                 ,transaction_date ,
506                 acct_period_id ,
507                 distribution_account_id,
508                 /*item_description ,
509                 item_location_control_code ,
510                 item_restrict_subinv_code
511                 ,item_restrict_locators_code ,
512                 item_revision_qty_control_code ,
513                 item_primary_uom_code
514                 ,item_shelf_life_code ,
515                 item_shelf_life_days ,
516                 item_lot_control_code
517                 ,item_serial_control_code ,
518                 allowed_units_lookup_code,*/--J-dev not in MTI
519                 parent_id,--J-dev
520                 lpn_id ,
521                 transfer_lpn_id
522                 ,cost_group_id,
523                 transaction_batch_id,
524               transaction_batch_seq,
525               kanban_card_id)
526               VALUES
527               ( l_mti_csr.transaction_header_id,
528                 l_transaction_interface_id,--J-dev
529                 l_mti_csr.transaction_mode /*2722754 */,
530                 2,--J-dev
531                 1,--J-dev
532                 sysdate,
533                 l_mti_csr.created_by,
534                 sysdate,
535                 l_mti_csr.created_by,
536                 l_mti_csr.created_by,
537                 NULL,
538                 NULL,
539                 NULL,
540                 NULL,
541                 l_mti_csr.inventory_item_id,
542                 l_mti_csr.revision,
543                 l_mti_csr.organization_id,
544                 l_mti_csr.subinventory_code,
545                 l_mti_csr.locator_id,
546                 l_remaining_qty,
547                 l_remaining_qty,
548                 l_mti_csr.primary_uom_code,
549                 l_mti_csr.transaction_type_id,
550                 l_mti_csr.transaction_action_id,
551                 l_mti_csr.transaction_source_type_id,
552                 sysdate,
553                 l_mti_csr.acct_period_id,
554                 l_mti_csr.distribution_account_id,
555                 /*l_mti_csr.item_description,
556                 l_mti_csr.location_control_code,
557                 l_mti_csr.restrict_subinventories_code,
558                 l_mti_csr.restrict_locators_code,
559                 l_mti_csr.revision_qty_control_code,
560                 l_mti_csr.primary_uom_code,
561                 l_mti_csr.shelf_life_code,
562                 l_mti_csr.shelf_life_days,
563                 2,
564                 1,
565                 l_mti_csr.allowed_units_lookup_code,*/--J-dev Not in MTI
566               l_mti_csr.parent_id,
567               l_mti_csr.lpn_id,
568               l_mti_csr.transfer_lpn_id,
569               l_mti_csr.cost_group_id,
570               l_mti_csr.transaction_batch_id,
571               l_mti_csr.transaction_batch_seq,
572               l_mti_csr.kanban_card_id);
573             INSERT  INTO mtl_transaction_lots_interface
574               (transaction_interface_id, --J-dev
575                last_update_date ,
576             last_updated_by ,
577             creation_date ,
578             created_by ,
579             last_update_login,
580             request_id ,
581             program_application_id ,
582             program_id ,
583                program_update_date,
584                transaction_quantity ,
585                primary_quantity,
586                lot_number ,
587                lot_expiration_date,
588                description ,
589                vendor_id ,
590                supplier_lot_number ,
591                territory_code,
592                grade_code ,
593                origination_date ,
594                date_code,
595                status_id ,
596                change_date ,
597                age ,
598                retest_date,
599                maturity_date ,
600                lot_attribute_category ,
601                item_size,
602                color ,
603                volume ,
604                volume_uom,
605                place_of_origin ,
606                best_by_date ,
607                length ,
608                length_uom,
609                recycled_content ,
610                thickness ,
611                thickness_uom,
612                width ,
613                width_uom ,
614                curl_wrinkle_fold,
615                c_attribute1 ,
616                c_attribute2 ,
617               c_attribute3 ,
618               c_attribute4 ,
619               c_attribute5,
620               c_attribute6 ,
621               c_attribute7 ,
622               c_attribute8 ,
623               c_attribute9 ,
624               c_attribute10,
625               c_attribute11 ,
626               c_attribute12 ,
627               c_attribute13 ,
628               c_attribute14 ,
629               c_attribute15,
630               c_attribute16 ,
631               c_attribute17 ,
632               c_attribute18 ,
633               c_attribute19 ,
634               c_attribute20,
635               d_attribute1 ,
636               d_attribute2 ,
637               d_attribute3 ,
638               d_attribute4 ,
639               d_attribute5 ,
640               d_attribute6 ,
641               d_attribute7 ,
642               d_attribute8 ,
643               d_attribute9 ,
644               d_attribute10,
645               n_attribute1 ,
646               n_attribute2 ,
647               n_attribute3 ,
648               n_attribute4 ,
649               n_attribute5 ,
650               n_attribute6 ,
651               n_attribute7 ,
652               n_attribute8 ,
653               n_attribute9 ,
654               n_attribute10 ,
655               attribute1 ,
656               attribute2,
657               attribute3,
658               attribute4,
659               attribute5,
660               attribute6,
661               attribute7,
662               attribute8,
663               attribute9,
664               attribute10,
665               attribute11,
666               attribute12,
667               attribute13,
668               attribute14,
669               attribute15,
670               attribute_category ,
671               parent_object_type,      --R12 Genealogy enhancements
672               parent_object_id,        --R12 Genealogy enhancements
673               parent_object_number,    --R12 Genealogy enhancements
674               parent_item_id,          --R12 Genealogy enhancements
675               parent_object_type2,     --R12 Genealogy enhancements
676               parent_object_id2,       --R12 Genealogy enhancements
677               parent_object_number2)   --R12 Genealogy enhancements
678               VALUES
679               ( l_transaction_interface_id,
680                 SYSDATE,
681                 l_mti_csr.created_by,
682                 SYSDATE,
683                 l_mti_csr.created_by,
684                 l_mti_Csr.created_by,
685                 NULL,
686                 NULL,
687                 NULL,
688                 NULL,
689                 l_remaining_qty,
690                 l_remaining_qty,
691                 l_mti_csr.lot_number,
692                 l_mti_csr.lot_expiration_date,
693                 l_mti_csr.description,
694                 l_mti_csr.vendor_id,
695                 l_mti_csr.supplier_lot_number,
696                 l_mti_csr.territory_code,
697                 l_mti_csr.grade_code,
698                 l_mti_csr.origination_date,
699                 l_mti_csr.date_code,
700                 l_mti_csr.status_id,
701                 l_mti_csr.change_date,
702                 l_mti_csr.age,
703                 l_mti_csr.retest_date,
704                 l_mti_csr.maturity_date,
705                 l_mti_csr.lot_attribute_category,
706                 l_mti_csr.item_size,
707                 l_mti_csr.color,
708                 l_mti_csr.volume,
709                 l_mti_csr.volume_uom,
710                 l_mti_csr.place_of_origin,
711                 l_mti_csr.best_by_date,
712                 l_mti_csr.length,
713                 l_mti_csr.length_uom,
714                 l_mti_csr.recycled_content,
715                 l_mti_csr.thickness,
716                 l_mti_csr.thickness_uom,
717                 l_mti_csr.width,
718                 l_mti_csr.width_uom,
719                 l_mti_csr.curl_wrinkle_fold,
720                 l_mti_csr.c_attribute1,
721                 l_mti_csr.c_attribute2,
722                 l_mti_csr.c_attribute3,
723                 l_mti_csr.c_attribute4,
724                 l_mti_csr.c_attribute5,
725                 l_mti_csr.c_attribute6,
726                 l_mti_csr.c_attribute7,
727                 l_mti_csr.c_attribute8,
728                 l_mti_csr.c_attribute9,
729                 l_mti_csr.c_attribute10,
730                 l_mti_csr.c_attribute11,
731                 l_mti_csr.c_attribute12,
732                 l_mti_csr.c_attribute13,
733                 l_mti_csr.c_attribute14,
734                 l_mti_csr.c_attribute15,
735                 l_mti_csr.c_attribute16,
736                 l_mti_csr.c_attribute17,
737                 l_mti_csr.c_attribute18,
738                 l_mti_csr.c_attribute19,
739                 l_mti_csr.c_attribute20,
740                 l_mti_csr.d_attribute1,
741                 l_mti_csr.d_attribute2,
742                 l_mti_csr.d_attribute3,
743                 l_mti_csr.d_attribute4,
744                 l_mti_csr.d_attribute5,
745                 l_mti_csr.d_attribute6,
746                 l_mti_csr.d_attribute7,
747                 l_mti_csr.d_attribute8,
748                 l_mti_csr.d_attribute9,
749                 l_mti_csr.d_attribute10,
750                 l_mti_csr.n_attribute1,
751                 l_mti_csr.n_attribute2,
752                 l_mti_csr.n_attribute3,
753                 l_mti_csr.n_attribute4,
754                 l_mti_csr.n_attribute5,
755                 l_mti_csr.n_attribute6,
756                 l_mti_csr.n_attribute7,
757                 l_mti_csr.n_attribute8,
758                 l_mti_csr.n_attribute9,
759                 l_mti_csr.n_attribute10,
760                 l_mti_csr.attribute1,
761                 l_mti_csr.attribute2,
762                 l_mti_csr.attribute3,
763                 l_mti_csr.attribute4,
764                 l_mti_csr.attribute5,
765                 l_mti_csr.attribute6,
766                 l_mti_csr.attribute7,
767                 l_mti_csr.attribute8,
768                 l_mti_csr.attribute9,
769                 l_mti_csr.attribute10,
770                 l_mti_csr.attribute11,
771                 l_mti_csr.attribute12,
772                 l_mti_csr.attribute13,
773                 l_mti_csr.attribute14,
774                 l_mti_csr.attribute15,
775                 l_mti_csr.attribute_category,
776                 l_mti_csr.parent_object_type,     --R12 Genealogy enhancements
777                 l_mti_csr.parent_object_id,       --R12 Genealogy enhancements
778                 l_mti_csr.parent_object_number,   --R12 Genealogy enhancements
779                 l_mti_csr.parent_item_id,         --R12 Genealogy enhancements
780                 l_mti_csr.parent_object_type2,    --R12 Genealogy enhancements
781                 l_mti_csr.parent_object_id2,      --R12 Genealogy enhancements
782                 l_mti_csr.parent_object_number2); --R12 Genealogy enhancements
783 
784       END LOOP;
785    END if;
786    return true;
787 EXCEPTION
788    when FND_API.G_EXC_ERROR then
789       IF (l_debug = 1) THEN
790        inv_log_util.trace('SQL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
791        inv_log_util.trace('Error in check_partial_split : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','9');
792     END IF;
793         return FALSE;
794    when Others  then
795     IF (l_debug = 1) THEN
796        inv_log_util.trace('SQL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
797        inv_log_util.trace('Error in check_partial_split : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','9');
798     END IF;
799         return false;
800 END Check_Partial_Split;
801 
802   /* Bug#4247753.  Added the below functon for validating the Account combination ID*/
803   /* Bug#5176266. Added one more parameter, 'p_txn_date' to the function, 'validate_acctid'*/
804 
805   FUNCTION validate_acctid(p_acctid IN NUMBER, p_orgid IN NUMBER, p_txn_date IN DATE)
806   RETURN BOOLEAN
807   IS
808     l_chart      number;
809     catsegs      varchar2(200);
810   BEGIN
811     SELECT CHART_OF_ACCOUNTS_ID
812     INTO l_chart
813     FROM ORG_ORGANIZATION_DEFINITIONS
814     WHERE ORGANIZATION_ID = p_orgid;
815 
816     IF fnd_flex_keyval.validate_ccid ( APPL_SHORT_NAME    => 'SQLGL'
817                                        ,KEY_FLEX_CODE     => 'GL#'
818                                        ,STRUCTURE_NUMBER  => l_chart
819                                        ,COMBINATION_ID    => p_acctid )
820     THEN
821       catsegs := fnd_flex_keyval.concatenated_values;
822       IF fnd_flex_keyval.validate_segs ( OPERATION         => 'CHECK_COMBINATION'
823                                         ,APPL_SHORT_NAME   => 'SQLGL'
824                                         ,KEY_FLEX_CODE     => 'GL#'
825                                         ,STRUCTURE_NUMBER  => l_chart
826                                         ,CONCAT_SEGMENTS   => catsegs
827                                         ,VALIDATION_DATE   => p_txn_date
828                                         ,VRULE             => '\nSUMMARY_FLAG\nI\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWED\nN'||
829                                                          '\0GL_GLOBAL\nDETAIL_POSTING_ALLOWED\nE\nAPPL=INV;NAME=INV_VRULE_POSTING\nN' )
830       THEN
831         IF (l_debug = 1) THEN
832           inv_log_util.trace('Distribution acct id : ' || p_acctid || ' is valid', 'INV_TXN_MANAGER_GRP','1');
833         END IF;
834         RETURN TRUE;
835       ELSE
836         l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
837         IF (l_debug = 1) THEN
838            inv_log_util.trace('Distribution acct id is invalid '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
839         END IF;
840         RETURN FALSE;
841       END IF;
842     ELSE
843       l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
844       IF (l_debug = 1) THEN
845          inv_log_util.trace('Distribution acct id Validation Error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
846       END IF;
847       RETURN FALSE;
848     END IF ;
849 
850   EXCEPTION
851   WHEN OTHERS THEN
852     l_error_exp := substr(fnd_flex_keyval.error_message,1,240);
853     IF (l_debug = 1) THEN
854       inv_log_util.trace('Error in validate_acctid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
855       inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
856     END IF;
857     RETURN FALSE;
858   END validate_acctid;
859 
860  /* getacctid()
861  *
862  ******************************************************************/
863 FUNCTION getacctid(x_acctid OUT NOCOPY NUMBER, p_orgid IN NUMBER, p_rowid IN VARCHAR2)
864 RETURN BOOLEAN
865 IS
866 
867    kff        fnd_flex_key_api.flexfield_type;
868    str        fnd_flex_key_api.structure_type;
869    seg        fnd_flex_key_api.segment_type;
870    seg_list   fnd_flex_key_api.segment_list;
871    j          number;
872    i          number;
873    nsegs      number;
874    l_popul    boolean;
875    segarray   fnd_flex_ext.segmentarray;
876    --segarray   segment_array;
877    tmp_seg_arr     seg_arr_type;
878    concat     varchar2(2000);
879    l_chart      number;
880    l_acctid      number;
881    l_trxdate     date;   --Bug#5176266.
882 begin
883 
884   SELECT DST_SEGMENT1, DST_SEGMENT2, DST_SEGMENT3,
885          DST_SEGMENT4, DST_SEGMENT5, DST_SEGMENT6,
886          DST_SEGMENT7, DST_SEGMENT8, DST_SEGMENT9,
887          DST_SEGMENT10, DST_SEGMENT11, DST_SEGMENT12,
888          DST_SEGMENT13, DST_SEGMENT14, DST_SEGMENT15,
889          DST_SEGMENT16, DST_SEGMENT17, DST_SEGMENT18,
890          DST_SEGMENT19, DST_SEGMENT20, DST_SEGMENT21,
891          DST_SEGMENT22, DST_SEGMENT23, DST_SEGMENT24,
892          DST_SEGMENT25, DST_SEGMENT26, DST_SEGMENT27,
893          DST_SEGMENT28, DST_SEGMENT29, DST_SEGMENT30,
894          TRANSACTION_DATE /*Bug#5176266*/
895     INTO tmp_seg_arr(1).colvalue, tmp_seg_arr(2).colvalue, tmp_seg_arr(3).colvalue,
896          tmp_seg_arr(4).colvalue, tmp_seg_arr(5).colvalue, tmp_seg_arr(6).colvalue,
897          tmp_seg_arr(7).colvalue, tmp_seg_arr(8).colvalue, tmp_seg_arr(9).colvalue,
898          tmp_seg_arr(10).colvalue, tmp_seg_arr(11).colvalue, tmp_seg_arr(12).colvalue,
899          tmp_seg_arr(13).colvalue, tmp_seg_arr(14).colvalue, tmp_seg_arr(15).colvalue,
900          tmp_seg_arr(16).colvalue, tmp_seg_arr(17).colvalue, tmp_seg_arr(18).colvalue,
901          tmp_seg_arr(19).colvalue, tmp_seg_arr(20).colvalue, tmp_seg_arr(21).colvalue,
902          tmp_seg_arr(22).colvalue, tmp_seg_arr(23).colvalue, tmp_seg_arr(24).colvalue,
903          tmp_seg_arr(25).colvalue, tmp_seg_arr(26).colvalue, tmp_seg_arr(27).colvalue,
904          tmp_seg_arr(28).colvalue, tmp_seg_arr(29).colvalue, tmp_seg_arr(30).colvalue,
905          l_trxdate/*Bug#5176266*/
906     FROM MTL_TRANSACTIONS_INTERFACE
907    WHERE ROWID = p_rowid;
908 
909    l_popul := FALSE;
910    i := 0;
911    WHILE (i < 30) and (NOT l_popul) loop
912      i := i + 1;
913      IF (tmp_seg_arr(i).colvalue IS NOT NULL) THEN
914         l_popul := TRUE;
915      END IF;
916    END LOOP;
917 
918    IF NOT l_popul THEN
919         return true;
920    END IF;
921 
922    SELECT CHART_OF_ACCOUNTS_ID
923     INTO l_chart
924     FROM ORG_ORGANIZATION_DEFINITIONS
925    WHERE ORGANIZATION_ID = p_orgid;
926 
927 
928    kff := fnd_flex_key_api.find_flexfield('SQLGL','GL#');
929    str := fnd_flex_key_api.find_structure(kff, l_chart);
930    fnd_flex_key_api.get_segments(kff, str, TRUE, nsegs, seg_list);
931 
932   /*
933    * When the flexfield is defined, the order the segments are displayed
934    * and the order of segment columns need not be the same.  For example, a
935    * flexfield may contain 3 segments, which are defined as segment 1, 4 and 3.
936    * The following loop re-arranges the order of the flexfield segments
937    * so that the AOL routine can process it.
938    */
939    for i in 1..nsegs loop
940      seg := fnd_flex_key_api.find_segment(kff, str, seg_list(i));
941      j := 1;
942      while (j <= tmp_seg_arr.count) loop
943          if (seg.column_name = 'SEGMENT' || j) THEN
944             segarray(i) := tmp_seg_arr(j).colvalue;
945             j := tmp_seg_arr.count + 2;
946          else
947             j := j + 1;
948          end if;
949      end loop;
950      if (j = tmp_seg_arr.count + 1) then
951        j := j;
952        --
953        -- Error raise exception.
954        --
955      end if;
956    end loop;
957 
958    --
959    -- Now we have the all segment values in correct order in segarray.
960    l_acctid_validated := TRUE; --Bug#4247753
961    --
962    if fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => 'SQLGL',
963                                       KEY_FLEX_CODE => 'GL#',
964                                       STRUCTURE_NUMBER => l_chart,
965                                       N_SEGMENTS => nsegs,
966                                       VALIDATION_DATE => l_trxdate,/*Bug#5176266*/
967                                       SEGMENTS => segarray,
968                                       COMBINATION_ID => l_acctid)
969    then
970 
971    /* Bug#4247753. Added call to 'validate_acctid' */
972    IF ( NOT validate_acctid(l_acctid , p_orgid, l_trxdate) ) THEN
973      RETURN FALSE;
974    END IF;
975 
976      IF (l_debug = 1) THEN
977         inv_log_util.trace('Distribution acct id : ' || x_acctid, 'INV_TXN_MANAGER_GRP','1');
978      END IF;
979      x_acctid := l_acctid;
980      RETURN TRUE;
981    else
982      l_error_exp := substr(FND_MESSAGE.get,1,240);
983      IF (l_debug = 1) THEN
984         inv_log_util.trace('Distribution acct id error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1');
985      END IF;
986      RETURN FALSE;
987    end if;
988    --x_acctid := fnd_flex_ext.concatenate_segments(nsegs,segarray, str.segment_separator);
989 
990 EXCEPTION
991    WHEN NO_DATA_FOUND THEN
992         FND_MESSAGE.set_name('INV','INV-Database corrupt');
993         FND_MESSAGE.set_token('ROUTINE','getacctid');
994         RETURN FALSE;
995    WHEN OTHERS THEN
996       l_error_exp := substr(fnd_flex_key_api.message(),1,240);
997       IF (l_debug = 1) THEN
998          inv_log_util.trace('Error in getacctid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
999          inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1000       END IF;
1001       x_acctid := NULL;
1002       RETURN FALSE;
1003 END getacctid;
1004 
1005 /******************************************************************
1006 -- Procedure
1007 --   getitemid
1008 -- Description
1009 --   find the item_id using the flex field segments
1010 -- Output Parameters
1011 --   x_item_id   locator or null if error occurred
1012  ******************************************************************/
1013 FUNCTION getitemid(x_itemid out NOCOPY NUMBER, p_orgid NUMBER, p_rowid VARCHAR2)
1014 RETURN BOOLEAN
1015    IS
1016       l_nseg           NUMBER;
1017       l_seglist        fnd_flex_key_api.segment_list;
1018       l_segs1          fnd_flex_ext.segmentarray;
1019       l_fftype         fnd_flex_key_api.flexfield_type;
1020       l_ffstru         fnd_flex_key_api.structure_type;
1021       l_segment_type   fnd_flex_key_api.segment_type;
1022       -- Local array to hold the data for getting the cancatenated segment.
1023       l_segmentarray   fnd_flex_ext.segmentarray;
1024       l_itemsegs       VARCHAR2(32000);
1025       l_delim          VARCHAR2(1);
1026       l_result         BOOLEAN := FALSE;
1027 BEGIN
1028    -- Getting the segments from MTI
1029    SELECT
1030         ITEM_SEGMENT1,
1031         ITEM_SEGMENT2,
1032         ITEM_SEGMENT3,
1033         ITEM_SEGMENT4,
1034         ITEM_SEGMENT5,
1035         ITEM_SEGMENT6,
1036         ITEM_SEGMENT7,
1037         ITEM_SEGMENT8,
1038         ITEM_SEGMENT9,
1039         ITEM_SEGMENT10,
1040         ITEM_SEGMENT11,
1041         ITEM_SEGMENT12,
1042         ITEM_SEGMENT13,
1043         ITEM_SEGMENT14,
1044         ITEM_SEGMENT15,
1045         ITEM_SEGMENT16,
1046         ITEM_SEGMENT17,
1047         ITEM_SEGMENT18,
1048         ITEM_SEGMENT19,
1049         ITEM_SEGMENT20
1050    INTO
1051         l_segs1(1),
1052         l_segs1(2),
1053         l_segs1(3),
1054         l_segs1(4),
1055         l_segs1(5),
1056         l_segs1(6),
1057         l_segs1(7),
1058         l_segs1(8),
1059         l_segs1(9),
1060         l_segs1(10),
1061         l_segs1(11),
1062         l_segs1(12),
1063         l_segs1(13),
1064         l_segs1(14),
1065         l_segs1(15),
1066         l_segs1(16),
1067         l_segs1(17),
1068         l_segs1(18),
1069         l_segs1(19),
1070         l_segs1(20)
1071    FROM mtl_transactions_interface mti
1072    WHERE mti.rowid = p_rowid;
1073 
1074    -- find flex field type
1075    l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MSTK');
1076 
1077    -- find flex structure type
1078    l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
1079 
1080    -- find segment list for the key flex field
1081    fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
1082 
1083     -- find segment delimiter
1084        l_delim := l_ffstru.segment_separator;
1085 
1086    -- get the corresponding column for all segments
1087    FOR l_loop IN 1..l_nseg LOOP
1088       l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(l_loop));
1089       -- Bug Fix#4747090
1090       --l_segmentarray contains data in the order flexfield is defined. Used in creating cancatenated segments for validation.
1091       l_segmentarray(l_loop) := l_segs1(To_number(Substr(l_segment_type.column_name, 8)));
1092    END LOOP;
1093    -- Bug Fix#4747090
1094    -- Gets the encoded cancatenated string
1095    l_itemsegs := fnd_flex_ext.concatenate_segments(n_segments => l_nseg,
1096                                                    segments   => l_segmentarray,
1097                                                    delimiter  => l_delim);
1098    l_result := FND_FLEX_KEYVAL.Validate_Segs(
1099                  OPERATION        => 'FIND_COMBINATION',
1100                  APPL_SHORT_NAME  => 'INV',
1101                  KEY_FLEX_CODE  => 'MSTK',
1102                  STRUCTURE_NUMBER  => 101,
1103                  CONCAT_SEGMENTS  => l_itemsegs,
1104                  VALUES_OR_IDS  => 'I',
1105                  DATA_SET  => p_orgid,
1106                  SELECT_COMB_FROM_VIEW => 'MTL_SYSTEM_ITEMS_FVL') ;
1107 
1108    if l_result then
1109        x_itemid := fnd_flex_keyval.combination_id;
1110    else
1111        x_itemid := NULL;
1112        l_error_exp := substr(fnd_flex_key_api.message(),1,240);
1113        inv_log_util.trace('Error in getitemid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
1114        inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1115    end if;
1116    return l_result;
1117 
1118 END getitemid;
1119 
1120 
1121  /******************************************************************
1122  -- Procedure
1123  --   getsrcid
1124  -- Description
1125  --   find the Source ID using the flex field segments
1126  -- Output Parameters
1127  --   x_trxsrc   transaction source id or null if error occurred
1128  ******************************************************************/
1129 FUNCTION getsrcid(x_trxsrc OUT NOCOPY NUMBER, p_srctype IN NUMBER, p_orgid IN NUMBER, p_rowid IN VARCHAR2)
1130 RETURN BOOLEAN
1131    IS
1132       l_nseg           NUMBER;
1133       l_seglist        fnd_flex_key_api.segment_list;
1134       l_fftype         fnd_flex_key_api.flexfield_type;
1135       l_ffstru         fnd_flex_key_api.structure_type;
1136       l_segment_type   fnd_flex_key_api.segment_type;
1137       l_structure_list fnd_flex_key_api.structure_list;
1138       l_chart          NUMBER;
1139       segarray   fnd_flex_ext.segmentarray;
1140       tmp_seg_arr     seg_arr_type;
1141       i                      NUMBER;
1142       j                NUMBER;
1143       l_app_shortname  VARCHAR2(20);
1144       l_struct_number  NUMBER;
1145       l_flex_code      VARCHAR2(20);
1146       seg        fnd_flex_key_api.segment_type;
1147       l_result boolean; -- Added for bug 3346767
1148 
1149 BEGIN
1150    SELECT DSP_SEGMENT1, DSP_SEGMENT2, DSP_SEGMENT3,
1151          DSP_SEGMENT4, DSP_SEGMENT5, DSP_SEGMENT6,
1152          DSP_SEGMENT7, DSP_SEGMENT8, DSP_SEGMENT9,
1153          DSP_SEGMENT10, DSP_SEGMENT11, DSP_SEGMENT12,
1154          DSP_SEGMENT13, DSP_SEGMENT14, DSP_SEGMENT15,
1155          DSP_SEGMENT16, DSP_SEGMENT17, DSP_SEGMENT18,
1156          DSP_SEGMENT19, DSP_SEGMENT20, DSP_SEGMENT21,
1157          DSP_SEGMENT22, DSP_SEGMENT23, DSP_SEGMENT24,
1158          DSP_SEGMENT25, DSP_SEGMENT26, DSP_SEGMENT27,
1159          DSP_SEGMENT28, DSP_SEGMENT29, DSP_SEGMENT30
1160     INTO tmp_seg_arr(1).colvalue, tmp_seg_arr(2).colvalue, tmp_seg_arr(3).colvalue,
1161          tmp_seg_arr(4).colvalue, tmp_seg_arr(5).colvalue, tmp_seg_arr(6).colvalue,
1162          tmp_seg_arr(7).colvalue, tmp_seg_arr(8).colvalue, tmp_seg_arr(9).colvalue,
1163          tmp_seg_arr(10).colvalue, tmp_seg_arr(11).colvalue, tmp_seg_arr(12).colvalue,
1164          tmp_seg_arr(13).colvalue, tmp_seg_arr(14).colvalue, tmp_seg_arr(15).colvalue,
1165          tmp_seg_arr(16).colvalue, tmp_seg_arr(17).colvalue, tmp_seg_arr(18).colvalue,
1166          tmp_seg_arr(19).colvalue, tmp_seg_arr(20).colvalue, tmp_seg_arr(21).colvalue,
1167          tmp_seg_arr(22).colvalue, tmp_seg_arr(23).colvalue, tmp_seg_arr(24).colvalue,
1168          tmp_seg_arr(25).colvalue, tmp_seg_arr(26).colvalue, tmp_seg_arr(27).colvalue,
1169          tmp_seg_arr(28).colvalue, tmp_seg_arr(29).colvalue, tmp_seg_arr(30).colvalue
1170     FROM MTL_TRANSACTIONS_INTERFACE
1171    WHERE ROWID = p_rowid;
1172 
1173    SELECT CHART_OF_ACCOUNTS_ID
1174      INTO l_chart
1175      FROM ORG_ORGANIZATION_DEFINITIONS
1176     WHERE ORGANIZATION_ID = p_orgid;
1177 
1178 
1179    -- find flex field type
1180    -- find flex structure type
1181    l_app_shortname := 'INV';
1182    l_struct_number := 101;
1183    IF (p_srctype = 2) OR (p_srctype = 8) THEN
1184      l_flex_code := 'MKTS';
1185    ELSE
1186      IF (p_srctype = 3) THEN
1187        l_app_shortname := 'SQLGL';
1188        l_flex_code := 'GL#';
1189        l_struct_number := l_chart;
1190      ELSE
1191        IF (p_srctype = 6) THEN
1192          l_flex_code := 'MDSP';
1193        END IF;
1194      END IF;
1195    END IF;
1196 
1197    l_fftype := fnd_flex_key_api.find_flexfield(l_app_shortname,l_flex_code);
1198    l_ffstru := fnd_flex_key_api.find_structure(l_fftype, l_struct_number);
1199 
1200    -- find segment list for the key flex field
1201    fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
1202 
1203   /*
1204    * When the flexfield is defined, the order the segments are displayed
1205    * and the order of segment columns need not be the same.  For example, a
1206    * flexfield may contain 3 segments, which are defined as segment 1, 4 and 3.
1207    * The following loop re-arranges the order of the flexfield segments
1208    * so that the AOL routine can process it.
1209    */
1210    for i in 1..l_nseg loop
1211      seg := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(i));
1212      j := 1;
1213      while (j <= tmp_seg_arr.count) loop
1214          if (seg.column_name = 'SEGMENT' || j) THEN
1215             segarray(i) := tmp_seg_arr(j).colvalue;
1216             j := tmp_seg_arr.count + 2;
1217          else
1218             j := j + 1;
1219          end if;
1220      end loop;
1221      if (j = tmp_seg_arr.count + 1) then
1222        j := j;
1223        --
1224        -- Error raise exception.
1225        --
1226      end if;
1227    end loop;
1228 
1229    --
1230    -- Now we have the all segment values in correct order in segarray.
1231    --
1232    -- Bug 3273172 Added DATA_SET => p_orgid to the below FND call
1233    -- Changed for bug 3346767
1234    IF (p_srctype = 6) THEN
1235         l_result := fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => l_app_shortname,
1236                                       KEY_FLEX_CODE => l_flex_code,
1237                                       STRUCTURE_NUMBER => l_struct_number,
1238                                       VALIDATION_DATE => sysdate,
1239                                       N_SEGMENTS => l_nseg,
1240                                       SEGMENTS => segarray,
1241                                       COMBINATION_ID => x_trxsrc,
1242                                       DATA_SET => p_orgid);
1243   ELSE
1244        l_result := fnd_flex_ext.get_combination_id(APPLICATION_SHORT_NAME => l_app_shortname,
1245                                       KEY_FLEX_CODE => l_flex_code,
1246                                       STRUCTURE_NUMBER => l_struct_number,
1247                                       VALIDATION_DATE => sysdate,
1248                                       N_SEGMENTS => l_nseg,
1249                                       SEGMENTS => segarray,
1250                                       COMBINATION_ID => x_trxsrc);
1251   END IF;
1252    if l_result then
1253      IF (l_debug = 1) THEN
1254         inv_log_util.trace('Transaction Source ID : ' || x_trxsrc, 'INV_TXN_MANAGER_GRP','1');
1255      END IF;
1256      RETURN TRUE;
1257    else
1258      l_error_exp := substr(FND_MESSAGE.get,1,240);
1259      IF (l_debug = 1) THEN
1260         inv_log_util.trace('Transaction Source ID error '|| l_error_exp, 'INV_TXN_MANAGER_GRP','1'
1261 );
1262      END IF;
1263      RETURN FALSE;
1264    end if;
1265 
1266 EXCEPTION
1267    WHEN OTHERS THEN
1268       l_error_exp := substr(fnd_flex_key_api.message(),1,240);
1269       IF (l_debug = 1) THEN
1270          inv_log_util.trace('Error in getsrcid : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
1271          inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1272       END IF;
1273       x_trxsrc := NULL;
1274       return FALSE;
1275 
1276 END getsrcid;
1277 
1278 /******************************************************************
1279  *
1280  * errupdate()
1281  *
1282  ******************************************************************/
1283 
1284 /* Bug 5343678 rowid is a keyword so we should never pass it as parameter */
1285 /* Also passed the reqd number of parameters in all places just to avoid confusion as
1286    parameter name is not prefixed in any of the calls */
1287 
1288 PROCEDURE errupdate(p_rowid IN VARCHAR2 DEFAULT NULL, lot_rowid IN VARCHAR2 DEFAULT NULL)
1289 IS
1290 
1291  l_userid  NUMBER := -1; -- = prg_info.userid;
1292  l_reqstid  NUMBER := -1; -- = prg_info.reqstid;
1293  l_applid  NUMBER := -1; -- = prg_info.appid;
1294  l_progid  NUMBER := -1; -- = prg_info.progid;
1295  l_loginid  NUMBER := -1; --= prg_info.loginid;
1296 BEGIN
1297 
1298     -- WHENEVER NOT FOUND CONTINUE;
1299     --Jalaj Srivastava Bug 4969885
1300     --if errors are for lot record then also update MLTI
1301     IF (lot_rowid IS NOT NULL) THEN
1302 
1303         UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
1304           SET LAST_UPDATE_DATE    = SYSDATE,
1305               LAST_UPDATED_BY     = l_userid,
1306               LAST_UPDATE_LOGIN   = l_loginid,
1307               PROGRAM_UPDATE_DATE = SYSDATE,
1308               ERROR_CODE          = substrb(l_error_code,1,240)
1309           WHERE ROWID = lot_rowid;
1310     END IF;
1311   IF (p_rowid IS NOT NULL) THEN
1312     UPDATE MTL_TRANSACTIONS_INTERFACE
1313        SET ERROR_CODE = substrb(l_error_code,1,240),
1314            ERROR_EXPLANATION = substrb(l_error_exp,1,240),
1315            LAST_UPDATE_DATE = sysdate,
1316            LAST_UPDATED_BY = l_userid,
1317            LAST_UPDATE_LOGIN = l_loginid,
1318            PROGRAM_UPDATE_DATE = SYSDATE,
1319            PROCESS_FLAG = 3,
1320            LOCK_FLAG = 2
1321      WHERE ROWID = p_rowid;
1322   END IF;
1323     return;
1324 
1325 EXCEPTION
1326   WHEN OTHERS THEN
1327         RETURN;
1328 END errupdate;
1329 
1330 
1331 
1332 /******************************************************************
1333 -- Procedure
1334 --   derive_segment_ids
1335 -- Description
1336 --   derive segment-ids  based on segment values
1337 -- Output Parameters
1338 --
1339  ******************************************************************/
1340 PROCEDURE derive_segment_ids(p_header_id NUMBER, x_return_status OUT NOCOPY VARCHAR2,
1341                         x_msg_count OUT NOCOPY NUMBER, x_msg_data OUT NOCOPY VARCHAR2)
1342 IS
1343 CURSOR c_mti IS
1344        SELECT inventory_item_id,
1345               organization_id,
1346               distribution_account_id,
1347               transaction_source_type_id,
1348               transaction_source_id,
1349               transaction_date,  --Bug#5176266.
1350               rowid
1351        FROM MTL_TRANSACTIONS_INTERFACE
1352        WHERE transaction_header_id = p_header_id
1353          AND process_flag = 1
1354          AND (inventory_item_id is NULL OR distribution_account_id is NULL
1355               OR
1356              (transaction_source_id is NULL AND transaction_source_type_id in (2,3,6,8))); --Bug 2971400
1357 
1358 l_itemid  MTL_TRANSACTIONS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
1359 l_acctid  MTL_TRANSACTIONS_INTERFACE.DISTRIBUTION_ACCOUNT_ID%TYPE;
1360 l_srctype  MTL_TRANSACTIONS_INTERFACE.TRANSACTION_SOURCE_TYPE_ID%TYPE;
1361 l_trxsrc  MTL_TRANSACTIONS_INTERFACE.TRANSACTION_SOURCE_ID%TYPE;
1362 l_trxdate MTL_TRANSACTIONS_INTERFACE.TRANSACTION_DATE%TYPE;  --Bug#5176266.
1363 BEGIN
1364 
1365     FOR c_mti_row in c_mti LOOP
1366       l_acctid := c_mti_row.distribution_account_id;
1367       l_itemid := c_mti_row.inventory_item_id;
1368       l_srctype := c_mti_row.transaction_source_type_id;
1369       l_trxsrc := c_mti_row.transaction_source_id;
1370       l_trxdate :=c_mti_row.transaction_date;  --Bug#5176266.
1371 
1372       IF (l_itemid IS NULL) THEN
1373             IF (NOT getitemid(l_itemid, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1374                 l_error_exp := FND_MESSAGE.get;
1375 
1376                 FND_MESSAGE.set_name('INV', 'INV_INT_ITMSEGCODE');
1377                 l_error_code := FND_MESSAGE.get;
1378 
1379                 errupdate(c_mti_row.rowid,null);
1380             END IF;
1381       END IF;
1382 /* Bug 3273172,moved the below code here
1383   for Account, Account Alias source is populated first before getting the account */
1384         IF ( (  l_srctype=INV_Globals.G_SourceType_SalesOrder OR
1385                 l_srctype = INV_Globals.G_SourceType_Account OR
1386                 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
1387                 l_srctype = INV_Globals.G_SourceType_IntOrder)
1388               AND (l_trxsrc is NULL) ) THEN
1389               IF ( NOT getsrcid(l_trxsrc, l_srctype, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1390                   l_error_exp := FND_MESSAGE.get;
1391 
1392                   FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
1393                   l_error_code := FND_MESSAGE.get;
1394 
1395                   errupdate(c_mti_row.rowid,null);
1396                END IF;
1397         END IF;
1398        l_acctid_validated := FALSE; --Bug#4247753
1399       IF (l_acctid IS NULL) THEN
1400           IF (l_srctype = 3 OR l_srctype = 6) THEN
1401               IF (l_srctype = 6) THEN
1402                       SELECT DISTRIBUTION_ACCOUNT
1403                         INTO l_acctid
1404                         FROM MTL_GENERIC_DISPOSITIONS
1405                        WHERE ORGANIZATION_ID = c_mti_row.organization_id
1406                          AND DISPOSITION_ID = l_trxsrc;
1407               ELSE
1408                   l_acctid := l_trxsrc;
1409               END IF;
1410 
1411           ELSE
1412               IF (NOT getacctid(l_acctid, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1413                  --l_error_exp := FND_MESSAGE.get; --Bug#4247753. Error Explaination is
1414                                                    --already set in getacctid()
1415                  FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
1416                  l_error_code := FND_MESSAGE.get;
1417 
1418                  errupdate(c_mti_row.rowid,null);
1419               END IF;
1420           END IF;
1421       END IF;
1422 
1423      --Bug#4247753  calling the functon, validate_acctid() for validating the Account combination ID
1424       IF ( l_acctid IS NOT NULL  AND  (NOT l_acctid_validated)) THEN
1425         IF ( NOT validate_acctid(l_acctid, c_mti_row.organization_id, l_trxdate)) THEN
1426            FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
1427            l_error_code := FND_MESSAGE.get;
1428            errupdate(c_mti_row.rowid,null);
1429         END IF;
1430       END IF;
1431 
1432 /* Bug 2971400 populating transaction source id */
1433 /* Bug 3273172,Moving the below code to above
1434         IF ( (  l_srctype=INV_Globals.G_SourceType_SalesOrder OR
1435                 l_srctype = INV_Globals.G_SourceType_Account OR
1436                 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
1437                 l_srctype = INV_Globals.G_SourceType_IntOrder)
1438               AND (l_trxsrc is NULL) ) THEN
1439               IF ( NOT getsrcid(l_trxsrc, l_srctype, c_mti_row.organization_id, c_mti_row.rowid)) THEN
1440                   l_error_exp := FND_MESSAGE.get;
1441 
1442                   FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
1443                   l_error_code := FND_MESSAGE.get;
1444 
1445                   errupdate(c_mti_row.rowid,null);
1446                END IF;
1447 
1448         END IF; */
1449 
1450       UPDATE MTL_TRANSACTIONS_INTERFACE
1451       SET inventory_item_id = l_itemid,
1452           distribution_account_id = l_acctid,
1453           transaction_source_id = l_trxsrc
1454       WHERE rowid = c_mti_row.rowid;
1455 
1456     END LOOP;
1457 
1458 EXCEPTION
1459     WHEN OTHERS THEN
1460        IF (l_debug = 1) THEN
1461           inv_log_util.trace('Error in derive_segment_ids : ' || l_error_exp, 'INV_TXN_MANAGER_GRP ','1');
1462           inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
1463        END IF;
1464        x_return_status := FND_API.G_RET_STS_ERROR;
1465 
1466 END derive_segment_ids;
1467 
1468 -----------------------------------------------------------------------
1469 -- Name : validate_quantities
1470 -- Desc : This procedure is used to validate transaction quantity2
1471 --
1472 -- I/P Params :
1473 --     All the relevant transaction details :
1474 --        - organization id
1475 --        - item_id
1476 --        - lot, revision, subinventory
1477 --        - transaction quantities
1478 -- O/P Params :
1479 --     x_rerturn_status.
1480 -- RETURN VALUE :
1481 --   TRUE : IF the transaction is valid regarding Quantity2 and lot indivisible
1482 --   FALSE : IF the transaction is NOT valid regarding Quantity2 and lot indivisible
1483 --
1484 -- HISTORY
1485 --   Jalaj Srivastava Bug 4969885
1486 --     Added parameter p_lot_rowid
1487 --   Jalaj Srivastava Bug 5446542
1488 --     Check for lot indivisibility here
1489 --     Make sure that lot indivisibility api is called
1490 --     with primary quantity
1491 -----------------------------------------------------------------------
1492 FUNCTION validate_quantities(
1493   p_rowid                IN  VARCHAR2
1494 , p_lot_rowid            IN  VARCHAR2
1495 , p_transaction_type_id  IN  NUMBER
1496 , p_organization_id      IN  NUMBER
1497 , p_inventory_item_id    IN  NUMBER
1498 , p_revision             IN  VARCHAR2
1499 , p_subinventory_code    IN  VARCHAR2
1500 , p_locator_id           IN  NUMBER
1501 , p_lot_number           IN  VARCHAR2
1502 , p_transaction_quantity IN  OUT  NOCOPY NUMBER
1503 , p_transaction_uom      IN  VARCHAR2
1504 , p_secondary_quantity   IN  OUT  NOCOPY NUMBER
1505 , p_secondary_uom_code   IN  OUT  NOCOPY VARCHAR2)
1506 RETURN BOOLEAN
1507 IS
1508 l_lot_divisible_flag    VARCHAR2(1);
1509 l_tracking_quantity_ind VARCHAR2(30);
1510 l_secondary_default_ind VARCHAR2(30);
1511 l_secondary_uom_code    VARCHAR2(3);
1512 l_secondary_qty         NUMBER;
1513 l_transaction_quantity  NUMBER;
1514 l_lot_indiv_trx_valid   BOOLEAN;
1515 l_msg                   VARCHAR2(4000);
1516 l_msg_index_out         pls_integer;
1517 l_return_status         varchar2(1);
1518 l_msg_data              varchar2(4000);
1519 l_msg_count             pls_integer;
1520 l_primary_uom_code      VARCHAR2(3);--Bug 5446542
1521 l_primary_quantity      NUMBER;--Bug 5446542
1522 
1523 CURSOR get_item_details( org_id IN NUMBER
1524                        , item_id IN NUMBER) IS
1525 SELECT lot_divisible_flag
1526 , tracking_quantity_ind
1527 , secondary_default_ind
1528 , secondary_uom_code
1529 , primary_uom_code /* Bug 5446542 */
1530 FROM mtl_system_items
1531 WHERE organization_id = org_id
1532 AND inventory_item_id = item_id;
1533 
1534 BEGIN
1535 IF (l_debug is null)
1536 THEN
1537        l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1538 END IF;
1539 
1540 IF (l_debug = 1) THEN
1541   inv_log_util.trace('validate_quantities: Start ', 'INV_TXN_MANAGER_GRP', 9);
1542   inv_log_util.trace('org id='||to_char(p_organization_id)||' item id='||to_char(p_inventory_item_id)||' rev='||p_revision, 'INV_TXN_MANAGER_GRP', 9);
1543   inv_log_util.trace('txn uom='||p_transaction_uom||' qty='||to_char(p_transaction_quantity), 'INV_TXN_MANAGER_GRP', 9);
1544   inv_log_util.trace('sec uom='||p_secondary_uom_code||' qty='||to_char(p_secondary_quantity), 'INV_TXN_MANAGER_GRP', 9);
1545 END IF;
1546 
1547 
1548 /* =======================================================================
1549   Init variables
1550  =======================================================================  */
1551 OPEN get_item_details( p_organization_id
1552                      , p_inventory_item_id);
1553 FETCH get_item_details
1554  INTO l_lot_divisible_flag
1555     , l_tracking_quantity_ind
1556     , l_secondary_default_ind
1557     , l_secondary_uom_code
1558     , l_primary_uom_code;/* Bug 5446542 */
1559 --Item has already been validated
1560 --no need to check for no_data_found
1561 CLOSE get_item_details;
1562 --{
1563 IF (l_tracking_quantity_ind = 'PS') THEN
1564 
1565    /** Quantity  Validation **/
1566    IF (p_transaction_quantity IS NULL AND p_secondary_quantity IS NULL) THEN
1567       IF (l_debug = 1) THEN
1568         inv_log_util.trace('validate_quantities: both transaction and secondary quantities are null', 'INV_TXN_MANAGER_GRP', 9);
1569       END IF;
1570       loaderrmsg('INV_INT_QTYCODE','INV_INT_QTYCODE');
1571       errupdate(p_rowid, p_lot_rowid);
1572       return false;
1573    END IF;
1574 
1575    -- the item is DUOM controlled
1576 
1577    /** UOM Validation **/
1578    IF (p_secondary_uom_code <> l_secondary_uom_code) THEN
1579       IF (l_debug = 1) THEN
1580         inv_log_util.trace('validate_quantities: sec uom passed in not same as item sec uom', 'INV_TXN_MANAGER_GRP', 9);
1581       END IF;
1582       loaderrmsg('INV_INCORRECT_SECONDARY_UOM','INV_INCORRECT_SECONDARY_UOM');
1583       errupdate(p_rowid, p_lot_rowid);
1584       return false;
1585    END IF;
1586    -- Set the default UOM2 if missing
1587    IF (p_secondary_uom_code IS NULL) THEN
1588       p_secondary_uom_code := l_secondary_uom_code;
1589    END IF;
1590    IF (l_debug = 1) THEN
1591         inv_log_util.trace('validate_quantities: assigned sec uom='||p_secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
1592    END IF;
1593     -- Set the Qty2 from Qty1 if missing:
1594     --{
1595     IF (p_secondary_quantity IS NULL) THEN
1596        l_secondary_qty := INV_CONVERT.INV_UM_CONVERT
1597          ( item_id         => p_inventory_item_id
1598           ,lot_number      => p_lot_number
1599           ,organization_id => p_organization_id
1600           ,precision       => 5
1601           ,from_quantity   => p_transaction_quantity
1602           ,from_unit       => p_transaction_uom
1603           ,to_unit         => p_secondary_uom_code
1604           ,from_name       => NULL
1605           ,to_name         => NULL);
1606 
1607        IF (l_secondary_qty = -99999) THEN
1608           IF (l_debug = 1) THEN
1609              inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT error while calculating sec qty', 'INV_TXN_MANAGER_GRP', 9);
1610           END IF;
1611           loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1612           errupdate(p_rowid, p_lot_rowid);
1613           return false;
1614        END IF;
1615        p_secondary_quantity := l_secondary_qty;
1616        IF (l_debug = 1) THEN
1617          inv_log_util.trace('validate_quantities: new secondary qty is: '|| l_secondary_qty , 'INV_TXN_MANAGER_GRP', 9);
1618        END IF;
1619      END IF;--}
1620 
1621     -- Set the Qty1 from Qty2 if missing:
1622     --{
1623     IF (p_transaction_quantity IS NULL) THEN
1624        l_transaction_quantity := INV_CONVERT.INV_UM_CONVERT
1625                ( item_id         => p_inventory_item_id
1626                , lot_number      => p_lot_number
1627                , organization_id => p_organization_id
1628                , precision       => 5
1629                , from_quantity   => p_secondary_quantity
1630                , from_unit       => p_secondary_uom_code
1631                , to_unit         => p_transaction_uom
1632                , from_name       => NULL
1633                , to_name         => NULL);
1634 
1635        IF (l_transaction_quantity = -99999) THEN
1636           IF (l_debug = 1) THEN
1637             inv_log_util.trace('validate_quantities:  INV_CONVERT.INV_UM_CONVERT ERROR while calculating transaction quantity', 'INV_TXN_MANAGER_GRP', 9);
1638           END IF;
1639           loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1640           errupdate(p_rowid, p_lot_rowid);
1641           return false;
1642        END IF;
1643        p_transaction_quantity := l_transaction_quantity;
1644        IF (l_debug = 1) THEN
1645           inv_log_util.trace('validate_quantities: new transaction qty is: '|| l_transaction_quantity , 'INV_TXN_MANAGER_GRP', 9);
1646        END IF;
1647     END IF;--}
1648 
1649   --Jalaj Srivastava Bug 4969885
1650   --We will not check for deviation
1651   --calling programs and customers should validate for deviation
1652   --before loading in mti
1653 ELSE
1654   --tracking is in primary
1655   p_secondary_quantity := NULL;
1656   p_secondary_uom_code := NULL;
1657 END IF;--}
1658 
1659   --Jalaj Srivastava Bug 5446542
1660   --Lot indivisibility check will be done here
1661   -- Lot Indivisible Validation
1662   --{
1663   IF (l_lot_divisible_flag = 'N') THEN
1664       --Jalaj Srivastava Bug 5446542
1665       --if txn uom is not same as the primary uom then
1666       --convert txn qty to prim qty.
1667       IF (l_primary_uom_code <> p_transaction_uom) THEN
1668         l_primary_quantity := INV_CONVERT.INV_UM_CONVERT
1669           ( item_id         => p_inventory_item_id
1670            ,lot_number      => p_lot_number
1671            ,organization_id => p_organization_id
1672            ,precision       => 5
1673            ,from_quantity   => p_transaction_quantity
1674            ,from_unit       => p_transaction_uom
1675            ,to_unit         => l_primary_uom_code
1676            ,from_name       => NULL
1677            ,to_name         => NULL);
1678 
1679         IF (l_primary_quantity = -99999) THEN
1680           IF (l_debug = 1) THEN
1681              inv_log_util.trace('validate_quantities: INV_CONVERT.INV_UM_CONVERT error while calculating primary qty', 'INV_TXN_MANAGER_GRP', 9);
1682           END IF;
1683           loaderrmsg('INV_NO_CONVERSION_ERR','INV_NO_CONVERSION_ERR');
1684           errupdate(p_rowid, p_lot_rowid);
1685           return false;
1686         END IF;
1687       ELSE
1688         l_primary_quantity := p_transaction_quantity;
1689       END IF;
1690 
1691       l_lot_indiv_trx_valid := INV_LOT_API_PUB.VALIDATE_LOT_INDIVISIBLE
1692             ( p_api_version          => 1.0
1693             , p_init_msg_list        => fnd_api.g_false
1694             , p_transaction_type_id  => p_transaction_type_id
1695             , p_organization_id      => p_organization_id
1696             , p_inventory_item_id    => p_inventory_item_id
1697             , p_revision             => p_revision
1698             , p_subinventory_code    => p_subinventory_code
1699             , p_locator_id           => p_locator_id
1700             , p_lot_number           => p_lot_number
1701             , p_primary_quantity     => l_primary_quantity /* Bug 5446542: pass primary qty and not txn qty */
1702             , p_qoh                  => NULL
1703             , p_atr                  => NULL
1704             , x_return_status        => l_return_status
1705             , x_msg_count            => l_msg_count
1706             , x_msg_data             => l_msg_data);
1707 
1708        IF (NOT l_lot_indiv_trx_valid) THEN
1709           --the transaction is not valid regarding lot indivisible:
1710           IF (l_debug = 1) THEN
1711             inv_log_util.trace('validate_quantities: Failed check for lot indivisibility', 'INV_TXN_MANAGER_GRP', 9);
1712           END IF;
1713           RAISE FND_API.G_EXC_ERROR;
1714        END IF;
1715 
1716        IF (l_debug = 1) THEN
1717          inv_log_util.trace('validate_quantities: passed check for lot indivisibility', 'INV_TXN_MANAGER_GRP', 9);
1718        END IF;
1719 
1720 
1721   END IF;--}    -- l_lot_divisible_flag = 'N'
1722 
1723 IF (l_debug = 1) THEN
1724         inv_log_util.trace('validate_quantities: End .... ', 'INV_TXN_MANAGER_GRP', 9);
1725 END IF;
1726 
1727 RETURN TRUE;
1728 
1729 EXCEPTION
1730 WHEN FND_API.G_EXC_ERROR THEN
1731     FND_MSG_PUB.Get(
1732     p_msg_index     => 1,
1733     p_data          => l_msg,
1734     p_encoded       => FND_API.G_FALSE,
1735     p_msg_index_out => l_msg_index_out);
1736 
1737     l_error_exp  := l_msg;
1738     l_error_code := l_msg;
1739 
1740     IF (l_debug = 1) THEN
1741       inv_log_util.trace('validate_quantities: FND_API.G_EXC_ERROR ' || l_error_code, 'INV_TXN_MANAGER_GRP', 9);
1742     END IF;
1743 
1744     errupdate(p_rowid, p_lot_rowid);
1745     RETURN FALSE;
1746 
1747 WHEN OTHERS THEN
1748   IF (l_debug = 1) THEN
1749     inv_log_util.trace('validate_quantities: when others'||substr(sqlerrm,1,240),'INV_TXN_MANAGER_GRP',1);
1750   END IF;
1751   RETURN FALSE;
1752 
1753 END validate_quantities;
1754 
1755 
1756 /******************************************************************
1757  *
1758  * validate_group
1759  * Validate a group of MTI records in a batch together
1760 
1761  * J-dev (WIP related validations)
1762  *  For patchet J, wip desktop transactions will be inserted into MTI,
1763  *  validated by INV and moved to MMTT. Since WIP already does some
1764  *  validations, we will by-pass some validation done here (based on the
1765  *  variable l_validation_full)
1766  *  The validation to be done for WIP desktop are:
1767  *  MTI  WIP Validation
1768  *  DESKTOP WIP TRANSACTIONS
1769  *  1. Flow Schedule will only exist for WIP Transactions
1770  *  2. Derive Transaction_action_id and Transaction_source_type_id
1771  *  from transaction_type_id
1772  *  3. Validate Shippable_flag records in MTI have transaction_enabled items.
1773  *  4. Validate Inventory_item_flag, Inventory_asset_flag  Costing  Enabled_Flag
1774  *  5. Validate Subinventory_code(disabled ?)
1775  *  6. Validate Transfer Subinventory(disabled ?)
1776  *  7. Validate Restricted Subinventories
1777  *  8. Validate Subinventory for the following:
1778  *  -You cannot issue from non tracked
1779  *  - You cannot transfer from expense sub to asset sub for  asset items
1780  *  -If the expense to asset transfer allowed profile  is set then
1781  *  You cannot issue from a non-tracked sub
1782  *  All other transfers are valid
1783  *  9. Validate Transaction_type_id (disable date )
1784  *  10. Validate Transaction_action(currently we do not support cycle
1785  *  count
1786  *  and some internal orders through MTI)
1787  *  11. Validate Organization(disable date)
1788  *  12. Validate Locators(disable date)
1789  *  13. Validate Revision ( should exists in mtl_item_revisions,
1790  *  we do not validate against disbaled_date for revision).
1791  *  14. Validate Transaction reasons(disable date)
1792  *  15. Validate Transaction Qty Sign
1793  *  16. Validate OverCompletion Trx qtyshould not be -ve or greater
1794  *  than the transaction qty.
1795    *  17. Validate Distribution Account
1796    *(if dist account id is not null or if null,should be an asset item/sub)
1797  *18.  Validate transaction UOM
1798  *19. Validate cost_group, Xfr cost Groups
1799 * 20. Validate VMI: po_asl_attributes
1800   * 21. Validate LPN, Xfr LPN, Contenet LPN
1801   * All Other validations will be by-passed
1802  ******************************************************************/
1803    PROCEDURE validate_group(
1804                             p_header_id NUMBER,
1805                             x_return_status OUT NOCOPY VARCHAR2,
1806                             x_msg_count OUT NOCOPY NUMBER,
1807                             x_msg_data OUT NOCOPY VARCHAR2,
1808                             p_userid NUMBER,
1809                             p_loginid NUMBER,
1810                             p_validation_level NUMBER:= fnd_api.g_valid_level_full)
1811    IS
1812 
1813       srctypeid   NUMBER;
1814       tvu_flow_schedule  VARCHAR2(50);
1815       tev_scheduled_flag NUMBER;
1816       flow_schedule_children   VARCHAR2(50);
1817       l_count  NUMBER;
1818       l_profile VARCHAR2(100);
1819       EXP_TO_AST_ALLOWED NUMBER;
1820       EXP_TYPE_REQUIRED NUMBER;
1821       NUMHOLD NUMBER:=0;
1822       l_validate_full BOOLEAN := TRUE; --J-dev
1823 
1824     -- INVCONV start fabdi
1825     -- new cursor AA2
1826     CURSOR AA2 IS
1827     SELECT
1828        ROWID,
1829        TRANSACTION_TYPE_ID,
1830        ORGANIZATION_ID,
1831        INVENTORY_ITEM_ID,
1832        REVISION,
1833        SUBINVENTORY_CODE,
1834        LOCATOR_ID,
1835        TRANSACTION_QUANTITY,
1836        TRANSACTION_UOM,
1837         SECONDARY_TRANSACTION_QUANTITY,
1838             SECONDARY_UOM_CODE
1839     FROM MTL_TRANSACTIONS_INTERFACE
1840     WHERE TRANSACTION_HEADER_ID = p_header_id
1841       AND PROCESS_FLAG = 1
1842     ORDER BY ORGANIZATION_ID,INVENTORY_ITEM_ID,REVISION,
1843           SUBINVENTORY_CODE,LOCATOR_ID;
1844 
1845         l_transaction_quantity NUMBER ;
1846         l_transaction_uom_code VARCHAR(3);
1847         l_secondary_quantity NUMBER;
1848         l_secondary_uom_code VARCHAR(3);
1849         l_return_status  VARCHAR(3);
1850         l_msg_count NUMBER;
1851         l_msg_data VARCHAR(200);
1852 
1853         l_transaction_type_id NUMBER;
1854     l_organization_id NUMBER;
1855         l_inventory_item_id NUMBER;
1856         l_revision  VARCHAR(3);
1857     l_subinventory_code VARCHAR(10);
1858     l_locator_id     NUMBER;
1859         l_rowid VARCHAR(31);
1860         l_tracking_quantity_ind mtl_system_items_b.tracking_quantity_ind%TYPE;
1861         l_item_secondary_uom_code    mtl_system_items_b.secondary_uom_code%TYPE;
1862 
1863         l_qty_check BOOLEAN;
1864         l_lot_control_code number;
1865 
1866     /* get lot control flag */
1867     CURSOR get_item_info( org_id IN NUMBER
1868                        , item_id IN NUMBER) IS
1869     SELECT lot_control_code, tracking_quantity_ind, secondary_uom_code
1870      FROM mtl_system_items
1871      WHERE organization_id = org_id
1872      AND inventory_item_id = item_id;
1873 
1874         -- INVCONV end fabdi
1875 
1876 
1877    BEGIN
1878       if (l_debug is null) then
1879          l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1880       end if;
1881 
1882 
1883 /*---------------------------------------------------------+
1884 | Derive transaction_action_id and transaction_source_
1885 | type_id
1886 +---------------------------------------------------------*/
1887 
1888     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
1889        SET LAST_UPDATE_DATE = SYSDATE,
1890            LAST_UPDATED_BY = p_userid,
1891            LAST_UPDATE_LOGIN = p_loginid,
1892            PROGRAM_UPDATE_DATE = SYSDATE,
1893            TRANSACTION_ACTION_ID =
1894                (SELECT MTT.TRANSACTION_ACTION_ID
1895                 FROM MTL_TRANSACTION_TYPES MTT
1896                 WHERE MTT.TRANSACTION_TYPE_ID
1897                 = MTI.TRANSACTION_TYPE_ID),
1898            TRANSACTION_SOURCE_TYPE_ID =
1899                (SELECT MTT.TRANSACTION_SOURCE_TYPE_ID
1900                 FROM MTL_TRANSACTION_TYPES MTT
1901                 WHERE MTT.TRANSACTION_TYPE_ID
1902                 = MTI.TRANSACTION_TYPE_ID)
1903      WHERE TRANSACTION_HEADER_ID = p_header_id
1904        AND PROCESS_FLAG = 1;
1905 
1906 
1907   /*+-----------------------------------------------------------------+
1908   | OPM INVCONV umoogala (Bug 4432078)                                |
1909   | Flag error for all unsupported txns for Process Mfg Orgs.         |
1910   +-----------------------------------------------------------------+*/
1911 
1912     loaderrmsg('INV_TXN_NOT_SUPPORTED_CODE', 'INV_TXN_NOT_SUPPORTED_CODE_EXP');
1913 
1914     UPDATE mtl_transactions_interface mti
1915        SET last_update_date = SYSDATE,
1916            last_updated_by = p_userid,
1917            last_update_login = p_loginid,
1918            program_update_date = SYSDATE,
1919            process_flag = 3,
1920            lock_flag = 2,
1921            error_code = substrb(l_error_code,1,240),
1922            error_explanation = substrb(l_error_exp,1,240)
1923      WHERE transaction_header_id = p_header_id
1924        AND process_flag = 1
1925        AND transaction_type_id in (25, 90, 91, 92, 38, 48, 55,
1926                                    56, 57, 58, 24, 93, 66, 67,
1927                                    68, 80, 94, 26, 28, 77)
1928        AND EXISTS
1929             (SELECT 'This is a Process Mfg Org'
1930                FROM mtl_parameters mp
1931               WHERE mp.process_enabled_flag = 'Y'
1932                 AND mp.organization_id = mti.organization_id
1933             );
1934 
1935     l_count := SQL%ROWCOUNT;
1936 /*------------------------------------------------------+
1937 | get flow schedule control variables
1938 +------------------------------------------------------*/
1939 
1940     BEGIN
1941         SELECT TRANSACTION_SOURCE_TYPE_ID,
1942         DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y',1,0),
1943         NVL(SCHEDULED_FLAG,0)
1944           INTO srctypeid, tvu_flow_schedule, tev_scheduled_flag
1945           FROM MTL_TRANSACTIONS_INTERFACE
1946          WHERE TRANSACTION_HEADER_ID = p_header_id
1947            AND PROCESS_FLAG = 1
1948            AND ROWNUM < 2;
1949     EXCEPTION
1950         WHEN NO_DATA_FOUND THEN
1951            x_return_status := FND_API.G_RET_STS_ERROR;
1952            x_msg_data := 'No Transaction found in MTI';
1953            return;
1954     END;
1955 
1956     /**J-dev check we need to perform a full validation*/
1957     IF (l_debug = 1) THEN
1958        inv_log_util.trace('wip_constants.DMF_PATCHSET_LEVEL'||wip_constants.dmf_patchset_level,'INV_TXN_MANAGER_GRP', 9);
1959        inv_log_util.trace('wip_constants.DMF_PATCHSET_J_VALUE'||wip_constants.dmf_patchset_J_VALUE,'INV_TXN_MANAGER_GRP', 9);
1960     END IF;
1961 
1962     IF (srctypeid = 5 AND wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE)  THEN
1963       IF (p_validation_level <> fnd_api.g_valid_level_full) THEN
1964          l_validate_full := FALSE;
1965          /**implies this a WIP desktop transaction*/
1966          IF (l_debug = 1) THEN
1967             inv_log_util.trace('Val Grp:WIP desktop trx','INV_TXN_MANAGER_GRP', 9);
1968          END IF;
1969        ELSE
1970          IF (l_debug = 1) THEN
1971             inv_log_util.trace('Val Grp:WIP MTI trx','INV_TXN_MANAGER_GRP', 9);
1972          END IF;
1973       END IF;
1974     END IF;
1975 
1976     IF (l_validate_full) THEN--J-dev
1977        /* The flow_schedule will only make sense for wip transactions */
1978        IF  srctypeid = 5  THEN
1979       BEGIN
1980          SELECT
1981            DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y',1,0)
1982            INTO flow_schedule_children
1983            FROM MTL_TRANSACTIONS_INTERFACE
1984            WHERE TRANSACTION_HEADER_ID = p_header_id
1985            AND TRANSACTION_ACTION_ID IN (1, 27, 33, 34)
1986            AND PROCESS_FLAG = 1
1987            AND ROWNUM < 2;
1988       EXCEPTION
1989          WHEN NO_DATA_FOUND THEN
1990             flow_schedule_children := 0;
1991       END;
1992        END IF;
1993     END IF;--J-dev
1994 
1995 
1996 
1997 /*-------------------------------------------------------------------------+
1998 | Derive inventory_item_id, distribution_acct_id and transaction_source_id
1999 | where not supplied
2000 +--------------------------------------------------------------------------*/
2001 
2002 
2003   /* commented logical validations fr inv_globals pre-req*/
2004   IF (l_validate_full) THEN --J-dev
2005      fnd_flex_key_api.set_session_mode('seed_data');
2006      derive_segment_ids(p_header_id, x_return_status ,x_msg_count, x_msg_data);
2007   END IF;
2008   loaderrmsg('INV_INT_TRXACTCODE', 'INV_INT_TRXACTCODE');
2009 
2010   --------------------------------------------------------+
2011   --Validate Logical Transactions.
2012   --========================================================
2013   -- Add a check to prevent processing logical transactions
2014   -- that are populated directly to the interface table
2015   --------------------------------------------------------
2016 
2017   --J-dev for Drop Ship
2018     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2019     SET LAST_UPDATE_DATE = SYSDATE,
2020     LAST_UPDATED_BY = p_userid,
2021     LAST_UPDATE_LOGIN = p_loginid,
2022     PROGRAM_UPDATE_DATE = SYSDATE,
2023     PROCESS_FLAG = 3,
2024     LOCK_FLAG = 2,
2025     ERROR_CODE = substrb(l_error_code,1,240),
2026     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2027     WHERE TRANSACTION_HEADER_ID = p_header_id
2028     AND process_flag = 1
2029     AND ((transaction_source_type_id = inv_globals.G_sourcetype_inventory
2030           AND transaction_action_id IN
2031           (inv_globals.G_action_logicalissue,
2032            inv_globals.G_action_logicalicsales,
2033            inv_globals.G_action_logicalicreceipt,
2034            inv_globals.G_action_logicalicrcptreturn,
2035            inv_globals.G_action_logicalicsalesreturn,
2036            inv_globals.G_action_logicalreceipt)) OR
2037          (transaction_source_type_id = inv_globals.G_sourcetype_rma
2038           AND transaction_action_id = inv_globals.G_action_logicalreceipt)
2039          OR
2040          (transaction_source_type_id = inv_globals.G_sourcetype_purchaseorder
2041           AND transaction_action_id in
2042           (inv_globals.G_action_logicalissue,
2043 --         inv_globals.G_action_logicaldeladj,
2044 --         inv_globals.G_action_logicalreceipt,
2045            inv_globals.G_action_retropriceupdate)) OR
2046          (transaction_source_type_id = inv_globals.G_sourcetype_rma
2047           AND transaction_action_id = inv_globals.G_action_logicalreceipt) OR
2048          (transaction_source_type_id = inv_globals.G_sourcetype_intreq
2049           AND transaction_action_id = inv_globals.G_action_logicalexpreqreceipt) OR
2050     (transaction_source_type_id = inv_globals.G_sourcetype_salesorder
2051      and transaction_action_id = inv_globals.G_action_logicalissue))   ;
2052   --J-dev for Drop Ship
2053 
2054   /*------------------------------------------------------+
2055   | Validate inventory item
2056     +------------------------------------------------------*/
2057     l_count := 0;
2058 
2059     loaderrmsg('INV_INT_ITMCODE', 'INV_INT_ITMEXP');
2060 
2061     -- Bug: 3616999: The WIP phantom items are not transactable items
2062     -- but are still inserted into MTI. We should not validate them
2063     -- but will have to move them to MMTT and it will be deleted from the
2064     -- table before pushed to MMT. So, if the source type is 5 (WIP) and
2065     -- wip_supply_type is 6, we do not validate them
2066     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2067        SET LAST_UPDATE_DATE = SYSDATE,
2068            LAST_UPDATED_BY = p_userid,
2069            LAST_UPDATE_LOGIN = p_loginid,
2070            PROGRAM_UPDATE_DATE = SYSDATE,
2071            PROCESS_FLAG = 3,
2072            LOCK_FLAG = 2,
2073            ERROR_CODE = substrb(l_error_code,1,240),
2074            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2075      WHERE TRANSACTION_HEADER_ID = p_header_id
2076        AND PROCESS_FLAG = 1
2077        AND TRANSACTION_ACTION_ID <> 24
2078       AND NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2079       AND NOT (TRANSACTION_SOURCE_TYPE_ID = 5 AND
2080                nvl(OPERATION_SEQ_NUM,1) < 0 AND nvl(WIP_SUPPLY_TYPE,0) = 6)
2081    --   AND ((TRANSACTION_SOURCE_TYPE_ID = 5 AND WIP_SUPPLY_TYPE <> 6) OR
2082 --         (transaction_source_type_id <>5))
2083        AND NOT EXISTS (
2084            SELECT NULL
2085            FROM MTL_SYSTEM_ITEMS MSI
2086            WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2087              AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2088              AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y');
2089 
2090     l_count := SQL%ROWCOUNT;
2091 
2092 
2093 /*----------------------------------------------------+
2094 | Start validation of item where it is specified
2095 +----------------------------------------------------*/
2096     loaderrmsg('INV_INT_ITMCODE','INV_INT_ITMEXP');
2097 
2098 
2099         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2100             SET LAST_UPDATE_DATE = SYSDATE,
2101             LAST_UPDATED_BY = p_userid,
2102             LAST_UPDATE_LOGIN = p_loginid,
2103             PROGRAM_UPDATE_DATE = SYSDATE,
2104             PROCESS_FLAG = 3,
2105             LOCK_FLAG = 2,
2106             ERROR_CODE = substrb(l_error_code,1,240),
2107             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2108       WHERE TRANSACTION_HEADER_ID = p_header_id
2109         AND INVENTORY_ITEM_ID IS NOT NULL
2110         AND (TRANSACTION_ACTION_ID NOT IN (1, 27, 33, 34)
2111                 OR TRANSACTION_SOURCE_TYPE_ID <> 5)
2112         AND PROCESS_FLAG = 1
2113         AND NOT EXISTS (
2114          SELECT NULL
2115            FROM MTL_SYSTEM_ITEMS MSI
2116           WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2117             AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2118             AND MSI.INVENTORY_ITEM_FLAG = 'Y');
2119 
2120     l_count := SQL%ROWCOUNT;
2121     IF (l_debug = 1) THEN
2122        inv_log_util.trace('Validating specified item ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2123     END IF;
2124 
2125 
2126 
2127 /*----------------------------------------------------------------+
2128 | The items are validated seperately for average cost update
2129 | transactions as done in the form
2130 +----------------------------------------------------------------*/
2131 
2132     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2133        SET LAST_UPDATE_DATE = SYSDATE,
2134            LAST_UPDATED_BY = p_userid,
2135            LAST_UPDATE_LOGIN = p_loginid,
2136            PROGRAM_UPDATE_DATE = SYSDATE,
2137            PROCESS_FLAG = 3,
2138            LOCK_FLAG = 2,
2139            ERROR_CODE = substrb(l_error_code,1,240),
2140            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2141      WHERE TRANSACTION_HEADER_ID = p_header_id
2142        AND PROCESS_FLAG = 1
2143        AND TRANSACTION_ACTION_ID = 24
2144        AND NOT EXISTS (
2145            SELECT NULL
2146            FROM MTL_SYSTEM_ITEMS MSI
2147            WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2148              AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2149              AND MSI.INVENTORY_ITEM_FLAG = 'Y'
2150              AND MSI.INVENTORY_ASSET_FLAG = 'Y'
2151              AND MSI.COSTING_ENABLED_FLAG = 'Y');
2152 
2153     l_count := SQL%ROWCOUNT;
2154     IF (l_debug = 1) THEN
2155        inv_log_util.trace('Validating specified item ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2156     END IF;
2157 
2158 /*----------------------------------------------------------------+
2159 | The inv layer is validated seperately for layer cost update
2160 | transactions. Only positive qty layers can be updated.
2161 +----------------------------------------------------------------*/
2162 
2163   IF (l_validate_full) THEN--J-dev
2164      loaderrmsg('INV_POS_QTY_LAYER','INV_POS_QTY_LAYER');
2165     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2166       SET LAST_UPDATE_DATE = SYSDATE,
2167       LAST_UPDATED_BY = p_userid,
2168       LAST_UPDATE_LOGIN = p_loginid,
2169       PROGRAM_UPDATE_DATE = SYSDATE,
2170       PROCESS_FLAG = 3,
2171       LOCK_FLAG = 2,
2172       ERROR_CODE = substrb(l_error_code,1,240),
2173       ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2174       WHERE TRANSACTION_HEADER_ID = p_header_id
2175       AND PROCESS_FLAG = 1
2176       AND TRANSACTION_ACTION_ID = 24
2177       AND TRANSACTION_SOURCE_TYPE_ID = 15
2178       AND NOT EXISTS (
2179                       SELECT NULL
2180                       FROM CST_INV_LAYERS CIL
2181                       WHERE CIL.INV_LAYER_ID = MTI.TRANSACTION_SOURCE_ID
2182                       AND CIL.LAYER_QUANTITY > 0);
2183 
2184     l_count := SQL%ROWCOUNT;
2185     IF (l_debug = 1) THEN
2186        inv_log_util.trace('Validating for layer cost update ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2187     END IF;
2188   END IF;--J-dev
2189 
2190 /*------------------------------------------------------------------------+
2191 | Validate for lot/serial/revision control for direct inter-org transfers
2192 +------------------------------------------------------------------------*/
2193 
2194   IF (l_validate_full) THEN--J-dev
2195      loaderrmsg('INV_INT_ITMCTRL','INV_INT_ITMECTRL');
2196 
2197      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2198        SET LAST_UPDATE_DATE = SYSDATE,
2199        LAST_UPDATED_BY = p_userid,
2200        LAST_UPDATE_LOGIN = p_loginid,
2201        PROGRAM_UPDATE_DATE = SYSDATE,
2202        PROCESS_FLAG = 3,
2203        LOCK_FLAG = 2,
2204        ERROR_CODE = substrb(l_error_code,1,240),
2205        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2206        WHERE TRANSACTION_HEADER_ID = p_header_id
2207        AND PROCESS_FLAG = 1
2208        AND TRANSACTION_ACTION_ID = 3
2209        AND EXISTS (
2210                    SELECT NULL
2211                    FROM MTL_SYSTEM_ITEMS MS1,
2212                    MTL_SYSTEM_ITEMS MS2
2213                    WHERE MS1.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2214                    AND MS1.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2215                    AND MS2.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2216                    AND MS2.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2217                    AND ((MS1.LOT_CONTROL_CODE = 1 AND
2218                          MS2.LOT_CONTROL_CODE = 2)
2219                         OR (MS1.SERIAL_NUMBER_CONTROL_CODE IN (1,6)
2220                             AND MS2.SERIAL_NUMBER_CONTROL_CODE IN (2,3,5))
2221                         OR (MS1.REVISION_QTY_CONTROL_CODE = 1 AND
2222                             MS2.REVISION_QTY_CONTROL_CODE = 2)));
2223 
2224      l_count := SQL%ROWCOUNT;
2225      IF (l_debug = 1) THEN
2226         inv_log_util.trace('Validating lot/serial/revision control for direct inter-org transfers ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2227      END IF;
2228 
2229   END IF;--J-dev
2230 
2231 
2232 /*-----------------------------------------------------------+
2233 | Validating inventory item against transfer organization
2234 +-----------------------------------------------------------*/
2235 
2236 IF (l_validate_full) THEN --J-dev
2237    loaderrmsg('INV_INT_ITEMCODE','INV_INT_XFRITMEXP');
2238 
2239    UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2240      SET LAST_UPDATE_DATE = SYSDATE,
2241      LAST_UPDATED_BY = p_userid,
2242      LAST_UPDATE_LOGIN = p_loginid,
2243      PROGRAM_UPDATE_DATE = SYSDATE,
2244      PROCESS_FLAG = 3,
2245      LOCK_FLAG = 2,
2246      ERROR_CODE = substrb(l_error_code,1,240),
2247      ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2248      WHERE TRANSACTION_HEADER_ID = p_header_id
2249      AND TRANSACTION_ACTION_ID = 3
2250      AND PROCESS_FLAG = 1
2251      AND NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2252      AND NOT EXISTS (
2253                      SELECT NULL
2254                      FROM MTL_SYSTEM_ITEMS MSI
2255                      WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2256                      AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2257                      AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y');
2258 
2259    l_count := SQL%ROWCOUNT;
2260    IF (l_debug = 1) THEN
2261       inv_log_util.trace('Validating item against xfer org ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2262    END IF;
2263 
2264 END IF;--J-dev
2265 
2266 
2267    /*-----------------------------------------------+
2268    | Start validation of subinventory code
2269    +-----------------------------------------------*/
2270     loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBEXP');
2271 
2272 
2273      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2274             SET LAST_UPDATE_DATE = SYSDATE,
2275             LAST_UPDATED_BY = p_userid,
2276             LAST_UPDATE_LOGIN = p_loginid,
2277             PROGRAM_UPDATE_DATE = SYSDATE,
2278             PROCESS_FLAG = 3,
2279             LOCK_FLAG = 2,
2280             ERROR_CODE = substrb(l_error_code,1,240),
2281             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2282       WHERE TRANSACTION_HEADER_ID = p_header_id
2283         AND PROCESS_FLAG = 1
2284         AND TRANSACTION_ACTION_ID NOT IN (24, 30) /* CFM Scrap Transactions */
2285         AND (NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2286              AND NOT EXISTS (
2287              SELECT NULL
2288                FROM MTL_SECONDARY_INVENTORIES MSI
2289               WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2290                 AND MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2291                 AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)
2292              OR (SHIPPABLE_FLAG = 'N'
2293                  AND SUBINVENTORY_CODE IS NOT NULL
2294                  AND NOT EXISTS (
2295                  SELECT NULL
2296                  FROM MTL_SECONDARY_INVENTORIES MSI
2297                  WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2298                  AND MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2299                  AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)));
2300 
2301     l_count := SQL%ROWCOUNT;
2302     IF (l_debug = 1) THEN
2303        inv_log_util.trace('Validating subinventory code ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2304     END IF;
2305 
2306 
2307 
2308     /*-----------------------------------------------------------+
2309      | Start validating the transfer subinventory                |
2310      +-----------------------------------------------------------*/
2311 
2312        IF (l_validate_full) THEN --J-dev
2313 
2314           loaderrmsg('INV_INT_XSUBCODE','INV_INT_XSUBEXP');
2315 
2316 
2317           UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2318             SET LAST_UPDATE_DATE = SYSDATE,
2319             LAST_UPDATED_BY = p_userid,
2320             LAST_UPDATE_LOGIN = p_loginid,
2321             PROGRAM_UPDATE_DATE = SYSDATE,
2322             PROCESS_FLAG = 3,
2323             LOCK_FLAG = 2,
2324             ERROR_CODE = substrb(l_error_code,1,240),
2325             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2326             WHERE TRANSACTION_HEADER_ID = p_header_id
2327             AND PROCESS_FLAG = 1
2328             AND (TRANSACTION_ACTION_ID IN (2,3,21,5)
2329                  AND TRANSFER_SUBINVENTORY IS NOT NULL)
2330                    AND ((NVL(SHIPPABLE_FLAG,'Y') = 'Y'
2331                          AND NOT EXISTS (
2332                                          SELECT NULL
2333                                          FROM MTL_SECONDARY_INVENTORIES MSI
2334                                          WHERE MSI.ORGANIZATION_ID =
2335                                          DECODE(MTI.TRANSACTION_ACTION_ID,2,
2336                                                 MTI.ORGANIZATION_ID,5,MTI.organization_id,
2337                                                 MTI.TRANSFER_ORGANIZATION)
2338                                          AND MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2339                                          AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE))
2340                         OR (SHIPPABLE_FLAG = 'N'
2341                             AND TRANSFER_SUBINVENTORY IS NOT NULL
2342                             AND NOT EXISTS (
2343                                             SELECT NULL
2344                                             FROM MTL_SECONDARY_INVENTORIES MSI
2345                                             WHERE MSI.ORGANIZATION_ID =
2346                                             DECODE(MTI.TRANSACTION_ACTION_ID,3,
2347                                                    MTI.TRANSFER_ORGANIZATION,21,
2348                                                    MTI.TRANSFER_ORGANIZATION,MTI.ORGANIZATION_ID)
2349                                             AND MSI.SECONDARY_INVENTORY_NAME =
2350                                             MTI.TRANSFER_SUBINVENTORY
2351                                             AND NVL(MSI.DISABLE_DATE,SYSDATE+1) > SYSDATE)));
2352 
2353                             l_count := SQL%ROWCOUNT;
2354                             IF (l_debug = 1) THEN
2355                                inv_log_util.trace('Validating xfer subinventory code ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2356                             END IF;
2357        END IF;--J-dev
2358 
2359 
2360 
2361 /*-----------------------------------------------------------+
2362 | Validating restricted subinventories
2363 +-----------------------------------------------------------*/
2364     loaderrmsg('INV_INT_SUBCODE','INV_INT_RESUBEXP');
2365 
2366     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2367        SET LAST_UPDATE_DATE = SYSDATE,
2368            LAST_UPDATED_BY = p_userid,
2369            LAST_UPDATE_LOGIN = p_loginid,
2370            PROGRAM_UPDATE_DATE = SYSDATE,
2371            PROCESS_FLAG = 3,
2372            LOCK_FLAG = 2,
2373            ERROR_CODE = substrb(l_error_code,1,240),
2374            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2375      WHERE TRANSACTION_HEADER_ID = p_header_id
2376        AND SUBINVENTORY_CODE IS NOT NULL
2377        AND PROCESS_FLAG = 1
2378        AND NOT EXISTS (
2379            SELECT NULL
2380            FROM MTL_ITEM_SUB_INVENTORIES MIS,
2381                 MTL_SYSTEM_ITEMS MSI
2382            WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2383              AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2384              AND MSI.RESTRICT_SUBINVENTORIES_CODE = 1
2385              AND MIS.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2386              AND MIS.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2387              AND MIS.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2388              AND MIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2389              AND MIS.SECONDARY_INVENTORY = MTI.SUBINVENTORY_CODE
2390            UNION
2391              SELECT NULL
2392                FROM MTL_SYSTEM_ITEMS ITM
2393               WHERE ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2394                 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2395                 AND ITM.RESTRICT_SUBINVENTORIES_CODE = 2);
2396 
2397     l_count := SQL%ROWCOUNT;
2398     IF (l_debug = 1) THEN
2399        inv_log_util.trace('Validating restricted subinventories ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2400     END IF;
2401 
2402 
2403 /*--------------------------------------------------------+
2404 | Validating restricted subinventory against transfer
2405 | organization
2406 +--------------------------------------------------------*/
2407 
2408   IF (l_validate_full) THEN --J-dev
2409 
2410      loaderrmsg('INV_INT_XSUBCODE','INV_INT_RESXFRSUBEXP');
2411 
2412 
2413      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2414        SET LAST_UPDATE_DATE = SYSDATE,
2415        LAST_UPDATED_BY = p_userid,
2416        LAST_UPDATE_LOGIN = p_loginid,
2417        PROGRAM_UPDATE_DATE = SYSDATE,
2418        PROCESS_FLAG = 3,
2419        LOCK_FLAG = 2,
2420        ERROR_CODE = substrb(l_error_code,1,240),
2421        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2422        WHERE TRANSACTION_HEADER_ID = p_header_id
2423        AND PROCESS_FLAG = 1
2424        AND TRANSFER_SUBINVENTORY IS NOT NULL
2425          AND TRANSACTION_ACTION_ID in (2,21,3,5)
2426          AND NOT EXISTS (
2427                          SELECT NULL
2428                          FROM MTL_ITEM_SUB_INVENTORIES MIS,
2429                          MTL_SYSTEM_ITEMS MSI
2430                          WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID, 2,
2431                                                             MTI.ORGANIZATION_ID,
2432                                                             MTI.TRANSFER_ORGANIZATION)
2433                          AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2434                          AND MSI.RESTRICT_SUBINVENTORIES_CODE = 1
2435                          AND MIS.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
2436                                                           MTI.ORGANIZATION_ID,
2437                                                           MTI.TRANSFER_ORGANIZATION)
2438                          AND MIS.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2439                          AND MIS.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2440                          AND MIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2441                          AND MIS.SECONDARY_INVENTORY = MTI.TRANSFER_SUBINVENTORY
2442                          UNION
2443                          SELECT NULL
2444                          FROM MTL_SYSTEM_ITEMS ITM
2445                          WHERE ITM.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
2446                                                             MTI.ORGANIZATION_ID,
2447                                                             MTI.TRANSFER_ORGANIZATION)
2448                          AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2449                          AND ITM.RESTRICT_SUBINVENTORIES_CODE = 2);
2450 
2451 
2452        l_count := SQL%ROWCOUNT;
2453        IF (l_debug = 1) THEN
2454           inv_log_util.trace('Validating xfer res subs ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2455        END IF;
2456 
2457   END IF;--J-dev
2458 
2459 /*----------------------------------------------------------------------+
2460 | Validate Subinventory for the following:
2461 |    You cannot issue from non tracked
2462 |    You cannot issue from expense sub for intransit shipment
2463 |    You cannot transfer from expense sub to asset sub for asset items
2464 |If the expense to asset transfer allowed profiel is set then
2465 |    You cannot issue from a non-tracked sub
2466 |    All other transfers are valid
2467 |exp_to_ast_allowed = 1 means that the exp to ast trx are not alowed
2468 +----------------------------------------------------------------------*/
2469      SELECT FND_PROFILE.VALUE('INV:EXPENSE_TO_ASSET_TRANSFER')
2470      INTO l_profile
2471      FROM dual;
2472 
2473      IF SQL%FOUND THEN
2474         IF l_profile = '2' THEN
2475            exp_to_ast_allowed := 1;
2476         ELSE
2477              exp_to_ast_allowed := 2;
2478         END IF;
2479      ELSE
2480           exp_to_ast_allowed := 1;
2481      END IF;
2482 
2483 
2484     IF exp_to_ast_allowed = 1  THEN
2485 
2486         loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBTYPEXP');
2487 
2488        UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2489          SET LAST_UPDATE_DATE = SYSDATE,
2490          LAST_UPDATED_BY = p_userid,
2491          LAST_UPDATE_LOGIN = p_loginid,
2492          PROGRAM_UPDATE_DATE = SYSDATE,
2493          PROCESS_FLAG = 3,
2494          LOCK_FLAG = 2,
2495          ERROR_CODE = substrb(l_error_code,1,240),
2496          ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2497        WHERE TRANSACTION_HEADER_ID = p_header_id
2498          AND PROCESS_FLAG = 1
2499          AND ((TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2500          AND EXISTS (
2501            SELECT 'X'
2502            FROM MTL_SECONDARY_INVENTORIES MSI
2503            WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2504            AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2505            AND MSI.QUANTITY_TRACKED = 2))
2506            OR (TRANSACTION_ACTION_ID = 21
2507              AND EXISTS (
2508               SELECT 'X'
2509                 FROM MTL_SECONDARY_INVENTORIES MSI,
2510                 MTL_SYSTEM_ITEMS ITM
2511                 WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2512                 AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2513                 AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2514                 AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2515                 AND ITM.ORGANIZATION_ID =  MSI.ORGANIZATION_ID
2516                 AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2517                 AND MSI.ASSET_INVENTORY = 2)));
2518 
2519         l_count :=  SQL%ROWCOUNT;
2520 
2521 
2522        UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2523          SET LAST_UPDATE_DATE = SYSDATE,
2524          LAST_UPDATED_BY = p_userid,
2525          LAST_UPDATE_LOGIN = p_loginid,
2526          PROGRAM_UPDATE_DATE = SYSDATE,
2527          PROCESS_FLAG = 3,
2528          LOCK_FLAG = 2,
2529          ERROR_CODE = substrb(l_error_code,1,240),
2530          ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2531        WHERE TRANSACTION_HEADER_ID = p_header_id
2532          AND PROCESS_FLAG = 1
2533          AND TRANSACTION_ACTION_ID in (2,5)
2534          AND EXISTS (
2535            SELECT 'X'
2536            FROM MTL_SECONDARY_INVENTORIES MSI,
2537            MTL_SYSTEM_ITEMS ITM
2538            WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2539              AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2540              AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2541              AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2542              AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2543              AND MSI.ASSET_INVENTORY = 2)
2544              AND EXISTS (
2545                SELECT 'X'
2546                  FROM MTL_SECONDARY_INVENTORIES MSI,
2547                  MTL_SYSTEM_ITEMS ITM
2548                  WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2549                    AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2550                    AND ITM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2551                    AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2552                    AND ITM.INVENTORY_ASSET_FLAG = 'Y'
2553                    AND MSI.ASSET_INVENTORY = 1);
2554 
2555         l_count := l_count + SQL%ROWCOUNT;
2556 
2557        UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2558                 SET LAST_UPDATE_DATE = SYSDATE,
2559                 LAST_UPDATED_BY = p_userid,
2560                 LAST_UPDATE_LOGIN = p_loginid,
2561                 PROGRAM_UPDATE_DATE = SYSDATE,
2562                 PROCESS_FLAG = 3,
2563                 LOCK_FLAG = 2,
2564                 ERROR_CODE = substrb(l_error_code,1,240),
2565                 ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2566        WHERE TRANSACTION_HEADER_ID = p_header_id
2567          AND PROCESS_FLAG = 1
2568          AND TRANSACTION_ACTION_ID = 3
2569          AND EXISTS (
2570            SELECT 'X'
2571            FROM MTL_SECONDARY_INVENTORIES MSI
2572            WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2573              AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2574              AND MSI.ASSET_INVENTORY = 2)
2575              AND EXISTS (
2576                SELECT 'X'
2577                FROM MTL_SECONDARY_INVENTORIES MSI
2578                WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.TRANSFER_SUBINVENTORY
2579                 AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2580                 AND MSI.ASSET_INVENTORY = 1);
2581 
2582         l_count :=  l_count + SQL%ROWCOUNT;
2583 
2584         IF (l_debug = 1) THEN
2585            inv_log_util.trace('Validating subs ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2586         END IF;
2587         FND_MESSAGE.set_name('INV', 'INV_ERR_DETVAL');
2588         FND_MESSAGE.set_token('token', numhold);
2589 
2590      ELSE
2591 
2592        loaderrmsg('INV_INT_SUBCODE','INV_INT_SUBTYPEXP');
2593 
2594        UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2595          SET LAST_UPDATE_DATE = SYSDATE,
2596          LAST_UPDATED_BY = p_userid,
2597          LAST_UPDATE_LOGIN = p_loginid,
2598          PROGRAM_UPDATE_DATE = SYSDATE,
2599          PROCESS_FLAG = 3,
2600          LOCK_FLAG = 2,
2601          ERROR_CODE = substrb(l_error_code,1,240),
2602          ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2603        WHERE TRANSACTION_HEADER_ID = p_header_id
2604          AND PROCESS_FLAG = 1
2605          AND ((TRANSACTION_ACTION_ID in (1,2,3,30,31,5)
2606          AND EXISTS (
2607            SELECT 'X'
2608              FROM MTL_SECONDARY_INVENTORIES MSI
2609              WHERE MSI.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
2610              AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2611              AND MSI.QUANTITY_TRACKED = 2)
2612              )) ;
2613 
2614         l_count :=  SQL%ROWCOUNT;
2615         IF (l_debug = 1) THEN
2616            inv_log_util.trace('Validating subs else ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2617         END IF;
2618         FND_MESSAGE.set_name('INV', 'INV_ERR_DETVAL');
2619           FND_MESSAGE.set_token('token', numhold);
2620 
2621      END IF;
2622 
2623 
2624 /*--------------------------------------------------------------------+
2625 | Start validation of transaction source
2626 +--------------------------------------------------------------------*/
2627 
2628   IF (l_validate_full) THEN --J-dev
2629 
2630      loaderrmsg('INV_INT_SRCCODE','INV_INT_SALEXP');
2631 
2632 
2633      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2634        SET LAST_UPDATE_DATE = SYSDATE,
2635        LAST_UPDATED_BY = p_userid,
2636        LAST_UPDATE_LOGIN = p_loginid,
2637        PROGRAM_UPDATE_DATE = SYSDATE,
2638        PROCESS_FLAG = 3,
2639        LOCK_FLAG = 2,
2640        ERROR_CODE = substrb(l_error_code,1,240),
2641        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2642        WHERE TRANSACTION_HEADER_ID = p_header_id
2643        AND PROCESS_FLAG = 1
2644        AND TRANSACTION_SOURCE_TYPE_ID in (2,8)
2645        AND NOT EXISTS (
2646                        SELECT NULL
2647                        FROM MTL_SALES_ORDERS MSO
2648                        WHERE MSO.SALES_ORDER_ID = MTI.TRANSACTION_SOURCE_ID
2649                        AND NVL(START_DATE_ACTIVE, SYSDATE - 1) <= SYSDATE
2650                        AND NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE
2651                        AND ENABLED_FLAG = 'Y');
2652 
2653      l_count := SQL%ROWCOUNT;
2654      loaderrmsg('INV_INT_SRCCODE','INV_INT_ACCTEXP');
2655 
2656      /*Bug#5176266. Made changes to the below UPDATE statement
2657        to validate the Account effective date against transactions
2658        date( not sysdate)*/
2659      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2660        SET LAST_UPDATE_DATE = SYSDATE,
2661        LAST_UPDATED_BY = p_userid,
2662        LAST_UPDATE_LOGIN = p_loginid,
2663        PROGRAM_UPDATE_DATE = SYSDATE,
2664        PROCESS_FLAG = 3,
2665        LOCK_FLAG = 2,
2666        ERROR_CODE = substrb(l_error_code,1,240),
2667        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2668        WHERE TRANSACTION_HEADER_ID = p_header_id
2669        AND PROCESS_FLAG = 1
2670        AND TRANSACTION_SOURCE_TYPE_ID = 3
2671        AND NOT EXISTS (
2672                        SELECT NULL
2673                        FROM GL_CODE_COMBINATIONS GCC,
2674                        ORG_ORGANIZATION_DEFINITIONS OOD
2675                        WHERE GCC.CODE_COMBINATION_ID = MTI.TRANSACTION_SOURCE_ID
2676                        AND GCC.CHART_OF_ACCOUNTS_ID = OOD.CHART_OF_ACCOUNTS_ID
2677                        AND OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2678                        AND GCC.ENABLED_FLAG = 'Y'
2679                        AND NVL(GCC.START_DATE_ACTIVE, MTI.TRANSACTION_DATE - 1) <= MTI.TRANSACTION_DATE
2680                        AND NVL(GCC.END_DATE_ACTIVE, MTI.TRANSACTION_DATE + 1) > MTI.TRANSACTION_DATE);
2681 
2682      l_count := l_count + SQL%ROWCOUNT;
2683      loaderrmsg('INV_INT_SRCCODE','INV_INT_ALIASEXP');
2684 
2685      /* Bug# 3249130/ 3249131, Port change of Bug# 3238160. Changing the DML statement that populates the
2686         error code in MTI when the Account alias is inactive. The query now checks for the
2687         EFFECTIVE_DATE and DISABLE_DATE rather than START_DATE_ACTIVE and END_DATE_ACTIVE*/
2688 
2689      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2690        SET LAST_UPDATE_DATE = SYSDATE,
2691        LAST_UPDATED_BY = p_userid,
2692        LAST_UPDATE_LOGIN = p_loginid,
2693        PROGRAM_UPDATE_DATE = SYSDATE,
2694        PROCESS_FLAG = 3,
2695        LOCK_FLAG = 2,
2696        ERROR_CODE = substrb(l_error_code,1,240),
2697        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2698        WHERE TRANSACTION_HEADER_ID = p_header_id
2699        AND PROCESS_FLAG = 1
2700        AND TRANSACTION_SOURCE_TYPE_ID = INV_GLOBALS.G_SourceType_AccountAlias
2701        AND NOT EXISTS (
2702                        SELECT NULL
2703                        FROM MTL_GENERIC_DISPOSITIONS MGD
2704                        WHERE MGD.DISPOSITION_ID = MTI.TRANSACTION_SOURCE_ID
2705                        AND MGD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2706                        AND MGD.ENABLED_FLAG = 'Y'
2707                        AND NVL(MGD.EFFECTIVE_DATE, SYSDATE - 1) <= SYSDATE
2708                        AND NVL(MGD.DISABLE_DATE, SYSDATE + 1) > SYSDATE );
2709                       /* AND NVL(MGD.START_DATE_ACTIVE, SYSDATE - 1) <= SYSDATE
2710                        AND NVL(MGD.END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE );*/
2711 
2712 
2713      l_count :=  l_count + SQL%ROWCOUNT;
2714      IF (l_debug = 1) THEN
2715         inv_log_util.trace('Validating transaction source ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2716      END IF;
2717 
2718   END IF;--J-dev
2719 
2720 /*----------------------------------------------------+
2721 | Validating transaction type
2722 +----------------------------------------------------*/
2723     loaderrmsg('INV_INT_TRXTYPCODE','INV_INT_TYPEXP');
2724 
2725     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2726        SET LAST_UPDATE_DATE = SYSDATE,
2727            LAST_UPDATED_BY = p_userid,
2728            LAST_UPDATE_LOGIN = p_loginid,
2729            PROGRAM_UPDATE_DATE = SYSDATE,
2730            PROCESS_FLAG = 3,
2731            LOCK_FLAG = 2,
2732            ERROR_CODE = substrb(l_error_code,1,240),
2733            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2734      WHERE TRANSACTION_HEADER_ID = p_header_id
2735        AND PROCESS_FLAG = 1
2736        AND NOT EXISTS (
2737            SELECT NULL
2738              FROM MTL_TRANSACTION_TYPES MTT
2739             WHERE MTT.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
2740             AND  nvl(MTT.DISABLE_DATE,SYSDATE+1) > SYSDATE );
2741 
2742     l_count :=  SQL%ROWCOUNT;
2743     IF (l_debug = 1) THEN
2744        inv_log_util.trace('Validating transaction type ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2745     END IF;
2746 
2747 
2748 /*-------------------------------------------------------+
2749 | Validating transaction actions
2750 +-------------------------------------------------------*/
2751     loaderrmsg('INV_INT_TRXACTCODE','INV_INT_TRXACTEXP');
2752 
2753     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2754        SET LAST_UPDATE_DATE = SYSDATE,
2755            LAST_UPDATED_BY = p_userid,
2756            LAST_UPDATE_LOGIN = p_loginid,
2757            PROGRAM_UPDATE_DATE = SYSDATE,
2758            PROCESS_FLAG = 3,
2759            LOCK_FLAG = 2,
2760            ERROR_CODE = substrb(l_error_code,1,240),
2761            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2762      WHERE TRANSACTION_HEADER_ID = p_header_id
2763        AND PROCESS_FLAG = 1
2764        AND (TRANSACTION_ACTION_ID in (4,8,12,28,29)
2765             OR (TRANSACTION_ACTION_ID = 30 AND UPPER(NVL(FLOW_SCHEDULE,'N')) <> 'Y')); /* CFM Scrap Transaction */
2766 
2767     l_count :=  SQL%ROWCOUNT;
2768     IF (l_debug = 1) THEN
2769        inv_log_util.trace('Validating transaction action ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2770     END IF;
2771 
2772 
2773 /*-------------------------------------------------------+
2774 | Start validation of organization
2775 +-------------------------------------------------------*/
2776 
2777     loaderrmsg('INV_INT_ORGCODE','INV_INT_ORGEXP');
2778 
2779 
2780         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2781             SET LAST_UPDATE_DATE = SYSDATE,
2782             LAST_UPDATED_BY = p_userid,
2783             LAST_UPDATE_LOGIN = p_loginid,
2784             PROGRAM_UPDATE_DATE = SYSDATE,
2785             PROCESS_FLAG = 3,
2786             LOCK_FLAG = 2,
2787             ERROR_CODE = substrb(l_error_code,1,240),
2788             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2789       WHERE TRANSACTION_HEADER_ID = p_header_id
2790         AND PROCESS_FLAG = 1
2791         AND NOT EXISTS (
2792            SELECT NULL
2793              FROM ORG_ORGANIZATION_DEFINITIONS OOD
2794             WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2795               AND NVL(OOD.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
2796 
2797     l_count :=  SQL%ROWCOUNT;
2798     IF (l_debug = 1) THEN
2799        inv_log_util.trace('Validating ORG ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2800     END IF;
2801 
2802 
2803 /*-------------------------------------------------------------+
2804 | Start validating the transfer organization
2805 +-------------------------------------------------------------*/
2806 
2807   IF (l_validate_full) THEN --J-dev
2808 
2809      loaderrmsg('INV_INT_XORGCODE','INV_INT_XORGEXP');
2810 
2811 
2812      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2813        SET LAST_UPDATE_DATE = SYSDATE,
2814        LAST_UPDATED_BY = p_userid,
2815        LAST_UPDATE_LOGIN = p_loginid,
2816        PROGRAM_UPDATE_DATE = SYSDATE,
2817        PROCESS_FLAG = 3,
2818        LOCK_FLAG = 2,
2819        ERROR_CODE = substrb(l_error_code,1,240),
2820        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2821        WHERE TRANSACTION_HEADER_ID = p_header_id
2822        AND TRANSACTION_ACTION_ID in (3,21)
2823        AND PROCESS_FLAG = 1
2824        AND (NOT EXISTS (
2825                         SELECT NULL
2826                         FROM ORG_ORGANIZATION_DEFINITIONS OOD
2827                         WHERE OOD.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2828                         AND NVL(OOD.DISABLE_DATE, SYSDATE + 1) > SYSDATE)
2829             OR NOT EXISTS (
2830                            SELECT NULL
2831                            FROM MTL_INTERORG_PARAMETERS MIP
2832                            WHERE MIP.TO_ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2833                            AND MIP.FROM_ORGANIZATION_ID = MTI.ORGANIZATION_ID));
2834 
2835      l_count :=  SQL%ROWCOUNT;
2836      IF (l_debug = 1) THEN
2837         inv_log_util.trace('Validating xfer ORG ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2838      END IF;
2839 
2840   END IF;--J-dev
2841 
2842      /*--------------------------------------------------+
2843      | Validating item revisions
2844        +--------------------------------------------------*/
2845     loaderrmsg('INV_INT_REVCODE','INV_INT_REVEXP');
2846 
2847     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2848        SET LAST_UPDATE_DATE = SYSDATE,
2849            LAST_UPDATED_BY = p_userid,
2850            LAST_UPDATE_LOGIN = p_loginid,
2851            PROGRAM_UPDATE_DATE = SYSDATE,
2852            PROCESS_FLAG = 3,
2853            LOCK_FLAG = 2,
2854            ERROR_CODE = substrb(l_error_code,1,240),
2855            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2856      WHERE TRANSACTION_HEADER_ID = p_header_id
2857        AND PROCESS_FLAG = 1
2858        AND TRANSACTION_ACTION_ID NOT IN (24,33,34)
2859        AND NOT EXISTS (
2860            SELECT NULL
2861              FROM MTL_ITEM_REVISIONS MIR,
2862                   MTL_SYSTEM_ITEMS MSI
2863             WHERE MSI.REVISION_QTY_CONTROL_CODE = 2
2864               AND MIR.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2865               AND MIR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2866               AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2867               AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2868               AND MIR.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2869               AND MIR.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2870               AND MIR.REVISION = MTI.REVISION
2871              UNION
2872               SELECT NULL
2873                 FROM MTL_SYSTEM_ITEMS ITM
2874                WHERE ITM.REVISION_QTY_CONTROL_CODE = 1
2875                  AND MTI.REVISION IS NULL
2876                  AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2877                  AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID);
2878 
2879 
2880     l_count := SQL%ROWCOUNT;
2881 
2882     IF (l_validate_full) THEN --J-dev
2883 
2884     loaderrmsg('INV_INT_REVCODE','INV_INT_REVXFREXP');
2885 
2886 
2887     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2888        SET LAST_UPDATE_DATE = SYSDATE,
2889            LAST_UPDATED_BY = p_userid,
2890            LAST_UPDATE_LOGIN = p_loginid,
2891            PROGRAM_UPDATE_DATE = SYSDATE,
2892            PROCESS_FLAG = 3,
2893            LOCK_FLAG = 2,
2894            ERROR_CODE = substrb(l_error_code,1,240),
2895            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2896      WHERE TRANSACTION_HEADER_ID = p_header_id
2897        AND PROCESS_FLAG = 1
2898        AND TRANSACTION_ACTION_ID = 3
2899        AND NOT EXISTS (
2900             SELECT NULL
2901              FROM MTL_ITEM_REVISIONS MIR,
2902                   MTL_SYSTEM_ITEMS MSI
2903             WHERE MSI.REVISION_QTY_CONTROL_CODE = 2
2904               AND MIR.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2905               AND MIR.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2906               AND MIR.REVISION = MTI.REVISION
2907               AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2908               AND MSI.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION
2909               AND MIR.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
2910               AND MIR.ORGANIZATION_ID = MSI.ORGANIZATION_ID
2911             UNION
2912               SELECT NULL
2913                 FROM MTL_SYSTEM_ITEMS ITM
2914                WHERE ITM.REVISION_QTY_CONTROL_CODE = 1
2915              --    AND MTI.REVISION IS NULL  --Bug#3285134. No REVISION validation for Revision to Non-Revision Org Xfer
2916                  AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2917                  AND ITM.ORGANIZATION_ID = MTI.TRANSFER_ORGANIZATION);
2918 
2919                  l_count := l_count +  SQL%ROWCOUNT;
2920 
2921     END IF;--J-dev
2922 
2923     IF (l_debug = 1) THEN
2924        inv_log_util.trace('Validating revisions ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2925     END IF;
2926 
2927 
2928 /*------------------------------------------------------+
2929 | Validating transaction reasons
2930 +------------------------------------------------------*/
2931     loaderrmsg('INV_INT_REACODE','INV_INT_REAEXP');
2932 
2933     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2934        SET LAST_UPDATE_DATE = SYSDATE,
2935            LAST_UPDATED_BY = p_userid,
2936            LAST_UPDATE_LOGIN = p_loginid,
2937            PROGRAM_UPDATE_DATE = SYSDATE,
2938            PROCESS_FLAG = 3,
2939            LOCK_FLAG = 2,
2940            ERROR_CODE = substrb(l_error_code,1,240),
2941            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2942      WHERE TRANSACTION_HEADER_ID = p_header_id
2943        AND PROCESS_FLAG = 1
2944        AND REASON_ID IS NOT NULL
2945        AND NOT EXISTS (
2946            SELECT NULL
2947              FROM MTL_TRANSACTION_REASONS MTR
2948             WHERE MTR.REASON_ID = MTI.REASON_ID
2949               AND NVL(MTR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
2950 
2951     l_count := SQL%ROWCOUNT;
2952     IF (l_debug = 1) THEN
2953        inv_log_util.trace('Validating reasons ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2954     END IF;
2955 
2956     --Jalaj Srivastava Bug 4969885
2957     --Validate the transaction uom befoire validating quantities
2958 /*---------------------------------------------------------+
2959 | Start validating the transaction uom
2960 +---------------------------------------------------------*/
2961 
2962     loaderrmsg('INV_INT_UOMCODE','INV_INT_UOMEXP');
2963 
2964 
2965     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2966        SET LAST_UPDATE_DATE = SYSDATE,
2967            LAST_UPDATED_BY = p_userid,
2968            LAST_UPDATE_LOGIN = p_loginid,
2969            PROGRAM_UPDATE_DATE = SYSDATE,
2970            PROCESS_FLAG = 3,
2971            LOCK_FLAG = 2,
2972            ERROR_CODE = substrb(l_error_code,1,240),
2973            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
2974      WHERE TRANSACTION_HEADER_ID = p_header_id
2975        AND INVENTORY_ITEM_ID IS NOT NULL
2976        AND PROCESS_FLAG = 1
2977        AND NOT EXISTS (
2978            SELECT NULL
2979              FROM MTL_ITEM_UOMS_VIEW MIUV
2980             WHERE MIUV.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
2981               AND MIUV.ORGANIZATION_ID = MTI.ORGANIZATION_ID
2982               AND MIUV.UOM_CODE = MTI.TRANSACTION_UOM);
2983 
2984     l_count := SQL%ROWCOUNT;
2985     IF (l_debug = 1) THEN
2986        inv_log_util.trace('Validating transaction uom ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
2987     END IF;
2988 
2989 /*------------------------------------------------------+
2990 | Validating transaction quantity
2991 +------------------------------------------------------*/
2992 
2993     loaderrmsg('INV_INT_QTYCODE','INV_INT_QTYSGNEXP');
2994 
2995     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
2996        SET LAST_UPDATE_DATE = SYSDATE,
2997            LAST_UPDATED_BY = p_userid,
2998            LAST_UPDATE_LOGIN = p_loginid,
2999            PROGRAM_UPDATE_DATE = SYSDATE,
3000            PROCESS_FLAG = 3,
3001            LOCK_FLAG = 2,
3002            ERROR_CODE = substrb(l_error_code,1,240),
3003            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3004      WHERE TRANSACTION_HEADER_ID = p_header_id
3005        AND PROCESS_FLAG = 1
3006        AND TRANSACTION_QUANTITY > 0
3007        AND TRANSACTION_ACTION_ID IN (1,21,32,34);
3008 
3009     l_count := SQL%ROWCOUNT;
3010 
3011     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3012        SET LAST_UPDATE_DATE = SYSDATE,
3013            LAST_UPDATED_BY = p_userid,
3014            LAST_UPDATE_LOGIN = p_loginid,
3015            PROGRAM_UPDATE_DATE = SYSDATE,
3016            PROCESS_FLAG = 3,
3017            LOCK_FLAG = 2,
3018            ERROR_CODE = substrb(l_error_code,1,240),
3019            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3020      WHERE TRANSACTION_HEADER_ID = p_header_id
3021        AND PROCESS_FLAG = 1
3022        AND TRANSACTION_QUANTITY < 0
3023        AND TRANSACTION_ACTION_ID IN (12,27,31,33);
3024 
3025     l_count := l_count + SQL%ROWCOUNT;
3026     IF (l_debug = 1) THEN
3027        inv_log_util.trace('Validating transaction quantity ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3028     END IF;
3029 
3030    IF (l_debug = 1) THEN
3031      inv_log_util.trace('start of OPM validations within (validate_group)' , 'INV_TXN_MANAGER_GRP', 9);
3032    END IF;
3033 
3034    OPEN AA2 ;
3035    LOOP
3036    FETCH AA2 INTO
3037                  l_rowid
3038                 ,l_transaction_type_id
3039                 ,l_organization_id
3040                 ,l_inventory_item_id
3041                 ,l_revision
3042                 ,l_subinventory_code
3043                 ,l_locator_id
3044                 ,l_transaction_quantity
3045                 ,l_transaction_uom_code
3046                 ,l_secondary_quantity
3047                 ,l_secondary_uom_code ;
3048 
3049      OPEN get_item_info(l_organization_id,l_inventory_item_id) ;
3050      FETCH get_item_info INTO l_lot_control_code, l_tracking_quantity_ind, l_item_secondary_uom_code;
3051      --item is already validated at this point no need to check for no_data_found
3052      CLOSE get_item_info;
3053 
3054         /* bug 4178299, bypass dual qty validations for none-lot ctl items
3055          * since qty will be validated at lot level per line, at header level
3056          * we only need to check that transaction qty equals the sum of the lines total */
3057       --{
3058       IF (l_tracking_quantity_ind = 'PS') THEN
3059         --{
3060         IF (l_lot_control_code = 1 ) THEN
3061 
3062           IF (l_debug = 1) THEN
3063             inv_log_util.trace('calling validate_quantities IN (validate_group)' , 'INV_TXN_MANAGER_GRP', 9);
3064           END IF;
3065 
3066         /*------------------------------------------------------+
3067         | Validating secondary quantity, only
3068         | If the item is tracked in both primary AND secondary
3069         |
3070         +------------------------------------------------------*/
3071                 l_qty_check := validate_quantities(
3072                                                   p_rowid               => l_rowid
3073                                                 , p_lot_rowid           => NULL
3074                                                 , p_transaction_type_id => l_transaction_type_id
3075                                                 , p_organization_id     => l_organization_id
3076                                                 , p_inventory_item_id   => l_inventory_item_id
3077                                                 , p_revision            => l_revision
3078                                                 , p_subinventory_code   => l_subinventory_code
3079                                                 , p_locator_id          => l_locator_id
3080                                                 , p_lot_number          => NULL
3081                                                 , p_transaction_quantity    => l_transaction_quantity
3082                                                 , p_transaction_uom    => l_transaction_uom_code
3083                                                 , p_secondary_quantity  => l_secondary_quantity
3084                                                 , p_secondary_uom_code  => l_secondary_uom_code
3085                                                 );
3086                 --{
3087                 IF (l_qty_check) THEN
3088                    IF (l_debug = 1) THEN
3089                       inv_log_util.trace('validate_quantities IN (validate_group) - PASSED '  , 'INV_TXN_MANAGER_GRP', 9);
3090                    END IF;
3091 
3092                    UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3093                    SET    TRANSACTION_QUANTITY           = l_transaction_quantity,
3094                           SECONDARY_TRANSACTION_QUANTITY = l_secondary_quantity,
3095                           SECONDARY_UOM_CODE             = l_secondary_uom_code
3096                    WHERE  ROWID = l_rowid;
3097 
3098                 ELSE
3099                   -- validation failed
3100                   IF (l_debug = 1) THEN
3101                     inv_log_util.trace('validate_quantities IN (validate_group) - FAIL ' || l_msg_data , 'INV_TXN_MANAGER_GRP', 9);
3102                     inv_log_util.trace('validate_group: TRANSACTION_QUANTITY ' || l_transaction_quantity , 'INV_TXN_MANAGER_GRP', 9);
3103                     inv_log_util.trace('validate_group: SECONDARY_TRANSACTION_QUANTITY ' || l_secondary_quantity || ' uom2 '|| l_secondary_uom_code ,
3104                                              'INV_TXN_MANAGER_GRP', 9);
3105                   END IF;
3106                 END IF;--}
3107         ELSIF (l_lot_control_code = 2 ) THEN
3108           IF (l_debug = 1) THEN
3109               inv_log_util.trace('validate_group: for lot controlled items secondary uom='||l_secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
3110           END IF;
3111           IF (l_secondary_uom_code <> l_item_secondary_uom_code) THEN
3112             IF (l_debug = 1) THEN
3113               inv_log_util.trace('validate_group: sec uom in mti is diff than item sec uom', 'INV_TXN_MANAGER_GRP', 9);
3114             END IF;
3115             loaderrmsg('INV_INCORRECT_SECONDARY_UOM','INV_INCORRECT_SECONDARY_UOM');
3116             errupdate(l_rowid, NULL);
3117           END IF;
3118           --Set the default UOM2 if missing
3119           IF (l_secondary_uom_code IS NULL) THEN
3120             UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3121             SET    SECONDARY_UOM_CODE = l_item_secondary_uom_code
3122             WHERE  ROWID = l_rowid;
3123           END IF;
3124         END IF;--} -- Lot ctl check
3125       ELSE
3126         --tracking is primary. no need for sec uom/qty
3127         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3128         SET    SECONDARY_TRANSACTION_QUANTITY = NULL,
3129                SECONDARY_UOM_CODE             = NULL
3130         WHERE  ROWID = l_rowid;
3131       END IF;--}
3132 
3133         EXIT WHEN AA2%NOTFOUND;
3134         END LOOP;
3135         CLOSE AA2;
3136 
3137 -- INVCONV end fabdi
3138 
3139 
3140 /*------------------------------------------------------+
3141 | Validating Overcompletion transaction quantity
3142 +------------------------------------------------------*/
3143 
3144     FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3145     FND_MESSAGE.set_token('ENTITY1','overcompletion_txn_qty');
3146     FND_MESSAGE.set_token('ENTITY2','zero');
3147 
3148     l_error_exp := FND_MESSAGE.get;
3149 
3150     FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3151     l_error_code := FND_MESSAGE.get;
3152 
3153 
3154     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3155        SET LAST_UPDATE_DATE = SYSDATE,
3156            LAST_UPDATED_BY = p_userid,
3157            LAST_UPDATE_LOGIN = p_loginid,
3158            PROGRAM_UPDATE_DATE = SYSDATE,
3159            PROCESS_FLAG = 3,
3160            LOCK_FLAG = 2,
3161            ERROR_CODE = substrb(l_error_code,1,240),
3162            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3163      WHERE TRANSACTION_HEADER_ID = p_header_id
3164        AND PROCESS_FLAG = 1
3165        AND NVL(OVERCOMPLETION_TRANSACTION_QTY,1) <= 0;
3166 
3167     l_count := SQL%ROWCOUNT;
3168 
3169     FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3170     FND_MESSAGE.set_token('ENTITY1','transaction quantity-cap');
3171     FND_MESSAGE.set_token('ENTITY2','overcompletion_txn_qty');
3172 
3173     l_error_exp := FND_MESSAGE.get;
3174 
3175     FND_MESSAGE.set_name('INV', 'INV_GREATER_THAN');
3176     l_error_code := FND_MESSAGE.get;
3177 
3178 
3179 
3180     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3181        SET LAST_UPDATE_DATE = SYSDATE,
3182            LAST_UPDATED_BY = p_userid,
3183            LAST_UPDATE_LOGIN = p_loginid,
3184            PROGRAM_UPDATE_DATE = SYSDATE,
3185            PROCESS_FLAG = 3,
3186            LOCK_FLAG = 2,
3187            ERROR_CODE = substrb(l_error_code,1,240),
3188            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3189     WHERE TRANSACTION_HEADER_ID = p_header_id
3190       AND PROCESS_FLAG = 1
3191       AND OVERCOMPLETION_TRANSACTION_QTY IS NOT NULL
3192       AND OVERCOMPLETION_TRANSACTION_QTY > TRANSACTION_QUANTITY;
3193 
3194     l_count := l_count + SQL%ROWCOUNT;
3195     IF (l_debug = 1) THEN
3196        inv_log_util.trace('Validating overcompletion quantity ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3197     END IF;
3198 
3199 
3200 /*------------------------------------------------------+
3201 | Validate distribution account
3202   +------------------------------------------------------*/
3203 
3204   IF (l_validate_full) THEN --J-dev
3205 
3206      loaderrmsg('INV_INT_DISTCODE','INV_INT_DISTEXP');
3207 
3208      /*Bug#5176266. Made changes to the below UPDATE statement
3209        to validate the Account effective date against transactions
3210        date( not sysdate)*/
3211 
3212      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3213        SET LAST_UPDATE_DATE = SYSDATE,
3214        LAST_UPDATED_BY = p_userid,
3215        LAST_UPDATE_LOGIN = p_loginid,
3216        PROGRAM_UPDATE_DATE = SYSDATE,
3217        PROCESS_FLAG = 3,
3218        LOCK_FLAG = 2,
3219        ERROR_CODE = substrb(l_error_code,1,240),
3220        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3221        WHERE TRANSACTION_HEADER_ID = p_header_id
3222        AND PROCESS_FLAG = 1
3223        AND DISTRIBUTION_ACCOUNT_ID IS NOT NULL
3224          AND NOT EXISTS (
3225                          SELECT NULL
3226                          FROM GL_CODE_COMBINATIONS GCC
3227                          WHERE GCC.CODE_COMBINATION_ID = MTI.DISTRIBUTION_ACCOUNT_ID
3228                          AND GCC.CHART_OF_ACCOUNTS_ID
3229                          = (SELECT CHART_OF_ACCOUNTS_ID
3230                             FROM ORG_ORGANIZATION_DEFINITIONS OOD
3231                             WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
3232                          AND GCC.ENABLED_FLAG = 'Y'
3233                          AND NVL(GCC.START_DATE_ACTIVE, MTI.TRANSACTION_DATE - 1) <= MTI.TRANSACTION_DATE
3234                          AND NVL(GCC.END_DATE_ACTIVE, MTI.TRANSACTION_DATE + 1) > MTI.TRANSACTION_DATE);
3235 
3236        l_count := SQL%ROWCOUNT;
3237 
3238 
3239        UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3240          SET LAST_UPDATE_DATE = SYSDATE,
3241          LAST_UPDATED_BY = p_userid,
3242          LAST_UPDATE_LOGIN = p_loginid,
3243          PROGRAM_UPDATE_DATE = SYSDATE,
3244          PROCESS_FLAG = 3,
3245          LOCK_FLAG = 2,
3246          ERROR_CODE = substrb(l_error_code,1,240),
3247          ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3248          WHERE TRANSACTION_HEADER_ID = p_header_id
3249          AND PROCESS_FLAG = 1
3250          AND DISTRIBUTION_ACCOUNT_ID IS NULL
3251            AND (TRANSACTION_SOURCE_TYPE_ID = INV_Globals.G_SourceType_Inventory OR
3252                 TRANSACTION_SOURCE_TYPE_ID >=100)
3253          AND NVL(OWNING_ORGANIZATION_ID,organization_id) = organization_id
3254          AND NVL(OWNING_TP_TYPE,2) = 2  -- if it is null we are considering it as normal item..
3255          -- Added the above two lines for the bug # 5896859
3256            AND (TRANSACTION_ACTION_ID IN (1,27)
3257                 AND EXISTS (
3258                             SELECT NULL
3259                             FROM MTL_SYSTEM_ITEMS MSI,
3260                             mtl_secondary_inventories MSUB
3261                             WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3262                             AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3263                             AND MSI.INVENTORY_ASSET_FLAG = 'Y'
3264                             AND MSUB.SECONDARY_INVENTORY_NAME = MTI.SUBINVENTORY_CODE
3265                             AND MSUB.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3266                             AND MSUB.ASSET_INVENTORY = 1));
3267 
3268 
3269          l_count := l_count + SQL%ROWCOUNT;
3270          IF (l_debug = 1) THEN
3271             inv_log_util.trace('Validating distribution account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3272          END IF;
3273 
3274   END IF;--J-dev
3275 
3276 
3277 
3278 /*-----------------------------------------------------------+
3279 | Validate freight and freight account
3280 +-----------------------------------------------------------*/
3281 
3282 
3283   IF (l_validate_full) THEN --J-dev
3284 
3285      loaderrmsg('INV_INT_FRTCODE','INV_INT_FRTEXP');
3286 
3287 
3288      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3289        SET LAST_UPDATE_DATE = SYSDATE,
3290        LAST_UPDATED_BY = p_userid,
3291        LAST_UPDATE_LOGIN = p_loginid,
3292        PROGRAM_UPDATE_DATE = SYSDATE,
3293        PROCESS_FLAG = 3,
3294        LOCK_FLAG = 2,
3295        ERROR_CODE = substrb(l_error_code,1,240),
3296        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3297        WHERE TRANSACTION_HEADER_ID = p_header_id
3298        AND TRANSACTION_ACTION_ID in (3,21)
3299        AND FREIGHT_CODE IS NOT NULL
3300          AND PROCESS_FLAG = 1
3301          AND NOT EXISTS (
3302                          SELECT NULL
3303                          FROM ORG_FREIGHT FR
3304                          WHERE FR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3305                          AND FR.FREIGHT_CODE    = MTI.FREIGHT_CODE
3306                          AND NVL(FR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
3307 
3308        l_count := SQL%ROWCOUNT;
3309        loaderrmsg('INV_INT_FRTACTCODE','INV_INT_FRTACTEXP');
3310 
3311 
3312        UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3313          SET LAST_UPDATE_DATE = SYSDATE,
3314          LAST_UPDATED_BY = p_userid,
3315          LAST_UPDATE_LOGIN = p_loginid,
3316          PROGRAM_UPDATE_DATE = SYSDATE,
3317          PROCESS_FLAG = 3,
3318          LOCK_FLAG = 2,
3319          ERROR_CODE = substrb(l_error_code,1,240),
3320          ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3321          WHERE TRANSACTION_HEADER_ID = p_header_id
3322          AND TRANSACTION_ACTION_ID in (3,21)
3323          AND TRANSPORTATION_ACCOUNT IS NOT NULL
3324            AND PROCESS_FLAG = 1
3325            AND NOT EXISTS (
3326                            SELECT NULL
3327                            FROM ORG_FREIGHT FR
3328                            WHERE FR.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3329                            AND FR.FREIGHT_CODE    = MTI.FREIGHT_CODE
3330                            AND FR.DISTRIBUTION_Account = MTI.TRANSPORTATION_ACCOUNT
3331                            AND NVL(FR.DISABLE_DATE, SYSDATE + 1) > SYSDATE);
3332 
3333          l_count := l_count + SQL%ROWCOUNT;
3334          IF (l_debug = 1) THEN
3335             inv_log_util.trace('Validating freight account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3336          END IF;
3337   END IF; --J-dev
3338 
3339 /*--------------------------------------------------------+
3340 | Start validation of wip_entity for wip transactions for
3341 | non-CFMs.
3342 |+--------------------------------------------------------*/
3343 
3344   --J-dev This should not be done for WIP MTI records in J.
3345   -- WIP will do this validation.
3346   IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3347      loaderrmsg('INV_INT_SRCCODE','INV_INT_SRCWIPEXP');
3348 
3349 
3350      IF srctypeid = 5 THEN
3351 
3352         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3353           SET LAST_UPDATE_DATE = SYSDATE,
3354           LAST_UPDATED_BY = p_userid,
3355           LAST_UPDATE_LOGIN = p_loginid,
3356           PROGRAM_UPDATE_DATE = SYSDATE,
3357           PROCESS_FLAG = 3,
3358           LOCK_FLAG = 2,
3359           ERROR_CODE = substrb(l_error_code,1,240),
3360           ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3361           WHERE TRANSACTION_HEADER_ID = p_header_id
3362           AND PROCESS_FLAG = 1
3363           AND TRANSACTION_SOURCE_TYPE_ID = 5
3364           AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'N'
3365           AND NOT EXISTS (
3366                           SELECT NULL
3367                           FROM WIP_ENTITIES WEN
3368                           WHERE WEN.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3369                           AND WEN.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID);
3370 
3371         l_count := SQL%ROWCOUNT;
3372         IF (l_debug = 1) THEN
3373            inv_log_util.trace('Validating wip entity non-CFM ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3374         END IF;
3375      END IF;
3376   END IF;--J-dev
3377 
3378 
3379 /*------------------------------------------------------+
3380 |  Start validation of wip_entity for wip transactions
3381 |  that are CFMs
3382 +------------------------------------------------------*/
3383 
3384   --J-dev
3385   --This validation should not be done for WIP MTI in J.
3386   --WIP will do this validation in J.
3387 
3388   IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3389      loaderrmsg('INV_INT_SRCCODE','INV_INT_SRCCFMEXP');
3390      IF srctypeid = 5 THEN
3391         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3392           SET LAST_UPDATE_DATE = SYSDATE,
3393           LAST_UPDATED_BY = p_userid,
3394           LAST_UPDATE_LOGIN = p_loginid,
3395           PROGRAM_UPDATE_DATE = SYSDATE,
3396           PROCESS_FLAG = 3,
3397           LOCK_FLAG = 2,
3398           ERROR_CODE = substrb(l_error_code,1,240),
3399           ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3400           WHERE TRANSACTION_HEADER_ID = p_header_id
3401           AND PROCESS_FLAG = 1
3402           AND TRANSACTION_SOURCE_TYPE_ID = 5
3403           AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'Y'
3404           AND NOT EXISTS (
3405                           SELECT NULL
3406                           FROM WIP_ENTITIES WEN
3407                           WHERE WEN.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3408                           AND WEN.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID);
3409 
3410         l_count := SQL%ROWCOUNT;
3411         IF (l_debug = 1) THEN
3412            inv_log_util.trace('Validating wip entity CFM ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3413         END IF;
3414      END IF;
3415   END IF;--J-dev
3416 
3417 /*---------------------------------------------------------------+
3418 |  Validating Projects Contracts
3419 |
3420 +----------------------------------------------------------------*/
3421 /* load message to detect source project contracts error*/
3422 
3423   IF (l_validate_full) THEN --J-dev
3424 
3425      loaderrmsg('INV_PROJCON_ERR','INV_PROJCON_ERR');
3426 
3427      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3428        SET LAST_UPDATE_DATE = SYSDATE,
3429        LAST_UPDATED_BY = p_userid,
3430        LAST_UPDATE_LOGIN = p_loginid,
3431        PROCESS_FLAG = 3,
3432        ERROR_CODE = substrb(l_error_code,1,240),
3433        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3434        WHERE TRANSACTION_HEADER_ID = p_header_id
3435        AND TRANSACTION_SOURCE_TYPE_ID = INV_GLOBALS.G_SourceType_PrjContracts
3436        AND NOT EXISTS (
3437                        SELECT NULL
3438                        FROM   OKE_K_HEADERS_V OKHV
3439                        WHERE  MTI.TRANSACTION_SOURCE_ID = OKHV.K_HEADER_ID);
3440 
3441      l_count := SQL%ROWCOUNT;
3442      /*-----------------------------------------------------------+
3443      | Start validating source_project_id, source_task_id,
3444        | expenditure_type and expenditure_org_id for miscllaneous
3445        | trxs that are project related.
3446        +-----------------------------------------------------------*/
3447 
3448        -- Bug #2505534 Moved validation of source_project_id inside validate_line()
3449 
3450        /* validate source task id */
3451        loaderrmsg('INV_TASK_ERR','INV_TASK_ERR');
3452 
3453 
3454      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3455        SET LAST_UPDATE_DATE = SYSDATE,
3456        LAST_UPDATED_BY = p_userid,
3457        LAST_UPDATE_LOGIN = p_loginid,
3458        PROGRAM_UPDATE_DATE = SYSDATE,
3459        PROCESS_FLAG = 3,
3460        LOCK_FLAG = 2,
3461        ERROR_CODE = substrb(l_error_code,1,240),
3462        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3463        WHERE TRANSACTION_HEADER_ID = p_header_id
3464        AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3465             (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3466        AND TRANSACTION_ACTION_ID IN (1, 27 )
3467        AND PROCESS_FLAG = 1
3468        AND EXISTS (
3469                    SELECT NULL
3470                    FROM MTL_TRANSACTION_TYPES MTTY
3471                    WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3472                    AND MTTY.TYPE_CLASS = 1 )
3473        AND NOT EXISTS (
3474                        SELECT NULL
3475                        FROM PA_TASKS_LOWEST_V TSK
3476                        WHERE TSK.PROJECT_ID = MTI.SOURCE_PROJECT_ID AND
3477                        TSK.TASK_ID = MTI.SOURCE_TASK_ID );
3478 
3479 
3480      l_count := l_count + SQL%ROWCOUNT;
3481 
3482      /* validate expenditure type */
3483      /* get value of profile INV:Miscllaneous Project transaction to see
3484      if the expenditure type field is required and has a value or
3485        that it does not have a user entered value
3486        INV: Project Miscellaneous Transaction Expenditure Type
3487        INV_PROJ_MISC_TXN_EXP_TYPE
3488        user_entered = 2 (user must provide valid exp type)
3489        system derived = 1 (user must NOT provide any value for exp type)
3490        */
3491 
3492        SELECT FND_PROFILE.VALUE('INV_PROJ_MISC_TXN_EXP_TYPE')
3493        INTO l_profile
3494        FROM dual;
3495 
3496      IF SQL%FOUND THEN
3497         if l_profile = '2' THEN
3498            exp_type_required := 2 ;
3499          else
3500            exp_type_required := 1 ;
3501         end if;
3502       ELSE
3503         exp_type_required := 1;
3504      END IF;
3505 
3506      loaderrmsg('INV_ETYPE_ERR','INV_ETYPE_ERR');
3507      IF  exp_type_required = 2 THEN
3508 
3509         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3510           SET LAST_UPDATE_DATE = SYSDATE,
3511           LAST_UPDATED_BY = p_userid,
3512           LAST_UPDATE_LOGIN = p_loginid,
3513           PROGRAM_UPDATE_DATE = SYSDATE,
3514           PROCESS_FLAG = 3,
3515           LOCK_FLAG = 2,
3516           ERROR_CODE = substrb(l_error_code,1,240),
3517           ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3518           WHERE TRANSACTION_HEADER_ID = p_header_id
3519           AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3520                (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3521           AND TRANSACTION_ACTION_ID IN (1, 27 )
3522           AND PROCESS_FLAG = 1
3523           AND EXISTS (
3524                       SELECT NULL
3525                       FROM MTL_TRANSACTION_TYPES MTTY
3526                       WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3527                       AND MTTY.TYPE_CLASS = 1 )
3528           AND NOT EXISTS (
3529                           SELECT NULL
3530                           FROM CST_PROJ_EXP_TYPES_VAL_V CET
3531                           WHERE CET.EXPENDITURE_TYPE = MTI.EXPENDITURE_TYPE
3532                           AND CET.COST_ELEMENT_ID = 1
3533                           AND TRUNC(MTI.TRANSACTION_DATE) >= CET.SYS_LINK_START_DATE
3534                           AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(SYS_LINK_END_DATE,
3535                                                                  MTI.TRANSACTION_DATE + 1)
3536                           AND TRUNC(MTI.TRANSACTION_DATE) >= CET.EXP_TYPE_START_DATE
3537                           AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(EXP_TYPE_END_DATE,
3538                                                                  MTI.TRANSACTION_DATE+1)) ;
3539 
3540         l_count := l_count + SQL%ROWCOUNT;
3541 
3542       ELSE
3543         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3544           SET LAST_UPDATE_DATE = SYSDATE,
3545           LAST_UPDATED_BY = p_userid,
3546           LAST_UPDATE_LOGIN = p_loginid,
3547           PROGRAM_UPDATE_DATE = SYSDATE,
3548           PROCESS_FLAG = 3,
3549           LOCK_FLAG = 2,
3550           ERROR_CODE = substrb(l_error_code,1,240),
3551           ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3552           WHERE TRANSACTION_HEADER_ID = p_header_id
3553           AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
3554                (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
3555           AND TRANSACTION_ACTION_ID IN (1, 27 )
3556           AND PROCESS_FLAG = 1
3557           AND EXISTS (
3558                       SELECT NULL
3559                       FROM MTL_TRANSACTION_TYPES MTTY
3560                       WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
3561                       AND MTTY.TYPE_CLASS = 1 )
3562           AND MTI.EXPENDITURE_TYPE IS NOT NULL ;
3563 
3564           l_count := l_count + SQL%ROWCOUNT;
3565 
3566      END IF;
3567 
3568      /* validate expenditure org id */
3569      --Bug #2505534 moved validation code inside validate_line()
3570      /*+--------------------------------------------------------------+
3571      | Now validate cost group ids, these must exist and must be    |
3572        | enabled in terms of date                                     |
3573        +--------------------------------------------------------------+*/
3574        loaderrmsg('INV_INT_CSTGRP','INV_INT_CSTEXP');
3575 
3576      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3577        SET LAST_UPDATE_DATE = SYSDATE,
3578        LAST_UPDATED_BY = p_userid,
3579        LAST_UPDATE_LOGIN = p_loginid,
3580        PROGRAM_UPDATE_DATE = SYSDATE,
3581        PROCESS_FLAG = 3,
3582        LOCK_FLAG = 2,
3583        ERROR_CODE = substrb(l_error_code,1,240),
3584        ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3585        WHERE TRANSACTION_HEADER_ID = p_header_id
3586        AND PROCESS_FLAG = 1
3587        --AND TRANSACTION_ACTION_ID = 24
3588        --AND TRANSACTION_SOURCE_TYPE_ID IN (13,15)
3589        AND COST_GROUP_ID IS NOT NULL
3590          AND NOT EXISTS (
3591                          SELECT NULL
3592                          FROM CST_COST_GROUPS CCG
3593                          WHERE CCG.COST_GROUP_ID = MTI.COST_GROUP_ID
3594                          AND NVL(CCG.ORGANIZATION_ID, MTI.ORGANIZATION_ID)
3595                          =MTI.ORGANIZATION_ID
3596                          AND TRUNC(NVL(CCG.DISABLE_DATE,SYSDATE+1)) >= TRUNC(SYSDATE) ) ;
3597 
3598        l_count := SQL%ROWCOUNT;
3599        IF (l_debug = 1) THEN
3600           inv_log_util.trace('Validating cost group ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3601        END IF;
3602 
3603   END IF;--J-dev
3604 
3605 
3606   /*+-----------------------------------------------------------------------+
3607   | Now validate transfer cost group ids, these must exist and must be    |
3608     | enabled in terms of date                                              |
3609     +-----------------------------------------------------------------------+*/
3610     loaderrmsg('INV_INT_XCSTGRP','INV_INT_XCSTEXP');
3611 
3612   UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3613     SET LAST_UPDATE_DATE = SYSDATE,
3614     LAST_UPDATED_BY = p_userid,
3615     LAST_UPDATE_LOGIN = p_loginid,
3616     PROGRAM_UPDATE_DATE = SYSDATE,
3617     PROCESS_FLAG = 3,
3618     LOCK_FLAG = 2,
3619     ERROR_CODE = substrb(l_error_code,1,240),
3620     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3621     WHERE TRANSACTION_HEADER_ID = p_header_id
3622     AND PROCESS_FLAG = 1
3623     AND TRANSFER_COST_GROUP_ID IS NOT NULL
3624       AND NOT EXISTS (
3625                       SELECT NULL
3626                       FROM CST_COST_GROUPS CCG
3627                       WHERE CCG.COST_GROUP_ID = MTI.TRANSFER_COST_GROUP_ID
3628                       AND NVL(CCG.ORGANIZATION_ID, MTI.ORGANIZATION_ID) =
3629                       MTI.ORGANIZATION_ID
3630                       AND TRUNC(NVL(CCG.DISABLE_DATE,SYSDATE+1)) >= TRUNC(SYSDATE) ) ;
3631 
3632 
3633     l_count := SQL%ROWCOUNT;
3634     IF (l_debug = 1) THEN
3635        inv_log_util.trace('Validating xfer cost group ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3636     END IF;
3637 
3638     /*-------------------------------------------------------------+
3639     | Validate the interface table for Planning Organization
3640       | to be used for VMI transactions
3641       +-------------------------------------------------------------*/
3642 
3643       loaderrmsg('INV_INT_PLANORG','INV_INT_PLANORG');
3644 
3645 /*Bug#4951558. In the where clause of the below UPDATE statement, added the
3646   condition, 'paa.using_organization_code = -1' because
3647   'using_organization_code' is set to -1 in the table, 'po_asl_attributes' if
3648   the global flag is set to 'Yes' in the ASL for an (item, supplier)
3649   combination*/
3650 
3651     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3652       SET LAST_UPDATE_DATE = SYSDATE,
3653       LAST_UPDATED_BY = p_userid,
3654       LAST_UPDATE_LOGIN = p_loginid,
3655       PROGRAM_UPDATE_DATE = SYSDATE,
3656       PROCESS_FLAG = 3,
3657       LOCK_FLAG = 2,
3658       ERROR_CODE = substrb(l_error_code,1,240),
3659       ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3660       WHERE TRANSACTION_HEADER_ID = p_header_id
3661       AND  PROCESS_FLAG = 1
3662       AND PLANNING_ORGANIZATION_ID IS NOT NULL
3663         AND planning_tp_type = 1
3664         AND planning_organization_id <> ORGANIZATION_ID
3665         AND NOT EXISTS (
3666                         SELECT NULL
3667                         FROM po_asl_attributes paa
3668                         WHERE PAA.vendor_site_id = mti.planning_organization_id
3669                         AND PAA.ITEM_ID = MTI.INVENTORY_ITEM_ID
3670                         AND (paa.using_organization_id = -1 OR
3671                              paa.using_organization_id = mti.organization_id));
3672 
3673       l_count := SQL%ROWCOUNT;
3674       IF (l_debug = 1) THEN
3675          inv_log_util.trace('Validating group Plann Org:Supplier' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3676       END IF;
3677 
3678       --if the planning _org is a inventory org it should be in
3679       --mtl_parameters.
3680 
3681       UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3682         SET LAST_UPDATE_DATE = SYSDATE,
3683         LAST_UPDATED_BY = p_userid,
3684         LAST_UPDATE_LOGIN = p_loginid,
3685         PROGRAM_UPDATE_DATE = SYSDATE,
3686         PROCESS_FLAG = 3,
3687         LOCK_FLAG = 2,
3688         ERROR_CODE = substrb(l_error_code,1,240),
3689         ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3690         WHERE TRANSACTION_HEADER_ID = p_header_id
3691         AND  PROCESS_FLAG = 1
3692         AND PLANNING_ORGANIZATION_ID IS NOT NULL
3693           AND planning_tp_type = 2
3694           AND planning_organization_id <> ORGANIZATION_ID
3695           AND NOT EXISTS (
3696                           SELECT NULL
3697                           FROM mtl_parameters mp
3698                           where
3699                           mp.organization_id = mti.planning_organization_id);
3700 
3701 
3702         l_count := SQL%ROWCOUNT;
3703         IF (l_debug = 1) THEN
3704            inv_log_util.trace('Validating group Planning Org:Inventory Org' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3705         END IF;
3706 
3707 
3708         /*-------------------------------------------------------------+
3709         | Validate the Interface table for LPN
3710           +-------------------------------------------------------------*/
3711 
3712           loaderrmsg('INV_INT_LPN','INV_INT_LPN');
3713 
3714 
3715         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3716           SET LAST_UPDATE_DATE = SYSDATE,
3717           LAST_UPDATED_BY = p_userid,
3718           LAST_UPDATE_LOGIN = p_loginid,
3719           PROGRAM_UPDATE_DATE = SYSDATE,
3720           PROCESS_FLAG = 3,
3721           LOCK_FLAG = 2,
3722           ERROR_CODE = substrb(l_error_code,1,240),
3723           ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3724           WHERE TRANSACTION_HEADER_ID = p_header_id
3725           AND  PROCESS_FLAG = 1
3726           AND  lpn_id IS NOT NULL
3727             AND NOT EXISTS (
3728                             SELECT NULL
3729                             FROM wms_license_plate_numbers wlpn
3730                             where
3731                             wlpn.lpn_id = mti.lpn_id);
3732 
3733 
3734           l_count := SQL%ROWCOUNT;
3735           IF (l_debug = 1) THEN
3736              inv_log_util.trace('Validating group LPN:LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3737           END IF;
3738 
3739           --Validate Xfr LPN
3740 
3741           UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3742             SET LAST_UPDATE_DATE = SYSDATE,
3743             LAST_UPDATED_BY = p_userid,
3744             LAST_UPDATE_LOGIN = p_loginid,
3745             PROGRAM_UPDATE_DATE = SYSDATE,
3746             PROCESS_FLAG = 3,
3747             LOCK_FLAG = 2,
3748             ERROR_CODE = substrb(l_error_code,1,240),
3749             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3750             WHERE TRANSACTION_HEADER_ID = p_header_id
3751             AND  PROCESS_FLAG = 1
3752             AND  TRANSFER_LPN_ID IS NOT NULL
3753               AND NOT EXISTS (
3754                               SELECT NULL
3755                               FROM wms_license_plate_numbers wlpn
3756                               where
3757                               wlpn.lpn_id = mti.TRANSFER_LPN_ID);
3758 
3759 
3760             l_count := SQL%ROWCOUNT;
3761             IF (l_debug = 1) THEN
3762                inv_log_util.trace('Validating group LPN:XFER_LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3763             END IF;
3764 
3765 
3766             --Validate Content LPN
3767 
3768             UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3769               SET LAST_UPDATE_DATE = SYSDATE,
3770               LAST_UPDATED_BY = p_userid,
3771               LAST_UPDATE_LOGIN = p_loginid,
3772               PROGRAM_UPDATE_DATE = SYSDATE,
3773               PROCESS_FLAG = 3,
3774               LOCK_FLAG = 2,
3775               ERROR_CODE = substrb(l_error_code,1,240),
3776               ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3777               WHERE TRANSACTION_HEADER_ID = p_header_id
3778               AND  PROCESS_FLAG = 1
3779               AND  CONTENT_LPN_ID IS NOT NULL
3780                 AND NOT EXISTS (
3781                                 SELECT NULL
3782                                 FROM wms_license_plate_numbers wlpn
3783                                 where
3784                                 wlpn.lpn_id = mti.CONTENT_LPN_ID);
3785 
3786 
3787               l_count := SQL%ROWCOUNT;
3788               IF (l_debug = 1) THEN
3789                  inv_log_util.trace('Validating group LPN:Content_LPN_ID' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3790               END IF;
3791 
3792 
3793 /*-------------------------------------------------------------+
3794 | Update the interface table with shippable item flag
3795 | to be used for OE transactions
3796 +-------------------------------------------------------------*/
3797 
3798 
3799 
3800   IF (srctypeid = INV_GLOBALS.G_SourceType_SalesOrder OR
3801       srctypeid = INV_GLOBALS.G_SourceType_IntOrder OR
3802       srctypeid = INV_GLOBALS.G_SourceType_PrjContracts) THEN
3803      UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3804        SET LAST_UPDATE_DATE = SYSDATE,
3805        LAST_UPDATED_BY = p_userid,
3806        LAST_UPDATE_LOGIN = p_loginid,
3807        PROGRAM_UPDATE_DATE = SYSDATE,
3808        SHIPPABLE_FLAG = (SELECT SHIPPABLE_ITEM_FLAG
3809                          FROM MTL_SYSTEM_ITEMS MSI
3810                          WHERE MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
3811                          AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
3812        WHERE TRANSACTION_HEADER_ID = p_header_id
3813        AND INVENTORY_ITEM_ID IS NOT NULL
3814          AND TRANSACTION_SOURCE_TYPE_ID in (2,8,16)
3815          AND PROCESS_FLAG = 1;
3816 
3817   END IF;
3818 
3819   /*-----------------------------------------------------------+
3820   | Deriving values for inventory_item_id and wip_entity_type
3821     | for WIP transactions. Do this for bot CFM and non-CFMs.
3822     +------------------------------------------------------------*/
3823 
3824     --J-dev
3825     --This validation should not be done for WIP MTI in J.
3826     --WIP will do this validation in J.
3827 
3828      IF (srctypeid = 5 AND wip_constants.dmf_patchset_level< wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
3829 
3830         IF (srctypeid = 5) THEN
3831            UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3832              SET LAST_UPDATE_DATE = SYSDATE,
3833              LAST_UPDATED_BY = p_userid,
3834              LAST_UPDATE_LOGIN = p_loginid,
3835              PROGRAM_UPDATE_DATE = SYSDATE,
3836              INVENTORY_ITEM_ID = (SELECT DECODE(MTI.TRANSACTION_ACTION_ID,30,
3837                                                 PRIMARY_ITEM_ID,31,PRIMARY_ITEM_ID,32,
3838                                                 PRIMARY_ITEM_ID,
3839                                                 MTI.INVENTORY_ITEM_ID) -- CFM Scrap Transactions
3840                                   FROM WIP_ENTITIES WE
3841                                   WHERE WE.WIP_ENTITY_ID  = MTI.TRANSACTION_SOURCE_ID
3842                                   AND WE.ORGANIZATION_ID = MTI.ORGANIZATION_ID),
3843              WIP_ENTITY_TYPE = (SELECT ENTITY_TYPE
3844                                 FROM WIP_ENTITIES WE
3845                                 WHERE WE.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3846                                 AND WE.WIP_ENTITY_ID = MTI.TRANSACTION_SOURCE_ID)
3847              WHERE TRANSACTION_HEADER_ID = p_header_id
3848              AND TRANSACTION_SOURCE_TYPE_ID = 5
3849              AND PROCESS_FLAG = 1;
3850 
3851 
3852            /*-------------------------------------------------------------+
3853            | Update MTI with right op seq num for non-CFMs
3854              +--------------------------------------------------------------*/
3855 
3856              UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3857              SET LAST_UPDATE_DATE = SYSDATE,
3858              LAST_UPDATED_BY = p_userid,
3859              LAST_UPDATE_LOGIN = p_loginid,
3860              PROGRAM_UPDATE_DATE = SYSDATE,
3861              OPERATION_SEQ_NUM = (SELECT nvl(max(operation_seq_num),1)
3862                                   FROM WIP_OPERATIONS WO
3863                                   WHERE WO.WIP_ENTITY_ID  = MTI.TRANSACTION_SOURCE_ID
3864                                   AND WO.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
3865              WHERE TRANSACTION_HEADER_ID = p_header_id
3866              AND TRANSACTION_SOURCE_TYPE_ID = 5
3867              AND UPPER(NVL(FLOW_SCHEDULE,'N')) = 'N'
3868              AND TRANSACTION_ACTION_ID IN (32,31)
3869              AND PROCESS_FLAG = 1;
3870 
3871         END IF;
3872      END IF;--J-dev
3873 
3874 /*-------------------------------------------------------------+
3875 | If a single transaction within a group fails all transactions
3876 | in that group should not be processed.
3877 +--------------------------------------------------------------*/
3878 
3879       loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
3880 
3881       UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3882             SET LAST_UPDATE_DATE = SYSDATE,
3883             LAST_UPDATED_BY = p_userid,
3884             LAST_UPDATE_LOGIN = p_loginid,
3885             PROGRAM_UPDATE_DATE = SYSDATE,
3886             PROCESS_FLAG = 3,
3887             LOCK_FLAG = 2,
3888             ERROR_CODE = substrb(l_error_code,1,240)
3889         WHERE TRANSACTION_HEADER_ID = p_header_id
3890         AND PROCESS_FLAG = 1
3891         AND TRANSACTION_BATCH_ID IN
3892                (SELECT DISTINCT MTI2.TRANSACTION_BATCH_ID
3893                 FROM MTL_TRANSACTIONS_INTERFACE MTI2
3894                 WHERE MTI2.TRANSACTION_HEADER_ID = p_header_id
3895                   AND MTI2.PROCESS_FLAG = 3
3896                   AND MTI2.ERROR_CODE IS NOT NULL);
3897 
3898 
3899 -- start of fix for eam
3900 -- added following validation on rebuild_item_id (valid in MSI and transactable)
3901 -- and rebuild_activity_id (valid in MSI)
3902 /*----------------------------------------------------+
3903 | validate rebuild item id and rebuild activity id where it is specified
3904 +----------------------------------------------------*/
3905 
3906 
3907    IF (l_validate_full) THEN --J-dev
3908 
3909       loaderrmsg('INV_REB_ITMCODE','INV_REB_ITMEXP');
3910 
3911       /* Bug# 5264549 : made changes to the REBUILD_ITEM_ID query to
3912          update EAM validations from Transaction Manager */
3913 
3914       UPDATE MTL_TRANSACTIONS_INTERFACE MTI
3915         SET LAST_UPDATE_DATE = SYSDATE,
3916         LAST_UPDATED_BY = p_userid,
3917         LAST_UPDATE_LOGIN = p_loginid,
3918         PROGRAM_UPDATE_DATE = SYSDATE,
3919         PROCESS_FLAG = 3,
3920         LOCK_FLAG = 2,
3921         ERROR_CODE = substrb(l_error_code,1,240),
3922         ERROR_EXPLANATION = substrb(l_error_exp,1,240)
3923         WHERE TRANSACTION_HEADER_ID = p_header_id
3924         AND PROCESS_FLAG = 1
3925         AND ((REBUILD_ITEM_ID IS NOT NULL
3926               AND NOT EXISTS (
3927                               SELECT NULL
3928                               FROM MTL_SYSTEM_ITEMS MSI, MTL_PARAMETERS MP
3929                               WHERE MSI.INVENTORY_ITEM_ID = MTI.REBUILD_ITEM_ID
3930                               AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
3931                               AND MP.MAINT_ORGANIZATION_ID = MTI.ORGANIZATION_ID
3932                               AND MSI.EAM_ITEM_TYPE = 3
3933                               AND MSI.MTL_TRANSACTIONS_ENABLED_FLAG = 'Y'))
3934 
3935               OR (REBUILD_ACTIVITY_ID IS NOT NULL
3936                  AND NOT EXISTS (
3937                                  SELECT NULL
3938                                  FROM MTL_SYSTEM_ITEMS MSI
3939                                  WHERE MSI.INVENTORY_ITEM_ID = MTI.REBUILD_ACTIVITY_ID
3940                                  AND MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
3941                                  AND MSI.EAM_ITEM_TYPE = 2)));
3942 
3943              l_count := SQL%ROWCOUNT;
3944              IF (l_debug = 1) THEN
3945                 inv_log_util.trace('Validating rebuild items ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
3946              END IF;
3947              -- end of fix for eam
3948 
3949    END IF;--J-dev
3950 
3951    x_return_status := FND_API.G_RET_STS_SUCCESS;
3952 
3953    FND_MESSAGE.clear;
3954 
3955 
3956 EXCEPTION
3957     WHEN OTHERS THEN
3958        IF (l_debug = 1) THEN
3959           inv_log_util.trace('Error in validate_group : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
3960           inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
3961        END IF;
3962        x_return_status := FND_API.G_RET_STS_ERROR;
3963        FND_MESSAGE.clear;
3964 
3965 END validate_group;
3966 
3967 
3968 
3969 
3970 
3971 /******* LINE VALIDATION OBJECTS  ***************/
3972 
3973 /******************************************************************
3974  *
3975  * lotcheck
3976  *
3977  ******************************************************************/
3978 FUNCTION lotcheck(p_rowid VARCHAR2, p_orgid NUMBER, p_itemid NUMBER, p_intid NUMBER,
3979                p_priuom VARCHAR2, p_trxuom VARCHAR2, p_lotuniq NUMBER,
3980                p_shlfcode NUMBER, p_shlfdays NUMBER, p_serctrl NUMBER, p_srctype NUMBER, p_acttype NUMBER,
3981                p_is_wsm_enabled VARCHAR2,
3982                             -- INVCONV start fabdi
3983                            p_trx_typeid NUMBER, p_revision VARCHAR2, p_subinvtory_code VARCHAR2, p_locator NUMBER)
3984                            -- INVCONV end fabdi
3985 
3986 RETURN BOOLEAN
3987 IS
3988   -- INVCONV fabdi start
3989   CURSOR INT3 IS
3990   SELECT LOT_NUMBER,
3991          TRANSACTION_QUANTITY,
3992         -- INVCONV start fabdi
3993          SECONDARY_TRANSACTION_QUANTITY,
3994          GRADE_CODE,
3995          RETEST_DATE,
3996          MATURITY_DATE,
3997          PARENT_LOT_NUMBER,
3998          ORIGINATION_DATE,
3999          ORIGINATION_TYPE,
4000          EXPIRATION_ACTION_CODE,
4001          EXPIRATION_ACTION_DATE,
4002          LOT_EXPIRATION_DATE,
4003          HOLD_DATE,
4004          REASON_ID,
4005          -- INVCONV end fabdi
4006          SERIAL_TRANSACTION_TEMP_ID,
4007          fnd_date.date_to_canonical(LOT_EXPIRATION_DATE),
4008          ROWID,
4009          parent_object_type,      --R12 Genealogy enhancements
4010          parent_object_id,        --R12 Genealogy enhancements
4011          parent_object_number,    --R12 Genealogy enhancements
4012          parent_item_id,          --R12 Genealogy enhancements
4013          parent_object_type2,     --R12 Genealogy enhancements
4014          parent_object_id2,       --R12 Genealogy enhancements
4015          parent_object_number2    --R12 Genealogy enhancements
4016   FROM MTL_TRANSACTION_LOTS_INTERFACE
4017   WHERE TRANSACTION_INTERFACE_ID = p_intid;
4018   -- INVCONV fabdi end
4019 
4020 
4021 
4022     l_lotnum VARCHAR2(80); -- changed lot_number to 80,  inconv
4023     --- mrana changed to type ROWID   l_lotrowid VARCHAR2(20);
4024     l_lotrowid ROWID;
4025     l_lotexpdate VARCHAR2(22);
4026     l_userid NUMBER := -1; --prg_info.userid;
4027     l_reqstid NUMBER := -1; -- prg_info.reqstid;
4028     l_applid NUMBER := -1; -- prg_info.appid;
4029     l_progid NUMBER := -1; -- prg_info.progid;
4030     l_loginid NUMBER := -1; -- prg_info.loginid;
4031     l_lotqty NUMBER;
4032     l_lotpriqty NUMBER;
4033     l_sertempid NUMBER;
4034     l_tnum NUMBER;
4035 
4036         -- INVCONV start fabdi
4037     L_parent_object_type      NUMBER;    --R12 Genealogy enhancements
4038     L_parent_object_id        NUMBER;    --R12 Genealogy enhancements
4039     L_parent_object_number    NUMBER;    --R12 Genealogy enhancements
4040     L_parent_item_id          NUMBER;    --R12 Genealogy enhancements
4041     L_parent_object_type2     NUMBER;    --R12 Genealogy enhancements
4042     L_parent_object_id2       NUMBER;    --R12 Genealogy enhancements
4043     L_parent_object_number2   NUMBER;    --R12 Genealogy enhancements
4044     l_table  VARCHAR2(10);
4045     l_rowid  ROWID;
4046     l_serrowid  ROWID;
4047     l_fm_serial_number  VARCHAR2(30);
4048     l_to_serial_number  VARCHAR2(30);
4049 
4050     /* get copy lot attribute flag  */
4051         CURSOR get_org_copy_lot_flag   IS
4052     SELECT  copy_lot_attribute_flag,
4053             lot_number_generation
4054     FROM  mtl_parameters
4055     WHERE  organization_id = p_orgid;
4056 
4057        /* get item information */
4058     CURSOR  c_get_item_info IS
4059     SELECT COPY_LOT_ATTRIBUTE_FLAG , child_lot_flag
4060         from mtl_system_items
4061         WHERE inventory_item_id = p_itemid
4062     AND  organization_id   = p_orgid;
4063 
4064     -- nsinghi bug 5209065. Added the cursor.
4065     CURSOR cur_get_interface_id IS
4066        SELECT transaction_interface_id
4067        FROM MTL_TRANSACTIONS_INTERFACE
4068        WHERE ROWID = p_rowid;
4069 
4070     l_item_copy_lot_attribute_flag VARCHAR2(1);
4071     l_org_copy_lot_attribute_flag VARCHAR2(1);
4072     l_lot_number_generation NUMBER;
4073     l_copy_lot_attribute_flag  VARCHAR2(1);
4074     l_child_lot_enabled  VARCHAR2(1);
4075 
4076         l_transaction_uom_code VARCHAR(3);
4077         l_secondary_quantity NUMBER;
4078         l_secondary_uom_code VARCHAR(3);
4079         l_qty_check BOOLEAN;
4080 
4081         l_grade_code  VARCHAR2(250);
4082         l_retest_date  DATE;
4083         l_maturity_date    DATE;
4084         l_parent_lot_number VARCHAR2(80);
4085         l_origination_date DATE;
4086         l_origination_type    NUMBER;
4087         l_expiration_action_code  VARCHAR2(80);
4088         l_expiration_action_date   DATE    ;
4089         l_expiration_date     DATE;
4090         l_hold_date     DATE;
4091         l_attr_check boolean;
4092         l_error_message  varchar2(200);
4093         l_reason_id number;
4094 
4095         l_return_status  VARCHAR(3);
4096         l_msg_count NUMBER;
4097         l_msg_data VARCHAR(200);
4098 
4099         -- INVCONV end fabdi
4100         l_interface_id NUMBER; -- nsinghi bug 5209065
4101 
4102 BEGIN
4103 g_pkg_name := 'Lot_check';
4104 
4105    if (l_debug is null) then
4106        l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
4107     end if;
4108     if l_debug = 1 then
4109         mydebug ('In lot check ...' );
4110         mydebug ('p_rowid : ' || p_rowid );
4111         mydebug ('p_orgid  : ' || p_orgid  );
4112         mydebug ('p_itemid  : ' || p_itemid  );
4113         mydebug ('p_intid  : ' || p_intid  );
4114         mydebug ('p_priuom  : ' || p_priuom  );
4115         mydebug ('p_trxuom  : ' || p_trxuom  );
4116         mydebug ('p_lotuniq  : ' || p_lotuniq  );
4117         mydebug ('p_shlfcode  : ' || p_shlfcode  );
4118         mydebug ('p_shlfdays  : ' || p_shlfdays  );
4119         mydebug ('p_serctrl  : ' || p_serctrl  );
4120         mydebug ('p_srctype : ' || p_srctype );
4121         mydebug ('p_acttype  : ' || p_acttype  );
4122         mydebug ('p_trx_typeid  : ' || p_trx_typeid  );
4123         mydebug ('p_revision  : ' || p_revision  );
4124         mydebug ('p_subinvtory_code : ' || p_subinvtory_code );
4125         mydebug ('p_locator  : ' || p_locator  );
4126         mydebug ('p_is_wsm_enabled : ' || p_is_wsm_enabled );
4127     end if;
4128 
4129     -- INVCONV start fabdi
4130     IF (l_debug = 1) THEN
4131         inv_log_util.trace('invconv: inside lotcheck..', 'INV_TXN_MANAGER_GRP', 9);
4132         END IF;
4133 
4134         /* GET Copy Lot Attribute_flag */
4135 
4136     OPEN get_org_copy_lot_flag;
4137     FETCH get_org_copy_lot_flag INTO l_org_copy_lot_attribute_flag, l_lot_number_generation ;
4138     CLOSE get_org_copy_lot_flag;
4139 
4140     /* Get item info */
4141     OPEN c_get_item_info;
4142     FETCH c_get_item_info INTO l_item_copy_lot_attribute_flag, l_child_lot_enabled;
4143     CLOSE c_get_item_info;
4144 
4145     IF  l_lot_number_generation = 1 THEN
4146          l_copy_lot_attribute_flag := NVL(l_org_copy_lot_attribute_flag,'N') ;
4147     ELSIF  l_lot_number_generation IN (2,3) THEN
4148          l_copy_lot_attribute_flag :=  NVL(l_item_copy_lot_attribute_flag,'N') ;
4149     END IF;
4150         -- INVCONV end fabdi
4151 
4152     --WHENEVER NOT FOUND CONTINUE;
4153 
4154     loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
4155 
4156     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4157        SET LAST_UPDATE_DATE = SYSDATE,
4158            LAST_UPDATED_BY = l_userid,
4159            LAST_UPDATE_LOGIN = l_loginid,
4160            PROGRAM_UPDATE_DATE = SYSDATE,
4161            PROCESS_FLAG = 3,
4162            LOCK_FLAG = 2,
4163            ERROR_CODE = substrb(l_error_code,1,240),
4164            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4165      WHERE ROWID = p_rowid
4166       AND ABS(TRANSACTION_QUANTITY) <>
4167            (SELECT ABS(SUM(TRANSACTION_QUANTITY))
4168             FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI
4169             WHERE MTLI.TRANSACTION_INTERFACE_ID = p_intid);
4170 
4171     IF SQL%FOUND THEN
4172         return(FALSE);
4173     END IF;
4174 
4175     IF p_lotuniq = 1 THEN
4176           FND_MESSAGE.set_name('INV','INV_INT_LOTUNIQCODE');
4177           l_error_code := FND_MESSAGE.get;
4178 
4179         UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4180            SET LAST_UPDATE_DATE = SYSDATE,
4181                LAST_UPDATED_BY = l_userid,
4182                LAST_UPDATE_LOGIN = l_loginid,
4183                PROGRAM_APPLICATION_ID = l_applid,
4184                PROGRAM_ID = l_progid,
4185                PROGRAM_UPDATE_DATE = SYSDATE,
4186                REQUEST_ID = l_reqstid,
4187                ERROR_CODE = substrb(l_error_code,1,240)
4188          WHERE TRANSACTION_INTERFACE_ID = p_intid
4189            AND EXISTS (
4190                SELECT NULL
4191                FROM MTL_LOT_NUMBERS MLN
4192                WHERE MLN.LOT_NUMBER = MTLI.LOT_NUMBER
4193                  AND MLN.INVENTORY_ITEM_ID <> p_itemid);
4194 
4195         IF SQL%FOUND THEN
4196                 FND_MESSAGE.set_name('INV','INV_INT_LOTUNIQEXP');
4197                 l_error_exp := FND_MESSAGE.get;
4198 
4199             UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4200                SET LAST_UPDATE_DATE = SYSDATE,
4201                    LAST_UPDATED_BY = l_userid,
4202                    LAST_UPDATE_LOGIN = l_loginid,
4203                    PROGRAM_UPDATE_DATE = SYSDATE,
4204                    PROCESS_FLAG = 3,
4205                    LOCK_FLAG = 2,
4206                    ERROR_CODE = substrb(l_error_code,1,240),
4207                    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4208              WHERE ROWID = p_rowid;
4209 
4210             return(FALSE);
4211         END IF;
4212 
4213     END IF;
4214 
4215     OPEN INT3;
4216 
4217     while (TRUE) LOOP
4218 
4219         FETCH INT3 INTO
4220             l_lotnum,
4221             l_lotqty,
4222             -- INVCONV start fabdi
4223             l_secondary_quantity,
4224             l_grade_code,
4225             l_retest_date,
4226             l_maturity_date,
4227             l_parent_lot_number,
4228             l_origination_date,
4229             l_origination_type,
4230             l_expiration_action_code ,
4231             l_expiration_action_date,
4232             l_expiration_date ,
4233             l_hold_date ,
4234             l_reason_id,
4235             -- INVCONV end fabdi
4236             l_sertempid,
4237             l_lotexpdate,
4238             l_lotrowid,
4239             l_parent_object_type,      --R12 Genealogy enhancements
4240             l_parent_object_id,        --R12 Genealogy enhancements
4241             l_parent_object_number,    --R12 Genealogy enhancements
4242             l_parent_item_id,          --R12 Genealogy enhancements
4243             l_parent_object_type2,     --R12 Genealogy enhancements
4244             l_parent_object_id2,       --R12 Genealogy enhancements
4245             l_parent_object_number2;   --R12 Genealogy enhancements
4246 
4247         IF int3%NOTFOUND THEN
4248            CLOSE int3;
4249            return(true);
4250         END IF;
4251 
4252     BEGIN
4253 
4254 -- INVCONV start fabdi
4255     l_transaction_uom_code := p_trxuom;
4256 
4257     IF (l_debug = 1) THEN
4258         inv_log_util.trace('lotcheck: calling validate_quantities', 'INV_TXN_MANAGER_GRP', 9);
4259         inv_log_util.trace('l_parent_object_type: ' || l_parent_object_type,'INV_TXN_MANAGER_GRP', 9);
4260         inv_log_util.trace('l_parent_object_id: ' || l_parent_object_id,'INV_TXN_MANAGER_GRP', 9);
4261         inv_log_util.trace('l_parent_object_number: ' || l_parent_object_number,'INV_TXN_MANAGER_GRP', 9);
4262         inv_log_util.trace('l_parent_item_id: ' || l_parent_item_id,'INV_TXN_MANAGER_GRP', 9);
4263         inv_log_util.trace('l_parent_object_type2: ' || l_parent_object_type2,'INV_TXN_MANAGER_GRP', 9);
4264         inv_log_util.trace('l_parent_object_id2: ' || l_parent_object_id2,'INV_TXN_MANAGER_GRP', 9);
4265         inv_log_util.trace('l_parent_object_number2: ' || l_parent_object_number2,'INV_TXN_MANAGER_GRP', 9);
4266         inv_log_util.trace('l_sertempid: ' || l_sertempid,'INV_TXN_MANAGER_GRP', 9);
4267 
4268     END IF;
4269 
4270 
4271     /*------------------------------------------------------+
4272      | Validating quantity both (primary and secondary qty)
4273      | in MTLT, only
4274      | If the item is tracked in both primary AND secondary
4275      |
4276      +------------------------------------------------------*/
4277 
4278     l_qty_check := validate_quantities(
4279                                                   p_rowid               => p_rowid
4280                                                 , p_lot_rowid           => l_lotrowid
4281                                                 , p_transaction_type_id => p_trx_typeid
4282                                                 , p_organization_id     => p_orgid
4283                                                 , p_inventory_item_id   => p_itemid
4284                                                 , p_revision            => p_revision
4285                                                 , p_subinventory_code   => p_subinvtory_code
4286                                                 , p_locator_id          => p_locator
4287                                                 , p_lot_number          => l_lotnum
4288                                                 , p_transaction_quantity => l_lotqty
4289                                                 , p_transaction_uom     => l_transaction_uom_code
4290                                                 , p_secondary_quantity  => l_secondary_quantity
4291                                                 , p_secondary_uom_code  => l_secondary_uom_code
4292                                                 );
4293 
4294 
4295                 IF (l_qty_check) THEN
4296                   IF (l_debug = 1) THEN
4297                      inv_log_util.trace('validate_quantities IN (lotcheck) ==> PASS ' , 'INV_TXN_MANAGER_GRP', 9);
4298                   END IF;
4299 
4300                  UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4301                  SET    TRANSACTION_QUANTITY           = l_lotqty,
4302                         SECONDARY_TRANSACTION_QUANTITY = l_secondary_quantity
4303                  WHERE ROWID = l_lotrowid;
4304                 ELSE
4305                   IF (l_debug = 1) THEN
4306                     inv_log_util.trace('validate_quantities IN (lotcheck) - FAIL ' || l_msg_data, 'INV_TXN_MANAGER_GRP', 9);
4307                   END IF;
4308                   l_error_exp := '';
4309                   l_error_code := '';
4310                   FND_MESSAGE.clear;
4311                   return(FALSE);
4312                 END IF;
4313 
4314                 IF (l_debug = 1) THEN
4315                 inv_log_util.trace('calling VALIDATE_ADDITIONAL_ATTR', 'INV_TXN_MANAGER_GRP', 9);
4316                 end if;
4317 
4318                  IF l_child_lot_enabled = 'N'
4319          THEN
4320                 l_parent_lot_number := NULL ;
4321          END IF;
4322 
4323          /* nsinghi bug 5209065. Following cursor used to set interface id, so that interface record can be queried
4324          for custom expiration dt calculation. When transaction is created through API, lot expiration date
4325          calculation is handled by the following code. */
4326          OPEN cur_get_interface_id;
4327          FETCH cur_get_interface_id INTO l_interface_id;
4328          CLOSE cur_get_interface_id;
4329          inv_calculate_exp_date.set_txn_id (p_table => 1, p_header_id => l_interface_id);
4330          inv_calculate_exp_date.set_lot_txn_id (p_table => 1, p_header_id => l_lotrowid);
4331 
4332         /* this api will validate all the added new lot attributes intoduced in INVCONV
4333                 project */
4334                 l_attr_check := VALIDATE_ADDITIONAL_ATTR(
4335                                           p_api_version                 => 1.0
4336                                         , p_init_msg_list               => fnd_api.g_false
4337                                                 , p_validation_level            => fnd_api.g_valid_level_full
4338                                                 , p_intid                                       =>      p_intid
4339                                                 , p_rowid                       =>      p_rowid
4340                                                 , p_inventory_item_id           =>      p_itemid
4341                                                 , p_organization_id             =>      p_orgid
4342                                                 , p_lot_number                  =>  l_lotnum
4343                                                 , p_grade_code              =>  l_grade_code
4344                                                 , p_retest_date             =>  l_retest_date
4345                                                 , p_maturity_date           =>  l_maturity_date
4346                                                 , p_parent_lot_number       =>  l_parent_lot_number
4347                                                 , p_origination_date        =>  l_origination_date
4348                                                 , p_origination_type        =>  l_origination_type
4349                                                 , p_expiration_action_code  =>  l_expiration_action_code
4350                                                 , p_expiration_action_date  =>  l_expiration_action_date
4351                                                 , p_expiration_date         =>  l_expiration_date
4352                                                 , p_hold_date               =>  l_hold_date
4353                                                 , p_reason_id               =>  l_reason_id
4354                                                 , p_copy_lot_attribute_flag =>  l_copy_lot_attribute_flag
4355                                                 , x_return_status               => l_return_status
4356                                                 , x_msg_count                   => l_msg_count
4357                                                 , x_msg_data                    => l_msg_data
4358                                                 )  ;
4359                 IF (l_attr_check)
4360                 THEN
4361 
4362           IF (l_debug = 1) THEN
4363                     inv_log_util.trace('VALIDATE_ADDITIONAL_ATTR IN (lotcheck) ==> PASS ' , 'INV_TXN_MANAGER_GRP', 9);
4364               END IF;
4365 
4366          -- nsinghi bug 5209065. Added the following line.
4367          -- Expiration date was getting reset and hence ensured that appropriate value gets updated to MTLI.
4368 	 -- nsinghi bug#5209065 rework. Added fnd_date.date_to_canonical call.
4369          l_lotexpdate := fnd_date.date_to_canonical(l_expiration_date);
4370 
4371          UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4372          SET    GRADE_CODE =  l_grade_code ,
4373                         RETEST_DATE = l_retest_date ,
4374                         MATURITY_DATE = l_maturity_date,
4375                         PARENT_LOT_NUMBER = l_parent_lot_number,
4376                         ORIGINATION_DATE = l_origination_date,
4377                         ORIGINATION_TYPE = l_origination_type ,
4378                         EXPIRATION_ACTION_CODE = l_expiration_action_code,
4379                         EXPIRATION_ACTION_DATE = l_expiration_action_date ,
4380                         LOT_EXPIRATION_DATE = l_expiration_date ,
4381                         HOLD_DATE = l_hold_date,
4382                         REASON_ID = l_reason_id
4383          WHERE ROWID = l_lotrowid;
4384 
4385             ELSE
4386          IF (l_debug = 1) THEN
4387                     inv_log_util.trace('VALIDATE_ADDITIONAL_ATTR IN (lotcheck) - FAIL ' || l_msg_data, 'INV_TXN_MANAGER_GRP', 9);
4388               END IF;
4389           l_error_exp := '';
4390           l_error_code := '';
4391           FND_MESSAGE.clear;
4392               return(FALSE);
4393                 END IF;
4394 
4395 -- INVCONV end fabdi
4396 
4397    -- R12 Genealogy Enhancement :  Start
4398    IF  (p_srctype = INV_GLOBALS.G_SOURCETYPE_WIP AND
4399        p_acttype = INV_GLOBALS.G_ACTION_ISSUE)  THEN
4400       IF  (p_serctrl = 2 OR p_serctrl = 5) -- Lot + serial Controlled
4401       THEN
4402         -- mrana:5443557: this is not needed anymore AND (p_is_wsm_enabled = 'N')) THEN
4403          IF (l_debug = 1) THEN
4404             INV_log_util.trace('{{- It is lot+serial controlled item. Call validate_serial_genealogy_data }}'
4405                                 , 'INV_TXN_MANAGER_GRP', 9);
4406          END IF;
4407          validate_serial_genealogy_data ( p_interface_id   => l_sertempid
4408                                         , p_org_id         => p_orgid
4409                                         , x_return_status  => l_return_status
4410                                         , x_msg_count      => l_msg_count
4411                                         , x_msg_data       => l_msg_data);
4412             IF l_return_status <> lg_ret_sts_success THEN
4413                IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
4414               --RAISE lg_exc_error; ????
4415             END IF;
4416       ELSE
4417          IF (l_debug = 1) THEN
4418             INV_log_util.trace('{{- It is lot controlled item - if parent details are available, }} ' ||
4419                                '{{  Validation/derivation of parent object details should happen here}}'
4420                                 , 'INV_TXN_MANAGER_GRP', 9);
4421          END IF;
4422          IF (l_parent_object_id is NOT NULL AND l_parent_object_type is NOT NULL) OR
4423             (l_parent_object_type is NOT NULL AND l_parent_object_number is NOT NULL
4424                                            AND l_parent_Item_id IS NOT NULL)  THEN
4425             IF (l_debug = 1) THEN
4426             inv_log_util.trace('{{- Parent details are available - Validation/derivation of  }} ' ||
4427                                '{{  parent object details is called here}}' , 'INV_TXN_MANAGER_GRP', 9);
4428             END IF;
4429             validate_derive_object_details
4430             ( p_org_id              => p_orgid
4431             , p_object_type         => l_parent_object_type
4432             , p_object_id           => l_parent_object_id
4433             , p_object_number       => l_parent_object_number
4434             , p_item_id             => l_parent_Item_id
4435             , p_object_type2        => l_parent_object_type2
4436             , p_object_id2          => l_parent_object_id2
4437             , p_object_number2      => l_parent_object_number2
4438             , p_serctrl             => p_serctrl
4439             , p_lotctrl             => 2
4440             , p_rowid               => l_lotrowid
4441             , p_table               => 'MTLI'
4442             , x_return_status       => l_return_status
4443             , x_msg_count           => l_msg_count
4444             , x_msg_data            => l_msg_data);
4445             IF l_return_status <> lg_ret_sts_success THEN
4446                IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
4447               --RAISE lg_exc_error; ????
4448             END IF;
4449 
4450          ELSE
4451             null; -- Parent object details not populated during wip issue . It is OK
4452             IF (l_debug = 1) THEN
4453             inv_log_util.trace('{{ Parent object details not populated during WIP issue . It is OK }}' ,
4454                'INV_TXN_MANAGER_GRP', 9);
4455             END IF;
4456          END IF;
4457       END IF;
4458       IF (l_debug = 1) THEN
4459       inv_log_util.trace('{{- It is not a WIP issue transactioon, so no validation/derivation of }}' ||
4460                          '{{  parent object details should happen here}}' , 'INV_TXN_MANAGER_GRP', 9);
4461       END IF;
4462    END IF;
4463    -- R12 Genealogy Enhancement :  End
4464 
4465            IF (p_srctype =5) then
4466               l_lotpriqty := inv_convert.inv_um_convert(p_itemid,6,l_lotqty,p_trxuom,p_priuom,'','');
4467             ELSE
4468               l_lotpriqty := inv_convert.inv_um_convert(p_itemid,5,l_lotqty,p_trxuom,p_priuom,'','');
4469            END IF;
4470 
4471 
4472         EXCEPTION
4473            WHEN OTHERS THEN
4474 
4475         /*IF (NOT UomConvert(l_itemid,0,l_trxuom, '',
4476                         l_priuom, '',l_lotqty,
4477                         l_lotpriqty, 0)) THEN */
4478               l_error_exp := FND_MESSAGE.get;
4479 
4480               FND_MESSAGE.set_name('INV','INV_INT_UOMCONVCODE');
4481               l_error_code := FND_MESSAGE.get;
4482 
4483             UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4484                SET LAST_UPDATE_DATE = SYSDATE,
4485                    LAST_UPDATED_BY = l_userid,
4486                    LAST_UPDATE_LOGIN = l_loginid,
4487                    PROGRAM_APPLICATION_ID = l_applid,
4488                    PROGRAM_ID = l_progid,
4489                    PROGRAM_UPDATE_DATE = SYSDATE,
4490                    REQUEST_ID = l_reqstid,
4491                    ERROR_CODE = substrb(l_error_code,1,240)
4492              WHERE ROWID = l_lotrowid;
4493 
4494             UPDATE MTL_TRANSACTIONS_INTERFACE
4495                SET ERROR_CODE = substrb(l_error_code,1,240),
4496                    ERROR_EXPLANATION = substrb(l_error_exp,1,240),
4497                    LAST_UPDATE_DATE = sysdate,
4498                    LAST_UPDATED_BY = l_userid,
4499                    LAST_UPDATE_LOGIN = l_loginid,
4500                    PROGRAM_UPDATE_DATE = SYSDATE,
4501                    PROCESS_FLAG = 3,
4502                    LOCK_FLAG = 2
4503              WHERE ROWID = p_rowid;
4504 
4505             return(FALSE);
4506         END;
4507 /* Changes done in the below if condition for bug2725491
4508    Hadling the no_data_found exception when the lot is new
4509    and expiration is set */
4510         IF ((p_shlfcode <> 1) AND (l_lotexpdate IS NULL)) THEN
4511            BEGIN
4512                 SELECT
4513                   fnd_date.date_to_canonical(EXPIRATION_DATE)
4514                   INTO l_lotexpdate
4515                   FROM MTL_LOT_NUMBERS
4516                  WHERE INVENTORY_ITEM_ID = p_itemid
4517                    AND ORGANIZATION_ID = p_orgid
4518                    AND LOT_NUMBER = l_lotnum;
4519            EXCEPTION
4520             WHEN NO_DATA_FOUND THEN
4521             IF ((p_shlfcode = 2) AND (l_lotexpdate IS NULL)) THEN
4522                     SELECT fnd_date.date_to_canonical(SYSDATE + p_shlfdays)
4523                       INTO l_lotexpdate
4524                       FROM DUAL;
4525             END IF;
4526 
4527             IF ((p_shlfcode = 4) AND (l_lotexpdate IS NULL)) THEN
4528 
4529                   FND_MESSAGE.set_name('INV','INV_LOT_EXPREQD');
4530                   l_error_exp := FND_MESSAGE.get;
4531                   FND_MESSAGE.set_name('INV','INV_LOT_EXPREQD');
4532                   l_error_code := FND_MESSAGE.get;
4533 
4534                 UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4535                    SET LAST_UPDATE_DATE = SYSDATE,
4536                        LAST_UPDATED_BY = l_userid,
4537                        LAST_UPDATE_LOGIN = l_loginid,
4538                        PROGRAM_APPLICATION_ID = l_applid,
4539                        PROGRAM_ID = l_progid,
4540                        PROGRAM_UPDATE_DATE = SYSDATE,
4541                        REQUEST_ID = l_reqstid,
4542                        ERROR_CODE = substrb(l_error_code,1,240)
4543                  WHERE ROWID = l_lotrowid;
4544 
4545                  UPDATE MTL_TRANSACTIONS_INTERFACE
4546                     SET ERROR_CODE = substrb(l_error_code,1,240),
4547                         ERROR_EXPLANATION = substrb(l_error_exp,1,240),
4548                         LAST_UPDATE_DATE = sysdate,
4549                         LAST_UPDATED_BY = l_userid,
4550                         LAST_UPDATE_LOGIN = l_loginid,
4551                         PROGRAM_UPDATE_DATE = SYSDATE,
4552                         PROCESS_FLAG = 3,
4553                         LOCK_FLAG = 2
4554                   WHERE ROWID = p_rowid;
4555 
4556 
4557                  return(FALSE);
4558 
4559             END IF;
4560          END;
4561         END IF;
4562 
4563       --Bug #5738503
4564       --If the item is not under shelf life control and
4565       --expiration date is not null then set the expiration date to null
4566       IF ((p_shlfcode = 1) AND (l_lotexpdate IS NOT NULL)) THEN
4567         l_lotexpdate := NULL;
4568       END IF;
4569 
4570       IF (p_serctrl = 2 OR p_serctrl = 5 OR (p_serctrl = 6 AND
4571              p_srctype = 2 AND p_acttype = 1) OR (p_serctrl = 6 AND
4572         p_srctype = INV_GLOBALS.G_SourceType_IntOrder AND p_acttype = 1)
4573           OR (p_serctrl = 6 AND p_srctype = 8)
4574           /*2815918*/
4575           OR (P_serctrl = 6 AND p_srctype = 16 and p_acttype = 1) )
4576       THEN
4577         BEGIN
4578           SELECT 1
4579            into l_tnum
4580           FROM MTL_SERIAL_NUMBERS_INTERFACE
4581           WHERE TRANSACTION_INTERFACE_ID = l_sertempid
4582             AND ROWNUM < 2;
4583         EXCEPTION
4584             WHEN NO_DATA_FOUND THEN
4585              loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
4586 
4587              UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4588                    SET LAST_UPDATE_DATE = SYSDATE,
4589                        LAST_UPDATED_BY = l_userid,
4590                        LAST_UPDATE_LOGIN = l_loginid,
4591                        PROGRAM_APPLICATION_ID = l_applid,
4592                        PROGRAM_ID = l_progid,
4593                        PROGRAM_UPDATE_DATE = SYSDATE,
4594                        REQUEST_ID = l_reqstid,
4595                        ERROR_CODE = substrb(l_error_code,1,240)
4596                  WHERE ROWID = l_lotrowid;
4597 
4598                     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
4599                        SET LAST_UPDATE_DATE = SYSDATE,
4600                            LAST_UPDATED_BY = l_userid,
4601                            LAST_UPDATE_LOGIN = l_loginid,
4602                            PROGRAM_UPDATE_DATE = SYSDATE,
4603                            PROCESS_FLAG = 3,
4604                            LOCK_FLAG = 2,
4605                            ERROR_CODE = substrb(l_error_code,1,240),
4606                            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
4607                      WHERE ROWID = p_rowid;
4608 
4609 
4610                 return(FALSE);
4611           END;
4612 
4613         ELSE
4614             IF (l_sertempid IS NOT NULL) THEN
4615                 DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
4616                  WHERE TRANSACTION_INTERFACE_ID = l_sertempid;
4617             END IF;
4618 
4619         END IF;
4620             UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
4621                 SET LAST_UPDATE_DATE = SYSDATE,
4622                     LAST_UPDATED_BY = l_userid,
4623                     LAST_UPDATE_LOGIN = l_loginid,
4624                     PROGRAM_APPLICATION_ID = l_applid,
4625                     PROGRAM_ID = l_progid,
4626                     PROGRAM_UPDATE_DATE = SYSDATE,
4627                     REQUEST_ID = l_reqstid,
4628                     PRIMARY_QUANTITY = l_lotpriqty,
4629                     LOT_EXPIRATION_DATE = fnd_date.canonical_to_date(l_lotexpdate),
4630                     SERIAL_TRANSACTION_TEMP_ID = l_sertempid
4631               WHERE ROWID = l_lotrowid;
4632 
4633     END LOOP;
4634     IF int3%ISOPEN THEN
4635        CLOSE int3;
4636     END IF ;
4637 
4638  EXCEPTION
4639    WHEN OTHERS THEN
4640     FND_MESSAGE.set_name('INV','INV_INT_UOMCONVCODE');
4641 
4642     --WHENEVER SQL ERROR CONTINUE;
4643     UPDATE MTL_TRANSACTIONS_INTERFACE
4644            SET LAST_UPDATE_DATE = SYSDATE,
4645                LAST_UPDATED_BY = l_userid,
4646                LAST_UPDATE_LOGIN = l_loginid,
4647                PROGRAM_UPDATE_DATE = SYSDATE,
4648                PROCESS_FLAG = 3,
4649                LOCK_FLAG = 2,
4650                ERROR_CODE = substrb(l_error_code,1,240)
4651      WHERE ROWID = p_rowid;
4652 
4653     return FALSE;
4654 
4655 END lotcheck;
4656 
4657 
4658 
4659 /******************************************************************
4660  *
4661  * setorgclientinfo()
4662  *
4663  ******************************************************************/
4664 FUNCTION setorgclientinfo(p_orgid in NUMBER)
4665 RETURN BOOLEAN
4666 IS
4667 
4668  x_return_status varchar2(50);
4669 
4670 BEGIN
4671 
4672 --WHENEVER NOT FOUND CONTINUE;
4673 
4674 --Commenting the processing based on checking PJM_INSTALL. Bug 3812559
4675 /*
4676  IF (pjm_installed = -1) THEN
4677    IF PJM_INSTALL.check_install
4678    THEN
4679         pjm_installed := 1;
4680    ELSE
4681         pjm_installed := 0;
4682    END IF;
4683 
4684  END IF;
4685 */
4686 
4687 /* IF (pjm_installed = 1) THEN */
4688   IF (client_info_org_id <> p_orgid) THEN
4689           INV_Project.Set_Org_client_info(x_return_status,
4690                                           p_orgid);
4691      IF (x_return_status <> 'S') THEN
4692         return FALSE;
4693      END IF;
4694      -- commented as a part of bug #2505534
4695      --client_info_org_id := p_orgid;
4696    END IF;
4697 /* END IF; */
4698  return TRUE;
4699 
4700  EXCEPTION
4701     WHEN OTHERS THEN
4702      return FALSE;
4703 END setorgclientinfo;
4704 
4705 /******************************************************************
4706 -- Function
4707 --   getloc
4708 -- Description
4709 --   Private function to get Locator id using Flex API's
4710 --   Uses FND_FLEX_KEY_API (AFFFKAIS/B.pls) and
4711 --        FND_FLEX_EXT (AFFFEXTS/B.pls)
4712 --
4713 --   Assumes that only Id's are populated in the MTI segments
4714 --
4715 -- Returns
4716 --   Returns false if any error occurs
4717 -- Output Parameters
4718 --   x_locid   locator or null if error occurred
4719  ******************************************************************/
4720 
4721 FUNCTION getloc(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_locctrl NUMBER, p_segmentarray fnd_flex_ext.segmentarray) return BOOLEAN is
4722       l_nseg           NUMBER;
4723       l_seglist        fnd_flex_key_api.segment_list;
4724       l_fftype         fnd_flex_key_api.flexfield_type;
4725       l_ffstru         fnd_flex_key_api.structure_type;
4726       l_segment_type   fnd_flex_key_api.segment_type;
4727       l_locator        VARCHAR2(32000);
4728       l_error_exp      VARCHAR2(250);
4729       l_structure_list fnd_flex_key_api.structure_list;
4730       l_nstru          NUMBER;
4731       l_index          NUMBER;
4732       l_locid          NUMBER;
4733       l_delim          VARCHAR2(1);
4734       l_val            BOOLEAN  := FALSE;
4735       DYNAMIC CONSTANT NUMBER := 3;
4736       l_operation      VARCHAR2(100);
4737     -- Local array to hold the data for getting the cancatenated segment.
4738       l_segmentarray fnd_flex_ext.segmentarray;
4739 BEGIN
4740 
4741     fnd_flex_key_api.set_session_mode('seed_data');
4742 
4743    -- find flex field type
4744    l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MTLL');
4745 
4746    -- find flex structure type
4747    l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
4748 
4749    -- find segment list for the key flex field
4750    fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_nseg, l_seglist);
4751 
4752    -- find segment delimiter
4753    l_delim := l_ffstru.segment_separator;
4754 
4755    -- get the corresponding column for all segments
4756    --
4757    -- The default segments for the LocatorKFF is SEGMENT1 - SEGMENT20
4758    --  'To_number(Substr(l_segment_type.column_name, 8))' gives the
4759    -- number of the segment i.e. 1 - 20 which is used as index to
4760    -- fetch the corresponding columns from segments array
4761    --
4762    FOR l_loop IN 1..l_nseg LOOP
4763 
4764       l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_seglist(l_loop));
4765       -- Bug Fix#4747090
4766       --l_segmentarray contains data in the order flexfield is defined. Used in creating cancatenated segments for validation.
4767       l_segmentarray(l_loop) := p_segmentarray(To_number(Substr(l_segment_type.column_name, 8)));
4768    END LOOP;
4769    -- Bug Fix#4747090
4770    -- Gets the encoded cancatenated string
4771    l_locator := fnd_flex_ext.concatenate_segments(n_segments => l_nseg,
4772                                                    segments   => l_segmentarray,
4773                                                    delimiter  => l_delim);
4774    IF (l_debug = 1) THEN
4775       inv_log_util.trace('Locator is : ' || l_locator, 'INV_TXN_MANAGER_GRP','1');
4776    END IF;
4777    /*
4778     * If Locator control allows dynamic creation then create the combination
4779     * if it does not already exist else just check if it exists.
4780     */
4781    if p_locctrl = DYNAMIC then
4782     /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
4783       call FND_FLEX_KEYVAL.Validate_Segs with 'CREATE_COMBINATION' operation*/
4784      IF (g_create_loc_at = 1) then
4785        l_operation := 'CREATE_COMBINATION';
4786      ELSE
4787        l_operation := 'CREATE_COMB_NO_AT';
4788      END IF;
4789    else
4790       l_operation := 'FIND_COMBINATION';
4791    end if;
4792 
4793    l_val := FND_FLEX_KEYVAL.Validate_Segs(
4794                  OPERATION        => l_operation,
4795                  APPL_SHORT_NAME  => 'INV',
4796                  KEY_FLEX_CODE  => 'MTLL',
4797                  STRUCTURE_NUMBER  => 101,
4798                  CONCAT_SEGMENTS  => l_locator,
4799                  VALUES_OR_IDS  => 'I',
4800                  DATA_SET  => p_org_id ) ;
4801 
4802     if l_val then
4803        x_locid := fnd_flex_keyval.combination_id;
4804     else
4805        x_locid := NULL;
4806        l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4807        IF (l_debug = 1) THEN
4808           inv_log_util.trace('Error in getloc : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4809           inv_log_util.trace('Error in getloc : error_segment :' || FND_FLEX_KEYVAL.error_segment , 'INV_TXN_MANAGER_GRP','1');
4810           inv_log_util.trace('Error in getloc : error_message :' || FND_FLEX_KEYVAL.error_message , 'INV_TXN_MANAGER_GRP','1');
4811           inv_log_util.trace('Error in getloc : encoded_error_message :' || FND_FLEX_KEYVAL.encoded_error_message , 'INV_TXN_MANAGER_GRP','1');
4812        END IF;
4813     end if;
4814 
4815      return l_val;
4816 
4817 EXCEPTION
4818 
4819    WHEN OTHERS THEN
4820 
4821       l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4822       IF (l_debug = 1) THEN
4823          inv_log_util.trace('Error in getloc : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4824          inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
4825       END IF;
4826       x_locid := NULL;
4827       return FALSE;
4828 
4829 END getloc;
4830 /******************************************************************
4831 -- Function
4832 --   getlocid
4833 -- Description
4834 --   find the locator using the flex field segments
4835 --   Calls private function getLoc to do the work
4836 -- Output Parameters
4837 --   x_locator   locator or null if error occurred
4838  ******************************************************************/
4839 FUNCTION getlocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
4840  l_segs1     fnd_flex_ext.segmentArray;
4841  l_error_exp VARCHAR2(250);
4842  l_locid     number;
4843 begin
4844 
4845    SELECT
4846         LOCATOR_ID,
4847         LOC_SEGMENT1,
4848         LOC_SEGMENT2,
4849         LOC_SEGMENT3,
4850         LOC_SEGMENT4,
4851         LOC_SEGMENT5,
4852         LOC_SEGMENT6,
4853         LOC_SEGMENT7,
4854         LOC_SEGMENT8,
4855         LOC_SEGMENT9,
4856         LOC_SEGMENT10,
4857         LOC_SEGMENT11,
4858         LOC_SEGMENT12,
4859         LOC_SEGMENT13,
4860         LOC_SEGMENT14,
4861         LOC_SEGMENT15,
4862         LOC_SEGMENT16,
4863         LOC_SEGMENT17,
4864         LOC_SEGMENT18,
4865         LOC_SEGMENT19,
4866         LOC_SEGMENT20
4867    INTO
4868         l_locid,
4869         l_segs1(1),
4870         l_segs1(2),
4871         l_segs1(3),
4872         l_segs1(4),
4873         l_segs1(5),
4874         l_segs1(6),
4875         l_segs1(7),
4876         l_segs1(8),
4877         l_segs1(9),
4878         l_segs1(10),
4879         l_segs1(11),
4880         l_segs1(12),
4881         l_segs1(13),
4882         l_segs1(14),
4883         l_segs1(15),
4884         l_segs1(16),
4885         l_segs1(17),
4886         l_segs1(18),
4887         l_segs1(19),
4888         l_segs1(20)
4889    FROM mtl_transactions_interface mti
4890    WHERE mti.rowid = p_rowid;
4891 
4892    return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
4893 
4894 EXCEPTION
4895 
4896    WHEN OTHERS THEN
4897       l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4898       IF (l_debug = 1) THEN
4899          inv_log_util.trace('Error in getlocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4900          inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
4901       END IF;
4902       x_locid := NULL;
4903       return FALSE;
4904 
4905 END getlocid;
4906 
4907 /******************************************************************
4908 -- Function
4909 --   getxlocid
4910 -- Description
4911 --   find the locator using the flex field segments
4912 --   Calls private function getLoc to do the work
4913 -- Output Parameters
4914 --   x_locator   locator or null if error occurred
4915  ******************************************************************/
4916 
4917 FUNCTION getxlocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
4918  l_segs1      fnd_flex_ext.segmentArray;
4919  l_error_exp  VARCHAR2(250);
4920  l_locid      number;
4921 begin
4922 
4923    SELECT
4924         TRANSFER_LOCATOR,
4925         XFER_LOC_SEGMENT1,
4926         XFER_LOC_SEGMENT2,
4927         XFER_LOC_SEGMENT3,
4928         XFER_LOC_SEGMENT4,
4929         XFER_LOC_SEGMENT5,
4930         XFER_LOC_SEGMENT6,
4931         XFER_LOC_SEGMENT7,
4932         XFER_LOC_SEGMENT8,
4933         XFER_LOC_SEGMENT9,
4934         XFER_LOC_SEGMENT10,
4935         XFER_LOC_SEGMENT11,
4936         XFER_LOC_SEGMENT12,
4937         XFER_LOC_SEGMENT13,
4938         XFER_LOC_SEGMENT14,
4939         XFER_LOC_SEGMENT15,
4940         XFER_LOC_SEGMENT16,
4941         XFER_LOC_SEGMENT17,
4942         XFER_LOC_SEGMENT18,
4943         XFER_LOC_SEGMENT19,
4944         XFER_LOC_SEGMENT20
4945    INTO
4946         l_locid,
4947         l_segs1(1),
4948         l_segs1(2),
4949         l_segs1(3),
4950         l_segs1(4),
4951         l_segs1(5),
4952         l_segs1(6),
4953         l_segs1(7),
4954         l_segs1(8),
4955         l_segs1(9),
4956         l_segs1(10),
4957         l_segs1(11),
4958         l_segs1(12),
4959         l_segs1(13),
4960         l_segs1(14),
4961         l_segs1(15),
4962         l_segs1(16),
4963         l_segs1(17),
4964         l_segs1(18),
4965         l_segs1(19),
4966         l_segs1(20)
4967    FROM mtl_transactions_interface mti
4968    WHERE mti.rowid = p_rowid;
4969 
4970    return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
4971 
4972 EXCEPTION
4973 
4974    WHEN OTHERS THEN
4975       l_error_exp := substr(fnd_flex_key_api.message(),1,240);
4976       IF (l_debug = 1) THEN
4977          inv_log_util.trace('Error in getxlocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
4978          inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
4979       END IF;
4980       x_locid := NULL;
4981       return FALSE;
4982 
4983 END getxlocid;
4984 
4985 /******************************************************************
4986 -- Function
4987 --   getplocid. Added for Bug: 7323175
4988 -- Description
4989 --   find the locator using the flex field segments
4990 --   Calls private function getLoc to do the work.
4991 --   Used only in case of Project enabled ords for the
4992 --   creation of physical locators
4993 -- Output Parameters
4994 --   x_locator   locator or null if error occurred
4995  ******************************************************************/
4996 FUNCTION getplocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
4997  l_segs1     fnd_flex_ext.segmentArray;
4998  l_error_exp VARCHAR2(250);
4999  l_locid     number;
5000 begin
5001 
5002    SELECT
5003         LOCATOR_ID,
5004         LOC_SEGMENT1,
5005         LOC_SEGMENT2,
5006         LOC_SEGMENT3,
5007         LOC_SEGMENT4,
5008         LOC_SEGMENT5,
5009         LOC_SEGMENT6,
5010         LOC_SEGMENT7,
5011         LOC_SEGMENT8,
5012         LOC_SEGMENT9,
5013         LOC_SEGMENT10,
5014         LOC_SEGMENT11,
5015         LOC_SEGMENT12,
5016         LOC_SEGMENT13,
5017         LOC_SEGMENT14,
5018         LOC_SEGMENT15,
5019         LOC_SEGMENT16,
5020         LOC_SEGMENT17,
5021         LOC_SEGMENT18,
5022         '',
5023         ''
5024    INTO
5025         l_locid,
5026         l_segs1(1),
5027         l_segs1(2),
5028         l_segs1(3),
5029         l_segs1(4),
5030         l_segs1(5),
5031         l_segs1(6),
5032         l_segs1(7),
5033         l_segs1(8),
5034         l_segs1(9),
5035         l_segs1(10),
5036         l_segs1(11),
5037         l_segs1(12),
5038         l_segs1(13),
5039         l_segs1(14),
5040         l_segs1(15),
5041         l_segs1(16),
5042         l_segs1(17),
5043         l_segs1(18),
5044         l_segs1(19),
5045         l_segs1(20)
5046 
5047 
5048 
5049    FROM mtl_transactions_interface mti
5050    WHERE mti.rowid = p_rowid;
5051 
5052    return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5053 
5054 EXCEPTION
5055 
5056    WHEN OTHERS THEN
5057       l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5058       IF (l_debug = 1) THEN
5059          inv_log_util.trace('Error in getplocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5060          inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5061       END IF;
5062       x_locid := NULL;
5063       return FALSE;
5064 
5065 END getplocid;
5066 
5067 /******************************************************************
5068 -- Function
5069 --   getxplocid	: Added for Bug: 7323175
5070 -- Description
5071 --   find the locator using the flex field segments
5072 --   Calls private function getLoc to do the work
5073 --   Used only in case of Project enabled orgs for the
5074 --   creation of physical locators for transfer transactions
5075 -- Output Parameters
5076 --   x_locator   locator or null if error occurred
5077  ******************************************************************/
5078 
5079 FUNCTION getxplocid(x_locid OUT NOCOPY NUMBER, p_org_id NUMBER, p_subinv VARCHAR2, p_rowid VARCHAR2, p_locctrl NUMBER) return BOOLEAN is
5080  l_segs1      fnd_flex_ext.segmentArray;
5081  l_error_exp  VARCHAR2(250);
5082  l_locid      number;
5083 begin
5084 
5085    SELECT
5086         TRANSFER_LOCATOR,
5087         XFER_LOC_SEGMENT1,
5088         XFER_LOC_SEGMENT2,
5089         XFER_LOC_SEGMENT3,
5090         XFER_LOC_SEGMENT4,
5091         XFER_LOC_SEGMENT5,
5092         XFER_LOC_SEGMENT6,
5093         XFER_LOC_SEGMENT7,
5094         XFER_LOC_SEGMENT8,
5095         XFER_LOC_SEGMENT9,
5096         XFER_LOC_SEGMENT10,
5097         XFER_LOC_SEGMENT11,
5098         XFER_LOC_SEGMENT12,
5099         XFER_LOC_SEGMENT13,
5100         XFER_LOC_SEGMENT14,
5101         XFER_LOC_SEGMENT15,
5102         XFER_LOC_SEGMENT16,
5103         XFER_LOC_SEGMENT17,
5104         XFER_LOC_SEGMENT18,
5105         '',
5106         ''
5107 
5108    INTO
5109         l_locid,
5110         l_segs1(1),
5111         l_segs1(2),
5112         l_segs1(3),
5113         l_segs1(4),
5114         l_segs1(5),
5115         l_segs1(6),
5116         l_segs1(7),
5117         l_segs1(8),
5118         l_segs1(9),
5119         l_segs1(10),
5120         l_segs1(11),
5121         l_segs1(12),
5122         l_segs1(13),
5123         l_segs1(14),
5124         l_segs1(15),
5125         l_segs1(16),
5126         l_segs1(17),
5127         l_segs1(18),
5128         l_segs1(19),
5129         l_segs1(20)
5130 
5131 
5132    FROM mtl_transactions_interface mti
5133    WHERE mti.rowid = p_rowid;
5134 
5135    return getloc(x_locid, p_org_id, p_locctrl, l_segs1);
5136 
5137 EXCEPTION
5138 
5139    WHEN OTHERS THEN
5140       l_error_exp := substr(fnd_flex_key_api.message(),1,240);
5141       IF (l_debug = 1) THEN
5142          inv_log_util.trace('Error in getxplocId : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
5143          inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
5144       END IF;
5145       x_locid := NULL;
5146       return FALSE;
5147 
5148 END getxplocid;
5149 
5150 
5151 /******************************************************************
5152  *
5153  * validate_loc_for_project()
5154  *
5155  ******************************************************************/
5156 FUNCTION validate_loc_for_project(p_ltv_locid in NUMBER, p_ltv_orgid in NUMBER, p_ltv_srctype in NUMBER,
5157                               p_ltv_trxact in NUMBER, p_ltv_trx_src_id in NUMBER, p_ltv_flow_schedule in NUMBER,
5158                               p_ltv_scheduled_flag in NUMBER)
5159 RETURN BOOLEAN
5160 IS
5161 
5162 CURSOR LTV1 IS
5163        SELECT PROJECT_ID, TASK_ID
5164        FROM WIP_DISCRETE_JOBS
5165        WHERE WIP_ENTITY_ID = p_ltv_trx_src_id
5166          AND ROWNUM < 2 ;
5167 
5168 CURSOR LTV2 IS
5169        SELECT PROJECT_ID, TASK_ID
5170        FROM WIP_FLOW_SCHEDULES
5171        WHERE WIP_ENTITY_ID = p_ltv_trx_src_id
5172          AND ROWNUM < 2 ;
5173 
5174     l_ltv_project_ref_enabled NUMBER := 0 ;
5175     l_ltv_project_id NUMBER;
5176     l_ltv_task_id NUMBER;
5177     l_ltv_mode VARCHAR2(20);
5178     l_ltv_reqd_flag VARCHAR2(10);
5179     l_ltv_loc_project_valid NUMBER := 1;
5180     l_ltv_error_mesg VARCHAR2(241);
5181 
5182 BEGIN
5183 
5184     -- WHENEVER NOT FOUND CONTINUE;
5185 
5186     BEGIN
5187       SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
5188       INTO l_ltv_project_ref_enabled
5189       FROM MTL_PARAMETERS
5190       WHERE ORGANIZATION_ID = p_ltv_orgid ;
5191     EXCEPTION
5192       WHEN NO_DATA_FOUND THEN
5193         FND_MESSAGE.set_name('INV','INV_INT_ORGEXP');
5194         return(FALSE);
5195     END;
5196 
5197     IF l_ltv_project_ref_enabled = 0 THEN
5198         return(TRUE);
5199     END IF;
5200 
5201     l_ltv_mode := 'ANY';
5202     l_ltv_reqd_flag := 'N';
5203 
5204     IF  p_ltv_srctype = 5 THEN
5205         IF p_ltv_scheduled_flag = 1 THEN
5206 
5207             IF p_ltv_trx_src_id IS NULL THEN
5208                 FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5209                 return FALSE;
5210             END IF;
5211 
5212             IF p_ltv_flow_schedule = 0 THEN
5213                 OPEN LTV1 ;
5214                 FETCH LTV1 INTO
5215                 l_ltv_project_id,
5216                 l_ltv_task_id;
5217 
5218                 IF SQL%NOTFOUND THEN
5219                    FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5220                    CLOSE LTV1;
5221                    return(FALSE);
5222                 END IF;
5223                 CLOSE LTV1;
5224             ELSE
5225                 IF  p_ltv_flow_schedule = 1  THEN
5226                    OPEN LTV2 ;
5227                    FETCH LTV2 INTO
5228                    l_ltv_project_id,
5229                    l_ltv_task_id;
5230 
5231                    IF SQL%NOTFOUND THEN
5232                       FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5233                       CLOSE LTV2;
5234                       return(FALSE);
5235                    END IF;
5236                    CLOSE LTV2;
5237                 END IF;
5238             END IF;
5239 
5240             l_ltv_mode := 'SPECIFIC';
5241             IF ( p_ltv_trxact = 31 OR p_ltv_trxact = 32 ) THEN
5242                 l_ltv_reqd_flag := 'Y';
5243             END IF;
5244         ELSE
5245             return(TRUE);
5246         END IF;
5247     END IF;
5248     IF (l_debug=1) THEN
5249        inv_log_util.trace('Validating l_ltv_project_id='||l_ltv_project_id||' l_ltv_task_id='||l_ltv_task_id, 'INV_TXN_MANAGER_GRP','9');
5250     END IF;
5251 
5252     IF p_ltv_scheduled_flag = 1 THEN
5253         inv_wwacst.call_prj_loc_validation(
5254                                        p_ltv_locid,
5255                                        p_ltv_orgid,
5256                                        l_ltv_mode,
5257                                        l_ltv_reqd_flag,
5258                                        l_ltv_project_id,
5259                                        l_ltv_task_id,
5260                                        l_ltv_loc_project_valid,
5261                                        l_ltv_error_mesg);
5262 
5263 
5264         IF l_ltv_loc_project_valid = 0 THEN
5265 	--Bug #6449667, Modified the code below so that relavant error message are displayed from project validation API.
5266 	IF (l_debug=1) THEN
5267 	  inv_log_util.trace('Error in validate_loc_for_project : ' || l_ltv_error_mesg, 'INV_TXN_MANAGER_GRP','9');
5268 	END IF;
5269          --FND_MESSAGE.set_name('INV','INV_INT_SRCWIPEXP');
5270 	 FND_MESSAGE.set_name('INV', 'INV_FND_GENERIC_MSG');
5271 	 FND_MESSAGE.set_token('MSG', l_ltv_error_mesg);
5272            return(FALSE);
5273         ELSE
5274            FND_MESSAGE.clear;
5275            return(TRUE);
5276       END IF;
5277 
5278 
5279       ELSE
5280       return(TRUE);
5281     END IF;
5282 
5283 
5284 EXCEPTION
5285   WHEN OTHERS THEN
5286         RETURN FALSE;
5287 END validate_loc_for_project;
5288 
5289 
5290 /******************************************************************
5291  *
5292  * validate_unit_number()
5293  *
5294  ******************************************************************/
5295 FUNCTION validate_unit_number(p_unit_number in VARCHAR2, p_orgid in NUMBER, p_itemid in NUMBER,
5296                                    p_srctype in NUMBER, p_acttype in NUMBER)
5297 
5298 RETURN BOOLEAN
5299  IS
5300 
5301 l_unit_no_ok  NUMBER := 1;
5302 
5303 BEGIN
5304 
5305     -- WHENEVER NOT FOUND CONTINUE;
5306 
5307     IF (NVL(PJM_UNIT_EFF.ENABLED,'N') = 'Y') THEN
5308       IF (PJM_UNIT_EFF.UNIT_EFFECTIVE_ITEM(p_itemid,p_orgid) = 'Y') THEN
5309         IF (p_srctype = 3 AND p_acttype in(3,21) AND p_unit_number IS NOT NULL) then
5310           l_unit_no_ok := 0;
5311            SELECT count(1) INTO l_unit_no_ok
5312            FROM PJM_UNIT_NUMBERS_LOV_V
5313            WHERE UNIT_NUMBER =p_unit_number;
5314         END IF;
5315       END IF;
5316     END IF;
5317 
5318     IF (l_unit_no_ok = 0) THEN
5319 
5320        FND_MESSAGE.set_name('INV','INV_INT_UNITNUMBER');
5321          FND_MESSAGE.set_token('ROUTINE','validate_unit_number');
5322        return FALSE;
5323     ELSE
5324        FND_MESSAGE.clear;
5325        return  TRUE;
5326     END IF;
5327 
5328 EXCEPTION
5329   WHEN OTHERS THEN
5330         RETURN FALSE;
5331 END validate_unit_number;
5332 
5333 /******************************************************************
5334  * get_costgrpid() : This function derives the cost group id for a particular Organization, Subinventory and Locator_id combination
5335  * Added for Bug 6356567
5336  ******************************************************************/
5337 
5338 FUNCTION get_costgrpid(p_org_id in NUMBER, p_subinv in VARCHAR2, p_locatorid in NUMBER)
5339 RETURN mtl_transactions_interface.cost_group_id%TYPE IS
5340         l_cost_group_id number;
5341         l_org_cost_group_id number;
5342         l_primary_cost_method mtl_parameters.primary_cost_method%TYPE;
5343         l_project_enabled NUMBER;
5344         l_project_id NUMBER;
5345 BEGIN
5346         IF p_org_id is NULL then
5347                 return NULL;
5348         END IF;
5349 
5350         l_cost_group_id := NULL; /* Initializing the value of Cost Group id to Null */
5351 
5352         BEGIN
5353            SELECT Nvl(project_reference_enabled,2), default_cost_group_id, primary_cost_method
5354              INTO l_project_enabled, l_org_cost_group_id, l_primary_cost_method
5355              FROM mtl_parameters
5356             WHERE organization_id = p_org_id;
5357         EXCEPTION
5358             WHEN no_data_found THEN
5359             return NULL;
5360         END;
5361 
5362         IF (l_project_enabled = 1 and p_locatorid is not null) THEN     --If the Org is Project enabled Org
5363            BEGIN
5364                 SELECT project_id INTO l_project_id
5365                   FROM mtl_item_locations
5366                  WHERE organization_id =p_org_id
5367                    AND inventory_location_id = p_locatorid;
5368            EXCEPTION
5369                 WHEN no_data_found THEN
5370                 l_project_id := null;
5371            END;
5372 
5373            IF l_project_id IS NOT NULL THEN
5374                 SELECT mpp.costing_group_id INTO l_cost_group_id
5375                   FROM mrp_project_parameters mpp
5376                  WHERE mpp.project_id = l_project_id
5377                    AND mpp.organization_id = p_org_id;
5378            END IF;                                                      --IF l_project_id IS NOT NULL THEN
5379         END IF;
5380 
5381         IF (l_cost_group_id is null) then
5382                 IF l_primary_cost_method = 1 THEN                       -- costing method is standard
5383                    BEGIN
5384                         SELECT default_cost_group_id INTO l_cost_group_id
5385                           FROM mtl_secondary_inventories
5386                          WHERE secondary_inventory_name = p_subinv
5387                            AND organization_id = p_org_id
5388                            AND default_cost_group_id IS NOT NULL;
5389                    EXCEPTION
5390                         WHEN no_data_found THEN
5391                         l_cost_group_id := l_org_cost_group_id;
5392                    END;
5393                 ELSE                                                    -- costing method is not standard
5394                         l_cost_group_id := l_org_cost_group_id;
5395                 END IF;
5396         END IF;
5397         return l_cost_group_id;
5398 END get_costgrpid;
5399 
5400 /******************************************************************
5401  *
5402  * update_mil() : To update dynamic locators in autonomous mode
5403  * Added for Bug# 5044059
5404  * Added a parameter p_plocid Physical Locator for Bug# 7323175
5405  ******************************************************************/
5406 PROCEDURE update_mil(p_userid NUMBER,
5407                      p_loginid NUMBER,
5408                      p_applid NUMBER,
5409                      p_progid NUMBER,
5410                      p_reqstid NUMBER,
5411                      p_subinv VARCHAR2,
5412                      p_default_locator_status NUMBER,
5413                      p_orgid NUMBER,
5414                      p_locid NUMBER,
5415                      p_plocid NUMBER) IS
5416 PRAGMA AUTONOMOUS_TRANSACTION;
5417 l_count NUMBER := 0;
5418 BEGIN
5419 
5420     begin
5421       SELECT 1 INTO l_count
5422         FROM MTL_ITEM_LOCATIONS
5423        WHERE ORGANIZATION_ID = p_orgid
5424         /* Start: Fix for Bug# 7323175 : Also considering the physical locator for locking */
5425          --AND INVENTORY_LOCATION_ID = p_locid
5426          AND INVENTORY_LOCATION_ID IN (p_locid,p_plocid)
5427         /* End: Fix for Bug# 7323175 */
5428          AND SUBINVENTORY_CODE is NULL FOR UPDATE NOWAIT;
5429     exception
5430       when others then
5431         l_count := 0;
5432         IF (l_debug = 1) THEN
5433            inv_log_util.trace('Could not lock MIL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
5434         END IF;
5435     end;
5436 
5437     IF (l_count = 1) THEN
5438       UPDATE MTL_ITEM_LOCATIONS
5439       SET LAST_UPDATE_DATE = SYSDATE,
5440           LAST_UPDATED_BY = p_userid,
5441           LAST_UPDATE_LOGIN = p_loginid,
5442           PROGRAM_APPLICATION_ID = p_applid,
5443           PROGRAM_ID = p_progid,
5444           PROGRAM_UPDATE_DATE = SYSDATE,
5445           REQUEST_ID = p_reqstid,
5446           SUBINVENTORY_CODE = p_subinv,
5447           STATUS_ID = p_default_locator_status,
5448 	  /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
5449 	  physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
5450 	  p_plocid would be null */
5451 	  PHYSICAL_LOCATION_ID = p_plocid
5452 	  /* End: Fix for Bug# 7323175 */
5453       WHERE ORGANIZATION_ID = p_orgid
5454           /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
5455          --AND INVENTORY_LOCATION_ID = p_locid
5456         AND INVENTORY_LOCATION_ID IN (p_locid,p_plocid)
5457           /* End: Fix for Bug# 7323175 */
5458         AND SUBINVENTORY_CODE is NULL;
5459 
5460 
5461       IF (l_debug = 1) THEN
5462          inv_log_util.trace('Rows updated in MIL = '||SQL%ROWCOUNT, 'INV_TXN_MANAGER_GRP','9');
5463       END IF;
5464     END IF;
5465 
5466     COMMIT;
5467 
5468 EXCEPTION
5469   WHEN OTHERS THEN
5470         IF (l_debug = 1) THEN
5471            inv_log_util.trace('update_mil SQL : ' || substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP','9');
5472         END IF;
5473         ROLLBACK;
5474         RETURN;
5475 END update_mil;
5476 
5477 
5478 /*Bug#5125632. Added the following procedure to update the lot status
5479 of lots for a given line in MTLI, if they are NULL.
5480  Fist MTL_LOT_NUMBERS is checked to find the status. If there is no row in this
5481  table, then, MTL_SYSTEM_ITEMS is checked to fetch the 'default_lot_status_id'
5482  for the corresponding item*/
5483 
5484 Procedure update_status_id_in_mtli( p_txn_interface_id  IN NUMBER
5485                                    ,p_org_id            IN NUMBER
5486                                     ,p_inventory_item_id IN NUMBER ) Is
5487 l_status_enabled VARCHAR2(1);
5488 l_status_id NUMBER;
5489 l_mtli_status_id NUMBER;
5490 l_lot_num   VARCHAR2(31);
5491 
5492 CURSOR lots IS
5493 SELECT ROWID
5494      , lot_number
5495      , status_id
5496 FROM MTL_TRANSACTION_LOTS_INTERFACE
5497 WHERE transaction_interface_id = p_txn_interface_id;
5498 
5499 Begin
5500   IF (l_debug = 1) THEN
5501     inv_log_util.trace('Entered The Procedure update_status_id_in_mtli() with the parameters:', 'INV_TXN_MANAGER_GRP','1');
5502     inv_log_util.trace('p_txn_interface_id:'||p_txn_interface_id, 'INV_TXN_MANAGER_GRP','1');
5503     inv_log_util.trace('p_org_id:'||p_org_id, 'INV_TXN_MANAGER_GRP','1');
5504     inv_log_util.trace('p_inventory_item_id:'||p_inventory_item_id, 'INV_TXN_MANAGER_GRP','1');
5505   End If;
5506 
5507 FOR lots_rec IN lots
5508 LOOP
5509   IF lots_rec.status_id IS NULL THEN
5510     l_mtli_status_id := lots_rec.status_id;--To initialize 'lots_rec.status_id' with NULL
5511     IF (l_debug = 1) THEN
5512       inv_log_util.trace('Current cursor values are :', 'INV_TXN_MANAGER_GRP','1');
5513       inv_log_util.trace('lots_rec.lot_number:'||lots_rec.lot_number, 'INV_TXN_MANAGER_GRP','1');
5514       inv_log_util.trace('lots_rec.status_id:'||lots_rec.status_id, 'INV_TXN_MANAGER_GRP','1');
5515     End If;
5516     BEGIN
5517       SELECT status_id
5518       INTO l_mtli_status_id
5519       FROM mtl_lot_numbers
5520       WHERE organization_id   = p_org_id
5521         AND inventory_item_id = p_inventory_item_id
5522         AND lot_number      = lots_rec.lot_number;
5523 
5524     IF (l_debug = 1) THEN
5525       inv_log_util.trace('After selecting from MLN, Value is:', 'INV_TXN_MANAGER_GRP','1');
5526       inv_log_util.trace('l_mtli_status_id:'||l_mtli_status_id, 'INV_TXN_MANAGER_GRP','1');
5527     End If;
5528 
5529     EXCEPTION WHEN NO_DATA_FOUND THEN
5530       BEGIN
5531         SELECT lot_status_enabled
5532               ,default_lot_status_id
5533         INTO l_status_enabled
5534             ,l_status_id
5535         FROM mtl_system_items
5536         WHERE organization_id = p_org_id
5537           AND inventory_item_id = p_inventory_item_id;
5538         IF (l_debug = 1) THEN
5539           inv_log_util.trace('After selecting from MSI, Values are:', 'INV_TXN_MANAGER_GRP','1');
5540           inv_log_util.trace('lot_status_enabled:'||l_status_enabled, 'INV_TXN_MANAGER_GRP','1');
5541           inv_log_util.trace('default_lot_status_id:'||l_status_id, 'INV_TXN_MANAGER_GRP','1');
5542         End If;
5543 
5544         IF (NVL(l_status_enabled, 'N') = 'Y') THEN
5545           l_mtli_status_id := l_status_id;
5546         ELSE
5547           l_mtli_status_id := 1;
5548         END IF;
5549       END;
5550     END;
5551 
5552         IF (l_debug = 1) THEN
5553           inv_log_util.trace('Before Update of MTLI', 'INV_TXN_MANAGER_GRP','1');
5554         End If;
5555 
5556     UPDATE mtl_transaction_lots_interface
5557     SET   status_id = l_mtli_status_id
5558          ,last_updated_by = fnd_global.user_id
5559          ,last_update_date = sysdate
5560          ,last_update_login = fnd_global.login_id
5561          ,request_id = fnd_global.conc_request_id
5562          ,program_application_id = fnd_global.prog_appl_id
5563          ,program_id = fnd_global.conc_program_id
5564          ,program_update_date = Decode(fnd_global.conc_request_id, -1, NULL, SYSDATE)
5565     WHERE ROWID = lots_rec.rowid;
5566 
5567         IF (l_debug = 1) THEN
5568           inv_log_util.trace('After Update of MTLI', 'INV_TXN_MANAGER_GRP','1');
5569         End If;
5570 
5571   END IF;
5572 END LOOP;
5573 EXCEPTION WHEN OTHERS THEN
5574   IF lots%ISOPEN THEN
5575     CLOSE lots;
5576   END IF;
5577   IF (l_debug = 1) THEN
5578     inv_log_util.trace('Exception occurred in update_status_id_in_mtli procedure:', 'INV_TXN_MANAGER_GRP','1');
5579     inv_log_util.trace('Error Is:'||SQLERRM, 'INV_TXN_MANAGER_GRP','1');
5580   End If;
5581 
5582 End update_status_id_in_mtli;
5583 
5584 /******************************************************************
5585  *
5586  * validate_lot_serial_for_rcpt()
5587  * SDPAUL Bug# 5710830
5588  * This private procedure is used to validate a set of
5589  * MTL_TRANSACTION_LOTS_INTERFACE and MTL_SERIAL_NUMBERS_INTERFACE records
5590  * and inserts them into the corresponding master tables.
5591  * These validations are only needed for Receipt into stores transaction -> 27
5592  * and for the transaction sources -> 3,6 and 13.
5593  *
5594  ******************************************************************/
5595 
5596   PROCEDURE validate_lot_serial_for_rcpt
5597   (p_interface_id                 IN NUMBER
5598    , p_org_id                     IN NUMBER
5599    , p_item_id                    IN NUMBER
5600    , p_lotctrl                    IN NUMBER
5601    , p_serctrl                    IN NUMBER
5602    , p_rev                        IN VARCHAR2 DEFAULT NULL
5603    , p_trx_src_id                 IN NUMBER DEFAULT NULL
5604    , p_trx_action_id              IN NUMBER DEFAULT NULL
5605    , p_subinventory_code          IN VARCHAR2 DEFAULT NULL
5606    , p_locator_id                 IN NUMBER DEFAULT NULL
5607    , x_proc_msg                   OUT NOCOPY VARCHAR2
5608    , x_return_status              OUT NOCOPY VARCHAR2
5609   )
5610   IS
5611     CURSOR cur_MTLI IS
5612     SELECT LOT_NUMBER
5613            , LOT_EXPIRATION_DATE
5614            , LOT_ATTRIBUTE_CATEGORY
5615            , ATTRIBUTE_CATEGORY
5616            , ATTRIBUTE1
5617            , ATTRIBUTE2
5618            , ATTRIBUTE3
5619            , ATTRIBUTE4
5620            , ATTRIBUTE5
5621            , ATTRIBUTE6
5622            , ATTRIBUTE7
5623            , ATTRIBUTE8
5624            , ATTRIBUTE9
5625            , ATTRIBUTE10
5626            , ATTRIBUTE11
5627            , ATTRIBUTE12
5628            , ATTRIBUTE13
5629            , ATTRIBUTE14
5630            , ATTRIBUTE15
5631            , C_ATTRIBUTE1
5632            , C_ATTRIBUTE2
5633            , C_ATTRIBUTE3
5634            , C_ATTRIBUTE4
5635            , C_ATTRIBUTE5
5636            , C_ATTRIBUTE6
5637            , C_ATTRIBUTE7
5638            , C_ATTRIBUTE8
5639            , C_ATTRIBUTE9
5640            , C_ATTRIBUTE10
5641            , C_ATTRIBUTE11
5642            , C_ATTRIBUTE12
5643            , C_ATTRIBUTE13
5644            , C_ATTRIBUTE14
5645            , C_ATTRIBUTE15
5646            , C_ATTRIBUTE16
5647            , C_ATTRIBUTE17
5648            , C_ATTRIBUTE18
5649            , C_ATTRIBUTE19
5650            , C_ATTRIBUTE20
5651            , N_ATTRIBUTE1
5652            , N_ATTRIBUTE2
5653            , N_ATTRIBUTE3
5654            , N_ATTRIBUTE4
5655            , N_ATTRIBUTE5
5656            , N_ATTRIBUTE6
5657            , N_ATTRIBUTE7
5658            , N_ATTRIBUTE8
5659            , N_ATTRIBUTE9
5660            , N_ATTRIBUTE10
5661            , D_ATTRIBUTE1
5662            , D_ATTRIBUTE2
5663            , D_ATTRIBUTE3
5664            , D_ATTRIBUTE4
5665            , D_ATTRIBUTE5
5666            , D_ATTRIBUTE6
5667            , D_ATTRIBUTE7
5668            , D_ATTRIBUTE8
5669            , D_ATTRIBUTE9
5670            , D_ATTRIBUTE10
5671            , GRADE_CODE
5672            , ORIGINATION_DATE
5673            , DATE_CODE
5674            , STATUS_ID
5675            , CHANGE_DATE
5676            , AGE
5677            , RETEST_DATE
5678            , MATURITY_DATE
5679            , ITEM_SIZE
5680            , COLOR
5681            , VOLUME
5682            , VOLUME_UOM
5683            , PLACE_OF_ORIGIN
5684            , BEST_BY_DATE
5685            , LENGTH
5686            , LENGTH_UOM
5687            , RECYCLED_CONTENT
5688            , THICKNESS
5689            , THICKNESS_UOM
5690            , WIDTH
5691            , WIDTH_UOM
5692            , TERRITORY_CODE
5693            , SUPPLIER_LOT_NUMBER
5694            , VENDOR_NAME
5695            , SERIAL_TRANSACTION_TEMP_ID
5696       FROM MTL_TRANSACTION_LOTS_INTERFACE
5697       WHERE TRANSACTION_INTERFACE_ID = p_interface_id;
5698 
5699     CURSOR cur_MSNI(interface_id NUMBER) IS
5700     SELECT FM_SERIAL_NUMBER
5701            , TO_SERIAL_NUMBER
5702       FROM   MTL_SERIAL_NUMBERS_INTERFACE
5703       WHERE  TRANSACTION_INTERFACE_ID = interface_id;
5704 
5705     -- PL/SQL table to store lot attributes
5706     l_attributes_tbl   inv_lot_api_pub.char_tbl;
5707     l_c_attributes_tbl inv_lot_api_pub.char_tbl;
5708     l_n_attributes_tbl inv_lot_api_pub.number_tbl;
5709     l_d_attributes_tbl inv_lot_api_pub.date_tbl;
5710 
5711     l_lot_exists NUMBER := 0;
5712     l_ret_number NUMBER := 0;
5713     l_qty        NUMBER := NULL;
5714     l_start_qty  NUMBER := 0;
5715     l_end_ser    VARCHAR2(30);
5716 
5717     l_expiration_date DATE;
5718     l_object_id       NUMBER;
5719     l_msg_count       NUMBER;
5720 
5721   BEGIN
5722     x_return_status  := lg_ret_sts_success;
5723 
5724     -- Check for both lot and serial controlled item
5725     IF (p_lotctrl = 2 AND p_serctrl IN (2,5) ) THEN
5726       IF (l_debug = 1) THEN
5727         inv_log_util.trace('Validating both lot and serial controlled item','INV_TXN_MANAGER_GRP', 9);
5728       END IF;
5729       -- Looping through all MTLI records
5730       FOR rec_MTLI IN cur_MTLI
5731       LOOP
5732 
5733         -- Check to see if the lot already exists
5734         -- If 'NO' then call the create_inv_lot API
5735         l_lot_exists := 0;
5736         BEGIN
5737          SELECT 1 INTO l_lot_exists
5738            FROM DUAL
5739            WHERE EXISTS(SELECT  lot_number
5740                           FROM  mtl_lot_numbers
5741                           WHERE lot_number = rec_MTLI.LOT_NUMBER
5742                             AND inventory_item_id = p_item_id
5743                             AND organization_id = p_org_id);
5744         EXCEPTION
5745         WHEN OTHERS THEN
5746           l_lot_exists := 0;
5747         END; -- End of check for lot exists
5748 
5749         IF (l_lot_exists = 1) THEN
5750           IF (l_debug = 1) THEN
5751             inv_log_util.trace('Lot already exists','INV_TXN_MANAGER_GRP', 9);
5752           END IF;
5753         ELSE -- Have to create a new lot
5754 
5755           l_attributes_tbl(1)  := rec_MTLI.ATTRIBUTE1;
5756           l_attributes_tbl(2)  := rec_MTLI.ATTRIBUTE2;
5757           l_attributes_tbl(3)  := rec_MTLI.ATTRIBUTE3;
5758           l_attributes_tbl(4)  := rec_MTLI.ATTRIBUTE4;
5759           l_attributes_tbl(5)  := rec_MTLI.ATTRIBUTE5;
5760           l_attributes_tbl(6)  := rec_MTLI.ATTRIBUTE6;
5761           l_attributes_tbl(7)  := rec_MTLI.ATTRIBUTE7;
5762           l_attributes_tbl(8)  := rec_MTLI.ATTRIBUTE8;
5763           l_attributes_tbl(9)  := rec_MTLI.ATTRIBUTE9;
5764           l_attributes_tbl(10) := rec_MTLI.ATTRIBUTE10;
5765           l_attributes_tbl(11) := rec_MTLI.ATTRIBUTE11;
5766           l_attributes_tbl(12) := rec_MTLI.ATTRIBUTE12;
5767           l_attributes_tbl(13) := rec_MTLI.ATTRIBUTE13;
5768           l_attributes_tbl(14) := rec_MTLI.ATTRIBUTE14;
5769           l_attributes_tbl(15) := rec_MTLI.ATTRIBUTE15;
5770 
5771           l_c_attributes_tbl(1)  := rec_MTLI.C_ATTRIBUTE1;
5772           l_c_attributes_tbl(2)  := rec_MTLI.C_ATTRIBUTE2;
5773           l_c_attributes_tbl(3)  := rec_MTLI.C_ATTRIBUTE3;
5774           l_c_attributes_tbl(4)  := rec_MTLI.C_ATTRIBUTE4;
5775           l_c_attributes_tbl(5)  := rec_MTLI.C_ATTRIBUTE5;
5776           l_c_attributes_tbl(6)  := rec_MTLI.C_ATTRIBUTE6;
5777           l_c_attributes_tbl(7)  := rec_MTLI.C_ATTRIBUTE7;
5778           l_c_attributes_tbl(8)  := rec_MTLI.C_ATTRIBUTE8;
5779           l_c_attributes_tbl(9)  := rec_MTLI.C_ATTRIBUTE9;
5780           l_c_attributes_tbl(10) := rec_MTLI.C_ATTRIBUTE10;
5781           l_c_attributes_tbl(11) := rec_MTLI.C_ATTRIBUTE11;
5782           l_c_attributes_tbl(12) := rec_MTLI.C_ATTRIBUTE12;
5783           l_c_attributes_tbl(13) := rec_MTLI.C_ATTRIBUTE13;
5784           l_c_attributes_tbl(14) := rec_MTLI.C_ATTRIBUTE14;
5785           l_c_attributes_tbl(15) := rec_MTLI.C_ATTRIBUTE15;
5786           l_c_attributes_tbl(16) := rec_MTLI.C_ATTRIBUTE16;
5787           l_c_attributes_tbl(17) := rec_MTLI.C_ATTRIBUTE17;
5788           l_c_attributes_tbl(18) := rec_MTLI.C_ATTRIBUTE18;
5789           l_c_attributes_tbl(19) := rec_MTLI.C_ATTRIBUTE19;
5790           l_c_attributes_tbl(20) := rec_MTLI.C_ATTRIBUTE20;
5791 
5792           l_n_attributes_tbl(1)  := rec_MTLI.N_ATTRIBUTE1;
5793           l_n_attributes_tbl(2)  := rec_MTLI.N_ATTRIBUTE2;
5794           l_n_attributes_tbl(3)  := rec_MTLI.N_ATTRIBUTE3;
5795           l_n_attributes_tbl(4)  := rec_MTLI.N_ATTRIBUTE4;
5796           l_n_attributes_tbl(5)  := rec_MTLI.N_ATTRIBUTE5;
5797           l_n_attributes_tbl(6)  := rec_MTLI.N_ATTRIBUTE6;
5798           l_n_attributes_tbl(7)  := rec_MTLI.N_ATTRIBUTE7;
5799           l_n_attributes_tbl(8)  := rec_MTLI.N_ATTRIBUTE8;
5800           l_n_attributes_tbl(9)  := rec_MTLI.N_ATTRIBUTE9;
5801           l_n_attributes_tbl(10) := rec_MTLI.N_ATTRIBUTE10;
5802 
5803           l_d_attributes_tbl(1)  := rec_MTLI.D_ATTRIBUTE1;
5804           l_d_attributes_tbl(2)  := rec_MTLI.D_ATTRIBUTE2;
5805           l_d_attributes_tbl(3)  := rec_MTLI.D_ATTRIBUTE3;
5806           l_d_attributes_tbl(4)  := rec_MTLI.D_ATTRIBUTE4;
5807           l_d_attributes_tbl(5)  := rec_MTLI.D_ATTRIBUTE5;
5808           l_d_attributes_tbl(6)  := rec_MTLI.D_ATTRIBUTE6;
5809           l_d_attributes_tbl(7)  := rec_MTLI.D_ATTRIBUTE7;
5810           l_d_attributes_tbl(8)  := rec_MTLI.D_ATTRIBUTE8;
5811           l_d_attributes_tbl(9)  := rec_MTLI.D_ATTRIBUTE9;
5812           l_d_attributes_tbl(10) := rec_MTLI.D_ATTRIBUTE10;
5813 
5814           IF (l_debug=1) THEN
5815             inv_log_util.trace('Before call to inv_lot_api_pub.create_inv_lot', 'INV_TXN_MANAGER_GRP', 9);
5816           END IF;
5817 
5818           inv_lot_api_pub.create_inv_lot(
5819           x_return_status            => x_return_status
5820           , x_msg_count              => l_msg_count
5821           , x_msg_data               => x_proc_msg
5822           , p_inventory_item_id      => p_item_id
5823           , p_organization_id        => p_org_id
5824           , p_lot_number             => rec_MTLI.LOT_NUMBER
5825           , p_expiration_date        => rec_MTLI.LOT_EXPIRATION_DATE
5826           , p_disable_flag           => null
5827           , p_attribute_category     => rec_MTLI.ATTRIBUTE_CATEGORY
5828           , p_lot_attribute_category => rec_MTLI.LOT_ATTRIBUTE_CATEGORY
5829           , p_attributes_tbl         => l_attributes_tbl
5830           , p_c_attributes_tbl       => l_c_attributes_tbl
5831           , p_n_attributes_tbl       => l_n_attributes_tbl
5832           , p_d_attributes_tbl       => l_d_attributes_tbl
5833           , p_grade_code             => rec_MTLI.GRADE_CODE
5834           , p_origination_date       => rec_MTLI.ORIGINATION_DATE
5835           , p_date_code              => rec_MTLI.DATE_CODE
5836           , p_status_id              => rec_MTLI.STATUS_ID
5837           , p_change_date            => rec_MTLI.CHANGE_DATE
5838           , p_age                    => rec_MTLI.AGE
5839           , p_retest_date            => rec_MTLI.RETEST_DATE
5840           , p_maturity_date          => rec_MTLI.MATURITY_DATE
5841           , p_item_size              => rec_MTLI.ITEM_SIZE
5842           , p_color                  => rec_MTLI.COLOR
5843           , p_volume                 => rec_MTLI.VOLUME
5844           , p_volume_uom             => rec_MTLI.VOLUME_UOM
5845           , p_place_of_origin        => rec_MTLI.PLACE_OF_ORIGIN
5846           , p_best_by_date           => rec_MTLI.BEST_BY_DATE
5847           , p_length                 => rec_MTLI.LENGTH
5848           , p_length_uom             => rec_MTLI.LENGTH_UOM
5849           , p_recycled_content       => rec_MTLI.RECYCLED_CONTENT
5850           , p_thickness              => rec_MTLI.THICKNESS
5851           , p_thickness_uom          => rec_MTLI.THICKNESS_UOM
5852           , p_width                  => rec_MTLI.WIDTH
5853           , p_width_uom              => rec_MTLI.WIDTH_UOM
5854           , p_territory_code         => rec_MTLI.TERRITORY_CODE
5855           , p_supplier_lot_number    => rec_MTLI.SUPPLIER_LOT_NUMBER
5856           , p_vendor_name            => rec_MTLI.VENDOR_NAME
5857           , p_source                 => null
5858           );
5859 
5860           IF (l_debug=1) THEN
5861             inv_log_util.trace('After call to inv_lot_api_pub.create_inv_lot', 'INV_TXN_MANAGER_GRP', 9);
5862             inv_log_util.trace(' x_return_status : ' || x_return_status, 'INV_TXN_MANAGER_GRP', 9);
5863           END IF;
5864         END IF; -- End of Lot Exists check
5865 
5866         IF (x_return_status = lg_ret_sts_success) THEN
5867           IF (l_debug=1) THEN
5868             inv_log_util.trace('Call to inv_lot_api_pub.create_inv_lot was successful','INV_TXN_MANAGER_GRP', 9);
5869           END IF;
5870           -- Looping through every serials in the lot
5871           FOR rec_MSNI IN cur_MSNI(rec_MTLI.SERIAL_TRANSACTION_TEMP_ID)
5872           LOOP
5873             IF (l_debug=1) THEN
5874               inv_log_util.trace('About to call inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5875             END IF;
5876 
5877             l_qty := NULL;
5878             l_end_ser := NVL(rec_MSNI.TO_SERIAL_NUMBER,rec_MSNI.FM_SERIAL_NUMBER);
5879             l_start_qty := inv_serial_number_pub.get_serial_diff(rec_MSNI.FM_SERIAL_NUMBER,l_end_ser);
5880             l_ret_number := inv_serial_number_pub.validate_serials(
5881                             p_org_id                  => p_org_id
5882                             , p_item_id               => p_item_id
5883                             , p_qty                   => l_qty
5884                             , p_rev                   => p_rev
5885                             , p_lot                   => rec_MTLI.LOT_NUMBER
5886                             , p_start_ser             => rec_MSNI.FM_SERIAL_NUMBER
5887                             , p_trx_src_id            => p_trx_src_id
5888                             , p_trx_action_id         => p_trx_action_id
5889                             , p_subinventory_code     => p_subinventory_code
5890                             , p_locator_id            => p_locator_id
5891                             , p_issue_receipt         => 'R'
5892                             , x_end_ser               => l_end_ser
5893                             , x_proc_msg              => x_proc_msg
5894                             , p_check_for_grp_mark_id => 'Y'
5895                             );
5896             -- Check for group mark validations
5897             IF (l_start_qty <> l_qty) THEN
5898               x_return_status := lg_ret_sts_error;
5899               loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5900               IF (l_debug = 1) THEN
5901                 inv_log_util.trace('Group mark validations failed', 'INV_TXN_MANAGER_GRP', 9);
5902               END IF;
5903               RETURN;
5904             END IF; -- End of group mark validations
5905             IF (l_debug=1) THEN
5906               inv_log_util.trace('After call to inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5907               inv_log_util.trace(' l_ret_number : ' || l_ret_number, 'INV_TXN_MANAGER_GRP', 9);
5908             END IF;
5909             IF (l_ret_number = 0) THEN -- Success from inv_serial_number_pub.validate_serials
5910               x_return_status := lg_ret_sts_success;
5911               IF (l_debug = 1) THEN
5912                 inv_log_util.trace('Call to inv_serial_number_pub.validate_serials was successful','INV_TXN_MANAGER_GRP', 9);
5913               END IF;
5914             ELSIF (l_ret_number = 1) THEN
5915               x_return_status := lg_ret_sts_error;
5916               loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5917               IF (l_debug = 1) THEN
5918                 inv_log_util.trace('Error from inv_serial_number_pub.validate_serials'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
5919               END IF;
5920               RETURN;
5921             END IF;
5922           END LOOP; -- End of cur_MSNI cursor
5923 
5924         ELSE  -- Failure from inv_lot_api_pub.create_inv_lot
5925           x_return_status := lg_ret_sts_error;
5926           loaderrmsg('INV_INT_LOTCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5927           IF (l_debug = 1) THEN
5928             inv_log_util.trace('Error from inv_lot_api_pub.create_inv_lot'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
5929           END IF;
5930           RETURN;
5931         END IF;
5932 
5933       END LOOP; -- End of cur_MTLI
5934 
5935     -- Check for only serial controlled item
5936     ELSIF (p_lotctrl = 1 AND p_serctrl IN (2,5)) THEN
5937 
5938       -- Looping through every serials in the table
5939       FOR rec_MSNI IN cur_MSNI(p_interface_id)
5940       LOOP
5941 
5942         l_qty := NULL;
5943         l_end_ser := NVL(rec_MSNI.TO_SERIAL_NUMBER,rec_MSNI.FM_SERIAL_NUMBER);
5944         l_start_qty := inv_serial_number_pub.get_serial_diff(rec_MSNI.FM_SERIAL_NUMBER,l_end_ser);
5945         IF (l_debug=1) THEN
5946           inv_log_util.trace('About to call inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5947         END IF;
5948         l_ret_number := inv_serial_number_pub.validate_serials(
5949                         p_org_id                  => p_org_id
5950                         , p_item_id               => p_item_id
5951                         , p_qty                   => l_qty
5952                         , p_rev                   => p_rev
5953                         , p_lot                   => null
5954                         , p_start_ser             => rec_MSNI.FM_SERIAL_NUMBER
5955                         , p_trx_src_id            => p_trx_src_id
5956                         , p_trx_action_id         => p_trx_action_id
5957                         , p_subinventory_code     => p_subinventory_code
5958                         , p_locator_id            => p_locator_id
5959                         , p_issue_receipt         => 'R'
5960                         , x_end_ser               => l_end_ser
5961                         , x_proc_msg              => x_proc_msg
5962                         , p_check_for_grp_mark_id => 'Y'
5963                         );
5964         --Check for Group mark validations
5965         IF (l_start_qty <> l_qty) THEN
5966           x_return_status := lg_ret_sts_error;
5967           loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5968           IF (l_debug = 1) THEN
5969             inv_log_util.trace('Group mark validations failed', 'INV_TXN_MANAGER_GRP', 9);
5970           END IF;
5971           RETURN;
5972         END IF;  -- End of check for group mark validations
5973         IF (l_debug=1) THEN
5974           inv_log_util.trace('After call to inv_serial_number_pub.validate_serials', 'INV_TXN_MANAGER_GRP', 9);
5975           inv_log_util.trace(' l_ret_number : ' || l_ret_number, 'INV_TXN_MANAGER_GRP', 9);
5976         END IF;
5977 
5978         IF (l_ret_number = 0) THEN -- Success from inv_serial_number_pub.validate_serials
5979           x_return_status := lg_ret_sts_success;
5980           IF (l_debug = 1) THEN
5981             inv_log_util.trace('Call to inv_serial_number_pub.validate_serials was successful','INV_TXN_MANAGER_GRP', 9);
5982           END IF;
5983         ELSIF (l_ret_number = 1) THEN -- Failure from inv_serial_number_pub.validate_serials
5984           x_return_status := lg_ret_sts_error;
5985           loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
5986           IF (l_debug = 1) THEN
5987             inv_log_util.trace('Error from inv_serial_number_pub.validate_serials'|| x_proc_msg || ':' || sqlerrm,'INV_TXN_MANAGER_GRP', 9);
5988           END IF;
5989           RETURN;
5990         END IF;
5991 
5992       END LOOP; -- End of cur_MSNI
5993     END IF;
5994   EXCEPTION
5995     WHEN OTHERS THEN
5996       x_return_status  := lg_ret_sts_unexp_error;
5997       IF (l_debug = 1) THEN
5998         inv_log_util.trace(' x_return_status : ' || x_return_status, 'INV_TXN_MANAGER_GRP', 9);
5999         inv_log_util.trace('Exception in validate_lot_serial_for_rcpt '|| x_proc_msg || ':' || sqlerrm, 'INV_TXN_MANAGER_GRP', 9);
6000       END IF;
6001       loaderrmsg('INV_INT_SERMISCODE','INV_LOT_SERIAL_VALIDATION_FAIL');
6002 
6003   END validate_lot_serial_for_rcpt;
6004 
6005 /******************************************************************
6006  *
6007  * validate_lines() : Outer
6008  *
6009  ******************************************************************/
6010 PROCEDURE validate_lines(p_header_id NUMBER,
6011                          p_commit VARCHAR2 := fnd_api.g_false     ,
6012                          p_validation_level NUMBER  := fnd_api.g_valid_level_full  ,
6013                          x_return_status OUT NOCOPY VARCHAR2,
6014                          x_msg_count OUT NOCOPY NUMBER,
6015                          x_msg_data OUT NOCOPY VARCHAR2,
6016                          p_userid NUMBER,
6017                          p_loginid NUMBER,
6018                          p_applid NUMBER,
6019                          p_progid NUMBER)
6020 AS
6021 
6022     CURSOR AA1 IS
6023     SELECT
6024         TRANSACTION_INTERFACE_ID,
6025         TRANSACTION_HEADER_ID,
6026         REQUEST_ID,
6027         INVENTORY_ITEM_ID,
6028         ORGANIZATION_ID,
6029         SUBINVENTORY_CODE,
6030         TRANSFER_ORGANIZATION,
6031         TRANSFER_SUBINVENTORY,
6032         TRANSACTION_UOM,
6033         TRANSACTION_DATE,
6034         TRANSACTION_QUANTITY,
6035         LOCATOR_ID,
6036         TRANSFER_LOCATOR,
6037         TRANSACTION_SOURCE_ID,
6038         TRANSACTION_SOURCE_TYPE_ID,
6039         TRANSACTION_ACTION_ID,
6040         TRANSACTION_TYPE_ID,
6041         DISTRIBUTION_ACCOUNT_ID,
6042         NVL(SHIPPABLE_FLAG,'Y'),
6043         ROWID,
6044         NEW_AVERAGE_COST,
6045         VALUE_CHANGE,
6046         PERCENTAGE_CHANGE,
6047         MATERIAL_ACCOUNT,
6048         MATERIAL_OVERHEAD_ACCOUNT,
6049         RESOURCE_ACCOUNT,
6050         OUTSIDE_PROCESSING_ACCOUNT,
6051         OVERHEAD_ACCOUNT,
6052         REQUISITION_LINE_ID,
6053         OVERCOMPLETION_TRANSACTION_QTY,   /* Overcompletion Transactions */
6054         END_ITEM_UNIT_NUMBER,
6055         SCHEDULED_PAYBACK_DATE, /* Borrow Payback */
6056         REVISION,   /* Borrow Payback */
6057         ORG_COST_GROUP_ID,  /* PCST */
6058         COST_TYPE_ID, /* PCST */
6059         PRIMARY_QUANTITY,
6060         SOURCE_LINE_ID,
6061         PROCESS_FLAG,
6062         TRANSACTION_SOURCE_NAME,
6063         TRX_SOURCE_DELIVERY_ID,
6064         TRX_SOURCE_LINE_ID,
6065         PARENT_ID,
6066         TRANSACTION_BATCH_ID,
6067         TRANSACTION_BATCH_SEQ,
6068         -- INVCONV start fabdi
6069         SECONDARY_TRANSACTION_QUANTITY,
6070         SECONDARY_UOM_CODE
6071         -- INVCONV end fabdi
6072        ,SHIP_TO_LOCATION_ID --eIB Build; Bug# 4348541
6073        , transfer_price     -- OPM INVCONV umoogala Bug 4432078
6074        ,wip_entity_type -- Pawan 11th july added
6075        /*Bug:5392366. Added the following two columns. */
6076        ,completion_transaction_id
6077        ,move_transaction_id
6078     FROM MTL_TRANSACTIONS_INTERFACE
6079     WHERE TRANSACTION_HEADER_ID = p_header_id
6080       AND PROCESS_FLAG = 1
6081     ORDER BY ORGANIZATION_ID,INVENTORY_ITEM_ID,REVISION,
6082           SUBINVENTORY_CODE,LOCATOR_ID;
6083 
6084 
6085    line_vldn_error_flag VARCHAR(1);
6086    l_Line_Rec_Type inv_txn_manager_pub.Line_Rec_Type;
6087    l_count number;
6088 
6089 BEGIN
6090     if ( l_debug is null) then
6091        l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6092     end if;
6093 
6094     fnd_flex_key_api.set_session_mode('seed_data');
6095 
6096      FOR l_Line_rec_Type IN AA1 LOOP
6097        BEGIN
6098          savepoint line_validation_svpt;
6099            validate_lines(p_line_Rec_Type => l_Line_rec_type,
6100                           p_commit => p_commit,
6101                           p_validation_level => p_validation_level,
6102                           p_error_flag => line_vldn_error_flag,
6103                           p_userid => p_userid,
6104                           p_loginid => p_loginid,
6105                           p_applid => p_applid,
6106                           p_progid => p_progid);
6107                 IF (line_vldn_error_flag = 'Y') then
6108                         IF (l_debug = 1) THEN
6109                            inv_log_util.trace('Error in Line Validatin', 'INV_TXN_MANAGER_GRP', 9);
6110                         END IF;
6111                 END IF;
6112 
6113        END;
6114      END LOOP;
6115 
6116      x_return_status := FND_API.G_RET_STS_SUCCESS;
6117 
6118 EXCEPTION
6119      WHEN OTHERS THEN
6120         IF (l_debug = 1) THEN
6121         inv_log_util.trace('Error in outer validate_lines'||substr(sqlerrm,1,240),
6122                                 'INV_TXN_MANAGER_GRP',1);
6123         END IF;
6124         x_return_status := FND_API.G_RET_STS_ERROR;
6125 
6126 END validate_lines;
6127 
6128 
6129 /******************************************************************
6130  *
6131  * validate_lines()
6132  *  Validate one transaction record in MTL_TRANSACTIONS_INTERFACE
6133  *
6134  ******************************************************************/
6135 PROCEDURE validate_lines(p_line_Rec_Type inv_txn_manager_pub.line_rec_type,
6136                          p_commit VARCHAR2 := fnd_api.g_false     ,
6137                          p_validation_level NUMBER  := fnd_api.g_valid_level_full  ,
6138                          p_error_flag OUT NOCOPY VARCHAR2,
6139                          p_userid NUMBER,
6140                          p_loginid NUMBER,
6141                          p_applid NUMBER,
6142                          p_progid NUMBER)
6143 AS
6144 
6145     l_shlfdays NUMBER;
6146     l_count NUMBER;
6147     l_header_id NUMBER;
6148     l_intid NUMBER;
6149     l_itemid NUMBER;
6150     l_orgid NUMBER;
6151     l_xorgid NUMBER;
6152     l_locid NUMBER;
6153     l_loci NUMBER;
6154     l_prdid NUMBER;
6155     l_xlocid NUMBER;
6156     l_acttype NUMBER;
6157     l_trxtype NUMBER;
6158     l_srctypeid NUMBER;
6159     l_error_num NUMBER;
6160     l_mat_accnt NUMBER;
6161     l_mat_ovhd_accnt NUMBER;
6162     l_res_accnt NUMBER;
6163     l_osp_accnt NUMBER;
6164     l_ovhd_accnt NUMBER;
6165     l_srctype NUMBER;
6166     l_req_line_id NUMBER;
6167     l_primary_cost_method NUMBER;
6168     l_acct NUMBER;
6169     l_trxsrc VARCHAR(40);
6170     l_cost_type_id NUMBER;
6171     l_org_cost_group_id NUMBER;  /* PCST (Periodic Cost Update) */
6172     l_default_locator_status NUMBER;     /* Status Control */
6173     l_overcomp_txn_qty NUMBER;
6174     l_overcomp_primary_qty NUMBER :=0; /* Overcompletion Transactions */
6175     tev_flow_schedule NUMBER := 0;
6176     tev_scheduled_flag NUMBER := 1; --Bug #6449667, changing the default value from 0 to 1.
6177     l_trxqty NUMBER;
6178     l_priqty NUMBER;
6179     l_new_avg_cst NUMBER;
6180     l_val_chng NUMBER;
6181     l_per_chng NUMBER;
6182     l_rowid VARCHAR2(20);
6183     l_subinv VARCHAR2(11);
6184     l_xsubinv VARCHAR2(11);
6185     l_trxdate DATE;
6186     -- l_trxdate VARCHAR2(22);
6187     l_scheduled_payback_date VARCHAR2(22);
6188     l_trxuom VARCHAR2(4);
6189     l_priuom VARCHAR2(4);
6190     l_unit_number VARCHAR2(31);
6191     l_itmshpflag VARCHAR2(1);
6192     l_revision VARCHAR2(3); /* Borrow Payback */
6193     x_return_status VARCHAR2(1);
6194     l_locctrl NUMBER;
6195     l_xlocctrl NUMBER;
6196     l_lotctrl NUMBER;
6197     l_serctrl NUMBER;
6198     l_resloc NUMBER;
6199     l_xlotctrl NUMBER;
6200     l_xserctrl NUMBER;
6201     l_xresloc NUMBER;
6202     l_engitemflag NUMBER;
6203     l_lotuniq NUMBER;
6204     l_shlfcode VARCHAR2(40);
6205     l_avg_cost_update NUMBER;
6206     l_flow_schedule_children NUMBER;
6207     l_exp_type_required NUMBER :=1;
6208     l_tnum NUMBER;
6209     l_cst_temp NUMBER;
6210     l_reqstid NUMBER;
6211 
6212     l_result NUMBER;
6213     l_lcm_enabled_org mtl_parameters.lcm_enabled_flag%type := 'N';
6214 
6215 
6216     /* WMS installed -- Installed:1, not installed: 0 */
6217     wms_installed               NUMBER;
6218 
6219     l_wms_installed boolean;
6220     l_return_status      VARCHAR2(300);
6221     l_msg_count          NUMBER;
6222     l_msg_data           VARCHAR2(300);
6223     l_validate_full      BOOLEAN :=TRUE;
6224 
6225      l_cg_org NUMBER := NULL;                   -- Bug 6356567 Starting
6226     l_cost_group_id NUMBER := NULL;
6227     l_xfer_cost_group_id NUMBER := NULL;
6228     l_temp_cost_group_id NUMBER := NULL;
6229     l_temp_xfer_cost_group_id NUMBER := NULL;   -- Bug 6356567 Ending
6230 
6231     -- INVCONV fabdi start
6232     l_secondary_qty NUMBER;
6233     l_secondary_UOM VARCHAR2(3);
6234     -- INVCONV fabdi end
6235 
6236     -- OPM INVCONV umoogala For Process-Discrete Enh.
6237     -- Bug 4432078
6238     l_pd_xfer_ind             BINARY_INTEGER;
6239     l_transfer_price          NUMBER;
6240     l_transfer_price_priuom   NUMBER;
6241     l_from_ou                 BINARY_INTEGER;
6242     l_to_ou                   BINARY_INTEGER;
6243     l_order_line_id           BINARY_INTEGER;
6244     l_xfer_type               VARCHAR2(6);
6245     l_xfer_source             VARCHAR2(6);
6246 
6247     x_currency_code           VARCHAR2(31);
6248     x_incr_transfer_price     NUMBER;
6249     x_incr_currency_code      VARCHAR2(31);
6250     x_msg_data                VARCHAR2(3000);
6251     x_msg_count               NUMBER;
6252 
6253     l_process_enabled_flag_from VARCHAR2(1);
6254     l_process_enabled_flag_to   VARCHAR2(1);
6255 
6256     l_ic_invoicing_enabled      NUMBER;
6257     -- End OPM INVCONV umoogala
6258 
6259     l_is_wsm_enabled     VARCHAR2(1);
6260     /*Bug#5205455. Added the below 2 variables*/
6261     l_fob_point NUMBER;
6262     l_validate_xfer_org BOOLEAN := FALSE;
6263 
6264     --hjogleka
6265     --Bug #5497519
6266     l_lot_ser_qty NUMBER;
6267     l_account varchar2(100); /* Bug 6271039 */
6268 
6269     --Start: Fix for Bug# 7323175
6270     l_project_ref_enabled NUMBER := 0;
6271     l_plocid NUMBER;
6272     l_xplocid NUMBER;
6273     --End: Fix for Bug# 7323175
6274 
6275 BEGIN
6276 
6277     if (l_debug is null) then
6278        l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6279     end if;
6280     IF (l_debug = 1) THEN
6281         inv_log_util.trace('in Validate_lines ....','INV_TXN_MANAGER_GRP', 9);
6282     END IF;
6283 
6284     l_count := 0;
6285 
6286     /*----------------------------------------
6287     |  Checking whether WMS is installed
6288     +-----------------------------------------*/
6289      l_wms_installed := wms_install.check_install
6290        (x_return_status   => l_return_status,
6291         x_msg_count       => l_msg_count,
6292         x_msg_data        => l_msg_data,
6293         p_organization_id => null );
6294 
6295         IF l_wms_installed then
6296           wms_installed := 1;
6297       else
6298         wms_installed := 0;
6299       END IF;
6300 
6301     /* ACP */
6302     l_avg_cost_update := 2;
6303 
6304 
6305             l_intid    := p_line_Rec_Type.TRANSACTION_INTERFACE_ID;
6306             l_header_id:= p_line_Rec_Type.TRANSACTION_HEADER_ID;
6307             l_reqstid  := p_line_Rec_Type.REQUEST_ID;
6308             l_itemid   := p_line_Rec_Type.INVENTORY_ITEM_ID;
6309             l_orgid    := p_line_Rec_Type.ORGANIZATION_ID;
6310             l_subinv   := p_line_Rec_Type.SUBINVENTORY_CODE;
6311             l_xorgid   := p_line_Rec_Type.TRANSFER_ORGANIZATION;
6312             l_xsubinv  := p_line_Rec_Type.TRANSFER_SUBINVENTORY;
6313             l_trxuom   := p_line_Rec_Type.TRANSACTION_UOM;
6314             l_trxdate  := p_line_Rec_Type.TRANSACTION_DATE;
6315             l_trxqty   := p_line_Rec_Type.TRANSACTION_QUANTITY;
6316             l_locid    := p_line_Rec_Type.LOCATOR_ID;
6317             l_xlocid   := p_line_Rec_Type.TRANSFER_LOCATOR;
6318             l_trxsrc   := p_line_Rec_Type.TRANSACTION_SOURCE_ID;
6319             l_srctype  := p_line_Rec_Type.TRANSACTION_SOURCE_TYPE_ID;
6320             l_acttype  := p_line_Rec_Type.TRANSACTION_ACTION_ID;
6321             l_trxtype  := p_line_Rec_Type.TRANSACTION_TYPE_ID;
6322             l_acct     := p_line_Rec_Type.DISTRIBUTION_ACCOUNT_ID;
6323             l_itmshpflag       := p_line_Rec_Type.SHIPPABLE_FLAG ;
6324             l_rowid            := p_line_Rec_Type.ROWID;
6325             l_new_avg_cst      := p_line_Rec_Type.NEW_AVERAGE_COST;
6326             l_val_chng         := p_line_Rec_Type.VALUE_CHANGE;
6327             l_per_chng         := p_line_Rec_Type.PERCENTAGE_CHANGE;
6328             l_mat_accnt        := p_line_Rec_Type.MATERIAL_ACCOUNT;
6329             l_mat_ovhd_accnt   := p_line_Rec_Type.MATERIAL_OVERHEAD_ACCOUNT;
6330             l_res_accnt        := p_line_Rec_Type.RESOURCE_ACCOUNT;
6331             l_osp_accnt        := p_line_Rec_Type.OUTSIDE_PROCESSING_ACCOUNT;
6332             l_ovhd_accnt       := p_line_Rec_Type.OVERHEAD_ACCOUNT;
6333             l_req_line_id      := p_line_Rec_Type.REQUISITION_LINE_ID;
6334             l_overcomp_txn_qty := p_line_Rec_Type.OVERCOMPLETION_TRANSACTION_QTY;
6335             l_unit_number      := p_line_Rec_Type.END_ITEM_UNIT_NUMBER;
6336             l_scheduled_payback_date := p_line_Rec_Type.SCHEDULED_PAYBACK_DATE;
6337             l_revision          := p_line_Rec_Type.REVISION ;
6338             l_org_cost_group_id := p_line_Rec_Type.ORG_COST_GROUP_ID;
6339             l_cost_type_id      := p_line_Rec_Type.COST_TYPE_ID;
6340             l_secondary_qty     := p_line_Rec_Type.SECONDARY_TRANSACTION_QUANTITY;
6341             l_secondary_uom     := p_line_Rec_Type.SECONDARY_UOM_CODE;
6342             l_transfer_price    := p_line_Rec_Type.TRANSFER_PRICE;  -- INVCONV umoogala  Bug 4432078
6343             l_order_line_id     := p_line_Rec_Type.TRX_SOURCE_LINE_ID;  -- INVCONV umoogala  Bug 4432078
6344 
6345             IF l_locid IS NOT NULL THEN
6346                 l_loci := 1;
6347             ELSE
6348                 l_loci := -1;
6349             END IF;
6350 
6351             IF (l_debug = 1) THEN
6352                 inv_log_util.trace('Before calling fnd_profile.put MFG_ORGANIZATION_ID','INV_TXN_MANAGER_PUB',9);
6353             END IF;
6354 
6355             fnd_profile.put('MFG_ORGANIZATION_ID',l_orgid);
6356 
6357             /**J-dev check we need to perform a full validation*/
6358             IF (l_debug = 1) THEN
6359                inv_log_util.trace('wip_constants.DMF_PATCHSET_LEVEL'||wip_constants.dmf_patchset_level,'INV_TXN_MANAGER_GRP', 9);
6360                inv_log_util.trace('wip_constants.DMF_PATCHSET_J_VALUE'||wip_constants.dmf_patchset_J_VALUE,'INV_TXN_MANAGER_GRP', 9);
6361             END IF;
6362 
6363             IF (l_srctype = 5 AND wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE)  THEN
6364                IF (p_validation_level <> fnd_api.g_valid_level_full) THEN
6365                   l_validate_full := FALSE;
6366                   /**implies this a WIP desktop transaction*/
6367                   IF (l_debug = 1) THEN
6368                      inv_log_util.trace('Val line:WIP desktop trx','INV_TXN_MANAGER_GRP', 9);
6369                   END IF;
6370                 ELSE
6371                   IF (l_debug = 1) THEN
6372                      inv_log_util.trace('Val line:WIP MTI trx','INV_TXN_MANAGER_GRP', 9);
6373                   END IF;
6374                END IF;
6375             END IF;--J-dev
6376 
6377 
6378 
6379 
6380             --Begin Fix 2505534
6381 
6382             IF (l_debug = 1) THEN
6383                inv_log_util.trace('Before calling setorgclientinfo with l_orgid '||l_orgid, 'INV_TXN_MANAGER_GRP', 9);
6384             END IF;
6385 
6386             IF (NOT setorgclientinfo(l_orgid)) THEN
6387             RAISE fnd_api.g_exc_error;
6388             END IF;
6389 
6390             IF (l_debug = 1) THEN
6391             inv_log_util.trace('After calling setorgclientinfo', 'INV_TXN_MANAGER_GRP',9);
6392             END IF;
6393 
6394             /* load message to detect source project error */
6395                 loaderrmsg('INV_PRJ_ERR','INV_PRJ_ERR');
6396 
6397             IF (l_debug = 1) THEN
6398             inv_log_util.trace('After loaderrmsg INV_PRJ_ERR', 'INV_TXN_MANAGER_GRP',9);
6399             END IF;
6400 
6401             /* validate source project id */
6402             IF (l_debug = 1) THEN
6403                inv_log_util.trace('#$Validating source project ID l_error_code '||l_error_code||' l_error_exp '||l_error_exp , 'INV_TXN_MANAGER_GRP', 9);
6404                inv_log_util.trace('#$l_rowid '||l_rowid, 'INV_TXN_MANAGER_GRP', 9);
6405             END IF;
6406 
6407 
6408                 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
6409                     SET LAST_UPDATE_DATE = SYSDATE,
6410                     LAST_UPDATED_BY = p_userid,
6411                     LAST_UPDATE_LOGIN = p_loginid,
6412                     PROGRAM_UPDATE_DATE = SYSDATE,
6413                     PROCESS_FLAG = 3,
6414                         LOCK_FLAG = 2,
6415                     ERROR_CODE = substrb(l_error_code,1,240),
6416                     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
6417                 WHERE ROWID = l_rowid
6418                     AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
6419                             (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
6420                     AND TRANSACTION_ACTION_ID IN (1, 27 )
6421                     AND PROCESS_FLAG = 1
6422                     AND EXISTS (
6423                             SELECT null
6424                             FROM MTL_TRANSACTION_TYPES MTTY
6425                             WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
6426                     AND MTTY.TYPE_CLASS = 1 )
6427                     AND NOT EXISTS (
6428                             SELECT null
6429                     FROM pa_projects_expend_v prj1
6430                     WHERE prj1.project_id = mti.source_project_id ) ;
6431 
6432                 if sql%notfound then
6433                      IF (l_debug = 1) THEN
6434                         inv_log_util.trace('Passed the source project Validation**', 'INV_TXN_MANAGER_GRP',9);
6435                      END IF;
6436                 else
6437                      IF (l_debug = 1) THEN
6438                         inv_log_util.trace('Failed the source project Validation**', 'INV_TXN_MANAGER_GRP',9);
6439                      END IF;
6440                      l_count := l_count + 1;
6441                      RAISE fnd_api.g_exc_error;
6442                 end if;
6443 
6444            IF (l_debug = 1) THEN
6445               inv_log_util.trace('After update on MTI for INV_PRJ_ERR', 'INV_TXN_MANAGER_GRP',9);
6446            END IF;
6447 
6448             /*
6449 
6450             IF (SQL%FOUND) THEN
6451             l_count := l_count + 1;
6452             RAISE fnd_api.g_exc_error;
6453             END IF;
6454 
6455             */
6456 
6457            IF (l_debug = 1) THEN
6458            inv_log_util.trace('Before loaderrmsg INV_PAORG_ERR','INV_TXN_MANAGER_GRP',9);
6459            END IF;
6460 
6461            /* validate expenditure org id */
6462 
6463                 loaderrmsg('INV_PAORG_ERR','INV_PAORG_ERR');
6464 
6465                 UPDATE MTL_TRANSACTIONS_INTERFACE MTI
6466                     SET LAST_UPDATE_DATE = SYSDATE,
6467                         LAST_UPDATED_BY = p_userid,
6468                         LAST_UPDATE_LOGIN = p_loginid,
6469                         PROGRAM_UPDATE_DATE = SYSDATE,
6470                         PROCESS_FLAG = 3,
6471                         LOCK_FLAG = 2,
6472                         ERROR_CODE = substrb(l_error_code,1,240),
6473                         ERROR_EXPLANATION = substrb(l_error_exp,1,240)
6474                 WHERE ROWID = l_rowid
6475                     AND ((TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 13 )) OR
6476                             (TRANSACTION_SOURCE_TYPE_ID > 100 ) )
6477                     AND TRANSACTION_ACTION_ID IN (1, 27 )
6478                     AND PROCESS_FLAG = 1
6479                     AND EXISTS (
6480                             SELECT NULL
6481                             FROM MTL_TRANSACTION_TYPES MTTY
6482                             WHERE MTTY.TRANSACTION_TYPE_ID = MTI.TRANSACTION_TYPE_ID
6483                     AND MTTY.TYPE_CLASS = 1 )
6484                     AND NOT EXISTS (
6485                     SELECT NULL
6486                     FROM PA_ORGANIZATIONS_EXPEND_V POE
6487                     WHERE POE.ORGANIZATION_ID = MTI.PA_EXPENDITURE_ORG_ID
6488                     AND TRUNC(SYSDATE) BETWEEN POE.DATE_FROM
6489                     AND NVL(POE.DATE_TO, TRUNC(SYSDATE)));
6490 
6491                 if sql%notfound then
6492                      IF (l_debug = 1) THEN
6493                         inv_log_util.trace('Passed the exp org Validation**', 'INV_TXN_MANAGER_GRP',9);
6494                      END IF;
6495                 else
6496                      IF (l_debug = 1) THEN
6497                         inv_log_util.trace('Failed the exp org Validation**', 'INV_TXN_MANAGER_GRP',9);
6498                      END IF;
6499                      l_count := l_count + 1;
6500                      RAISE fnd_api.g_exc_error;
6501                 end if;
6502 
6503                 IF (l_debug = 1) THEN
6504                    inv_log_util.trace('After update on MTI for INV_PAORG_ERR','INV_TXN_MANAGER_GRP',9);
6505                 END IF;
6506 
6507         /*
6508                 IF (SQL%ROWCOUNT > 0) THEN
6509                     l_count := l_count + 1;
6510                     RAISE fnd_api.g_exc_error;
6511                 END IF;
6512         */
6513 
6514                 --End   Fix 2505534
6515 
6516         l_flow_schedule_children := 0;
6517 
6518 
6519         IF (l_acttype = 2) THEN
6520             l_xorgid := l_orgid;
6521         END IF;
6522 
6523         IF ( (  l_srctype=INV_Globals.G_SourceType_SalesOrder OR
6524                 l_srctype = INV_Globals.G_SourceType_Account OR
6525                 l_srctype = INV_Globals.G_SourceType_AccountAlias OR
6526                 l_srctype = INV_Globals.G_SourceType_IntOrder)
6527          AND (l_trxsrc is NULL) ) THEN
6528             IF ( NOT getsrcid(l_trxsrc, l_srctype, l_orgid, l_rowid)) THEN
6529                 FND_MESSAGE.set_name('INV', 'INV_INT_SRCSEGCODE');
6530                 l_error_code := FND_MESSAGE.get;
6531 
6532                 errupdate(l_rowid,null);
6533                 --exit;
6534                 RAISE fnd_api.g_exc_error;
6535             END IF;
6536         END IF;
6537 
6538         IF l_itemid IS NULL THEN
6539             IF (NOT getitemid(l_itemid, l_orgid, l_rowid)) THEN
6540                 FND_MESSAGE.set_name('INV', 'INV_INT_ITMSEGCODE');
6541                 l_error_code := FND_MESSAGE.get;
6542 
6543                 errupdate(l_rowid,null);
6544                 --exit;
6545                 RAISE fnd_api.g_exc_error;
6546             END IF;
6547         END IF;
6548 
6549          /* CFM Scrap Transactions */
6550         IF ((l_itmshpflag = 'N') OR l_acttype = 24 OR l_acttype = 30)  THEN
6551            BEGIN
6552                 SELECT PRIMARY_UOM_CODE,1,1,1,2
6553                   INTO l_priuom,
6554                        l_locctrl,
6555                        l_lotctrl,
6556                        l_serctrl,
6557                        l_resloc
6558                   FROM MTL_SYSTEM_ITEMS
6559                  WHERE INVENTORY_ITEM_ID = l_itemid
6560                    AND ORGANIZATION_ID = l_orgid;
6561 
6562            EXCEPTION
6563                 WHEN NO_DATA_FOUND THEN
6564                   loaderrmsg('INV_INT_ITMCODE','INV-No item record');
6565                   errupdate(l_rowid,null);
6566                   l_count := l_count + 1;
6567                   --exit;
6568                   RAISE fnd_api.g_exc_error;
6569            END;
6570 
6571         ELSE
6572           BEGIN
6573             SELECT decode(P.STOCK_LOCATOR_CONTROL_CODE,4,
6574                           decode(S.LOCATOR_TYPE,5,I.LOCATION_CONTROL_CODE,
6575                                  S.LOCATOR_TYPE),P.STOCK_LOCATOR_CONTROL_CODE),
6576                    PRIMARY_UOM_CODE,
6577                    LOT_CONTROL_CODE,
6578                    SERIAL_NUMBER_CONTROL_CODE,
6579                    RESTRICT_LOCATORS_CODE,
6580                    SHELF_LIFE_CODE,
6581                    SHELF_LIFE_DAYS,
6582                    P.LOT_NUMBER_UNIQUENESS
6583               INTO l_locctrl ,
6584                    l_priuom,
6585                    l_lotctrl,
6586                    l_serctrl,
6587                    l_resloc,
6588                    l_shlfcode,
6589                    l_shlfdays,
6590                    l_lotuniq
6591               FROM MTL_PARAMETERS P,
6592                    MTL_SECONDARY_INVENTORIES S,
6593                    MTL_SYSTEM_ITEMS I
6594              WHERE I.INVENTORY_ITEM_ID = l_itemid
6595                AND S.SECONDARY_INVENTORY_NAME = l_subinv
6596                AND P.ORGANIZATION_ID = l_orgid
6597                AND I.ORGANIZATION_ID = S.ORGANIZATION_ID
6598                AND P.ORGANIZATION_ID = S.ORGANIZATION_ID
6599                AND P.ORGANIZATION_ID = I.ORGANIZATION_ID;
6600           EXCEPTION
6601              WHEN NO_DATA_FOUND THEN
6602                 loaderrmsg('INV_INT_ITMCODE','INV-No item record');
6603                 errupdate(l_rowid,null);
6604                 l_count := l_count + 1;
6605                 --exit;
6606                 RAISE fnd_api.g_exc_error;
6607              END;
6608         END IF;
6609 
6610 
6611         IF ((l_locctrl = 1) OR l_acttype = 24) THEN
6612             l_loci := -1;
6613             l_locid := NULL; --Added for bug 3703053
6614         END IF;
6615         /*For Bug#5044059, added the following code to read the profilele value
6616           'INV_CREATE_LOC_AT' that indicates whether locators should be created
6617           in autonomous mode or not*/
6618         IF (g_create_loc_at is null) THEN
6619           SELECT Nvl(FND_PROFILE.Value('INV_CREATE_LOC_AT'), 2)
6620                  INTO g_create_loc_at
6621           FROM DUAL;
6622         END IF;
6623 
6624         IF (l_debug = 1) THEN
6625            inv_log_util.trace('g_create_loc_at : '||g_create_loc_at, 'INV_TXN_MANAGER_GRP', 9);
6626         END IF;
6627 
6628 
6629         IF ((l_loci = -1) AND (l_locctrl <> 1 AND l_acttype <> 24)) THEN
6630             IF (l_resloc = 1) THEN
6631                 l_locctrl := 2;
6632                 END IF;
6633             IF ( NOT getlocid(l_locid, l_orgid, l_subinv, l_rowid, l_locctrl)) THEN
6634                 FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
6635                 l_error_exp := FND_MESSAGE.get; --bug6679112, error_code=>error_exp
6636                 errupdate(l_rowid,null);
6637                 --exit;
6638                 RAISE fnd_api.g_exc_error;
6639             END IF;
6640 
6641              /* Start: Fix for Bug# 7323175: For a PROJECT_REFERENCE_ENABLED org, a physical locator will be
6642 		created for a logical locator( locator with project and task info). If the physical locator is
6643 		already present then only logical locator will be created with the same PHYSICAL_LOCATION_ID in
6644 		mil as that of the already existing logical/physical locator */
6645 
6646              BEGIN
6647                 SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
6648                 INTO l_project_ref_enabled
6649                 FROM MTL_PARAMETERS
6650                 WHERE ORGANIZATION_ID = l_orgid ;
6651              EXCEPTION
6652                 WHEN NO_DATA_FOUND THEN
6653                 l_project_ref_enabled := 0;
6654              END;
6655 
6656          IF l_project_ref_enabled = 1 THEN
6657              IF ( NOT getplocid(l_plocid, l_orgid, l_subinv, l_rowid, l_locctrl)) THEN
6658               		FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
6659                   l_error_code := FND_MESSAGE.get;
6660                   errupdate(l_rowid);
6661 		              RAISE fnd_api.g_exc_error;
6662               END IF;
6663           END IF;
6664 
6665            /* End: Fix for Bug# 7323175 */
6666 
6667             /* get the default locator status  */
6668                 IF l_wms_installed  THEN
6669                     l_default_locator_status :=INV_MATERIAL_STATUS_PKG.get_default_locator_status(
6670                   l_orgid, l_subinv);
6671                   ELSE
6672                      l_default_locator_status := 1;
6673                       END IF;
6674 
6675            /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
6676              update Locators in autonomous mode*/
6677             IF (g_create_loc_at = 1) THEN
6678                update_mil( p_userid
6679                          , p_loginid
6680                          , p_applid
6681                          , p_progid
6682                          , l_reqstid
6683                          , l_subinv
6684                          , l_default_locator_status
6685                          , l_orgid
6686                          , l_locid
6687                          , l_plocid);
6688             /* Added one more parameter l_plocid for Bug# 7323175 to update_mil() for the physical locator */
6689 
6690             ELSE
6691               UPDATE MTL_ITEM_LOCATIONS
6692               SET LAST_UPDATE_DATE = SYSDATE,
6693                   LAST_UPDATED_BY = p_userid,
6694                   LAST_UPDATE_LOGIN = p_loginid,
6695                   PROGRAM_APPLICATION_ID = p_applid,
6696                   PROGRAM_ID = p_progid,
6697                   PROGRAM_UPDATE_DATE = SYSDATE,
6698                   REQUEST_ID = l_reqstid,
6699                   SUBINVENTORY_CODE = l_subinv,
6700                   STATUS_ID = l_default_locator_status,
6701 		  /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
6702 		     physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
6703 		     p_plocid would be null */
6704 		  PHYSICAL_LOCATION_ID = l_plocid
6705 		  /* End: Fix for Bug# 7323175 */
6706                WHERE ORGANIZATION_ID = l_orgid
6707                   /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
6708                   --AND INVENTORY_LOCATION_ID = l_locid
6709                   AND INVENTORY_LOCATION_ID IN (l_locid,l_plocid)
6710                   /* End: Fix for Bug# 7323175 */
6711                   AND SUBINVENTORY_CODE is NULL;
6712 
6713             END IF;
6714 
6715             IF l_locid = -2 THEN
6716                 l_loci := -1;
6717             END IF;
6718 
6719         END IF;
6720 
6721         /*------------------------------------------------------------------------+
6722           | Now check whether locator is valid under project
6723           | mfg. constraints. Validate newly created locator ids and
6724           | ids which are populated into the table.
6725           +------------------------------------------------------------------------*/
6726 
6727         -- Bug #6721912, fetching FLOW_SCHEDULE, SCHEDULED_FLAG from MTI
6728         --   So that validate_loc_for_project is called with right parameters
6729         --   In future this select statement should be merged in cursor AA1.
6730         /*------------------------------------------------------+
6731         | get flow schedule control variables
6732         +------------------------------------------------------*/
6733         IF l_srctype = 5 THEN
6734           BEGIN
6735             SELECT DECODE(UPPER(NVL(FLOW_SCHEDULE,'N')), 'Y', 1, 0), NVL(SCHEDULED_FLAG, 0)
6736               INTO tev_flow_schedule, tev_scheduled_flag
6737               FROM MTL_TRANSACTIONS_INTERFACE
6738              WHERE ROWID = l_rowid;
6739           EXCEPTION
6740             WHEN NO_DATA_FOUND THEN
6741               tev_flow_schedule := 0;
6742               tev_scheduled_flag := 0;
6743           END;
6744 
6745           IF (l_debug = 1) THEN
6746             inv_log_util.trace('flow_schedule = '|| tev_flow_schedule || ', scheduled_flag = ' || tev_scheduled_flag,'INV_TXN_MANAGER_GRP', 9);
6747           END IF;
6748         END IF;
6749 
6750 
6751         IF ( l_loci <> -1 AND (l_locctrl <>1 AND l_acttype <>24) ) THEN
6752             IF ( NOT validate_loc_for_project(l_locid, l_orgid, l_srctype,
6753                                            l_acttype, l_trxsrc, tev_flow_schedule, tev_scheduled_flag) ) THEN
6754 
6755                     l_error_exp := FND_MESSAGE.get;
6756 
6757                     FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
6758                 l_error_code := FND_MESSAGE.get;
6759 
6760                 errupdate(l_rowid,null);
6761                 l_count := l_count + 1;
6762                 --exit;
6763                 RAISE fnd_api.g_exc_error;
6764             END IF;
6765 
6766         END IF;
6767 
6768         IF ((l_acttype = 2) OR (l_acttype=3)) THEN
6769             IF (l_xsubinv IS NULL) THEN
6770                 IF (l_srctype = 8) THEN
6771                     BEGIN
6772                         SELECT SUBINVENTORY_CODE
6773                           INTO l_xsubinv
6774                           FROM MTL_ITEM_SUB_DEFAULTS
6775                          WHERE INVENTORY_ITEM_ID = l_itemid
6776                            AND ORGANIZATION_ID = l_xorgid
6777                            AND DEFAULT_TYPE = 2;
6778                     EXCEPTION
6779                         WHEN NO_DATA_FOUND THEN
6780                            loaderrmsg('INV_INT_XSUBCODE','INV_DEFAULT_SUB');
6781                            errupdate(l_rowid,null);
6782                            l_count := l_count + 1;
6783                            --exit;
6784                            RAISE fnd_api.g_exc_error;
6785                     END;
6786                 ELSE
6787                     loaderrmsg('INV_INT_XSUBCODE','INV_INT_XSUBEXP');
6788                     errupdate(l_rowid,null);
6789                     l_count := l_count + 1;
6790                     --exit;
6791                     RAISE fnd_api.g_exc_error;
6792                 END IF;
6793             END IF;
6794 
6795 
6796             BEGIN
6797                SELECT decode(P.STOCK_LOCATOR_CONTROL_CODE,4,
6798                          decode(S.LOCATOR_TYPE,5,I.LOCATION_CONTROL_CODE,
6799                                 S.LOCATOR_TYPE),P.STOCK_LOCATOR_CONTROL_CODE),
6800                       LOT_CONTROL_CODE,
6801                       SERIAL_NUMBER_CONTROL_CODE,
6802                       RESTRICT_LOCATORS_CODE
6803                  INTO l_xlocctrl,
6804                       l_xlotctrl,
6805                       l_xserctrl,
6806                       l_xresloc
6807                  FROM MTL_PARAMETERS P,
6808                       MTL_SECONDARY_INVENTORIES S,
6809                       MTL_SYSTEM_ITEMS I
6810                 WHERE I.INVENTORY_ITEM_ID = l_itemid
6811                   AND S.SECONDARY_INVENTORY_NAME = l_xsubinv
6812                   AND P.ORGANIZATION_ID = l_xorgid
6813                   AND I.ORGANIZATION_ID = S.ORGANIZATION_ID
6814                   AND P.ORGANIZATION_ID = S.ORGANIZATION_ID
6815                   AND P.ORGANIZATION_ID = I.ORGANIZATION_ID;
6816 
6817             EXCEPTION
6818                  WHEN NO_DATA_FOUND THEN
6819                      loaderrmsg('INV_INT_ITMCODE','INV-No item record');
6820                      errupdate(l_rowid,null);
6821                      l_count := l_count + 1;
6822                     --exit;
6823                      RAISE fnd_api.g_exc_error;
6824             END;
6825 
6826             --IF (l_xlocctrl IS NULL) THEN     bug2460745
6827 
6828             /* Bug #2493941 - Call validation logic for destination locator
6829              * (getxlocid) only when locator control code != 1 and xferlocid is NULL
6830              */
6831             -- Begin changes for bug 3703053
6832              IF l_xlocctrl = 1 THEN
6833                l_xlocid := NULL;
6834              END IF;
6835             -- End changes for bug 3703053
6836             IF ((l_xlocctrl <> 1) AND (l_xlocid IS NULL)) THEN
6837                 IF (l_xresloc = 1) THEN
6838                   l_xlocctrl := 2;
6839                 END IF;
6840 
6841                 IF (l_srctype = 8) THEN
6842                    BEGIN
6843                      SELECT LOCATOR_ID
6844                        INTO l_xlocid
6845                        FROM MTL_ITEM_LOC_DEFAULTS MTLD,
6846                             MTL_ITEM_LOCATIONS MIL
6847                       WHERE MTLD.LOCATOR_ID=MIL.INVENTORY_LOCATION_ID
6848                         AND MTLD.ORGANIZATION_ID=MIL.ORGANIZATION_ID
6849                         AND MTLD.INVENTORY_ITEM_ID = l_itemid
6850                         AND MTLD.ORGANIZATION_ID = l_xorgid
6851                         AND MTLD.SUBINVENTORY_CODE = l_xsubinv
6852                         AND MTLD.DEFAULT_TYPE = 2
6853                         AND NVL(MIL.DISABLE_DATE,SYSDATE+1) > SYSDATE;
6854 
6855                    EXCEPTION
6856                       WHEN NO_DATA_FOUND THEN
6857                          loaderrmsg('INV_INT_XLOCCODE','INV_DEFAULT_LOC');
6858                          errupdate(l_rowid,null);
6859                          l_count := l_count + 1;
6860                          --exit;
6861                          RAISE fnd_api.g_exc_error;
6862                    END;
6863 
6864 /* For srctype = 8 i.e internal order, the below code is added to append
6865    project and task from the requisition to a locator that is selected
6866    from locator defaults. If the transfer bet orgs is 'direct', the shipment
6867    transaction itself creates the recipt transaction and while doing so
6868    it picks up the default locator from the locator defaults.
6869 */
6870                IF (l_req_line_id IS NOT NULL) THEN
6871                    INV_PROJECT.Get_project_loc_for_prj_Req(
6872                                     x_return_status,
6873                                     l_xlocid,
6874                                     l_xorgid,
6875                                     l_req_line_id);
6876 
6877                     IF (x_return_status <> 'S') THEN
6878                         l_error_exp := FND_MESSAGE.get;
6879                         FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
6880                         l_error_code := FND_MESSAGE.get;
6881 
6882                         errupdate(l_rowid,null);
6883                         l_count := l_count + 1;
6884                         --exit;
6885                         RAISE fnd_api.g_exc_error;
6886                     END IF;
6887                 END IF;
6888             ELSE
6889                 -- Bug 5011566 setting transfer org as org context
6890                 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) THEN
6891                    IF (NOT setorgclientinfo(l_xorgid)) THEN
6892                        RAISE fnd_api.g_exc_error;
6893                    END IF;
6894                    fnd_profile.put('MFG_ORGANIZATION_ID',l_xorgid);
6895                 END IF;
6896 
6897                 IF (NOT getxlocid(l_xlocid, l_xorgid, l_xsubinv, l_rowid,
6898                                l_xlocctrl)) THEN
6899                         FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
6900                         l_error_code := FND_MESSAGE.get;
6901                         --exit;
6902                         RAISE fnd_api.g_exc_error;
6903                 END IF;
6904 
6905              /* Start: Fix for Bug# 7323175: For a PROJECT_REFERENCE_ENABLED org, a physical locator will be
6906 		created for a logical locator( locator with project and task info). If the physical locator is
6907 		already present then only logical locator will be created with the same PHYSICAL_LOCATION_ID in
6908 		mil as that of the already existing logical/physical locator */
6909             		BEGIN
6910                			SELECT DECODE(NVL(PROJECT_REFERENCE_ENABLED, 2),1,1,0)
6911                 		INTO l_project_ref_enabled
6912                 		FROM MTL_PARAMETERS
6913                 		WHERE ORGANIZATION_ID = l_xorgid ;
6914              		EXCEPTION
6915                 		WHEN NO_DATA_FOUND THEN
6916                 		l_project_ref_enabled := 0;
6917              		END;
6918 
6919 				        IF l_project_ref_enabled = 1 THEN
6920 				          IF (NOT getxplocid(l_xplocid, l_xorgid, l_xsubinv, l_rowid, l_xlocctrl)) THEN
6921                         FND_MESSAGE.set_name('INV', 'INV_INT_XLOCCODE');
6922                         l_error_code := FND_MESSAGE.get;
6923                         RAISE fnd_api.g_exc_error;
6924                 		END IF;
6925               	END IF;
6926                /* End: Fix for Bug# 7323175 */
6927 
6928 
6929                 -- Bug 5011566 re-setting org as org context
6930                 IF (l_srctype in (8, 13)) and (l_acttype = 3) and (l_xorgid is not null) then
6931                    IF (NOT setorgclientinfo(l_orgid)) THEN
6932                        RAISE fnd_api.g_exc_error;
6933                    END IF;
6934                    fnd_profile.put('MFG_ORGANIZATION_ID',l_orgid);
6935                 END IF;
6936 
6937                    /* get the default locator status  */
6938                 IF l_wms_installed THEN
6939                    l_default_locator_status :=INV_MATERIAL_STATUS_PKG.get_default_locator_status(
6940                     l_xorgid, l_xsubinv);
6941                  ELSE
6942                    l_default_locator_status := 1;
6943                  END IF;
6944 
6945 
6946                  /*Bug#5044059, if the profile 'INV_CREATE_LOC_AT' is set to 'YES',
6947                   update Locators in autonomous mode*/
6948                  IF (g_create_loc_at = 1) THEN
6949                    update_mil( p_userid
6950                              , p_loginid
6951                              , p_applid
6952                              , p_progid
6953                              , l_reqstid
6954                              , l_xsubinv
6955                              , l_default_locator_status
6956                              , l_xorgid
6957                              , l_xlocid
6958                              , l_xplocid);
6959                   /* Addded a parameter l_xplocid for Bug# 7323175 in update_mil */
6960                  ELSE
6961                    UPDATE MTL_ITEM_LOCATIONS
6962                    SET LAST_UPDATE_DATE = SYSDATE,
6963                        LAST_UPDATED_BY = p_userid,
6964                        LAST_UPDATE_LOGIN = p_loginid,
6965                        PROGRAM_APPLICATION_ID = p_applid,
6966                        PROGRAM_ID = p_progid,
6967                        PROGRAM_UPDATE_DATE = SYSDATE,
6968                        REQUEST_ID = l_reqstid,
6969                        SUBINVENTORY_CODE = l_xsubinv,
6970                        STATUS_ID = l_default_locator_status,
6971 		       /* Start: Fix for Bug# 7323175: Stamping PHYSICAL_LOCATION_ID with the physical locator for both
6972 		        physical and logical locators for Project enabled Orgs. For the case of Non project enabled orgs
6973 		        l_xplocid would be null */
6974 		        PHYSICAL_LOCATION_ID = l_xplocid
6975 		       /* End: Fix for Bug# 7323175 */
6976                    WHERE ORGANIZATION_ID = l_xorgid
6977           	 /* Start: Fix for Bug# 7323175: Updating the physical locator as well in mil */
6978                  --AND INVENTORY_LOCATION_ID = l_xlocid
6979                   AND INVENTORY_LOCATION_ID IN (l_xlocid,l_xplocid)
6980                   /* End: Fix for Bug# 7323175 */
6981                   AND SUBINVENTORY_CODE is NULL;
6982                  END IF;
6983 
6984                 END IF;
6985         END IF;
6986      END IF;
6987 
6988          /*------------------------------------------------------------------------+
6989           | Now check whether locator is valid under project
6990           | mfg. constraints. Validate newly created locator ids and
6991           | ids which are populated into the table.
6992           +------------------------------------------------------------------------*/
6993         IF ( (l_xlocid IS NOT NULL) AND (l_xlocctrl <> 1) AND (l_acttype = 2 OR l_acttype = 3)) THEN
6994             IF ( NOT validate_loc_for_project(l_xlocid, l_xorgid, l_srctype,
6995                                            l_acttype, l_trxsrc, tev_flow_schedule, tev_scheduled_flag) ) THEN
6996 
6997                     l_error_exp := FND_MESSAGE.get;
6998 
6999                     FND_MESSAGE.set_name('INV', 'INV_INT_LOCSEGCODE');
7000                 l_error_code := FND_MESSAGE.get;
7001 
7002                 errupdate(l_rowid,null);
7003                 l_count := l_count + 1;
7004                 --exit;
7005                 RAISE fnd_api.g_exc_error;
7006             END IF;
7007 
7008         END IF;
7009 
7010 
7011         BEGIN
7012            IF (l_srctype = 5) then
7013               l_priqty := inv_convert.inv_um_convert(l_itemid,6,l_trxqty,
7014                                                      l_trxuom,l_priuom,'','');
7015             ELSE
7016               l_priqty := inv_convert.inv_um_convert(l_itemid,5,l_trxqty,
7017                                                      l_trxuom,l_priuom,'','');
7018            END IF;
7019         EXCEPTION
7020            WHEN OTHERS THEN
7021         /*IF (NOT UomConvert(l_itemid,0,l_trxuom, '',
7022                         l_priuom,  '', l_trxqty,
7023                         l_priqty,  0)) THEN */
7024                 l_error_exp := FND_MESSAGE.get;
7025 
7026                 FND_MESSAGE.set_name('INV', 'INV_INT_UOMSEGCODE');
7027             l_error_code := FND_MESSAGE.get;
7028 
7029             errupdate(l_rowid,null);
7030             l_count := l_count + 1;
7031             --exit;
7032             RAISE fnd_api.g_exc_error;
7033         END;
7034 
7035         /* Borrow Payback */
7036         IF(l_acttype = 2) THEN
7037             l_result := PJM_BORROW_PAYBACK.validate_trx(l_trxtype,l_acttype,
7038                                              l_orgid,l_subinv,l_locid,
7039                                              l_xsubinv,l_xlocid,
7040                                              l_itemid,l_revision,
7041                                              l_priqty,l_trxdate, l_scheduled_payback_date,l_error_code);
7042 
7043             IF(l_result = 1) THEN
7044 
7045                 l_error_exp := FND_MESSAGE.get;
7046 
7047                 errupdate(l_rowid,null);
7048                 l_count := l_count + 1;
7049                 --exit;
7050                 RAISE fnd_api.g_exc_error;
7051             END IF;
7052         END IF;
7053         --prOR := 0;
7054         IF (l_srctype <> 14)  THEN /* PCST */
7055 
7056            IF l_trxdate <= sysdate THEN
7057                l_tnum := 1;
7058            ELSE
7059                 loaderrmsg('INV_INT_TDATECODE','INV_INT_TDATEEX');
7060 
7061                 errupdate(l_rowid,null);
7062                 l_count := l_count + 1;
7063                 --exit;
7064                 RAISE fnd_api.g_exc_error;
7065            END IF;
7066 
7067          l_prdid := get_open_period(l_orgid,l_trxdate,0);
7068 
7069 
7070           IF (l_prdid = -1 OR l_prdid = 0) THEN
7071               FND_MESSAGE.set_name('INV', 'INV_INT_PRDCODE');
7072               l_error_code := FND_MESSAGE.get;
7073               FND_MESSAGE.set_name('INV', 'INV_NO_OPEN_PERIOD');
7074                   /*END IF;*/
7075 
7076               l_error_exp := FND_MESSAGE.get;
7077 
7078               errupdate(l_rowid,null);
7079               l_count := l_count + 1;
7080               --exit;
7081               RAISE fnd_api.g_exc_error;
7082           END IF;
7083           /*Bug#5205455. Validation of the acc period for to_org */
7084           IF ( l_acttype IN ( 3, 21) OR
7085              (l_srctype = 8 AND l_acttype IN (1, 2)) ) THEN
7086             IF l_acttype IN ( 1, 2, 21) THEN
7087               IF (l_debug = 1) THEN
7088                 inv_log_util.trace('l_acttype: '||l_acttype||' l_srctype: '||l_srctype, 'INV_TXN_MANAGER_GRP', 9);
7089               END IF;
7090 
7091               BEGIN
7092                 IF (l_debug = 1) THEN
7093                   inv_log_util.trace('Getting the FOB Point between the orgs, '||l_orgid||' and '||l_xorgid, 'INV_TXN_MANAGER_GRP', 9);
7094                 END IF;
7095 
7096                 SELECT fob_point
7097                 INTO l_fob_point
7098                 FROM mtl_interorg_parameters
7099                 WHERE from_organization_id = l_orgid
7100                   AND to_organization_id = l_xorgid;
7101 
7102                 IF (l_debug = 1) THEN
7103                   inv_log_util.trace('FOB Point is: '||l_fob_point, 'INV_TXN_MANAGER_GRP', 9);
7104                 END IF;
7105 
7106               EXCEPTION
7107               WHEN OTHERS THEN
7108                 IF (l_debug = 1) THEN
7109                   inv_log_util.trace('Exception while finding the FOB Point.', 'INV_TXN_MANAGER_GRP', 9);
7110                 END IF;
7111                 l_fob_point := NULL;
7112               END;
7113               IF l_fob_point = 1 THEN
7114                 l_validate_xfer_org := TRUE;
7115               ELSIF (l_fob_point = 2) THEN
7116                 l_validate_xfer_org := FALSE;
7117               END IF;
7118             ELSE
7119               l_validate_xfer_org := TRUE;
7120             END IF;
7121             IF (l_validate_xfer_org) THEN
7122               IF (l_debug = 1) THEN
7123                 inv_log_util.trace('l_validate_xfer_org is TRUE', 'INV_TXN_MANAGER_GRP', 9);
7124               END IF;
7125               IF ( get_open_period(l_xorgid,l_trxdate,0) IN (-1, 0)) THEN
7126                 FND_MESSAGE.set_name('INV', 'INV_INT_PRDCODE');
7127                 l_error_code := FND_MESSAGE.get;
7128                 FND_MESSAGE.set_name('INV', 'INV_NO_OPEN_PERIOD_TOORG');
7129                 l_error_exp := FND_MESSAGE.get;
7130                 errupdate(l_rowid,null);
7131                 l_count := l_count + 1;
7132                 RAISE fnd_api.g_exc_error;
7133               END IF;
7134             END IF;
7135           END IF;
7136 
7137 
7138 
7139         ELSE
7140           l_prdid := 0;  /* Bug 4122107 */
7141         END IF;
7142 
7143 	/* Bug# 6271039, For average cost update and layer cost update, validate rows in
7144 	 *    MTI for material account, material overhead account, resource account,
7145 	 *    outside processing account, overhead account. */
7146 
7147         IF ( l_acttype = 24 AND ((l_srctype = INV_Globals.G_SourceType_Inventory) OR (l_srctype = 15)) AND ( l_avg_cost_update = 2 ) )
7148 	   OR (( l_acttype = 24 AND l_srctype = 14 )) THEN
7149 
7150 	     /*-----------------------------------------------------------+
7151 	      | Validate material account
7152 	     +-----------------------------------------------------------*/
7153 
7154 	     IF (l_validate_full) THEN --J-dev
7155 	        FND_MESSAGE.set_name('INV','INV_MATERIAL_ACCOUNT');
7156 		l_account := FND_MESSAGE.get ;
7157 
7158 		fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7159 		fnd_message.set_token('ACCOUNT',l_account);
7160 		l_error_code := fnd_message.get;
7161 
7162 		fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7163 		fnd_message.set_token('ACCOUNT',l_account);
7164 		l_error_exp := fnd_message.get;
7165 
7166 		     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7167 			SET LAST_UPDATE_DATE = SYSDATE,
7168 			    LAST_UPDATED_BY = p_userid,
7169 			    LAST_UPDATE_LOGIN = p_loginid,
7170 			    PROGRAM_UPDATE_DATE = SYSDATE,
7171 			    PROCESS_FLAG = 3,
7172 			    LOCK_FLAG = 2,
7173 			    ERROR_CODE = substrb(l_error_code,1,240),
7174 			    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7175 		      WHERE TRANSACTION_HEADER_ID = l_header_id
7176 			AND PROCESS_FLAG = 1
7177 			AND MATERIAL_ACCOUNT IS NOT NULL
7178 			AND NOT EXISTS (
7179 			    SELECT NULL
7180 			    FROM GL_CODE_COMBINATIONS GCC
7181 			    WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_ACCOUNT
7182 			    AND GCC.CHART_OF_ACCOUNTS_ID
7183 						 = (SELECT CHART_OF_ACCOUNTS_ID
7184 						    FROM ORG_ORGANIZATION_DEFINITIONS OOD
7185 						    WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7186 			   AND GCC.ENABLED_FLAG = 'Y'
7187 			   AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <=  trunc(mti.transaction_date)
7188 			   AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1))   >=  trunc(mti.transaction_date));
7189 
7190 		      l_count := SQL%ROWCOUNT;
7191 		      IF (l_debug = 1) THEN
7192 			 inv_log_util.trace('Validating material account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7193 		      END IF;
7194 
7195 	    END IF; --J-dev
7196 
7197 
7198             /*-----------------------------------------------------------+
7199 	      | Validate material overhead account
7200 	     +-----------------------------------------------------------*/
7201 
7202 	     IF (l_validate_full) THEN --J-dev
7203 	        FND_MESSAGE.set_name('INV','INV_MAT_OVRHD_ACCOUNT');
7204 		l_account := FND_MESSAGE.get ;
7205 
7206 		fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7207 		fnd_message.set_token('ACCOUNT',l_account);
7208 		l_error_code := fnd_message.get;
7209 
7210 		fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7211 		fnd_message.set_token('ACCOUNT',l_account);
7212 		l_error_exp := fnd_message.get;
7213 
7214 		     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7215 			SET LAST_UPDATE_DATE = SYSDATE,
7216 			    LAST_UPDATED_BY = p_userid,
7217 			    LAST_UPDATE_LOGIN = p_loginid,
7218 			    PROGRAM_UPDATE_DATE = SYSDATE,
7219 			    PROCESS_FLAG = 3,
7220 			    LOCK_FLAG = 2,
7221 			    ERROR_CODE = substrb(l_error_code,1,240),
7222 			    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7223 		      WHERE TRANSACTION_HEADER_ID = l_header_id
7224 			AND PROCESS_FLAG = 1
7225 			AND MATERIAL_OVERHEAD_ACCOUNT IS NOT NULL
7226 			AND NOT EXISTS (
7227 			    SELECT NULL
7228 			    FROM GL_CODE_COMBINATIONS GCC
7229 			    WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_OVERHEAD_ACCOUNT
7230 			    AND GCC.CHART_OF_ACCOUNTS_ID
7231 						 = (SELECT CHART_OF_ACCOUNTS_ID
7232 						    FROM ORG_ORGANIZATION_DEFINITIONS OOD
7233 						    WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7234 			   AND GCC.ENABLED_FLAG = 'Y'
7235 			   AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <=  trunc(mti.transaction_date)
7236 			   AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1))   >=  trunc(mti.transaction_date));
7237 
7238 		      l_count := SQL%ROWCOUNT;
7239 		      IF (l_debug = 1) THEN
7240 			 inv_log_util.trace('Validating material overhead account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7241 		      END IF;
7242 
7243 	    END IF; --J-dev
7244 
7245 	    /*-----------------------------------------------------------+
7246 	      | Validate resource account
7247 	     +-----------------------------------------------------------*/
7248 
7249 	     IF (l_validate_full) THEN --J-dev
7250 	        FND_MESSAGE.set_name('INV','INV_RESOURCE_ACCOUNT');
7251 		l_account := FND_MESSAGE.get ;
7252 
7253 		fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7254 		fnd_message.set_token('ACCOUNT',l_account);
7255 		l_error_code := fnd_message.get;
7256 
7257 		fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7258 		fnd_message.set_token('ACCOUNT',l_account);
7259 		l_error_exp := fnd_message.get;
7260 
7261 		     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7262 			SET LAST_UPDATE_DATE = SYSDATE,
7263 			    LAST_UPDATED_BY = p_userid,
7264 			    LAST_UPDATE_LOGIN = p_loginid,
7265 			    PROGRAM_UPDATE_DATE = SYSDATE,
7266 			    PROCESS_FLAG = 3,
7267 			    LOCK_FLAG = 2,
7268 			    ERROR_CODE = substrb(l_error_code,1,240),
7269 			    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7270 		      WHERE TRANSACTION_HEADER_ID = l_header_id
7271 			AND PROCESS_FLAG = 1
7272 			AND RESOURCE_ACCOUNT IS NOT NULL
7273 			AND NOT EXISTS (
7274 			    SELECT NULL
7275 			    FROM GL_CODE_COMBINATIONS GCC
7276 			    WHERE GCC.CODE_COMBINATION_ID = MTI.RESOURCE_ACCOUNT
7277 			    AND GCC.CHART_OF_ACCOUNTS_ID
7278 						 = (SELECT CHART_OF_ACCOUNTS_ID
7279 						    FROM ORG_ORGANIZATION_DEFINITIONS OOD
7280 						    WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7281 			   AND GCC.ENABLED_FLAG = 'Y'
7282 			   AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <=  trunc(mti.transaction_date)
7283 			   AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1))   >=  trunc(mti.transaction_date));
7284 
7285 		      l_count := SQL%ROWCOUNT;
7286 		      IF (l_debug = 1) THEN
7287 			 inv_log_util.trace('Validating resource account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7288 		      END IF;
7289 
7290 	    END IF; --J-dev
7291 
7292 	    /*-----------------------------------------------------------+
7293 	      | Validate outside processing account
7294 	     +-----------------------------------------------------------*/
7295 
7296 	     IF (l_validate_full) THEN --J-dev
7297 	        FND_MESSAGE.set_name('INV','INV_OUTSIDE_PROC_ACCOUNT');
7298 		l_account := FND_MESSAGE.get ;
7299 
7300 		fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7301 		fnd_message.set_token('ACCOUNT',l_account);
7302 		l_error_code := fnd_message.get;
7303 
7304 		fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7305 		fnd_message.set_token('ACCOUNT',l_account);
7306 		l_error_exp := fnd_message.get;
7307 
7308 		     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7309 			SET LAST_UPDATE_DATE = SYSDATE,
7310 			    LAST_UPDATED_BY = p_userid,
7311 			    LAST_UPDATE_LOGIN = p_loginid,
7312 			    PROGRAM_UPDATE_DATE = SYSDATE,
7313 			    PROCESS_FLAG = 3,
7314 			    LOCK_FLAG = 2,
7315 			    ERROR_CODE = substrb(l_error_code,1,240),
7316 			    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7317 		      WHERE TRANSACTION_HEADER_ID = l_header_id
7318 			AND PROCESS_FLAG = 1
7319 			AND OUTSIDE_PROCESSING_ACCOUNT IS NOT NULL
7320 			AND NOT EXISTS (
7321 			    SELECT NULL
7322 			    FROM GL_CODE_COMBINATIONS GCC
7323 			    WHERE GCC.CODE_COMBINATION_ID = MTI.OUTSIDE_PROCESSING_ACCOUNT
7324 			    AND GCC.CHART_OF_ACCOUNTS_ID
7325 						 = (SELECT CHART_OF_ACCOUNTS_ID
7326 						    FROM ORG_ORGANIZATION_DEFINITIONS OOD
7327 						    WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7328 			   AND GCC.ENABLED_FLAG = 'Y'
7329 			   AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <=  trunc(mti.transaction_date)
7330 			   AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1))   >=  trunc(mti.transaction_date));
7331 
7332 		      l_count := SQL%ROWCOUNT;
7333 		      IF (l_debug = 1) THEN
7334 			 inv_log_util.trace('Validating outside processing account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7335 		      END IF;
7336 
7337 	    END IF; --J-dev
7338 
7339 	    /*-----------------------------------------------------------+
7340 	      | Validate overhead account
7341 	     +-----------------------------------------------------------*/
7342 
7343 	     IF (l_validate_full) THEN --J-dev
7344 	        FND_MESSAGE.set_name('INV','INV_OVERHEAD_ACCOUNT');
7345 		l_account := FND_MESSAGE.get ;
7346 
7347 		fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7348 		fnd_message.set_token('ACCOUNT',l_account);
7349 		l_error_code := fnd_message.get;
7350 
7351 		fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7352 		fnd_message.set_token('ACCOUNT',l_account);
7353 		l_error_exp := fnd_message.get;
7354 
7355 		     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7356 			SET LAST_UPDATE_DATE = SYSDATE,
7357 			    LAST_UPDATED_BY = p_userid,
7358 			    LAST_UPDATE_LOGIN = p_loginid,
7359 			    PROGRAM_UPDATE_DATE = SYSDATE,
7360 			    PROCESS_FLAG = 3,
7361 			    LOCK_FLAG = 2,
7362 			    ERROR_CODE = substrb(l_error_code,1,240),
7363 			    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7364 		      WHERE TRANSACTION_HEADER_ID = l_header_id
7365 			AND PROCESS_FLAG = 1
7366 			AND OVERHEAD_ACCOUNT IS NOT NULL
7367 			AND NOT EXISTS (
7368 			    SELECT NULL
7369 			    FROM GL_CODE_COMBINATIONS GCC
7370 			    WHERE GCC.CODE_COMBINATION_ID = MTI.OVERHEAD_ACCOUNT
7371 			    AND GCC.CHART_OF_ACCOUNTS_ID
7372 						 = (SELECT CHART_OF_ACCOUNTS_ID
7373 						    FROM ORG_ORGANIZATION_DEFINITIONS OOD
7374 						    WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7375 			   AND GCC.ENABLED_FLAG = 'Y'
7376 			   AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <=  trunc(mti.transaction_date)
7377 			   AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1))   >=  trunc(mti.transaction_date));
7378 
7379 		      l_count := SQL%ROWCOUNT;
7380 		      IF (l_debug = 1) THEN
7381 			 inv_log_util.trace('Validating overhead account ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7382 		      END IF;
7383 
7384 	    END IF; --J-dev
7385 
7386         /*-----------------------------------------------------------+
7387 	      | Validate material expense account LCM changes
7388 	     +-----------------------------------------------------------*/
7389 
7390          Begin
7391            select nvl(lcm_enabled_flag,'N')
7392            into   l_lcm_enabled_org
7393            from   mtl_parameters
7394            where  organization_id = l_orgid;
7395          Exception
7396            when others then
7397              inv_log_util.trace('Error in obtaining LCM Enabled Flag ', 'INV_TXN_MANAGER_GRP', 9);
7398              RAISE fnd_api.g_exc_unexpected_error;
7399          End;
7400 
7401          IF (l_debug = 1) THEN
7402            inv_log_util.trace('LCM Enabled : ' ||l_lcm_enabled_org, 'INV_TXN_MANAGER_GRP', 9);
7403          END IF;
7404 
7405         IF l_lcm_enabled_org = 'Y' then
7406 
7407 	      IF (l_validate_full) THEN --J-dev
7408 	        FND_MESSAGE.set_name('INV','INV_MATERIAL_EXP_ACCOUNT');
7409 		    l_account := FND_MESSAGE.get ;
7410 
7411 		    fnd_message.set_name('INV', 'INV_INT_ACCCODE');
7412 		    fnd_message.set_token('ACCOUNT',l_account);
7413 		    l_error_code := fnd_message.get;
7414 
7415 		    fnd_message.set_name('INV', 'INV_INT_ACCEXP');
7416 		    fnd_message.set_token('ACCOUNT',l_account);
7417 		    l_error_exp := fnd_message.get;
7418 
7419             UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7420 		    SET LAST_UPDATE_DATE = SYSDATE,
7421 			    LAST_UPDATED_BY = p_userid,
7422 			    LAST_UPDATE_LOGIN = p_loginid,
7423 			    PROGRAM_UPDATE_DATE = SYSDATE,
7424 			    PROCESS_FLAG = 3,
7425 			    LOCK_FLAG = 2,
7426 			    ERROR_CODE = substrb(l_error_code,1,240),
7427 			    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7428 		    WHERE TRANSACTION_HEADER_ID = l_header_id
7429 			  AND PROCESS_FLAG = 1
7430 			  AND MATERIAL_EXPENSE_ACCOUNT IS NOT NULL
7431 			  AND NOT EXISTS (
7432 			    SELECT NULL
7433 			    FROM GL_CODE_COMBINATIONS GCC
7434 			    WHERE GCC.CODE_COMBINATION_ID = MTI.MATERIAL_EXPENSE_ACCOUNT
7435 			    AND GCC.CHART_OF_ACCOUNTS_ID  =
7436                             (SELECT CHART_OF_ACCOUNTS_ID
7437 						     FROM ORG_ORGANIZATION_DEFINITIONS OOD
7438 						     WHERE OOD.ORGANIZATION_ID = MTI.ORGANIZATION_ID)
7439 			   AND GCC.ENABLED_FLAG = 'Y'
7440 			   AND trunc(NVL(GCC.START_DATE_ACTIVE, mti.transaction_date - 1)) <=  trunc(mti.transaction_date)
7441 			   AND trunc(NVL(GCC.END_DATE_ACTIVE, mti.transaction_date + 1))   >=  trunc(mti.transaction_date));
7442 
7443 		      l_count := SQL%ROWCOUNT;
7444 		      IF (l_debug = 1) THEN
7445 			    inv_log_util.trace('Validating material expense account (LCM changes) ' || l_count || ' failed', 'INV_TXN_MANAGER_GRP', 9);
7446 		      END IF;
7447 
7448 	      END IF; --J-dev
7449 
7450           loaderrmsg('INV_GREATER_THAN_ZERO','INV_GREATER_THAN_ZERO');
7451 
7452             /* We need to check if the quantity passed is zero when a Material Expense account is passed - LCM changes */
7453           IF (l_validate_full) THEN --J-dev
7454 	        UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7455 	        SET LAST_UPDATE_DATE = SYSDATE,
7456 		    LAST_UPDATED_BY = p_userid,
7457 		    LAST_UPDATE_LOGIN = p_loginid,
7458 		    PROGRAM_UPDATE_DATE = SYSDATE,
7459 		    PROCESS_FLAG = 3,
7460 		    LOCK_FLAG = 2,
7461 		    ERROR_CODE = substrb(l_error_code,1,240),
7462 		    ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7463 	        WHERE TRANSACTION_HEADER_ID = l_header_id
7464 	        AND PROCESS_FLAG = 1
7465 	        AND MATERIAL_EXPENSE_ACCOUNT IS NOT NULL
7466 	        AND TRANSACTION_QUANTITY <= 0 ;
7467           END IF;
7468 
7469         END IF;  -- If Org is LCM enabled
7470        -- End of LCM Changes
7471 
7472 	END IF; /* l_acttype = 24 AND (l_srctype = 14 or  l_srctype = 15*/
7473 	/* End of Bug# 6271039 */
7474 
7475         /* for average cost update and layer cost update, validate rows in */
7476         /* mtl_txn_cost_det_interface table , if R10 avg cost profile is set */
7477 
7478 
7479         IF ( l_acttype = 24 AND ((l_srctype = INV_Globals.G_SourceType_Inventory)
7480                                  OR (l_srctype = 15)) ) THEN
7481             IF ( l_avg_cost_update = 2 ) THEN
7482 
7483                 /* should we check also if interface id is not null and
7484                    generate an id if it is null before calling validate */
7485                 CSTPACIT.cost_det_validate(l_intid,
7486                                            l_orgid,
7487                                            l_itemid,
7488                                            l_new_avg_cst,
7489                                            l_per_chng,
7490                                            l_val_chng,
7491                                            l_mat_accnt,
7492                                            l_mat_ovhd_accnt,
7493                                            l_res_accnt,
7494                                            l_osp_accnt,
7495                                            l_ovhd_accnt,
7496                                            l_error_num,
7497                                            l_error_code,
7498                                            l_error_exp);
7499                 IF ( l_error_exp IS NOT NULL) THEN
7500                     errupdate(l_rowid,null);
7501                     l_count := l_count + 1;
7502                     --exit;
7503                     RAISE fnd_api.g_exc_error;
7504                 END IF;
7505             END IF;
7506         END IF;
7507 
7508         IF ( l_acttype = 24 AND l_srctype = 14 ) THEN    /* PCST */
7509            CSTPPCIT.periodic_cost_validate(
7510                               l_org_cost_group_id,
7511                               l_cost_type_id,
7512                               l_trxdate,--Bug #4156979 Removed the call to fnd_date.canonical_to_date
7513                               l_intid,
7514                               l_orgid,
7515                               l_itemid,
7516                               l_new_avg_cst,
7517                               l_per_chng,
7518                               l_val_chng,
7519                               l_mat_accnt,
7520                               l_mat_ovhd_accnt,
7521                               l_res_accnt,
7522                               l_osp_accnt,
7523                               l_ovhd_accnt,
7524                               l_error_num,
7525                               l_error_code,
7526                               l_error_exp) ;
7527             IF l_error_exp IS NOT NULL  THEN
7528                 errupdate(l_rowid,null);
7529                 l_count := l_count + 1;
7530                 --exit;
7531                 RAISE fnd_api.g_exc_error;
7532             END IF;
7533         END IF;
7534 
7535         /* Do this snapshot moves for non-CFM WIP completions,returns,
7536         /*scraps */
7537         /* In J WIP will do this. move snapshot.*/
7538         IF ( wip_constants.DMF_PATCHSET_LEVEL < wip_constants.DMF_PATCHSET_J_VALUE) THEN --J-dev
7539            IF ( ( (l_acttype =30)
7540                   OR (l_acttype =31)
7541                   OR (l_acttype =32) )
7542                 AND l_srctype = 5 AND
7543                 tev_flow_schedule = 0) THEN
7544 
7545               SELECT PRIMARY_COST_METHOD
7546                 INTO   l_primary_cost_method
7547                 FROM   MTL_PARAMETERS
7548                 WHERE  ORGANIZATION_ID = l_orgid ;
7549 
7550               IF ( l_avg_cost_update = 2 AND  (l_primary_cost_method = 2   OR
7551                                                l_primary_cost_method = 5     OR
7552                                                l_primary_cost_method = 6 )  )
7553               THEN
7554                  l_cst_temp := CSTPACMS.validate_move_snap_to_temp
7555                    (l_intid,
7556                     l_intid,
7557                     1, -- for inventory l_interface_table=1
7558                     l_priqty,
7559                     l_error_num,
7560                     l_error_code,
7561                     l_error_exp) ;
7562                     IF l_error_exp IS NOT NULL THEN
7563                         errupdate(l_rowid,null);
7564                         l_count := l_count + 1;
7565                         --exit;
7566                         RAISE fnd_api.g_exc_error;
7567                     END IF;
7568               END IF;
7569            END IF;
7570         END IF; --J-dev
7571 
7572               -- hjogleka
7573         -- Bug #5497519, Added code to validate lot quantity and serial count
7574         --   against quantities in MTI/MLTI.
7575         -- Bug #5566760, added ABS() while comparing the quantities.
7576         --Bug #5614139
7577         --Do not validate lot/serial quantity for lot split, merge and translate
7578         --The inv_lot_trx_validations_pub API would already have done it by the
7579         --time control comes here
7580         IF (l_validate_full AND l_acttype NOT IN (
7581                INV_GLOBALS.G_ACTION_COSTUPDATE
7582              , INV_GLOBALS.G_ACTION_INV_LOT_SPLIT
7583              , INV_GLOBALS.G_ACTION_INV_LOT_MERGE
7584              , INV_GLOBALS.G_ACTION_INV_LOT_TRANSLATE)
7585            ) THEN
7586           IF (l_lotctrl = 2 AND
7587                  (l_serctrl = 2 OR l_serctrl = 5 OR
7588                  (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
7589                  (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
7590                  (l_serctrl = 6 AND l_srctype = 8 AND l_acttype IN (3,21)) )
7591            ) THEN
7592            -- lot and serial controlled item
7593            -- validate lot quantities and mmtt quantity.
7594                  BEGIN
7595               IF (l_debug = 1) THEN
7596                  inv_log_util.trace('validating lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7597               END IF;
7598 
7599               SELECT NVL(SUM(ABS(NVL(mtli.transaction_quantity,0))), 0)
7600                 INTO l_lot_ser_qty
7601                 FROM mtl_transaction_lots_interface mtli
7602                 WHERE mtli.transaction_interface_id =l_intid
7603                   AND ABS(nvl(mtli.primary_quantity, inv_convert.inv_um_convert
7604                       (l_itemid,5,mtli.transaction_quantity,l_trxuom,l_priuom,'','')))
7605                        = (SELECT SUM(get_serial_diff_wrp
7606                                   (msni.fm_serial_number,nvl(msni.to_serial_number,msni.fm_serial_number)))
7607                             FROM mtl_serial_numbers_interface msni
7608                             WHERE msni.transaction_interface_id
7609                                                   = mtli.serial_transaction_temp_id);
7610            EXCEPTION
7611               WHEN others THEN
7612                  IF (l_debug = 1) THEN
7613                     inv_log_util.trace('Ex.. while checking lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7614                  END IF;
7615                  l_lot_ser_qty := 0;
7616            END;
7617 
7618                  IF (ABS(l_trxqty) <> l_lot_ser_qty) THEN
7619               IF (l_debug = 1) THEN
7620                  inv_log_util.trace('mismatch in lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7621               END IF;
7622               loaderrmsg('INV_INT_LOTCODE','INV_INVLTPU_LOTTRX_QTY');
7623               errupdate(l_rowid,null);
7624               l_count := l_count + 1;
7625               RAISE fnd_api.g_exc_error;
7626            ELSE
7627               IF (l_debug = 1) THEN
7628                  inv_log_util.trace('no mismatch in lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7629               END IF;
7630            END IF;
7631 
7632         ELSIF ( l_serctrl = 2 OR l_serctrl = 5 OR
7633                (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
7634                (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
7635                (l_serctrl = 6 AND l_srctype = 8 AND l_acttype IN (3,21))
7636               ) THEN
7637               -- serial controlled item
7638               -- validate serial quantities only.
7639               BEGIN
7640                  IF (l_debug = 1) THEN
7641                     inv_log_util.trace('validating lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7642                  END IF;
7643 
7644                  SELECT SUM(get_serial_diff_wrp
7645                            (fm_serial_number,NVL(to_serial_number,fm_serial_number)))
7646                    INTO l_lot_ser_qty
7647                    FROM mtl_serial_numbers_interface msni
7648                    WHERE msni.transaction_interface_id =l_intid;
7649               EXCEPTION
7650                  WHEN others THEN
7651                     IF (l_debug = 1) THEN
7652                      inv_log_util.trace('Ex.. while checking lot/serial quantities','INV_TXN_MANAGER_GRP', 9);
7653                     END IF;
7654                     l_lot_ser_qty := 0;
7655               END;
7656               IF (ABS(l_priqty) <> l_lot_ser_qty) THEN
7657                 IF (l_debug = 1) THEN
7658                   inv_log_util.trace('mismatch in serial quantities','INV_TXN_MANAGER_GRP', 9);
7659                 END IF;
7660                 loaderrmsg('INV_INT_SERMISCODE','INV_INVLTPU_LOTTRX_QTY');
7661                 errupdate(l_rowid,null);
7662                 l_count := l_count + 1;
7663                 RAISE fnd_api.g_exc_error;
7664               ELSE
7665                 IF (l_debug = 1) THEN
7666                   inv_log_util.trace('no mismatch in serial quantities','INV_TXN_MANAGER_GRP', 9);
7667                 END IF;
7668               END IF;
7669            END IF;
7670         END IF;
7671 
7672         -- SDPAUL
7673         -- Bug# 5710830 Added code to validate serials and lots and insert into the corresponding
7674         -- master tables. These validations are only needed for Receipt into stores transaction -> 27
7675         -- and for the transaction sources -> 3,6 and 13.
7676         IF (l_acttype = 27 AND l_srctype IN(3,6,13)) THEN
7677 
7678           IF (l_debug = 1) THEN
7679             inv_log_util.trace('Before calling validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
7680           END IF;
7681           SAVEPOINT val_lot_serial_for_rcpt_sp;
7682           validate_lot_serial_for_rcpt( p_interface_id        => l_intid
7683                                         , p_org_id            => l_orgid
7684                                         , p_item_id           => l_itemid
7685                                         , p_lotctrl           => l_lotctrl
7686                                         , p_serctrl           => l_serctrl
7687                                         , p_rev               => l_revision
7688                                         , p_trx_src_id        => l_srctype
7689                                         , p_trx_action_id     => l_acttype
7690                                         , p_subinventory_code => l_subinv
7691                                         , p_locator_id        => l_locid
7692                                         , x_proc_msg          => l_msg_data
7693                                         , x_return_status     => l_return_status );
7694           IF (l_debug = 1) THEN
7695             inv_log_util.trace('After call to validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
7696           END IF;
7697 
7698           IF (l_return_status <> lg_ret_sts_success) THEN -- Failure from validate_lot_serial_for_rcpt
7699             IF (l_debug = 1) THEN
7700               inv_log_util.trace('Error from validate_lot_serial_for_rcpt','INV_TXN_MANAGER_GRP', 9);
7701             END IF;
7702             errupdate(l_rowid,null);
7703             l_count := l_count + 1;
7704             ROLLBACK TO val_lot_serial_for_rcpt_sp;
7705             RAISE fnd_api.g_exc_error;
7706           ELSE
7707             IF (l_debug = 1) THEN
7708               inv_log_util.trace('Call to validate_lot_serial_for_rcpt successful','INV_TXN_MANAGER_GRP', 9);
7709             END IF;
7710           END IF;
7711 
7712         END IF; -- End of fix for Bug# 5710830
7713 
7714             --J-dev, do not do lot and serial validations for WIP desktop
7715             --transactions
7716             IF (l_validate_full) then
7717                IF (l_lotctrl = 2 AND l_acttype <> 24)
7718                  THEN
7719                   IF l_intid IS NOT NULL THEN
7720                     BEGIN
7721                        SELECT 1
7722                          into l_tnum
7723                          FROM MTL_TRANSACTION_LOTS_INTERFACE
7724                          WHERE TRANSACTION_INTERFACE_ID = l_intid
7725                          AND ROWNUM < 2;
7726 
7727                        /**********************************************************
7728                        * we cannot call lotcheck for lot split and lot translate
7729                          * since the resultant lot can be a new lot
7730                          **********************************************************/
7731                          if( l_acttype not in (40, 42)) then
7732                             /** end of change for lot transactions **/
7733                             IF(NOT lotcheck(l_rowid,l_orgid,l_itemid,l_intid,l_priuom,
7734                                         l_trxuom,l_lotuniq,l_shlfcode,l_shlfdays,
7735                                         l_serctrl, l_srctype, l_acttype, l_is_wsm_enabled,
7736                                         -- INVCONV start fabdi
7737                                         l_trxtype, l_revision, l_subinv, l_locid))
7738                                         -- INVCONV end fabdi
7739                         THEN
7740                            l_count := l_count + 1;
7741                            --exit;
7742                            RAISE fnd_api.g_exc_error;
7743                         END IF;
7744                      end if;--action
7745                 EXCEPTION
7746                    WHEN NO_DATA_FOUND THEN
7747                       loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
7748                       errupdate(l_rowid,null);
7749                       l_count := l_count + 1;
7750                       --exit;
7751                       RAISE fnd_api.g_exc_error;
7752                 END;
7753                ELSE
7754                       loaderrmsg('INV_INT_LOTCODE','INV_INT_LOTEXP');
7755                       errupdate(l_rowid,null);
7756                       l_count := l_count + 1;
7757                       --exit;
7758                       RAISE fnd_api.g_exc_error;
7759               END IF;--l_intid is null
7760             ELSE
7761                  IF l_intid IS NOT NULL  THEN
7762                     DELETE FROM MTL_TRANSACTION_LOTS_INTERFACE
7763                       WHERE TRANSACTION_INTERFACE_ID = l_intid;
7764                  END IF;
7765 
7766            /* Additional checking for Dynamic SerCtrl and srctype = 8
7767            /* Changed the if condition for contracts validation */
7768 
7769                 IF ( (l_serctrl = 2 OR l_serctrl = 5 OR
7770                      (l_serctrl = 6 AND l_srctype = 2 AND l_acttype = 1) OR
7771                      (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1) OR
7772                      (l_serctrl = 6 AND l_srctype = 16 AND l_acttype = 1)OR
7773                      (l_serctrl = 6 AND l_srctype = 8 ) ) AND
7774                     l_acttype <> 24) THEN
7775 
7776                    IF (l_intid IS NULL) THEN
7777                       loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
7778                       errupdate(l_rowid,null);
7779                       l_count := l_count + 1;
7780                       --exit;
7781                       RAISE fnd_api.g_exc_error;
7782                     ELSE
7783                   BEGIN
7784                      SELECT 1
7785                        into l_tnum
7786                        FROM MTL_SERIAL_NUMBERS_INTERFACE
7787                        WHERE TRANSACTION_INTERFACE_ID = l_intid
7788                        AND ROWNUM < 2;
7789                   EXCEPTION
7790                      WHEN NO_DATA_FOUND THEN
7791                         loaderrmsg('INV_INT_SERMISCODE','INV_INT_SERMISEXP');
7792                         errupdate(l_rowid,null);
7793                         l_count := l_count + 1;
7794                         RAISE fnd_api.g_exc_error;
7795                         --exit;
7796                   END;
7797                    END IF;--l_intid is null
7798                  ELSE
7799                       IF (l_intid IS NOT NULL) THEN
7800                          DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
7801                            WHERE TRANSACTION_INTERFACE_ID = l_intid;
7802                       END IF;
7803                 END IF; --actions for serials.
7804            END IF;--if check actions for lots
7805 
7806            -- R12 Genealogy Enhancement :  Start
7807            IF (l_srctype = INV_GLOBALS.G_SOURCETYPE_WIP AND l_acttype = INV_GLOBALS.G_ACTION_ISSUE) THEN
7808               IF ((l_lotctrl = 1 AND l_acttype <> 24) AND
7809                   (l_lotctrl = 1 AND (l_serctrl = 2 OR l_serctrl = 5)) )
7810               THEN
7811                  IF (l_debug = 1) THEN
7812                     INV_log_util.trace('{{- It is serial controlled item. Call validate_serial_genealogy_data }}'
7813                                         , 'INV_TXN_MANAGER_GRP', 9);
7814                  END IF;
7815                  validate_serial_genealogy_data ( p_interface_id   => l_intid
7816                                                 , p_org_id         => l_orgid
7817                                                 , x_return_status  => l_return_status
7818                                                 , x_msg_count      => l_msg_count
7819                                                 , x_msg_data       => l_msg_data);
7820                     IF l_return_status <> lg_ret_sts_success THEN
7821                        IF (l_debug=1) THEN mydebug(' l_return_status: ' || l_return_status); END IF;
7822                       --RAISE lg_exc_error; ????
7823                     END IF;
7824               END IF;
7825            ELSE
7826               IF (l_debug = 1) THEN
7827               inv_log_util.trace('{{-It is not a WIP issue transactioon, so no validation/derivation of }}' ||
7828                                   '{{  parent object details will not happen }}' , 'INV_TXN_MANAGER_GRP', 9);
7829               END IF;
7830            END IF;
7831    -- R12 Genealogy Enhancement :  End
7832 
7833         END IF;--l_validate_full
7834        /*Bug#5125632. Calling 'update_status_id_in_mtli' to update the 'status_id' column
7835         of the table, 'MTLI', for the row corrsponding to the currnet line */
7836 
7837         IF (l_lotctrl = 2) THEN
7838           update_status_id_in_mtli(l_intid
7839                                   ,l_orgid
7840                                   ,l_itemid);
7841         END IF;
7842 
7843        l_acctid_validated := FALSE; --Bug#4247753
7844 
7845         IF (l_acct IS NULL) THEN
7846             IF (l_srctype = 3 OR l_srctype = 6) THEN
7847                 IF (l_srctype = 6) THEN
7848                         SELECT DISTRIBUTION_ACCOUNT
7849                           INTO l_acct
7850                           FROM MTL_GENERIC_DISPOSITIONS
7851                          WHERE ORGANIZATION_ID = l_orgid
7852                            AND DISPOSITION_ID = l_trxsrc;
7853                 ELSE
7854                     l_acct := l_trxsrc;
7855                 END IF;
7856 
7857             ELSE
7858                /***************************************************************
7859                 * Lot transaction open interface changes
7860                 * We need to bypass the validation of distribution accout for
7861                 *   lot split and lot merge transactions
7862                 **************************************************************/
7863                IF( l_acttype not in (40,41)) THEN
7864                 /** end of changes for lot transactions **/
7865                 IF (NOT getacctid(l_acct, l_orgid, l_rowid)) THEN
7866                    FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
7867                    l_error_code := FND_MESSAGE.get;
7868 
7869                    errupdate(l_rowid,null);
7870                    --exit;
7871                   RAISE fnd_api.g_exc_error;
7872                 END IF;
7873                END IF;
7874             END IF;
7875 
7876         END IF;--l_acct is null
7877 
7878         -- Bug#4247753. Calling the functon, validate_acctid() for validating the Account combination ID
7879         IF ( l_acct IS NOT NULL AND (NOT l_acctid_validated)) THEN
7880            IF ( NOT validate_acctid(l_acct, l_orgid, l_trxdate)) THEN
7881               FND_MESSAGE.set_name('INV', 'INV_INT_ACTCODE');
7882               l_error_code := FND_MESSAGE.get;
7883               errupdate(l_rowid,null);
7884               RAISE fnd_api.g_exc_error;
7885            END IF;
7886         END IF;
7887 
7888         --J-dev
7889   /* Validate the unit number for unit_effectivity */
7890 
7891    IF (NOT validate_unit_number(l_unit_number,l_orgid,l_itemid,l_srctype,l_acttype))
7892            THEN
7893                 l_error_exp := FND_MESSAGE.get;
7894                 l_error_exp := FND_MESSAGE.get;
7895 
7896                 FND_MESSAGE.set_name('INV', 'INV_INT_UNITNUMBER');
7897             l_error_code := FND_MESSAGE.get;
7898 
7899             errupdate(l_rowid,null);
7900             l_count := l_count + 1;
7901             --exit;
7902             RAISE fnd_api.g_exc_error;
7903 
7904     END IF;
7905 
7906 
7907     IF (l_overcomp_txn_qty IS NOT NULL) THEN  /* Overcompletion Transactions */
7908         BEGIN
7909            IF (l_srctype=5)then
7910               l_overcomp_primary_qty := inv_convert.inv_um_convert(l_itemid,6,l_overcomp_txn_qty,
7911                                                                    l_trxuom,l_priuom,'','');
7912             ELSE
7913               l_overcomp_primary_qty := inv_convert.inv_um_convert(l_itemid,5,l_overcomp_txn_qty,
7914                                                                    l_trxuom,l_priuom,'','');
7915            END IF;
7916         EXCEPTION
7917            WHEN OTHERS THEN
7918         /*IF (NOT UomConvert(l_itemid,0,l_trxuom,'',l_priuom,'',
7919                        l_overcomp_txn_qty, l_overcomp_primary_qty,0))
7920         THEN */
7921                 l_error_exp := FND_MESSAGE.get;
7922 
7923                 FND_MESSAGE.set_name('INV', 'INV_INT_UOMCONVCODE');
7924             l_error_code := FND_MESSAGE.get;
7925 
7926             errupdate(l_rowid,null);
7927             l_count := l_count + 1;
7928         END;
7929     END IF;
7930 
7931         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7932            SET LAST_UPDATE_DATE = SYSDATE,
7933                LAST_UPDATED_BY = p_userid,
7934                LAST_UPDATE_LOGIN = p_loginid,
7935                PROGRAM_UPDATE_DATE = SYSDATE,
7936                INVENTORY_ITEM_ID = l_itemid,
7937                DISTRIBUTION_ACCOUNT_ID = l_acct,
7938                LOCATOR_ID = l_locid,
7939                TRANSACTION_SOURCE_ID = l_trxsrc,
7940                ACCT_PERIOD_ID = l_prdid,
7941                PRIMARY_QUANTITY = l_priqty,
7942                TRANSFER_ORGANIZATION = l_xorgid,
7943                TRANSFER_SUBINVENTORY = l_xsubinv,
7944                TRANSFER_LOCATOR = l_xlocid,
7945                TRANSACTION_INTERFACE_ID = l_intid,
7946                END_ITEM_UNIT_NUMBER = l_unit_number,
7947                OVERCOMPLETION_PRIMARY_QTY = l_overcomp_primary_qty
7948          WHERE ROWID = l_rowid;
7949 
7950         --J-dev moving validate locators as version 115.80 incorrectly put
7951         --this validation IN outer validate_lines(). that would never get called.
7952         /* Moved the locator validation from validate_group to here
7953         /*So that the derived id's will get validated
7954         /*Begin changes for the bug 3015128 */
7955 
7956  /* Bug 3703053 validation of locator and xfr locator was wrongly placed
7957     in the j-dev project.This validation should happen after populating
7958     the locator_id,trasfer_locator_id into MTI not before that .Moved it
7959     down so that the populated locators get validated. */
7960 /*-------------------------------------------------------------+
7961 | Validating locators
7962 +-------------------------------------------------------------*/
7963     loaderrmsg('INV_INT_LOCCODE','INV_INT_LOCEXP');
7964 
7965     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7966        SET LAST_UPDATE_DATE = SYSDATE,
7967            LAST_UPDATED_BY = p_userid,
7968            LAST_UPDATE_LOGIN = p_loginid,
7969            PROGRAM_UPDATE_DATE = SYSDATE,
7970            PROCESS_FLAG = 3,
7971            LOCK_FLAG = 2,
7972            ERROR_CODE = substrb(l_error_code,1,240),
7973            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7974      WHERE rowid =l_rowid
7975        AND PROCESS_FLAG = 1
7976        AND LOCATOR_ID IS NOT NULL
7977        AND NOT EXISTS (
7978            SELECT NULL
7979            FROM MTL_ITEM_LOCATIONS MIL
7980            WHERE MIL.ORGANIZATION_ID = MTI.ORGANIZATION_ID
7981              AND MIL.SUBINVENTORY_CODE = MTI.SUBINVENTORY_CODE
7982              AND MIL.INVENTORY_LOCATION_ID = MTI.LOCATOR_ID
7983              AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(MIL.DISABLE_DATE,
7984                                                  MTI.TRANSACTION_DATE + 1));
7985 
7986 
7987     loaderrmsg('INV_INT_LOCCODE','INV_INT_RESLOCEXP');
7988 
7989     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
7990        SET LAST_UPDATE_DATE = SYSDATE,
7991            LAST_UPDATED_BY = p_userid,
7992            LAST_UPDATE_LOGIN = p_loginid,
7993            PROGRAM_UPDATE_DATE = SYSDATE,
7994            PROCESS_FLAG = 3,
7995            LOCK_FLAG = 2,
7996            ERROR_CODE = substrb(l_error_code,1,240),
7997            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
7998      WHERE rowid =l_rowid
7999        AND PROCESS_FLAG = 1
8000        AND LOCATOR_ID IS NOT NULL
8001        AND NOT EXISTS (
8002            SELECT NULL
8003            FROM MTL_SECONDARY_LOCATORS MSL,
8004                 MTL_SYSTEM_ITEMS MSI
8005            WHERE MSI.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8006              AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8007              AND MSI.RESTRICT_LOCATORS_CODE = 1
8008              AND MSL.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8009              AND MSL.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8010              AND MSL.ORGANIZATION_ID = MSI.ORGANIZATION_ID
8011              AND MSL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
8012              AND MSL.SUBINVENTORY_CODE = MTI.SUBINVENTORY_CODE
8013              AND MSL.SECONDARY_LOCATOR = MTI.LOCATOR_ID
8014            UNION
8015            SELECT NULL
8016              FROM MTL_SYSTEM_ITEMS ITM
8017             WHERE ITM.RESTRICT_LOCATORS_CODE = 2
8018               AND ITM.ORGANIZATION_ID = MTI.ORGANIZATION_ID
8019               AND ITM.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID);
8020 
8021     IF (l_debug = 1) THEN
8022        inv_log_util.trace('Validating locators','INV_TXN_MANAGER_GRP',9);
8023     END IF;
8024 
8025 
8026 /*-----------------------------------------------------------+
8027 | Validating transfer locators against transfer organization
8028 +-----------------------------------------------------------*/
8029 
8030     loaderrmsg('INV_INT_XLOCCODE','INV_INT_XFRLOCEXP');
8031 
8032     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8033        SET LAST_UPDATE_DATE = SYSDATE,
8034            LAST_UPDATED_BY = p_userid,
8035            LAST_UPDATE_LOGIN = p_loginid,
8036            PROGRAM_UPDATE_DATE = SYSDATE,
8037            PROCESS_FLAG = 3,
8038            LOCK_FLAG = 2,
8039            ERROR_CODE = substrb(l_error_code,1,240),
8040            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8041      WHERE ROWID = l_rowid
8042        AND PROCESS_FLAG = 1
8043        AND TRANSACTION_ACTION_ID IN (2,3,5)
8044        AND TRANSFER_LOCATOR IS NOT NULL
8045        AND NOT EXISTS (
8046            SELECT NULL
8047            FROM MTL_ITEM_LOCATIONS MIL
8048            WHERE MIL.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,3,
8049                  MTI.TRANSFER_ORGANIZATION,MTI.ORGANIZATION_ID)
8050              AND MIL.SUBINVENTORY_CODE = MTI.TRANSFER_SUBINVENTORY
8051              AND MIL.INVENTORY_LOCATION_ID = MTI.TRANSFER_LOCATOR
8052              AND TRUNC(MTI.TRANSACTION_DATE) <= NVL(MIL.DISABLE_DATE,
8053                                                     MTI.TRANSACTION_DATE + 1));
8054 
8055 
8056 
8057 /*------------------------------------------------------+
8058 | Validating transfer locators for restricted list
8059 +------------------------------------------------------*/
8060     loaderrmsg('INV_INT_XLOCCODE','INV_INT_RESXFRLOCEXP');
8061 
8062     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8063        SET LAST_UPDATE_DATE = SYSDATE,
8064            LAST_UPDATED_BY = p_userid,
8065            LAST_UPDATE_LOGIN = p_loginid,
8066            PROGRAM_UPDATE_DATE = SYSDATE,
8067            PROCESS_FLAG = 3,
8068            LOCK_FLAG = 2,
8069            ERROR_CODE = substrb(l_error_code,1,240),
8070            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8071      WHERE ROWID=l_rowid
8072        AND PROCESS_FLAG = 1
8073        AND TRANSACTION_ACTION_ID in (2,21,3,5)
8074        AND TRANSFER_LOCATOR IS NOT NULL
8075        AND NOT EXISTS (
8076            SELECT NULL
8077            FROM MTL_SECONDARY_LOCATORS MSL,
8078                 MTL_SYSTEM_ITEMS MSI
8079            WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8080                 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8081              AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8082              AND MSI.RESTRICT_LOCATORS_CODE = 1
8083              AND MSL.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8084                 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8085              AND MSL.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8086              AND MSL.ORGANIZATION_ID = MSI.ORGANIZATION_ID
8087              AND MSL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
8088              AND MSL.SUBINVENTORY_CODE = MTI.TRANSFER_SUBINVENTORY
8089              AND MSL.SECONDARY_LOCATOR = MTI.TRANSFER_LOCATOR
8090            UNION
8091            SELECT NULL
8092            FROM MTL_SYSTEM_ITEMS MSI
8093            WHERE MSI.ORGANIZATION_ID = decode(MTI.TRANSACTION_ACTION_ID,2,
8094                 MTI.ORGANIZATION_ID, MTI.TRANSFER_ORGANIZATION)
8095              AND MSI.INVENTORY_ITEM_ID = MTI.INVENTORY_ITEM_ID
8096              AND MSI.RESTRICT_LOCATORS_CODE = 2);
8097 
8098 
8099     IF (l_debug = 1) THEN
8100        inv_log_util.trace('Validating xfer locators ','INV_TXN_MANAGER_GRP',9);
8101     END IF;
8102 /* End changes for bug 3009135 */
8103 
8104 
8105     --============================================================
8106     -- Bug 4432078
8107     -- OPM INVCONV  umoogala  05-Apr-2005
8108     -- For process-to-discrete call new transfer_price API.
8109     -- No change for discrete/discrete orders.
8110     --============================================================
8111 
8112     --
8113     -- Bug 5230916: Added direct xfer txn
8114     -- Bug 5349860: Process/Discrete Xfer: stamp xfer price for internal order
8115     --              issues to expense destination also (src/act: 8/1)
8116     --
8117     IF (l_acttype = 21
8118     OR (l_acttype = 3 and l_trxqty < 0)
8119     OR (l_srctype = 8 and l_acttype = 1))
8120     THEN
8121 
8122       --
8123       -- Get process mfg org flag for from and to orgs
8124       --
8125       SELECT mp_from.process_enabled_flag, mp_to.process_enabled_flag
8126         INTO l_process_enabled_flag_from, l_process_enabled_flag_to
8127         FROM mtl_parameters mp_from, mtl_parameters mp_to
8128        WHERE mp_from.organization_id = l_orgid
8129          AND mp_to.organization_id   = l_xorgid;
8130 
8131       --
8132       -- Get Operating Units for from and to orgs
8133       -- Bug 5240801: Was org_information2, which is legal entity.
8134       -- We need to get OU, so now using org_information3.
8135       --
8136       SELECT TO_NUMBER(src.org_information3) src_ou, TO_NUMBER(dest.org_information3) dest_ou
8137         INTO l_from_ou, l_to_ou
8138         FROM hr_organization_information src, hr_organization_information dest
8139        WHERE src.organization_id = l_orgid
8140          AND src.org_information_context = 'Accounting Information'
8141          AND dest.organization_id = l_xorgid
8142          AND dest.org_information_context = 'Accounting Information'
8143       ;
8144 
8145       -- get transfer price for:
8146       -- 1. Process-Discrete Transfers
8147       -- 2. Process-to-Process Orgs transfer across OUs
8148       -- 3. Discrete-to-Discrete Orgs transfer across OUs with IC Invoicing enabled.
8149       --
8150       l_ic_invoicing_enabled := fnd_profile.value('INV_INTERCOMPANY_INVOICE_INTERNAL_ORDER');
8151 
8152       IF (l_process_enabled_flag_from <> l_process_enabled_flag_to) OR
8153          (l_process_enabled_flag_from = 'Y' AND l_process_enabled_flag_to = 'Y' AND
8154           l_from_ou <> l_to_ou) OR
8155          (l_process_enabled_flag_from = 'N' AND l_process_enabled_flag_to = 'N' AND
8156           l_from_ou <> l_to_ou AND
8157           l_ic_invoicing_enabled = 1 AND
8158           l_srctype = 8 AND l_acttype = 21)
8159       THEN
8160 
8161         IF (l_debug = 1) THEN
8162            IF (l_process_enabled_flag_from <> l_process_enabled_flag_to)
8163            THEN
8164              inv_log_util.trace('This is process-discrete xfer. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8165            ELSIF (l_process_enabled_flag_from = 'Y' AND
8166                   l_process_enabled_flag_to   = 'Y')
8167            THEN
8168              inv_log_util.trace('This is process-process xfer across OUs. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8169            ELSIF (l_process_enabled_flag_from = 'N' AND
8170                   l_process_enabled_flag_to   = 'N')
8171            THEN
8172              inv_log_util.trace('This is discrete-discrete xfer across OUs with IC enabled. Getting Transfer Price.','INV_TXN_MANAGER_GRP',9);
8173            END IF;
8174         END IF;
8175 
8176         --
8177         -- For internal orders across OUs and IC Invoicing is enabled, then
8178         -- set transfer type to 'INTCOM'. IF transfer type is 'INTCOM' the
8179         -- API below calls INV_TRANSACTION_FLOW_PUB.get_transfer_price.
8180         --
8181         -- For INTORG transfers, new transfer price API is called.
8182         --
8183         IF l_from_ou <> l_to_ou
8184         AND l_srctype = 8
8185         -- Internal Orders across OUs
8186         THEN
8187           --
8188           -- Bug 5349354: direct xfers are not considered as inter-company txn.
8189           --
8190           IF l_ic_invoicing_enabled = 1 and l_acttype = 21
8191           THEN
8192             l_xfer_type   := 'INTCOM';
8193             l_xfer_source := 'INTCOM';
8194           ELSE
8195             l_xfer_type   := 'INTORD';
8196             l_xfer_source := 'INTORD';
8197           END IF;
8198         ELSIF l_from_ou = l_to_ou
8199         AND   l_srctype = 8
8200         -- Internal Orders within same OUs
8201         THEN
8202           l_xfer_type   := 'INTORD';
8203           l_xfer_source := 'INTORD';
8204         ELSE
8205         -- InterOrg xfers
8206           l_xfer_type   := 'INTORG';
8207           l_xfer_source := 'INTORG';
8208         END IF;
8209 
8210         -- call transfer price API
8211         GMF_get_transfer_price_PUB.get_transfer_price (
8212                   p_api_version             => 1.0
8213                 , p_init_msg_list           => 'FALSE'
8214 
8215                 , p_inventory_item_id       => l_itemid
8216                 , p_transaction_qty         => l_trxqty
8217                 , p_transaction_uom         => l_trxuom
8218 
8219                 , p_transaction_id          => l_order_line_id
8220                 , p_global_procurement_flag => 'N'
8221                 , p_drop_ship_flag          => 'N'
8222 
8223                 , p_from_organization_id    => l_orgid
8224                 , p_from_ou                 => l_from_ou
8225                 , p_to_organization_id      => l_xorgid
8226                 , p_to_ou                   => l_to_ou
8227 
8228                 , p_transfer_type           => l_xfer_type  -- INTORG or INTCOM
8229                 , p_transfer_source         => l_xfer_source
8230 
8231                 , x_return_status           => x_return_status
8232                 , x_msg_data                => x_msg_data
8233                 , x_msg_count               => x_msg_count
8234 
8235                 , x_transfer_price          => l_transfer_price        -- in base currency txn uom
8236                 , x_transfer_price_priuom   => l_transfer_price_priuom -- in base currency
8237                 , x_currency_code           => x_currency_code
8238                 , x_incr_transfer_price     => x_incr_transfer_price
8239                 , x_incr_currency_code      => x_incr_currency_code
8240         );
8241 
8242         IF (l_debug = 1) THEN
8243            inv_log_util.trace('After getting transfer price. Status: ' || x_return_status,  'INV_TXN_MANAGER_GRP','1');
8244         END IF;
8245 
8246         IF x_return_status = FND_API.G_RET_STS_SUCCESS
8247         THEN
8248 
8249           --
8250           -- Bug 5136335
8251           -- l_transfer_price_priuom can be NULL for discrete/discrete intercompany xfers.
8252           -- We need to ignore this error when intercompany setup is not done. This is handled
8253           -- in above GMF API call.
8254           -- So, moved this condition from above condition to not to raise any error.
8255           --
8256           IF l_transfer_price_priuom IS NOT NULL
8257           THEN
8258 
8259             IF (l_debug = 1) THEN
8260                inv_log_util.trace('Updating MTI with transfer price: ' || l_transfer_price_priuom,  'INV_TXN_MANAGER_GRP','1');
8261             END IF;
8262 
8263             UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8264                SET LAST_UPDATE_DATE = SYSDATE,
8265                    LAST_UPDATED_BY = p_userid,
8266                    LAST_UPDATE_LOGIN = p_loginid,
8267                    transfer_price = l_transfer_price_priuom
8268              WHERE ROWID = l_rowid;
8269           END IF;
8270         ELSE
8271           l_error_exp := x_msg_data;
8272           FND_MESSAGE.set_name('BOM', 'CST_XFER_PRICE_ERROR');
8273           l_error_code := FND_MESSAGE.get;
8274           errupdate(l_rowid,null);
8275           l_count := l_count + 1;
8276           RAISE fnd_api.g_exc_error;
8277         END IF;
8278 
8279       ELSE
8280         IF (l_debug = 1) THEN
8281            inv_log_util.trace('InterOrg Xfer. Skipping transfer price API call as all conditions are not met.' ||
8282              ' From/To ProcessFlags: ' || l_process_enabled_flag_from ||'/'|| l_process_enabled_flag_to ||
8283              ' From/To OUs: ' || l_from_ou ||'/'|| l_to_ou ||
8284              ' l_ic_invoicing_enabled: ' || l_ic_invoicing_enabled,
8285            'INV_TXN_MANAGER_GRP',9);
8286         END IF;
8287         -- Not a process-discrete xfer. So, set xfer price to NULL
8288         l_transfer_price := NULL;
8289       END IF;
8290     END IF;
8291     --============================================================
8292     -- End OPM INVCONV  changes by umoogala
8293     --============================================================
8294     IF (l_debug = 1) THEN
8295         inv_log_util.trace('end of validate lines inner sec uom code='||p_line_Rec_Type.secondary_uom_code, 'INV_TXN_MANAGER_GRP', 9);
8296         inv_log_util.trace('end of validate lines inner lot control='||to_char(l_lotctrl), 'INV_TXN_MANAGER_GRP', 9);
8297       END IF;
8298     --Jalaj Srivastava Bug 4969885
8299     IF (l_lotctrl=2 AND p_line_Rec_Type.secondary_uom_code IS NOT NULL) THEN
8300       IF (l_debug = 1) THEN
8301         inv_log_util.trace('update secondary quantity on line as sum of lot level secondary quantities', 'INV_TXN_MANAGER_GRP', 9);
8302       END IF;
8303       UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8304       SET    secondary_transaction_quantity = (SELECT SUM(SECONDARY_TRANSACTION_QUANTITY)
8305                                                FROM   MTL_TRANSACTION_LOTS_INTERFACE MTLI
8306                                                WHERE  MTLI.TRANSACTION_INTERFACE_ID = p_line_Rec_Type.TRANSACTION_INTERFACE_ID)
8307       WHERE  ROWID = l_rowid;
8308     END IF;
8309 
8310 /* Bug 6356567 Changes Starting */
8311 /*--------------------------------------------------------------+
8312    Validating Cost group
8313 +--------------------------------------------------------------*/
8314 
8315    SELECT cost_group_id, transfer_cost_group_id
8316      INTO l_cost_group_id, l_xfer_cost_group_id
8317      FROM MTL_TRANSACTIONS_INTERFACE
8318     WHERE ROWID = l_rowid
8319       AND PROCESS_FLAG = 1;
8320 
8321    IF l_cost_group_id is not null and l_acttype not in (5,6,24,30,50,51,52) THEN	-- Modified 7025628
8322         l_temp_cost_group_id := get_costgrpid(l_orgid, l_subinv, l_locid);
8323         loaderrmsg('INV_INT_CSTGRP','INV_INT_CSTEXP');
8324 
8325         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8326            SET LAST_UPDATE_DATE = SYSDATE,
8327                LAST_UPDATED_BY = p_userid,
8328                LAST_UPDATE_LOGIN = p_loginid,
8329                PROGRAM_UPDATE_DATE = SYSDATE,
8330                PROCESS_FLAG = 3,
8331                LOCK_FLAG = 2,
8332                ERROR_CODE = substrb(l_error_code,1,240),
8333                ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8334          WHERE ROWID = l_rowid
8335            AND PROCESS_FLAG = 1
8336 	   AND TRANSACTION_ACTION_ID NOT IN (5,6,24,30,50,51,52)			-- Added 7025628
8337            AND COST_GROUP_ID IS NOT NULL
8338            AND COST_GROUP_ID <> l_temp_cost_group_id;
8339 
8340         IF (l_debug = 1) THEN
8341            inv_log_util.trace('Validating cost group ', 'INV_TXN_MANAGER_GRP', 9);
8342         END IF;
8343    END IF;
8344 
8345 /*--------------------------------------------------------------+
8346    Validating Transfer Cost group
8347 +--------------------------------------------------------------*/
8348 
8349    IF l_xfer_cost_group_id is not null and l_acttype in (2,5,3,21) THEN
8350         IF l_acttype in (2, 5) THEN
8351            l_cg_org := l_orgid;
8352         ELSIF l_acttype in (3, 21) THEN
8353            l_cg_org := l_xorgid;
8354         END IF;
8355 
8356         l_temp_xfer_cost_group_id := get_costgrpid(l_cg_org, l_xsubinv, l_xlocid);
8357         loaderrmsg('INV_INT_XCSTGRP','INV_INT_XCSTEXP');
8358 
8359         UPDATE MTL_TRANSACTIONS_INTERFACE MTI
8360            SET LAST_UPDATE_DATE = SYSDATE,
8361                LAST_UPDATED_BY = p_userid,
8362                LAST_UPDATE_LOGIN = p_loginid,
8363                PROGRAM_UPDATE_DATE = SYSDATE,
8364                PROCESS_FLAG = 3,
8365                LOCK_FLAG = 2,
8366                ERROR_CODE = substrb(l_error_code,1,240),
8367                ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8368          WHERE ROWID = l_rowid
8369            AND PROCESS_FLAG = 1
8370            AND TRANSACTION_ACTION_ID IN (2,3,21,5)
8371            AND TRANSFER_COST_GROUP_ID IS NOT NULL
8372            AND TRANSFER_COST_GROUP_ID <> l_temp_xfer_cost_group_id;
8373 
8374         IF (l_debug = 1) THEN
8375            inv_log_util.trace('Validating xfer cost group ', 'INV_TXN_MANAGER_GRP', 9);
8376         END IF;
8377    END IF;
8378 
8379 /* Bug 6356567 Changes Ending */
8380 
8381 /*---------------------------------------+
8382  | Commit work only if not a CFM WIP txn |
8383  +---------------------------------------*/
8384         IF (l_flow_schedule_children <> 1) AND FND_API.To_Boolean( p_commit ) THEN
8385             COMMIT WORK;
8386         END IF;
8387 --    END LOOP;
8388 
8389 EXCEPTION
8390     WHEN OTHERS THEN
8391     p_error_flag:='Y';
8392     IF (l_debug = 1) THEN
8393        inv_log_util.trace('Error in validate_line : ' || l_error_exp, 'INV_TXN_MANAGER_GRP','1');
8394        inv_log_util.trace('Error:'||substr(sqlerrm,1,250),'INV_TXN_MANAGER_GRP',1);
8395     END IF;
8396 
8397     UPDATE MTL_TRANSACTIONS_INTERFACE
8398            SET LAST_UPDATE_DATE = SYSDATE,
8399                LAST_UPDATED_BY = p_userid,
8400                LAST_UPDATE_LOGIN = p_loginid,
8401                PROGRAM_UPDATE_DATE = SYSDATE,
8402                PROCESS_FLAG = 3,
8403                LOCK_FLAG = 2,
8404                ERROR_CODE = substrb(l_error_code,1,240),
8405                ERROR_EXPLANATION = substrb(l_error_exp,1,240)
8406      WHERE ROWID = l_rowid
8407        AND PROCESS_FLAG = 1;
8408 
8409 /*---------------------------------------+
8410  | Commit work only if not a CFM WIP txn |
8411  +---------------------------------------*/
8412     IF (l_flow_schedule_children <> 1) AND FND_API.To_Boolean( p_commit ) THEN
8413        COMMIT WORK;
8414     END IF;
8415 
8416     l_error_exp := '';
8417     l_error_code := '';
8418     FND_MESSAGE.clear;
8419     return;
8420 END validate_lines;
8421 
8422 
8423 /******************************************************************
8424  *
8425  * get_open_period()
8426  *
8427  ******************************************************************/
8428 FUNCTION get_open_period(p_org_id NUMBER,p_trans_date DATE,p_chk_date NUMBER) RETURN NUMBER IS
8429 
8430 chk_date NUMBER;  /* 0 ignore date,1-return 0 if date doesn't fall in current
8431                      period, -1 if Oracle error, otherwise period id*/
8432 trans_date  DATE; /* transaction_date */
8433 acct_period_id NUMBER;  /* period_close_id of current period */
8434 
8435 BEGIN
8436     if ( l_debug is null) then
8437        l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
8438     end if;
8439 
8440     acct_period_id := 0; /* default value */
8441 
8442      if (chk_date = 1) THEN
8443 
8444          SELECT ACCT_PERIOD_ID
8445          INTO   acct_period_id
8446          FROM   ORG_ACCT_PERIODS
8447          WHERE  PERIOD_CLOSE_DATE IS NULL
8448          AND    ORGANIZATION_ID = p_org_id
8449          AND    INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id)
8450                       BETWEEN PERIOD_START_DATE and SCHEDULE_CLOSE_DATE
8451          ORDER BY PERIOD_START_DATE DESC, SCHEDULE_CLOSE_DATE ASC;
8452 
8453     else
8454 
8455          SELECT ACCT_PERIOD_ID
8456          INTO   acct_period_id
8457          FROM   ORG_ACCT_PERIODS
8458          WHERE  PERIOD_CLOSE_DATE IS NULL
8459          AND ORGANIZATION_ID = p_org_id
8460          AND TRUNC(SCHEDULE_CLOSE_DATE) >=
8461               INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id)
8462           AND TRUNC(PERIOD_START_DATE) <=
8463               INV_LE_TIMEZONE_PUB.get_le_day_for_inv_org(NVL(p_trans_date,SYSDATE),p_org_id);
8464     end if;
8465 
8466    return(acct_period_id);
8467 
8468 exception
8469    when NO_DATA_FOUND then
8470         acct_period_id := 0;
8471         return(acct_period_id);
8472    when OTHERS then
8473         acct_period_id  := -1;
8474         return(acct_period_id);
8475 
8476 
8477 end get_open_period;
8478 
8479 
8480 
8481 /******************************************************************
8482  *
8483  * tmpinsert()
8484  *
8485  ******************************************************************/
8486    FUNCTION tmpinsert(p_header_id IN NUMBER,
8487                       p_validation_level IN NUMBER  := fnd_api.g_valid_level_full )
8488 RETURN BOOLEAN
8489 IS
8490 
8491     l_lt_flow_schedule NUMBER;
8492     l_count            NUMBER := 0;
8493     l_patchset_j       NUMBER := 0;  /* 0 = No 1 = Yes */
8494 
8495 BEGIN
8496     IF (l_debug is null) then
8497        l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
8498     end if;
8499 
8500     --bug 4574806. this will be used in the statements below for final
8501     --completion flag AS a decode
8502     IF (wip_constants.DMF_PATCHSET_LEVEL>=
8503         wip_constants.DMF_PATCHSET_J_VALUE) THEN
8504        l_patchset_j := 1;
8505     END IF;
8506 
8507     --J-dev
8508     /** For patchset J.wip will do the computation for the
8509     /*completion_transaction_id. For J new colmns have been added
8510     /* move_transaction_id (new)
8511     /*completion_transaction_id (new)
8512     /*wip_supply_type (new)*/
8513 
8514     l_lt_flow_schedule := gi_flow_schedule ;
8515 
8516     /*OSFM Support for Serialized Lot Items*/
8517     IF (l_debug = 1)
8518     THEN
8519       inv_log_util.TRACE (   'In tmpinsert '
8520                           , 'INV_TXN_MANAGER_GRP'
8521                         , '9'
8522                          );
8523     END IF;
8524     /*********************************************************************
8525      * In case there are only Lot Split/Merge/Translate Transactions only*
8526      * we do a successful return                                         *
8527      *********************************************************************/
8528     BEGIN
8529       SELECT 1
8530         INTO l_count
8531         FROM DUAL
8532         WHERE EXISTS (SELECT transaction_interface_id
8533            FROM  mtl_transactions_interface
8534            WHERE transaction_header_id = p_header_id
8535            AND process_flag = 1
8536            AND transaction_type_id NOT IN
8537                  (inv_globals.g_type_inv_lot_split
8538                 , inv_globals.g_type_inv_lot_merge
8539                 , inv_globals.g_type_inv_lot_translate));
8540     EXCEPTION
8541         WHEN OTHERS THEN
8542           l_count := 0;
8543           IF(l_debug = 1) THEN
8544           inv_log_util.TRACE (   'Exce. Section l_count => ' || l_count
8545                      , 'INV_TXN_MANAGER_GRP'
8546                    , '9'
8547                     );
8548           END IF;
8549     END;
8550     IF(l_count = 0 OR l_count IS NULL) THEN
8551       IF (l_debug = 1)
8552       THEN
8553        inv_log_util.TRACE (   'Returning from tmpinsert '
8554                            , 'INV_TXN_MANAGER_GRP'
8555                          , '9'
8556                           );
8557       END IF;
8558       RETURN TRUE;
8559     END IF;
8560 
8561     /*OSFM Support for Serialized Lot Items*/
8562 
8563     IF ( l_lt_flow_schedule = 0) THEN
8564 
8565         INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
8566         TRANSACTION_HEADER_ID,
8567         TRANSACTION_TEMP_ID,
8568         SOURCE_CODE,
8569         SOURCE_LINE_ID,
8570         PROCESS_FLAG,
8571         CREATION_DATE,
8572         CREATED_BY,
8573         LAST_UPDATE_DATE,
8574         LAST_UPDATED_BY,
8575         LAST_UPDATE_LOGIN,
8576         PROGRAM_ID,
8577         PROGRAM_UPDATE_DATE,
8578         PROGRAM_APPLICATION_ID,
8579         REQUEST_ID,
8580         ORGANIZATION_ID,
8581         SUBINVENTORY_CODE,
8582         LOCATOR_ID,
8583         INVENTORY_ITEM_ID,
8584         REVISION,
8585         TRANSACTION_TYPE_ID,
8586         TRANSACTION_ACTION_ID,
8587         TRANSACTION_SOURCE_TYPE_ID,
8588         TRANSACTION_SOURCE_ID,
8589         TRANSACTION_SOURCE_NAME,
8590         TRANSACTION_REFERENCE,
8591         REASON_ID,
8592         TRANSACTION_DATE,
8593         ACCT_PERIOD_ID,
8594         TRANSACTION_QUANTITY,
8595         TRANSACTION_UOM,
8596         PRIMARY_QUANTITY,
8597         TRANSACTION_COST,
8598         DISTRIBUTION_ACCOUNT_ID,
8599         TRANSFER_SUBINVENTORY,
8600         TRANSFER_ORGANIZATION,
8601         TRANSFER_TO_LOCATION,
8602         SHIPMENT_NUMBER,
8603         TRANSPORTATION_COST,
8604         TRANSFER_COST,
8605         TRANSPORTATION_ACCOUNT,
8606         FREIGHT_CODE,
8607         CONTAINERS,
8608         WAYBILL_AIRBILL,
8609         EXPECTED_ARRIVAL_DATE,
8610         CURRENCY_CODE,
8611         CURRENCY_CONVERSION_DATE,
8612         CURRENCY_CONVERSION_TYPE,
8613         CURRENCY_CONVERSION_RATE,
8614         NEW_AVERAGE_COST,
8615         VALUE_CHANGE,
8616         PERCENTAGE_CHANGE,
8617         DEMAND_ID,
8618         DEMAND_SOURCE_HEADER_ID,
8619         DEMAND_SOURCE_LINE,
8620         DEMAND_SOURCE_DELIVERY,
8621         CUSTOMER_SHIP_ID,
8622         TRX_SOURCE_DELIVERY_ID,
8623         TRX_SOURCE_LINE_ID,
8624         PICKING_LINE_ID,
8625         REQUIRED_FLAG,
8626         NEGATIVE_REQ_FLAG,
8627         REPETITIVE_LINE_ID,
8628         PRIMARY_SWITCH,
8629         OPERATION_SEQ_NUM,
8630         SETUP_TEARDOWN_CODE,
8631         SCHEDULE_UPDATE_CODE,
8632         DEPARTMENT_ID,
8633         EMPLOYEE_CODE,
8634         SCHEDULE_ID,
8635         WIP_ENTITY_TYPE,
8636         ENCUMBRANCE_AMOUNT,
8637         ENCUMBRANCE_ACCOUNT,
8638         USSGL_TRANSACTION_CODE,
8639         SHIPPABLE_FLAG,
8640         REQUISITION_LINE_ID,
8641         REQUISITION_DISTRIBUTION_ID,
8642         SHIP_TO_LOCATION,
8643         COMPLETION_TRANSACTION_ID,
8644         ATTRIBUTE_CATEGORY,
8645         ATTRIBUTE1,
8646         ATTRIBUTE2,
8647         ATTRIBUTE3,
8648         ATTRIBUTE4,
8649         ATTRIBUTE5,
8650         ATTRIBUTE6,
8651         ATTRIBUTE7,
8652         ATTRIBUTE8,
8653         ATTRIBUTE9,
8654         ATTRIBUTE10,
8655         ATTRIBUTE11,
8656         ATTRIBUTE12,
8657         ATTRIBUTE13,
8658         ATTRIBUTE14,
8659         ATTRIBUTE15,
8660         MOVEMENT_ID,
8661         SOURCE_PROJECT_ID,
8662         SOURCE_TASK_ID,
8663         EXPENDITURE_TYPE,
8664         PA_EXPENDITURE_ORG_ID,
8665         PROJECT_ID,
8666         TASK_ID,
8667         TO_PROJECT_ID,
8668         TO_TASK_ID,
8669         POSTING_FLAG,
8670         FINAL_COMPLETION_FLAG,
8671         TRANSFER_PERCENTAGE,
8672         MATERIAL_ACCOUNT,
8673         MATERIAL_OVERHEAD_ACCOUNT,
8674         RESOURCE_ACCOUNT,
8675         OUTSIDE_PROCESSING_ACCOUNT,
8676         OVERHEAD_ACCOUNT,
8677         COST_GROUP_ID,
8678         FLOW_SCHEDULE,
8679         QA_COLLECTION_ID,
8680         OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
8681         OVERCOMPLETION_PRIMARY_QTY,
8682         OVERCOMPLETION_TRANSACTION_ID,
8683         END_ITEM_UNIT_NUMBER,
8684         ORG_COST_GROUP_ID, /* PCST (Periodic Cost Update) */
8685         COST_TYPE_ID, /* PCST */
8686         MOVE_ORDER_LINE_ID,
8687         LPN_ID,
8688         CONTENT_LPN_ID,
8689         TRANSFER_LPN_ID,
8690         ORGANIZATION_TYPE,
8691         TRANSFER_ORGANIZATION_TYPE,
8692         OWNING_ORGANIZATION_ID,
8693         OWNING_TP_TYPE,
8694         XFR_OWNING_ORGANIZATION_ID,
8695         TRANSFER_OWNING_TP_TYPE,
8696         PLANNING_ORGANIZATION_ID,
8697         PLANNING_TP_TYPE,
8698         XFR_PLANNING_ORGANIZATION_ID,
8699         TRANSFER_PLANNING_TP_TYPE,
8700         TRANSACTION_BATCH_ID,
8701         TRANSACTION_BATCH_SEQ,
8702         TRANSFER_COST_GROUP_ID,
8703         TRANSACTION_MODE,
8704      -- start of fix for eam
8705      -- added following 4 columns
8706          REBUILD_ITEM_ID,
8707          REBUILD_ACTIVITY_ID,
8708          REBUILD_SERIAL_NUMBER,
8709           rebuild_job_name,
8710           kanban_card_id  ,-- end of fix for eam
8711           class_code,--J dev (accounting_class in MTI)
8712           scheduled_flag,--J dev
8713           schedule_number,--J dev
8714           routing_revision_date,--J dev
8715           move_transaction_id,--J dev
8716           wip_supply_type,--J dev
8717           build_sequence,--J dev
8718           bom_revision,--J dev
8719           routing_revision,--J dev
8720           bom_revision_date,--J dev
8721           alternate_bom_designator,--J dev
8722           alternate_routing_designator,   -- end of fix for eam
8723           SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi start
8724           SECONDARY_UOM_CODE, -- INVCONV fabdi end
8725     RELIEVE_RESERVATIONS_FLAG,      /*** {{ R12 Enhanced reservations code changes ***/
8726     RELIEVE_HIGH_LEVEL_RSV_FLAG,    /*** {{ R12 Enhanced reservations code changes ***/
8727     TRANSFER_PRICE                  -- INVCONV umoogala  For Process-Discrete Transfer Enh.
8728           )
8729     SELECT
8730         TRANSACTION_HEADER_ID,
8731         TRANSACTION_INTERFACE_ID,
8732         SOURCE_CODE,
8733         SOURCE_LINE_ID,
8734         'Y',
8735         SYSDATE,
8736         CREATED_BY,
8737         SYSDATE,
8738         LAST_UPDATED_BY,
8739         LAST_UPDATE_LOGIN,
8740         PROGRAM_ID,
8741         SYSDATE,
8742         PROGRAM_APPLICATION_ID,
8743         REQUEST_ID,
8744         ORGANIZATION_ID,
8745         SUBINVENTORY_CODE,
8746         LOCATOR_ID,
8747         INVENTORY_ITEM_ID,
8748         REVISION,
8749         TRANSACTION_TYPE_ID,
8750         TRANSACTION_ACTION_ID,
8751         TRANSACTION_SOURCE_TYPE_ID,
8752         TRANSACTION_SOURCE_ID,
8753         TRANSACTION_SOURCE_NAME,
8754         TRANSACTION_REFERENCE,
8755         REASON_ID,
8756         TRANSACTION_DATE,
8757         ACCT_PERIOD_ID,
8758         TRANSACTION_QUANTITY,
8759         TRANSACTION_UOM,
8760         PRIMARY_QUANTITY,
8761         TRANSACTION_COST,
8762         DISTRIBUTION_ACCOUNT_ID,
8763         TRANSFER_SUBINVENTORY,
8764         TRANSFER_ORGANIZATION,
8765         TRANSFER_LOCATOR,
8766         SHIPMENT_NUMBER,
8767         TRANSPORTATION_COST,
8768         TRANSFER_COST,
8769         TRANSPORTATION_ACCOUNT,
8770         FREIGHT_CODE,
8771         CONTAINERS,
8772         WAYBILL_AIRBILL,
8773         EXPECTED_ARRIVAL_DATE,
8774         CURRENCY_CODE,
8775         CURRENCY_CONVERSION_DATE,
8776         CURRENCY_CONVERSION_TYPE,
8777         CURRENCY_CONVERSION_RATE,
8778         NEW_AVERAGE_COST,
8779         VALUE_CHANGE,
8780         PERCENTAGE_CHANGE,
8781         DEMAND_ID,
8782         DEMAND_SOURCE_HEADER_ID,
8783         DEMAND_SOURCE_LINE,
8784         DEMAND_SOURCE_DELIVERY,
8785         CUSTOMER_SHIP_ID,
8786         TRX_SOURCE_DELIVERY_ID,
8787         TRX_SOURCE_LINE_ID,
8788         PICKING_LINE_ID,
8789         REQUIRED_FLAG,
8790         NEGATIVE_REQ_FLAG,
8791         REPETITIVE_LINE_ID,
8792         PRIMARY_SWITCH,
8793         OPERATION_SEQ_NUM,
8794         SETUP_TEARDOWN_CODE,
8795         SCHEDULE_UPDATE_CODE,
8796         DEPARTMENT_ID,
8797         EMPLOYEE_CODE,
8798         SCHEDULE_ID,
8799         WIP_ENTITY_TYPE,
8800         ENCUMBRANCE_AMOUNT,
8801         ENCUMBRANCE_ACCOUNT,
8802         USSGL_TRANSACTION_CODE,
8803         SHIPPABLE_FLAG,
8804         REQUISITION_LINE_ID,
8805         REQUISITION_DISTRIBUTION_ID,
8806         SHIP_TO_LOCATION_ID,
8807         Nvl(completion_transaction_id,DECODE(TRANSACTION_ACTION_ID,31,
8808                MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL,32,MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL,NULL)),--J-dev as wip will pass this to us. For I we need the decode.
8809         ATTRIBUTE_CATEGORY,
8810         ATTRIBUTE1,
8811         ATTRIBUTE2,
8812         ATTRIBUTE3,
8813         ATTRIBUTE4,
8814         ATTRIBUTE5,
8815         ATTRIBUTE6,
8816         ATTRIBUTE7,
8817         ATTRIBUTE8,
8818         ATTRIBUTE9,
8819         ATTRIBUTE10,
8820         ATTRIBUTE11,
8821         ATTRIBUTE12,
8822         ATTRIBUTE13,
8823         ATTRIBUTE14,
8824         ATTRIBUTE15,
8825         MOVEMENT_ID,
8826         SOURCE_PROJECT_ID,
8827         SOURCE_TASK_ID,
8828         EXPENDITURE_TYPE,
8829         PA_EXPENDITURE_ORG_ID,
8830         PROJECT_ID,
8831         TASK_ID,
8832         TO_PROJECT_ID,
8833         TO_TASK_ID,
8834         'N',
8835         NVL(FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,FINAL_COMPLETION_FLAG,
8836 'N')),
8837         TRANSFER_PERCENTAGE,
8838         MATERIAL_ACCOUNT,
8839         MATERIAL_OVERHEAD_ACCOUNT,
8840         RESOURCE_ACCOUNT,
8841         OUTSIDE_PROCESSING_ACCOUNT,
8842         OVERHEAD_ACCOUNT,
8843         COST_GROUP_ID,
8844         FLOW_SCHEDULE,
8845         QA_COLLECTION_ID,
8846         OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
8847         OVERCOMPLETION_PRIMARY_QTY,
8848         OVERCOMPLETION_TRANSACTION_ID,
8849         END_ITEM_UNIT_NUMBER,
8850         ORG_COST_GROUP_ID,  /* PCST */
8851         COST_TYPE_ID,
8852         DECODE(TRANSACTION_SOURCE_TYPE_ID,4,SOURCE_LINE_ID,null),       /* PCST */
8853         LPN_ID,
8854         CONTENT_LPN_ID,
8855           transfer_lpn_id,
8856           organization_type,
8857           transfer_organization_type,
8858           owning_organization_id,
8859           owning_tp_type,
8860           xfr_owning_organization_id,
8861           transfer_owning_tp_type,
8862           planning_organization_id,
8863           planning_tp_type,
8864           xfr_planning_organization_id,
8865           TRANSFER_PLANNING_TP_TYPE,
8866           TRANSACTION_BATCH_ID,
8867           TRANSACTION_BATCH_SEQ,
8868           TRANSFER_COST_GROUP_ID,
8869           Decode(p_validation_level,fnd_api.g_valid_level_none,transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
8870 -- start of fix for eam
8871 -- added following 4 columns
8872           REBUILD_ITEM_ID,
8873           REBUILD_ACTIVITY_ID,
8874           REBUILD_SERIAL_NUMBER,
8875           rebuild_job_name,
8876           -- end of fix for eam
8877           kanban_card_id,
8878           accounting_class,--J dev (class_code in mmtt)
8879           scheduled_flag,--J dev
8880           schedule_number,--J dev
8881           routing_revision_date,--J dev
8882           move_transaction_id,--J dev
8883           wip_supply_type , --J dev
8884           build_sequence,--J dev
8885           bom_revision,--J dev
8886           routing_revision,--J dev
8887           bom_revision_date,--J dev
8888           alternate_bom_designator,--J dev
8889           alternate_routing_designator, --J-dev
8890           SECONDARY_TRANSACTION_QUANTITY, -- INVCONV start fabdi
8891           SECONDARY_UOM_CODE,             -- INVCONV fabdi end
8892     RELIEVE_RESERVATIONS_FLAG,      /*** {{ R12 Enhanced reservations code changes ***/
8893     RELIEVE_HIGH_LEVEL_RSV_FLAG,    /*** {{ R12 Enhanced reservations code changes ***/
8894     TRANSFER_PRICE                  -- INVCONV umoogala  For Process-Discrete Transfer Enh.
8895    FROM MTL_TRANSACTIONS_INTERFACE
8896          --WHERE ROWID = p_rowid--J-dev
8897          WHERE transaction_header_id = p_header_id
8898           AND PROCESS_FLAG = 1
8899            AND transaction_type_id NOT IN          /*OSFM Support for Lot Serialized Items*/
8900                  (inv_globals.g_type_inv_lot_split
8901                 , inv_globals.g_type_inv_lot_merge
8902                 , inv_globals.g_type_inv_lot_translate
8903                  );
8904 
8905     ELSE
8906      IF ( l_lt_flow_schedule <> 0 ) THEN
8907         INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
8908         TRANSACTION_HEADER_ID,
8909         TRANSACTION_TEMP_ID,
8910         SOURCE_CODE,
8911         SOURCE_LINE_ID,
8912         PROCESS_FLAG,
8913         CREATION_DATE,
8914         CREATED_BY,
8915         LAST_UPDATE_DATE,
8916         LAST_UPDATED_BY,
8917         LAST_UPDATE_LOGIN,
8918         PROGRAM_ID,
8919         PROGRAM_UPDATE_DATE,
8920         PROGRAM_APPLICATION_ID,
8921         REQUEST_ID,
8922         ORGANIZATION_ID,
8923         SUBINVENTORY_CODE,
8924         LOCATOR_ID,
8925         INVENTORY_ITEM_ID,
8926         REVISION,
8927         TRANSACTION_TYPE_ID,
8928         TRANSACTION_ACTION_ID,
8929         TRANSACTION_SOURCE_TYPE_ID,
8930         TRANSACTION_SOURCE_ID,
8931         TRANSACTION_SOURCE_NAME,
8932         TRANSACTION_REFERENCE,
8933         REASON_ID,
8934         TRANSACTION_DATE,
8935         ACCT_PERIOD_ID,
8936         TRANSACTION_QUANTITY,
8937         TRANSACTION_UOM,
8938         PRIMARY_QUANTITY,
8939         TRANSACTION_COST,
8940         DISTRIBUTION_ACCOUNT_ID,
8941         TRANSFER_SUBINVENTORY,
8942         TRANSFER_ORGANIZATION,
8943         TRANSFER_TO_LOCATION,
8944         SHIPMENT_NUMBER,
8945         TRANSPORTATION_COST,
8946         TRANSFER_COST,
8947         TRANSPORTATION_ACCOUNT,
8948         FREIGHT_CODE,
8949         CONTAINERS,
8950         WAYBILL_AIRBILL,
8951         EXPECTED_ARRIVAL_DATE,
8952         CURRENCY_CODE,
8953         CURRENCY_CONVERSION_DATE,
8954         CURRENCY_CONVERSION_TYPE,
8955         CURRENCY_CONVERSION_RATE,
8956         NEW_AVERAGE_COST,
8957         VALUE_CHANGE,
8958         PERCENTAGE_CHANGE,
8959         DEMAND_ID,
8960         DEMAND_SOURCE_HEADER_ID,
8961         DEMAND_SOURCE_LINE,
8962         DEMAND_SOURCE_DELIVERY,
8963         DEMAND_CLASS,
8964         CUSTOMER_SHIP_ID,
8965         TRX_SOURCE_DELIVERY_ID,
8966         TRX_SOURCE_LINE_ID,
8967         PICKING_LINE_ID,
8968         REQUIRED_FLAG,
8969         NEGATIVE_REQ_FLAG,
8970         REPETITIVE_LINE_ID,
8971         PRIMARY_SWITCH,
8972         OPERATION_SEQ_NUM,
8973         SETUP_TEARDOWN_CODE,
8974         SCHEDULE_UPDATE_CODE,
8975         DEPARTMENT_ID,
8976         EMPLOYEE_CODE,
8977         SCHEDULE_ID,
8978         WIP_ENTITY_TYPE,
8979         ENCUMBRANCE_AMOUNT,
8980         ENCUMBRANCE_ACCOUNT,
8981         USSGL_TRANSACTION_CODE,
8982         SHIPPABLE_FLAG,
8983         REQUISITION_LINE_ID,
8984         REQUISITION_DISTRIBUTION_ID,
8985         SHIP_TO_LOCATION,
8986         COMPLETION_TRANSACTION_ID,
8987         ATTRIBUTE_CATEGORY,
8988         ATTRIBUTE1,
8989         ATTRIBUTE2,
8990         ATTRIBUTE3,
8991         ATTRIBUTE4,
8992         ATTRIBUTE5,
8993         ATTRIBUTE6,
8994         ATTRIBUTE7,
8995         ATTRIBUTE8,
8996         ATTRIBUTE9,
8997         ATTRIBUTE10,
8998         ATTRIBUTE11,
8999         ATTRIBUTE12,
9000         ATTRIBUTE13,
9001         ATTRIBUTE14,
9002         ATTRIBUTE15,
9003         MOVEMENT_ID,
9004         SOURCE_PROJECT_ID,
9005         SOURCE_TASK_ID,
9006         EXPENDITURE_TYPE,
9007         PA_EXPENDITURE_ORG_ID,
9008         PROJECT_ID,
9009         TASK_ID,
9010         TO_PROJECT_ID,
9011         TO_TASK_ID,
9012         POSTING_FLAG,
9013         FINAL_COMPLETION_FLAG,
9014         TRANSFER_PERCENTAGE,
9015         MATERIAL_ACCOUNT,
9016         MATERIAL_OVERHEAD_ACCOUNT,
9017         RESOURCE_ACCOUNT,
9018         OUTSIDE_PROCESSING_ACCOUNT,
9019         OVERHEAD_ACCOUNT,
9020         COST_GROUP_ID,
9021         FLOW_SCHEDULE,
9022         QA_COLLECTION_ID,
9023         OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9024         OVERCOMPLETION_PRIMARY_QTY,
9025         OVERCOMPLETION_TRANSACTION_ID,
9026         END_ITEM_UNIT_NUMBER,
9027         COMMON_BOM_SEQ_ID,
9028         COMMON_ROUTING_SEQ_ID,
9029         ORG_COST_GROUP_ID,    /* PCST */
9030         COST_TYPE_ID,
9031         LPN_ID,
9032         CONTENT_LPN_ID,
9033           transfer_lpn_id,
9034           organization_type,
9035           transfer_organization_type,
9036           owning_organization_id,
9037           owning_tp_type,
9038           xfr_owning_organization_id,
9039           transfer_owning_tp_type,
9040           planning_organization_id,
9041           planning_tp_type,
9042           xfr_planning_organization_id,
9043           TRANSFER_PLANNING_TP_TYPE,
9044           TRANSACTION_BATCH_ID,
9045           TRANSACTION_BATCH_SEQ,
9046           TRANSFER_COST_GROUP_ID,
9047           TRANSACTION_MODE,
9048 -- start of fix for eam
9049 -- added following 4 columns
9050           REBUILD_ITEM_ID,
9051           REBUILD_ACTIVITY_ID,
9052           REBUILD_SERIAL_NUMBER,
9053           rebuild_job_name,
9054           -- end of fix for eam
9055           kanban_card_id,
9056           class_code,--J dev (class_code in mmtt)
9057           scheduled_flag,--J dev
9058           schedule_number,--J dev
9059           routing_revision_date,--J dev
9060           move_transaction_id,--J dev
9061           wip_supply_type,
9062           build_sequence,--J dev
9063           bom_revision,--J dev
9064           routing_revision,--J dev
9065           bom_revision_date,--J dev
9066           alternate_bom_designator,--J dev
9067           alternate_routing_designator , --J dev
9068           SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi
9069           SECONDARY_UOM_CODE,              -- INVCONV fabdi end
9070     RELIEVE_RESERVATIONS_FLAG,       /*** {{ R12 Enhanced reservations code changes ***/
9071     RELIEVE_HIGH_LEVEL_RSV_FLAG,     /*** {{ R12 Enhanced reservations code changes ***/
9072     TRANSFER_PRICE                   -- INVCONV umoogala  For Process-Discrete Transfer Enh.
9073           )
9074    SELECT
9075         MTI.TRANSACTION_HEADER_ID,
9076         MTI.TRANSACTION_INTERFACE_ID,
9077         MTI.SOURCE_CODE,
9078         MTI.SOURCE_LINE_ID,
9079         'Y',
9080         SYSDATE,
9081         MTI.CREATED_BY,
9082         SYSDATE,
9083         MTI.LAST_UPDATED_BY,
9084         MTI.LAST_UPDATE_LOGIN,
9085         MTI.PROGRAM_ID,
9086         SYSDATE,
9087         MTI.PROGRAM_APPLICATION_ID,
9088         MTI.REQUEST_ID,
9089         MTI.ORGANIZATION_ID,
9090         MTI.SUBINVENTORY_CODE,
9091         MTI.LOCATOR_ID,
9092         MTI.INVENTORY_ITEM_ID,
9093         MTI.REVISION,
9094         MTI.TRANSACTION_TYPE_ID,
9095         MTI.TRANSACTION_ACTION_ID,
9096         MTI.TRANSACTION_SOURCE_TYPE_ID,
9097         MTI.TRANSACTION_SOURCE_ID,
9098         MTI.TRANSACTION_SOURCE_NAME,
9099         MTI.TRANSACTION_REFERENCE,
9100         MTI.REASON_ID,
9101         MTI.TRANSACTION_DATE,
9102         MTI.ACCT_PERIOD_ID,
9103         MTI.TRANSACTION_QUANTITY,
9104         MTI.TRANSACTION_UOM,
9105         MTI.PRIMARY_QUANTITY,
9106         MTI.TRANSACTION_COST,
9107         MTI.DISTRIBUTION_ACCOUNT_ID,
9108         MTI.TRANSFER_SUBINVENTORY,
9109         MTI.TRANSFER_ORGANIZATION,
9110         MTI.TRANSFER_LOCATOR,
9111         MTI.SHIPMENT_NUMBER,
9112         MTI.TRANSPORTATION_COST,
9113         MTI.TRANSFER_COST,
9114         MTI.TRANSPORTATION_ACCOUNT,
9115         MTI.FREIGHT_CODE,
9116         MTI.CONTAINERS,
9117         MTI.WAYBILL_AIRBILL,
9118         MTI.EXPECTED_ARRIVAL_DATE,
9119         MTI.CURRENCY_CODE,
9120         MTI.CURRENCY_CONVERSION_DATE,
9121         MTI.CURRENCY_CONVERSION_TYPE,
9122         MTI.CURRENCY_CONVERSION_RATE,
9123         MTI.NEW_AVERAGE_COST,
9124         MTI.VALUE_CHANGE,
9125         MTI.PERCENTAGE_CHANGE,
9126         MTI.DEMAND_ID,
9127         MTI.DEMAND_SOURCE_HEADER_ID,
9128         MTI.DEMAND_SOURCE_LINE,
9129         MTI.DEMAND_SOURCE_DELIVERY,
9130         MTI.DEMAND_CLASS,
9131         MTI.CUSTOMER_SHIP_ID,
9132         MTI.TRX_SOURCE_DELIVERY_ID,
9133         MTI.TRX_SOURCE_LINE_ID,
9134         MTI.PICKING_LINE_ID,
9135         MTI.REQUIRED_FLAG,
9136         MTI.NEGATIVE_REQ_FLAG,
9137         MTI.REPETITIVE_LINE_ID,
9138         MTI.PRIMARY_SWITCH,
9139         MTI.OPERATION_SEQ_NUM,
9140         MTI.SETUP_TEARDOWN_CODE,
9141         MTI.SCHEDULE_UPDATE_CODE,
9142         MTI.DEPARTMENT_ID,
9143         MTI.EMPLOYEE_CODE,
9144         MTI.SCHEDULE_ID,
9145         MTI.WIP_ENTITY_TYPE,
9146         MTI.ENCUMBRANCE_AMOUNT,
9147         MTI.ENCUMBRANCE_ACCOUNT,
9148         MTI.USSGL_TRANSACTION_CODE,
9149         MTI.SHIPPABLE_FLAG,
9150         MTI.REQUISITION_LINE_ID,
9151         MTI.REQUISITION_DISTRIBUTION_ID,
9152         MTI.SHIP_TO_LOCATION_ID,
9153         NVL(mti.completion_transaction_id,MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL),
9154         --J-dev as wip may pass this to us in J. NVL for I
9155         MTI.ATTRIBUTE_CATEGORY,
9156         MTI.ATTRIBUTE1,
9157         MTI.ATTRIBUTE2,
9158         MTI.ATTRIBUTE3,
9159         MTI.ATTRIBUTE4,
9160         MTI.ATTRIBUTE5,
9161         MTI.ATTRIBUTE6,
9162         MTI.ATTRIBUTE7,
9163         MTI.ATTRIBUTE8,
9164         MTI.ATTRIBUTE9,
9165         MTI.ATTRIBUTE10,
9166         MTI.ATTRIBUTE11,
9167         MTI.ATTRIBUTE12,
9168         MTI.ATTRIBUTE13,
9169         MTI.ATTRIBUTE14,
9170         MTI.ATTRIBUTE15,
9171         MTI.MOVEMENT_ID,
9172         MTI.SOURCE_PROJECT_ID,
9173         MTI.SOURCE_TASK_ID,
9174         MTI.EXPENDITURE_TYPE,
9175         MTI.PA_EXPENDITURE_ORG_ID,
9176         MTI.PROJECT_ID,
9177         MTI.TASK_ID,
9178         MTI.TO_PROJECT_ID,
9179         MTI.TO_TASK_ID,
9180         'Y',
9181         NVL(MTI.FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
9182         MTI.TRANSFER_PERCENTAGE,
9183         MTI.MATERIAL_ACCOUNT,
9184         MTI.MATERIAL_OVERHEAD_ACCOUNT,
9185         MTI.RESOURCE_ACCOUNT,
9186         MTI.OUTSIDE_PROCESSING_ACCOUNT,
9187         MTI.OVERHEAD_ACCOUNT,
9188         MTI.COST_GROUP_ID,
9189         MTI.FLOW_SCHEDULE,
9190         MTI.QA_COLLECTION_ID,
9191         MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9192         MTI.OVERCOMPLETION_PRIMARY_QTY,
9193         MTI.OVERCOMPLETION_TRANSACTION_ID,
9194         MTI.END_ITEM_UNIT_NUMBER,
9195         BOM.COMMON_BILL_SEQUENCE_ID,
9196         BOR.COMMON_ROUTING_SEQUENCE_ID,
9197         ORG_COST_GROUP_ID,               /* PCST */
9198         COST_TYPE_ID,                    /* PCST */
9199         MTI.LPN_ID,
9200         MTI.CONTENT_LPN_ID,
9201         MTI.TRANSFER_LPN_ID,
9202         MTI.ORGANIZATION_TYPE,
9203         MTI.TRANSFER_ORGANIZATION_TYPE,
9204         MTI.OWNING_ORGANIZATION_ID,
9205         MTI.OWNING_TP_TYPE,
9206         MTI.XFR_OWNING_ORGANIZATION_ID,
9207         MTI.TRANSFER_OWNING_TP_TYPE,
9208         MTI.PLANNING_ORGANIZATION_ID,
9209         MTI.PLANNING_TP_TYPE,
9210         MTI.XFR_PLANNING_ORGANIZATION_ID,
9211         MTI.TRANSFER_PLANNING_TP_TYPE,
9212         MTI.TRANSACTION_BATCH_ID,
9213         MTI.TRANSACTION_BATCH_SEQ,
9214         MTI.TRANSFER_COST_GROUP_ID,
9215         Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9216 -- start of fix for eam
9217 -- added following 4 columns
9218         MTI.REBUILD_ITEM_ID,
9219         MTI.REBUILD_ACTIVITY_ID,
9220         MTI.REBUILD_SERIAL_NUMBER,
9221         MTI.rebuild_job_name,
9222           -- end of fix for eam
9223           mti.kanban_card_id,
9224           mti.accounting_class,--J dev (class_code in mmtt)
9225           mti.scheduled_flag,--J dev
9226           mti.schedule_number,--J dev
9227           mti.routing_revision_date,--J dev
9228           mti.move_transaction_id,--J dev
9229           mti.wip_supply_type,--J-dev
9230           mti.build_sequence,--J dev
9231           mti.bom_revision,--J dev
9232           mti.routing_revision,--J dev
9233           mti.bom_revision_date,--J dev
9234           mti.alternate_bom_designator,--J dev
9235           mti.alternate_routing_designator, --J dev
9236           mti.SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi
9237           mti.SECONDARY_UOM_CODE,              -- INVCONV fabdi
9238     mti.RELIEVE_RESERVATIONS_FLAG,      /*** {{ R12 Enhanced reservations code changes ***/
9239     mti.RELIEVE_HIGH_LEVEL_RSV_FLAG,    /*** {{ R12 Enhanced reservations code changes ***/
9240     mti.TRANSFER_PRICE                  -- INVCONV umoogala  For Process-Discrete Transfer Enh.
9241         FROM MTL_TRANSACTIONS_INTERFACE MTI,
9242              BOM_BILL_OF_MATERIALS BOM,
9243              BOM_OPERATIONAL_ROUTINGS BOR
9244         WHERE TRANSACTION_HEADER_ID = p_header_id
9245         /*WHERE MTI.ROWID = p_rowid*/--J-dev
9246         AND PROCESS_FLAG = 1
9247         AND TRANSACTION_ACTION_ID IN (30,31, 32) /* CFM Scrap Transactions */
9248         AND BOM.ASSEMBLY_ITEM_ID(+) = MTI.INVENTORY_ITEM_ID
9249         AND BOM.ORGANIZATION_ID(+) = MTI.ORGANIZATION_ID
9250         AND ((BOM.ALTERNATE_BOM_DESIGNATOR is null AND
9251               MTI.ALTERNATE_BOM_DESIGNATOR is null) OR
9252              (BOM.ALTERNATE_BOM_DESIGNATOR = MTI.ALTERNATE_BOM_DESIGNATOR))
9253         AND BOR.ASSEMBLY_ITEM_ID(+) = MTI.INVENTORY_ITEM_ID
9254         AND BOR.ORGANIZATION_ID(+) = MTI.ORGANIZATION_ID
9255         AND ((BOR.ALTERNATE_ROUTING_DESIGNATOR is null AND
9256               MTI.ALTERNATE_ROUTING_DESIGNATOR is null) OR
9257              (BOR.ALTERNATE_ROUTING_DESIGNATOR = MTI.ALTERNATE_ROUTING_DESIGNATOR));
9258 
9259 
9260               --J-dev IF WIP J is installed, directly copy all records for
9261               --action 1, 27, 33, 34. The parnet will be in MTI and not in
9262               --MMTT
9263               --In case for I, use the current statement.
9264 
9265               IF (wip_constants.DMF_PATCHSET_LEVEL>= wip_constants.DMF_PATCHSET_J_VALUE) THEN
9266                  INSERT INTO mtl_material_transactions_temp
9267                    (
9268                     TRANSACTION_HEADER_ID,
9269                     TRANSACTION_TEMP_ID,
9270                     SOURCE_CODE,
9271                     SOURCE_LINE_ID,
9272                     PROCESS_FLAG,
9273                     CREATION_DATE,
9274                     CREATED_BY,
9275                     LAST_UPDATE_DATE,
9276                     LAST_UPDATED_BY,
9277                     LAST_UPDATE_LOGIN,
9278                     PROGRAM_ID,
9279                     PROGRAM_UPDATE_DATE,
9280                     PROGRAM_APPLICATION_ID,
9281                     REQUEST_ID,
9282                     ORGANIZATION_ID,
9283                     SUBINVENTORY_CODE,
9284                     LOCATOR_ID,
9285                     INVENTORY_ITEM_ID,
9286                     REVISION,
9287                     TRANSACTION_TYPE_ID,
9288                     TRANSACTION_ACTION_ID,
9289                     TRANSACTION_SOURCE_TYPE_ID,
9290                     TRANSACTION_SOURCE_ID,
9291                     TRANSACTION_SOURCE_NAME,
9292                     TRANSACTION_REFERENCE,
9293                     REASON_ID,
9294                     TRANSACTION_DATE,
9295                     ACCT_PERIOD_ID,
9296                     TRANSACTION_QUANTITY,
9297                     TRANSACTION_UOM,
9298                     PRIMARY_QUANTITY,
9299                     TRANSACTION_COST,
9300                     DISTRIBUTION_ACCOUNT_ID,
9301                     TRANSFER_SUBINVENTORY,
9302                     TRANSFER_ORGANIZATION,
9303                     TRANSFER_TO_LOCATION,
9304                     SHIPMENT_NUMBER,
9305                     TRANSPORTATION_COST,
9306                     TRANSFER_COST,
9307                     TRANSPORTATION_ACCOUNT,
9308                     FREIGHT_CODE,
9309                    CONTAINERS,
9310                    WAYBILL_AIRBILL,
9311                    EXPECTED_ARRIVAL_DATE,
9312                    CURRENCY_CODE,
9313                    CURRENCY_CONVERSION_DATE,
9314                    CURRENCY_CONVERSION_TYPE,
9315                    CURRENCY_CONVERSION_RATE,
9316                    NEW_AVERAGE_COST,
9317                    VALUE_CHANGE,
9318                    PERCENTAGE_CHANGE,
9319                    DEMAND_ID,
9320                    DEMAND_SOURCE_HEADER_ID,
9321                    DEMAND_SOURCE_LINE,
9322                    DEMAND_SOURCE_DELIVERY,
9323                    DEMAND_CLASS,
9324                    CUSTOMER_SHIP_ID,
9325                    TRX_SOURCE_DELIVERY_ID,
9326                    TRX_SOURCE_LINE_ID,
9327                    PICKING_LINE_ID,
9328                    REQUIRED_FLAG,
9329                    NEGATIVE_REQ_FLAG,
9330                    REPETITIVE_LINE_ID,
9331                    PRIMARY_SWITCH,
9332                    OPERATION_SEQ_NUM,
9333                    SETUP_TEARDOWN_CODE,
9334                    SCHEDULE_UPDATE_CODE,
9335                    DEPARTMENT_ID,
9336                    EMPLOYEE_CODE,
9337                    SCHEDULE_ID,
9338                    WIP_ENTITY_TYPE,
9339                    ENCUMBRANCE_AMOUNT,
9340                    ENCUMBRANCE_ACCOUNT,
9341                    USSGL_TRANSACTION_CODE,
9342                    SHIPPABLE_FLAG,
9343                    REQUISITION_LINE_ID,
9344                    REQUISITION_DISTRIBUTION_ID,
9345                    SHIP_TO_LOCATION,
9346                    COMPLETION_TRANSACTION_ID,
9347                    ATTRIBUTE_CATEGORY,
9348                    ATTRIBUTE1,
9349                    ATTRIBUTE2,
9350                    ATTRIBUTE3,
9351                    ATTRIBUTE4,
9352                    ATTRIBUTE5,
9353                    ATTRIBUTE6,
9354                    ATTRIBUTE7,
9355                    ATTRIBUTE8,
9356                    ATTRIBUTE9,
9357                    ATTRIBUTE10,
9358                    ATTRIBUTE11,
9359                    ATTRIBUTE12,
9360                    ATTRIBUTE13,
9361                    ATTRIBUTE14,
9362                    ATTRIBUTE15,
9363                    MOVEMENT_ID,
9364                    SOURCE_PROJECT_ID,
9365                    SOURCE_TASK_ID,
9366                    EXPENDITURE_TYPE,
9367                    PA_EXPENDITURE_ORG_ID,
9368                    PROJECT_ID,
9369                    TASK_ID,
9370                    TO_PROJECT_ID,
9371                    TO_TASK_ID,
9372                    POSTING_FLAG,
9373                    FINAL_COMPLETION_FLAG,
9374                    TRANSFER_PERCENTAGE,
9375                    MATERIAL_ACCOUNT,
9376                    MATERIAL_OVERHEAD_ACCOUNT,
9377                    RESOURCE_ACCOUNT,
9378                    OUTSIDE_PROCESSING_ACCOUNT,
9379                    OVERHEAD_ACCOUNT,
9380                    COST_GROUP_ID,
9381                    FLOW_SCHEDULE,
9382                    QA_COLLECTION_ID,
9383                    OVERCOMPLETION_TRANSACTION_QTY, -- Overcompletion Transactions --
9384                    OVERCOMPLETION_PRIMARY_QTY,
9385                    OVERCOMPLETION_TRANSACTION_ID,
9386                    END_ITEM_UNIT_NUMBER,
9387                    ORG_COST_GROUP_ID,   -- PCST --
9388                    COST_TYPE_ID,         /* PCST */
9389                    LPN_ID,
9390                    CONTENT_LPN_ID,
9391                    transfer_lpn_id,
9392                    organization_type,
9393                    transfer_organization_type,
9394                    owning_organization_id,
9395                    owning_tp_type,
9396                    xfr_owning_organization_id,
9397                    transfer_owning_tp_type,
9398                    planning_organization_id,
9399                    planning_tp_type,
9400                    xfr_planning_organization_id,
9401                    TRANSFER_PLANNING_TP_TYPE,
9402                    TRANSACTION_BATCH_ID,
9403                    TRANSACTION_BATCH_SEQ,
9404                    TRANSFER_COST_GROUP_ID,
9405                    TRANSACTION_MODE,
9406                    -- start of fix for eam
9407                    -- added following 4 columns
9408                    REBUILD_ITEM_ID,
9409                    REBUILD_ACTIVITY_ID,
9410                    REBUILD_SERIAL_NUMBER,
9411                    rebuild_job_name,
9412                    kanban_card_id,
9413                    class_code,--J dev (class_code in mmtt)
9414                    scheduled_flag,--J dev
9415                    schedule_number,--J dev
9416                    routing_revision_date,--J dev
9417                    move_transaction_id,--J dev
9418                    wip_supply_type,
9419                    build_sequence,--J dev
9420                    bom_revision,--J dev
9421                    routing_revision,--J dev
9422                    bom_revision_date,--J dev
9423                    alternate_bom_designator,--J dev
9424                    alternate_routing_designator , -- end of fix for eam
9425                    SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi start
9426                    SECONDARY_UOM_CODE,              -- INVCONV fabdi end
9427        RELIEVE_RESERVATIONS_FLAG,       /*** {{ R12 Enhanced reservations code changes ***/
9428        RELIEVE_HIGH_LEVEL_RSV_FLAG,     /*** {{ R12 Enhanced reservations code changes ***/
9429        TRANSFER_PRICE                   -- INVCONV umoogala  For Process-Discrete Transfer Enh.
9430                    )
9431                    SELECT
9432                    MTI.TRANSACTION_HEADER_ID,
9433                    MTI.TRANSACTION_INTERFACE_ID,
9434                    MTI.SOURCE_CODE,
9435                    MTI.SOURCE_LINE_ID,
9436                    'Y',
9437                    SYSDATE,
9438                    MTI.CREATED_BY,
9439                    SYSDATE,
9440                    MTI.LAST_UPDATED_BY,
9441                    MTI.LAST_UPDATE_LOGIN,
9442                    MTI.PROGRAM_ID,
9443                    SYSDATE,
9444                    MTI.PROGRAM_APPLICATION_ID,
9445                    MTI.REQUEST_ID,
9446                    MTI.ORGANIZATION_ID,
9447                    MTI.SUBINVENTORY_CODE,
9448                    MTI.LOCATOR_ID,
9449                    MTI.INVENTORY_ITEM_ID,
9450                    MTI.REVISION,
9451                    MTI.TRANSACTION_TYPE_ID,
9452                    MTI.TRANSACTION_ACTION_ID,
9453                    MTI.TRANSACTION_SOURCE_TYPE_ID,
9454                    MTI.TRANSACTION_SOURCE_ID,
9455                    MTI.TRANSACTION_SOURCE_NAME,
9456                    MTI.TRANSACTION_REFERENCE,
9457                    MTI.REASON_ID,
9458                    MTI.TRANSACTION_DATE,
9459                    MTI.ACCT_PERIOD_ID,
9460                    MTI.TRANSACTION_QUANTITY,
9461                    MTI.TRANSACTION_UOM,
9462                    MTI.PRIMARY_QUANTITY,
9463                    MTI.TRANSACTION_COST,
9464                    MTI.DISTRIBUTION_ACCOUNT_ID,
9465                    MTI.TRANSFER_SUBINVENTORY,
9466                    MTI.TRANSFER_ORGANIZATION,
9467                    MTI.TRANSFER_LOCATOR,
9468                    MTI.SHIPMENT_NUMBER,
9469                    MTI.TRANSPORTATION_COST,
9470                    MTI.TRANSFER_COST,
9471                    MTI.TRANSPORTATION_ACCOUNT,
9472                    MTI.FREIGHT_CODE,
9473                    MTI.CONTAINERS,
9474                    MTI.WAYBILL_AIRBILL,
9475                    MTI.EXPECTED_ARRIVAL_DATE,
9476                    MTI.CURRENCY_CODE,
9477                    MTI.CURRENCY_CONVERSION_DATE,
9478                    MTI.CURRENCY_CONVERSION_TYPE,
9479                    MTI.CURRENCY_CONVERSION_RATE,
9480                    MTI.NEW_AVERAGE_COST,
9481                    MTI.VALUE_CHANGE,
9482                    MTI.PERCENTAGE_CHANGE,
9483                    MTI.DEMAND_ID,
9484                    MTI.DEMAND_SOURCE_HEADER_ID,
9485                    MTI.DEMAND_SOURCE_LINE,
9486                    MTI.DEMAND_SOURCE_DELIVERY,
9487                    MTI.DEMAND_CLASS,
9488                    MTI.CUSTOMER_SHIP_ID,
9489                    MTI.TRX_SOURCE_DELIVERY_ID,
9490                    MTI.TRX_SOURCE_LINE_ID,
9491                    MTI.PICKING_LINE_ID,
9492                    MTI.REQUIRED_FLAG,
9493                    MTI.NEGATIVE_REQ_FLAG,
9494                    MTI.REPETITIVE_LINE_ID,
9495                    MTI.PRIMARY_SWITCH,
9496                    MTI.OPERATION_SEQ_NUM,
9497                    MTI.SETUP_TEARDOWN_CODE,
9498                    MTI.SCHEDULE_UPDATE_CODE,
9499                    MTI.DEPARTMENT_ID,
9500                    MTI.EMPLOYEE_CODE,
9501                    MTI.SCHEDULE_ID,
9502                    MTI.WIP_ENTITY_TYPE,
9503                    MTI.ENCUMBRANCE_AMOUNT,
9504                    MTI.ENCUMBRANCE_ACCOUNT,
9505                    MTI.USSGL_TRANSACTION_CODE,
9506                    MTI.SHIPPABLE_FLAG,
9507                    MTI.REQUISITION_LINE_ID,
9508                    MTI.REQUISITION_DISTRIBUTION_ID,
9509                    MTI.SHIP_TO_LOCATION_ID,
9510                    MTI.COMPLETION_TRANSACTION_ID,
9511                    MTI.ATTRIBUTE_CATEGORY,
9512                    MTI.ATTRIBUTE1,
9513                    MTI.ATTRIBUTE2,
9514                    MTI.ATTRIBUTE3,
9515                    MTI.ATTRIBUTE4,
9516                    MTI.ATTRIBUTE5,
9517                    MTI.ATTRIBUTE6,
9518                    MTI.ATTRIBUTE7,
9519                    MTI.ATTRIBUTE8,
9520                    MTI.ATTRIBUTE9,
9521                    MTI.ATTRIBUTE10,
9522                    MTI.ATTRIBUTE11,
9523                    MTI.ATTRIBUTE12,
9524                    MTI.ATTRIBUTE13,
9525                    MTI.ATTRIBUTE14,
9526                    MTI.ATTRIBUTE15,
9527                    MTI.MOVEMENT_ID,
9528                    MTI.SOURCE_PROJECT_ID,
9529                    MTI.SOURCE_TASK_ID,
9530                    MTI.EXPENDITURE_TYPE,
9531                    MTI.PA_EXPENDITURE_ORG_ID,
9532                    MTI.PROJECT_ID,
9533                    MTI.TASK_ID,
9534                    MTI.TO_PROJECT_ID,
9535                    MTI.TO_TASK_ID,
9536                    'Y',
9537                    NVL(MTI.FINAL_COMPLETION_FLAG,Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
9538                    MTI.TRANSFER_PERCENTAGE,
9539                    MTI.MATERIAL_ACCOUNT,
9540                    MTI.MATERIAL_OVERHEAD_ACCOUNT,
9541                    MTI.RESOURCE_ACCOUNT,
9542                    MTI.OUTSIDE_PROCESSING_ACCOUNT,
9543                    MTI.OVERHEAD_ACCOUNT,
9544                    MTI.COST_GROUP_ID,
9545                    MTI.FLOW_SCHEDULE,
9546                    MTI.QA_COLLECTION_ID,
9547                    MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9548                    MTI.OVERCOMPLETION_PRIMARY_QTY,
9549                    MTI.OVERCOMPLETION_TRANSACTION_ID,
9550                    MTI.END_ITEM_UNIT_NUMBER,
9551                    MTI.ORG_COST_GROUP_ID,  /* PCST */
9552                    MTI.COST_TYPE_ID,        /* PCST */
9553                    MTI.LPN_ID,
9554                    MTI.CONTENT_LPN_ID,
9555                    MTI.TRANSFER_LPN_ID  ,      /* PCST */
9556                    mti.organization_type,
9557                    mti.transfer_organization_type,
9558                    mti.owning_organization_id,
9559                    mti.owning_tp_type,
9560                    mti.xfr_owning_organization_id,
9561                    mti.transfer_owning_tp_type,
9562                    mti.planning_organization_id,
9563                    mti.planning_tp_type,
9564                    mti.xfr_planning_organization_id,
9565                    mti.TRANSFER_PLANNING_TP_TYPE,
9566                    MTI.TRANSACTION_BATCH_ID,
9567                    MTI.TRANSACTION_BATCH_SEQ,
9568                    MTI.TRANSFER_COST_GROUP_ID,
9569                    Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9570                    -- start of fix for eam
9571                    -- added following 4 columns
9572                    MTI.REBUILD_ITEM_ID,
9573                    MTI.REBUILD_ACTIVITY_ID,
9574                    MTI.REBUILD_SERIAL_NUMBER,
9575                    MTI.rebuild_job_name,
9576                    -- end of fix for eam
9577                    mti.kanban_card_id,
9578                    mti.accounting_class,--J dev (class_code in mmtt)
9579                    mti.scheduled_flag,--J dev
9580                    mti.schedule_number,--J dev
9581                    mti.routing_revision_date,--J dev
9582                    mti.move_transaction_id,--J de
9583                    mti.wip_supply_type,
9584                    mti.build_sequence,--J dev
9585                    mti.bom_revision,--J dev
9586                    mti.routing_revision,--J dev
9587                    mti.bom_revision_date,--J dev
9588                    mti.alternate_bom_designator,--J dev
9589                    mti.alternate_routing_designator ,
9590                    mti.SECONDARY_TRANSACTION_QUANTITY , -- INVCONV fabdi start
9591                    mti.SECONDARY_UOM_CODE, -- INVCONV fabdi end
9592        mti.RELIEVE_RESERVATIONS_FLAG,       /*** {{ R12 Enhanced reservations code changes ***/
9593        mti.RELIEVE_HIGH_LEVEL_RSV_FLAG,     /*** {{ R12 Enhanced reservations code changes ***/
9594        mti.TRANSFER_PRICE                   -- INVCONV umoogala  For Process-Discrete Transfer Enh.
9595                    FROM MTL_TRANSACTIONS_INTERFACE MTI
9596                    WHERE MTI.TRANSACTION_HEADER_ID = p_header_id
9597                    and MTI.PROCESS_FLAG = 1
9598                    and MTI.TRANSACTION_ACTION_ID IN (1, 27, 33, 34) ;
9599 
9600                ELSE
9601 
9602                  INSERT INTO MTL_MATERIAL_TRANSACTIONS_TEMP (
9603                                                              TRANSACTION_HEADER_ID,
9604                                                              TRANSACTION_TEMP_ID,
9605                                                              SOURCE_CODE,
9606                                                              SOURCE_LINE_ID,
9607                                                              PROCESS_FLAG,
9608                                                              CREATION_DATE,
9609                                                              CREATED_BY,
9610                                                              LAST_UPDATE_DATE,
9611                                                              LAST_UPDATED_BY,
9612                                                              LAST_UPDATE_LOGIN,
9613                                                              PROGRAM_ID,
9614                                                              PROGRAM_UPDATE_DATE,
9615                                                              PROGRAM_APPLICATION_ID,
9616                                                              REQUEST_ID,
9617                                                              ORGANIZATION_ID,
9618                                                              SUBINVENTORY_CODE,
9619                                                              LOCATOR_ID,
9620                                                              INVENTORY_ITEM_ID,
9621                                                              REVISION,
9622                                                              TRANSACTION_TYPE_ID,
9623                                                              TRANSACTION_ACTION_ID,
9624                                                              TRANSACTION_SOURCE_TYPE_ID,
9625                                                              TRANSACTION_SOURCE_ID,
9626                                                              TRANSACTION_SOURCE_NAME,
9627                                                              TRANSACTION_REFERENCE,
9628                                                              REASON_ID,
9629         TRANSACTION_DATE,
9630         ACCT_PERIOD_ID,
9631         TRANSACTION_QUANTITY,
9632         TRANSACTION_UOM,
9633         PRIMARY_QUANTITY,
9634         TRANSACTION_COST,
9635         DISTRIBUTION_ACCOUNT_ID,
9636         TRANSFER_SUBINVENTORY,
9637         TRANSFER_ORGANIZATION,
9638         TRANSFER_TO_LOCATION,
9639         SHIPMENT_NUMBER,
9640         TRANSPORTATION_COST,
9641         TRANSFER_COST,
9642         TRANSPORTATION_ACCOUNT,
9643         FREIGHT_CODE,
9644         CONTAINERS,
9645         WAYBILL_AIRBILL,
9646         EXPECTED_ARRIVAL_DATE,
9647         CURRENCY_CODE,
9648         CURRENCY_CONVERSION_DATE,
9649         CURRENCY_CONVERSION_TYPE,
9650         CURRENCY_CONVERSION_RATE,
9651         NEW_AVERAGE_COST,
9652         VALUE_CHANGE,
9653         PERCENTAGE_CHANGE,
9654         DEMAND_ID,
9655         DEMAND_SOURCE_HEADER_ID,
9656         DEMAND_SOURCE_LINE,
9657         DEMAND_SOURCE_DELIVERY,
9658         DEMAND_CLASS,
9659         CUSTOMER_SHIP_ID,
9660         TRX_SOURCE_DELIVERY_ID,
9661         TRX_SOURCE_LINE_ID,
9662         PICKING_LINE_ID,
9663         REQUIRED_FLAG,
9664         NEGATIVE_REQ_FLAG,
9665         REPETITIVE_LINE_ID,
9666         PRIMARY_SWITCH,
9667         OPERATION_SEQ_NUM,
9668         SETUP_TEARDOWN_CODE,
9669         SCHEDULE_UPDATE_CODE,
9670         DEPARTMENT_ID,
9671         EMPLOYEE_CODE,
9672         SCHEDULE_ID,
9673         WIP_ENTITY_TYPE,
9674         ENCUMBRANCE_AMOUNT,
9675         ENCUMBRANCE_ACCOUNT,
9676         USSGL_TRANSACTION_CODE,
9677         SHIPPABLE_FLAG,
9678         REQUISITION_LINE_ID,
9679         REQUISITION_DISTRIBUTION_ID,
9680         SHIP_TO_LOCATION,
9681         COMPLETION_TRANSACTION_ID,
9682         ATTRIBUTE_CATEGORY,
9683         ATTRIBUTE1,
9684         ATTRIBUTE2,
9685         ATTRIBUTE3,
9686         ATTRIBUTE4,
9687         ATTRIBUTE5,
9688         ATTRIBUTE6,
9689         ATTRIBUTE7,
9690         ATTRIBUTE8,
9691         ATTRIBUTE9,
9692         ATTRIBUTE10,
9693         ATTRIBUTE11,
9694         ATTRIBUTE12,
9695         ATTRIBUTE13,
9696         ATTRIBUTE14,
9697         ATTRIBUTE15,
9698         MOVEMENT_ID,
9699         SOURCE_PROJECT_ID,
9700         SOURCE_TASK_ID,
9701         EXPENDITURE_TYPE,
9702         PA_EXPENDITURE_ORG_ID,
9703         PROJECT_ID,
9704         TASK_ID,
9705         TO_PROJECT_ID,
9706         TO_TASK_ID,
9707         POSTING_FLAG,
9708         FINAL_COMPLETION_FLAG,
9709         TRANSFER_PERCENTAGE,
9710         MATERIAL_ACCOUNT,
9711         MATERIAL_OVERHEAD_ACCOUNT,
9712         RESOURCE_ACCOUNT,
9713         OUTSIDE_PROCESSING_ACCOUNT,
9714         OVERHEAD_ACCOUNT,
9715         COST_GROUP_ID,
9716         FLOW_SCHEDULE,
9717         QA_COLLECTION_ID,
9718         OVERCOMPLETION_TRANSACTION_QTY, -- Overcompletion Transactions --
9719         OVERCOMPLETION_PRIMARY_QTY,
9720         OVERCOMPLETION_TRANSACTION_ID,
9721         END_ITEM_UNIT_NUMBER,
9722         ORG_COST_GROUP_ID,   -- PCST --
9723         COST_TYPE_ID,         /* PCST */
9724         LPN_ID,
9725         CONTENT_LPN_ID,
9726         transfer_lpn_id,
9727         organization_type,
9728         transfer_organization_type,
9729         owning_organization_id,
9730         owning_tp_type,
9731         xfr_owning_organization_id,
9732         transfer_owning_tp_type,
9733         planning_organization_id,
9734         planning_tp_type,
9735         xfr_planning_organization_id,
9736         TRANSFER_PLANNING_TP_TYPE,
9737         TRANSACTION_BATCH_ID,
9738         TRANSACTION_BATCH_SEQ,
9739         TRANSFER_COST_GROUP_ID,
9740         TRANSACTION_MODE,
9741 -- start of fix for eam
9742 -- added following 4 columns
9743         REBUILD_ITEM_ID,
9744         REBUILD_ACTIVITY_ID,
9745         REBUILD_SERIAL_NUMBER,
9746           rebuild_job_name,
9747                    kanban_card_id,
9748                    build_sequence,--J dev
9749           bom_revision,--J dev
9750           routing_revision,--J dev
9751           bom_revision_date,--J dev
9752           alternate_bom_designator,--J dev
9753           alternate_routing_designator,-- end of fix for eam
9754           SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi
9755           SECONDARY_UOM_CODE, -- INVCONV fabdi end
9756     RELIEVE_RESERVATIONS_FLAG,      /*** {{ R12 Enhanced reservations code changes ***/
9757     RELIEVE_HIGH_LEVEL_RSV_FLAG,    /*** {{ R12 Enhanced reservations code changes ***/
9758     TRANSFER_PRICE                  -- INVCONV umoogala  For Process-Discrete Transfer Enh.
9759           )
9760     SELECT
9761         MTI.TRANSACTION_HEADER_ID,
9762         MTI.TRANSACTION_INTERFACE_ID,
9763         MTI.SOURCE_CODE,
9764         MTI.SOURCE_LINE_ID,
9765         'Y',
9766         SYSDATE,
9767         MTI.CREATED_BY,
9768         SYSDATE,
9769         MTI.LAST_UPDATED_BY,
9770         MTI.LAST_UPDATE_LOGIN,
9771         MTI.PROGRAM_ID,
9772         SYSDATE,
9773         MTI.PROGRAM_APPLICATION_ID,
9774         MTI.REQUEST_ID,
9775         MTI.ORGANIZATION_ID,
9776         MTI.SUBINVENTORY_CODE,
9777         MTI.LOCATOR_ID,
9778         MTI.INVENTORY_ITEM_ID,
9779         MTI.REVISION,
9780         MTI.TRANSACTION_TYPE_ID,
9781         MTI.TRANSACTION_ACTION_ID,
9782         MTI.TRANSACTION_SOURCE_TYPE_ID,
9783         MTI.TRANSACTION_SOURCE_ID,
9784         MTI.TRANSACTION_SOURCE_NAME,
9785         MTI.TRANSACTION_REFERENCE,
9786         MTI.REASON_ID,
9787         MTI.TRANSACTION_DATE,
9788         MTI.ACCT_PERIOD_ID,
9789         MTI.TRANSACTION_QUANTITY,
9790         MTI.TRANSACTION_UOM,
9791         MTI.PRIMARY_QUANTITY,
9792         MTI.TRANSACTION_COST,
9793         MTI.DISTRIBUTION_ACCOUNT_ID,
9794         MTI.TRANSFER_SUBINVENTORY,
9795         MTI.TRANSFER_ORGANIZATION,
9796         MTI.TRANSFER_LOCATOR,
9797         MTI.SHIPMENT_NUMBER,
9798         MTI.TRANSPORTATION_COST,
9799         MTI.TRANSFER_COST,
9800         MTI.TRANSPORTATION_ACCOUNT,
9801         MTI.FREIGHT_CODE,
9802         MTI.CONTAINERS,
9803         MTI.WAYBILL_AIRBILL,
9804         MTI.EXPECTED_ARRIVAL_DATE,
9805         MTI.CURRENCY_CODE,
9806         MTI.CURRENCY_CONVERSION_DATE,
9807         MTI.CURRENCY_CONVERSION_TYPE,
9808         MTI.CURRENCY_CONVERSION_RATE,
9809         MTI.NEW_AVERAGE_COST,
9810         MTI.VALUE_CHANGE,
9811         MTI.PERCENTAGE_CHANGE,
9812         MTI.DEMAND_ID,
9813         MTI.DEMAND_SOURCE_HEADER_ID,
9814         MTI.DEMAND_SOURCE_LINE,
9815         MTI.DEMAND_SOURCE_DELIVERY,
9816         MTI.DEMAND_CLASS,
9817         MTI.CUSTOMER_SHIP_ID,
9818         MTI.TRX_SOURCE_DELIVERY_ID,
9819         MTI.TRX_SOURCE_LINE_ID,
9820         MTI.PICKING_LINE_ID,
9821         MTI.REQUIRED_FLAG,
9822         MTI.NEGATIVE_REQ_FLAG,
9823         MTI.REPETITIVE_LINE_ID,
9824         MTI.PRIMARY_SWITCH,
9825         MTI.OPERATION_SEQ_NUM,
9826         MTI.SETUP_TEARDOWN_CODE,
9827         MTI.SCHEDULE_UPDATE_CODE,
9828         MTI.DEPARTMENT_ID,
9829         MTI.EMPLOYEE_CODE,
9830         MTI.SCHEDULE_ID,
9831         MTI.WIP_ENTITY_TYPE,
9832         MTI.ENCUMBRANCE_AMOUNT,
9833         MTI.ENCUMBRANCE_ACCOUNT,
9834         MTI.USSGL_TRANSACTION_CODE,
9835         MTI.SHIPPABLE_FLAG,
9836         MTI.REQUISITION_LINE_ID,
9837         MTI.REQUISITION_DISTRIBUTION_ID,
9838         MTI.SHIP_TO_LOCATION_ID,
9839         MMTT.COMPLETION_TRANSACTION_ID,
9840         MTI.ATTRIBUTE_CATEGORY,
9841         MTI.ATTRIBUTE1,
9842         MTI.ATTRIBUTE2,
9843         MTI.ATTRIBUTE3,
9844         MTI.ATTRIBUTE4,
9845         MTI.ATTRIBUTE5,
9846         MTI.ATTRIBUTE6,
9847         MTI.ATTRIBUTE7,
9848         MTI.ATTRIBUTE8,
9849         MTI.ATTRIBUTE9,
9850         MTI.ATTRIBUTE10,
9851         MTI.ATTRIBUTE11,
9852         MTI.ATTRIBUTE12,
9853         MTI.ATTRIBUTE13,
9854         MTI.ATTRIBUTE14,
9855         MTI.ATTRIBUTE15,
9856         MTI.MOVEMENT_ID,
9857         MTI.SOURCE_PROJECT_ID,
9858         MTI.SOURCE_TASK_ID,
9859         MTI.EXPENDITURE_TYPE,
9860         MTI.PA_EXPENDITURE_ORG_ID,
9861         MTI.PROJECT_ID,
9862         MTI.TASK_ID,
9863         MTI.TO_PROJECT_ID,
9864         MTI.TO_TASK_ID,
9865         'Y',
9866          NVL(MTI.FINAL_COMPLETION_FLAG,
9867              Decode(l_patchset_j,1,MTI.FINAL_COMPLETION_FLAG,'N')),
9868         MTI.TRANSFER_PERCENTAGE,
9869         MTI.MATERIAL_ACCOUNT,
9870         MTI.MATERIAL_OVERHEAD_ACCOUNT,
9871         MTI.RESOURCE_ACCOUNT,
9872         MTI.OUTSIDE_PROCESSING_ACCOUNT,
9873         MTI.OVERHEAD_ACCOUNT,
9874         MTI.COST_GROUP_ID,
9875         MTI.FLOW_SCHEDULE,
9876         MTI.QA_COLLECTION_ID,
9877         MTI.OVERCOMPLETION_TRANSACTION_QTY, /* Overcompletion Transactions */
9878         MTI.OVERCOMPLETION_PRIMARY_QTY,
9879         MTI.OVERCOMPLETION_TRANSACTION_ID,
9880         MTI.END_ITEM_UNIT_NUMBER,
9881         MTI.ORG_COST_GROUP_ID,  /* PCST */
9882         MTI.COST_TYPE_ID,        /* PCST */
9883         MTI.LPN_ID,
9884         MTI.CONTENT_LPN_ID,
9885           MTI.TRANSFER_LPN_ID  ,      /* PCST */
9886           mti.organization_type,
9887           mti.transfer_organization_type,
9888           mti.owning_organization_id,
9889           mti.owning_tp_type,
9890           mti.xfr_owning_organization_id,
9891           mti.transfer_owning_tp_type,
9892           mti.planning_organization_id,
9893           mti.planning_tp_type,
9894           mti.xfr_planning_organization_id,
9895           mti.TRANSFER_PLANNING_TP_TYPE,
9896           MTI.TRANSACTION_BATCH_ID,
9897           MTI.TRANSACTION_BATCH_SEQ,
9898           MTI.TRANSFER_COST_GROUP_ID,
9899           Decode(p_validation_level,fnd_api.g_valid_level_none,mti.transaction_mode,INV_TXN_MANAGER_GRP.proc_mode_mti),
9900 -- start of fix for eam
9901 -- added following 4 columns
9902           MTI.REBUILD_ITEM_ID,
9903           MTI.REBUILD_ACTIVITY_ID,
9904           MTI.REBUILD_SERIAL_NUMBER,
9905           MTI.rebuild_job_name,
9906           -- end of fix for eam
9907                    mti.kanban_card_id,
9908                    mti.build_sequence,--J dev
9909           mti.bom_revision,--J dev
9910           mti.routing_revision,--J dev
9911           mti.bom_revision_date,--J dev
9912           mti.alternate_bom_designator,--J dev
9913           mti.alternate_routing_designator,
9914           mti.SECONDARY_TRANSACTION_QUANTITY, -- INVCONV fabdi
9915           mti.SECONDARY_UOM_CODE,             -- INVCONV fabdi end
9916     mti.RELIEVE_RESERVATIONS_FLAG,      /*** {{ R12 Enhanced reservations code changes ***/
9917     mti.RELIEVE_HIGH_LEVEL_RSV_FLAG,    /*** {{ R12 Enhanced reservations code changes ***/
9918     mti.TRANSFER_PRICE                  -- INVCONV umoogala  For Process-Discrete Transfer Enh.
9919         FROM MTL_TRANSACTIONS_INTERFACE MTI,
9920              MTL_MATERIAL_TRANSACTIONS_TEMP MMTT
9921         WHERE MTI.TRANSACTION_HEADER_ID = p_header_id
9922        /* WHERE MTI.ROWID = p_rowid J-dev*/
9923         and MTI.PROCESS_FLAG = 1
9924         and MTI.TRANSACTION_ACTION_ID IN (1, 27, 33, 34)
9925         and MTI.PARENT_ID = MMTT.TRANSACTION_TEMP_ID
9926         and MTI.TRANSACTION_HEADER_ID = MMTT.TRANSACTION_HEADER_ID;
9927               END IF;
9928      END IF;
9929     END IF;--J-dev
9930 
9931 
9932     IF (l_debug = 1) THEN
9933        inv_log_util.trace('going to insert lot'||p_header_id,'INV_TXN_MANAGER_GRP','9');
9934     END IF;
9935 
9936     /* Inserting LOT transactions */
9937         INSERT INTO MTL_TRANSACTION_LOTS_TEMP
9938             (TRANSACTION_TEMP_ID,
9939              LOT_NUMBER,
9940              LOT_EXPIRATION_DATE,
9941              LAST_UPDATED_BY,
9942              LAST_UPDATE_DATE,
9943              CREATION_DATE,
9944              CREATED_BY,
9945              LAST_UPDATE_LOGIN,
9946              PROGRAM_APPLICATION_ID,
9947              PROGRAM_ID,
9948              PROGRAM_UPDATE_DATE,
9949              REQUEST_ID,
9950              PRIMARY_QUANTITY,
9951              TRANSACTION_QUANTITY,
9952              serial_transaction_temp_id,
9953                    LOT_ATTRIBUTE_CATEGORY,   --Bug #3841935
9954              C_ATTRIBUTE1,
9955              C_ATTRIBUTE2,
9956              C_ATTRIBUTE3,
9957              C_ATTRIBUTE4,
9958              C_ATTRIBUTE5,
9959              C_ATTRIBUTE6,
9960              C_ATTRIBUTE7,
9961              C_ATTRIBUTE8,
9962              C_ATTRIBUTE9,
9963              C_ATTRIBUTE10,
9964              C_ATTRIBUTE11,
9965              C_ATTRIBUTE12,
9966              C_ATTRIBUTE13,
9967              C_ATTRIBUTE14,
9968              C_ATTRIBUTE15,
9969              C_ATTRIBUTE16,
9970              C_ATTRIBUTE17,
9971              C_ATTRIBUTE18,
9972              C_ATTRIBUTE19,
9973              C_ATTRIBUTE20,
9974              D_ATTRIBUTE1,
9975              D_ATTRIBUTE2,
9976              D_ATTRIBUTE3,
9977              D_ATTRIBUTE4,
9978              D_ATTRIBUTE5,
9979              D_ATTRIBUTE6,
9980              D_ATTRIBUTE7,
9981              D_ATTRIBUTE8,
9982              D_ATTRIBUTE9,
9983              D_ATTRIBUTE10,
9984              N_ATTRIBUTE1,
9985              N_ATTRIBUTE2,
9986              N_ATTRIBUTE3,
9987              N_ATTRIBUTE4,
9988              N_ATTRIBUTE5,
9989              N_ATTRIBUTE6,
9990              N_ATTRIBUTE7,
9991              N_ATTRIBUTE8,
9992              N_ATTRIBUTE9,
9993              n_attribute10,
9994              ATTRIBUTE1,
9995              ATTRIBUTE2,
9996              ATTRIBUTE3,
9997              ATTRIBUTE4,
9998              ATTRIBUTE5,
9999              ATTRIBUTE6,
10000              ATTRIBUTE7,
10001              ATTRIBUTE8,
10002              ATTRIBUTE9,
10003              ATTRIBUTE10,
10004              ATTRIBUTE11,
10005              ATTRIBUTE12,
10006              ATTRIBUTE13,
10007              ATTRIBUTE14,
10008              ATTRIBUTE15,
10009              ATTRIBUTE_CATEGORY ,
10010              group_header_id,--added for J
10011              DESCRIPTION,
10012              VENDOR_NAME,
10013              SUPPLIER_LOT_NUMBER,
10014              ORIGINATION_DATE,
10015              DATE_CODE,
10016              GRADE_CODE,
10017              CHANGE_DATE,
10018              MATURITY_DATE,
10019              STATUS_ID,
10020              RETEST_DATE,
10021              AGE,
10022              ITEM_SIZE,
10023              COLOR,
10024              VOLUME,
10025              VOLUME_UOM,
10026              PLACE_OF_ORIGIN,
10027              BEST_BY_DATE,
10028              LENGTH,
10029              LENGTH_UOM,
10030              RECYCLED_CONTENT,
10031              THICKNESS,
10032              THICKNESS_UOM,
10033              WIDTH,
10034              WIDTH_UOM,
10035              CURL_WRINKLE_FOLD,
10036              VENDOR_ID,
10037              TERRITORY_CODE,
10038              PARENT_LOT_NUMBER , -- INVCONV start fabdi
10039              ORIGINATION_TYPE  ,
10040              EXPIRATION_ACTION_DATE  ,
10041              EXPIRATION_ACTION_CODE,
10042              HOLD_DATE ,
10043              REASON_ID,
10044              SECONDARY_QUANTITY, -- INVCONV start fabdi
10045              parent_object_type,       --R12 Genealogy enhancements
10046              parent_object_id,         --R12 Genealogy enhancements
10047              parent_object_number,     --R12 Genealogy enhancements
10048              parent_item_id,           --R12 Genealogy enhancements
10049              parent_object_type2,      --R12 Genealogy enhancements
10050              parent_object_id2,        --R12 Genealogy enhancements
10051              parent_object_number2     --R12 Genealogy enhancements
10052             )
10053          SELECT
10054              TRANSACTION_INTERFACE_ID,
10055              ltrim(rtrim(LOT_NUMBER)),		/*Bug 6390860 added ltrim, rtrim*/
10056              LOT_EXPIRATION_DATE,
10057              LAST_UPDATED_BY,
10058              SYSDATE,
10059              SYSDATE,
10060              CREATED_BY,
10061              LAST_UPDATE_LOGIN,
10062              PROGRAM_APPLICATION_ID,
10063              PROGRAM_ID,
10064              SYSDATE,
10065              REQUEST_ID,
10066              PRIMARY_QUANTITY,
10067              TRANSACTION_QUANTITY,
10068              serial_transaction_temp_id,
10069              LOT_ATTRIBUTE_CATEGORY,
10070              C_ATTRIBUTE1,
10071              C_ATTRIBUTE2,
10072              C_ATTRIBUTE3,
10073              C_ATTRIBUTE4,
10074              C_ATTRIBUTE5,
10075              C_ATTRIBUTE6,
10076              C_ATTRIBUTE7,
10077              C_ATTRIBUTE8,
10078              C_ATTRIBUTE9,
10079              C_ATTRIBUTE10,
10080              C_ATTRIBUTE11,
10081              C_ATTRIBUTE12,
10082              C_ATTRIBUTE13,
10083              C_ATTRIBUTE14,
10084              C_ATTRIBUTE15,
10085              C_ATTRIBUTE16,
10086              C_ATTRIBUTE17,
10087              C_ATTRIBUTE18,
10088              C_ATTRIBUTE19,
10089              C_ATTRIBUTE20,
10090              D_ATTRIBUTE1,
10091              D_ATTRIBUTE2,
10092              D_ATTRIBUTE3,
10093              D_ATTRIBUTE4,
10094              D_ATTRIBUTE5,
10095              D_ATTRIBUTE6,
10096              D_ATTRIBUTE7,
10097              D_ATTRIBUTE8,
10098              D_ATTRIBUTE9,
10099              D_ATTRIBUTE10,
10100              N_ATTRIBUTE1,
10101              N_ATTRIBUTE2,
10102              N_ATTRIBUTE3,
10103              N_ATTRIBUTE4,
10104              N_ATTRIBUTE5,
10105              N_ATTRIBUTE6,
10106              N_ATTRIBUTE7,
10107              N_ATTRIBUTE8,
10108              N_ATTRIBUTE9,
10109              n_attribute10,
10110              ATTRIBUTE1,
10111              ATTRIBUTE2,
10112              ATTRIBUTE3,
10113              ATTRIBUTE4,
10114              ATTRIBUTE5,
10115              ATTRIBUTE6,
10116              ATTRIBUTE7,
10117              ATTRIBUTE8,
10118              ATTRIBUTE9,
10119              ATTRIBUTE10,
10120              ATTRIBUTE11,
10121              ATTRIBUTE12,
10122              ATTRIBUTE13,
10123              ATTRIBUTE14,
10124              ATTRIBUTE15,
10125              ATTRIBUTE_CATEGORY ,
10126              p_header_id ,--J dev corresponds to the header_id
10127              DESCRIPTION,
10128              VENDOR_NAME,
10129              SUPPLIER_LOT_NUMBER,
10130              ORIGINATION_DATE,
10131              DATE_CODE,
10132              GRADE_CODE,
10133              CHANGE_DATE,
10134              MATURITY_DATE,
10135              STATUS_ID,
10136              RETEST_DATE,
10137              AGE,
10138              ITEM_SIZE,
10139              COLOR,
10140              VOLUME,
10141              VOLUME_UOM,
10142              PLACE_OF_ORIGIN,
10143              BEST_BY_DATE,
10144              LENGTH,
10145              LENGTH_UOM,
10146              RECYCLED_CONTENT,
10147              THICKNESS,
10148              THICKNESS_UOM,
10149              WIDTH,
10150              WIDTH_UOM,
10151              CURL_WRINKLE_FOLD,
10152              VENDOR_ID,
10153              TERRITORY_CODE,
10154              PARENT_LOT_NUMBER , -- INVCONV start fabdi
10155              ORIGINATION_TYPE  ,
10156              EXPIRATION_ACTION_DATE  ,
10157              EXPIRATION_ACTION_CODE,
10158              HOLD_DATE ,
10159              REASON_ID,
10160              SECONDARY_TRANSACTION_QUANTITY,    -- INVCONV start fabdi
10161              parent_object_type,   --R12 Genealogy enhancements
10162              parent_object_id,   --R12 Genealogy enhancements
10163              parent_object_number,   --R12 Genealogy enhancements
10164              parent_item_id,   --R12 Genealogy enhancements
10165              parent_object_type2,   --R12 Genealogy enhancements
10166              parent_object_id2,   --R12 Genealogy enhancements
10167              parent_object_number2   --R12 Genealogy enhancements
10168         FROM MTL_TRANSACTION_LOTS_INTERFACE
10169        WHERE TRANSACTION_INTERFACE_ID IN (
10170              SELECT TRANSACTION_INTERFACE_ID
10171                FROM MTL_TRANSACTIONS_INTERFACE MTI
10172               WHERE mti.TRANSACTION_HEADER_ID = p_header_id
10173               /*WHERE MTI.ROWID = p_rowid J-dev*/
10174                 AND mti.TRANSACTION_INTERFACE_ID IS NOT NULL
10175                 AND mti.PROCESS_FLAG = 1
10176                 AND transaction_type_id NOT IN           /*OSFM Support for Lot Serialized Items*/
10177                         (inv_globals.g_type_inv_lot_split
10178                        , inv_globals.g_type_inv_lot_merge
10179                        , inv_globals.g_type_inv_lot_translate
10180                         ));
10181 
10182 
10183 
10184         INSERT INTO MTL_SERIAL_NUMBERS_TEMP
10185             (TRANSACTION_TEMP_ID,
10186              LAST_UPDATE_DATE,
10187              LAST_UPDATED_BY,
10188              CREATION_DATE,
10189              CREATED_BY,
10190              LAST_UPDATE_LOGIN,
10191              REQUEST_ID,
10192              PROGRAM_APPLICATION_ID,
10193              PROGRAM_ID,
10194              PROGRAM_UPDATE_DATE,
10195              VENDOR_SERIAL_NUMBER,
10196              VENDOR_LOT_NUMBER,
10197              FM_SERIAL_NUMBER,
10198              TO_SERIAL_NUMBER,
10199              parent_serial_number,
10200              SERIAL_ATTRIBUTE_CATEGORY,  --Bug #3841935
10201              C_ATTRIBUTE1,
10202              C_ATTRIBUTE2,
10203              C_ATTRIBUTE3,
10204              C_ATTRIBUTE4,
10205              C_ATTRIBUTE5,
10206              C_ATTRIBUTE6,
10207              C_ATTRIBUTE7,
10208              C_ATTRIBUTE8,
10209              C_ATTRIBUTE9,
10210              C_ATTRIBUTE10,
10211              C_ATTRIBUTE11,
10212              C_ATTRIBUTE12,
10213              C_ATTRIBUTE13,
10214              C_ATTRIBUTE14,
10215              C_ATTRIBUTE15,
10216              C_ATTRIBUTE16,
10217              C_ATTRIBUTE17,
10218              C_ATTRIBUTE18,
10219              C_ATTRIBUTE19,
10220              C_ATTRIBUTE20,
10221              D_ATTRIBUTE1,
10222              D_ATTRIBUTE2,
10223              D_ATTRIBUTE3,
10224              D_ATTRIBUTE4,
10225              D_ATTRIBUTE5,
10226              D_ATTRIBUTE6,
10227              D_ATTRIBUTE7,
10228              D_ATTRIBUTE8,
10229              D_ATTRIBUTE9,
10230              D_ATTRIBUTE10,
10231              N_ATTRIBUTE1,
10232              N_ATTRIBUTE2,
10233              N_ATTRIBUTE3,
10234              N_ATTRIBUTE4,
10235              N_ATTRIBUTE5,
10236              N_ATTRIBUTE6,
10237              N_ATTRIBUTE7,
10238              N_ATTRIBUTE8,
10239              N_ATTRIBUTE9,
10240              n_attribute10,
10241              group_header_id, --added for J
10242              attribute_category,
10243              attribute1,
10244              attribute2,
10245              attribute3,
10246              attribute4,
10247              attribute5,
10248              attribute6,
10249              attribute7,
10250              attribute8,
10251              attribute9,
10252              attribute10,
10253              attribute11,
10254              attribute12,
10255              attribute13,
10256              attribute14,
10257              attribute15,
10258              status_id,     --Bug 5023244
10259              parent_object_type,   --R12 Genealogy enhancements
10260              parent_object_id,   --R12 Genealogy enhancements
10261              parent_object_number,   --R12 Genealogy enhancements
10262              parent_item_id,   --R12 Genealogy enhancements
10263              parent_object_type2,   --R12 Genealogy enhancements
10264              parent_object_id2,   --R12 Genealogy enhancements
10265              parent_object_number2)  --R12 Genealogy enhancements
10266          SELECT
10267              TRANSACTION_INTERFACE_ID,
10268              LAST_UPDATE_DATE,
10269              LAST_UPDATED_BY,
10270              CREATION_DATE,
10271              CREATED_BY,
10272              LAST_UPDATE_LOGIN,
10273              REQUEST_ID,
10274              PROGRAM_APPLICATION_ID,
10275              PROGRAM_ID,
10276              PROGRAM_UPDATE_DATE,
10277              VENDOR_SERIAL_NUMBER,
10278              VENDOR_LOT_NUMBER,
10279              ltrim(rtrim(FM_SERIAL_NUMBER)),/*Bug 4764048 added ltrim,rtrim*/
10280              ltrim(rtrim(TO_SERIAL_NUMBER)),/*Bug 4764048 added ltrim,rtrim*/
10281              parent_serial_number,
10282              SERIAL_ATTRIBUTE_CATEGORY,
10283              C_ATTRIBUTE1,
10284              C_ATTRIBUTE2,
10285              C_ATTRIBUTE3,
10286              C_ATTRIBUTE4,
10287              C_ATTRIBUTE5,
10288              C_ATTRIBUTE6,
10289              C_ATTRIBUTE7,
10290              C_ATTRIBUTE8,
10291              C_ATTRIBUTE9,
10292              C_ATTRIBUTE10,
10293              C_ATTRIBUTE11,
10294              C_ATTRIBUTE12,
10295              C_ATTRIBUTE13,
10296              C_ATTRIBUTE14,
10297              C_ATTRIBUTE15,
10298              C_ATTRIBUTE16,
10299              C_ATTRIBUTE17,
10300              C_ATTRIBUTE18,
10301              C_ATTRIBUTE19,
10302              C_ATTRIBUTE20,
10303              D_ATTRIBUTE1,
10304              D_ATTRIBUTE2,
10305              D_ATTRIBUTE3,
10306              D_ATTRIBUTE4,
10307              D_ATTRIBUTE5,
10308              D_ATTRIBUTE6,
10309              D_ATTRIBUTE7,
10310              D_ATTRIBUTE8,
10311              D_ATTRIBUTE9,
10312              D_ATTRIBUTE10,
10313              N_ATTRIBUTE1,
10314              N_ATTRIBUTE2,
10315              N_ATTRIBUTE3,
10316              N_ATTRIBUTE4,
10317              N_ATTRIBUTE5,
10318              N_ATTRIBUTE6,
10319              N_ATTRIBUTE7,
10320              N_ATTRIBUTE8,
10321              N_ATTRIBUTE9,
10322              n_attribute10,
10323              p_header_id,
10324              attribute_category,
10325              attribute1,
10326              attribute2,
10327              attribute3,
10328              attribute4,
10329              attribute5,
10330              attribute6,
10331              attribute7,
10332              attribute8,
10333              attribute9,
10334              attribute10,
10335              attribute11,
10336              attribute12,
10337              attribute13,
10338              attribute14,
10339              attribute15,
10340              status_id,    --Bug 5023244
10341              parent_object_type,   --R12 Genealogy enhancements
10342              parent_object_id,   --R12 Genealogy enhancements
10343              parent_object_number,   --R12 Genealogy enhancements
10344              parent_item_id,   --R12 Genealogy enhancements
10345              parent_object_type2,   --R12 Genealogy enhancements
10346              parent_object_id2,   --R12 Genealogy enhancements
10347              parent_object_number2   --R12 Genealogy enhancements
10348         FROM MTL_SERIAL_NUMBERS_INTERFACE
10349        WHERE (TRANSACTION_INTERFACE_ID IN (
10350              SELECT TRANSACTION_INTERFACE_ID
10351                FROM MTL_TRANSACTIONS_INTERFACE MTI
10352               WHERE TRANSACTION_HEADER_ID = p_header_id
10353               /*WHERE MTI.ROWID = p_rowid*/--J-dev
10354                 AND TRANSACTION_INTERFACE_ID IS NOT NULL
10355                 AND PROCESS_FLAG = 1
10356                 AND transaction_type_id NOT IN
10357                          (inv_globals.g_type_inv_lot_split
10358                         , inv_globals.g_type_inv_lot_merge
10359                         , inv_globals.g_type_inv_lot_translate
10360                          )
10361               UNION ALL
10362               SELECT SERIAL_TRANSACTION_TEMP_ID
10363                FROM MTL_TRANSACTION_LOTS_INTERFACE
10364                WHERE TRANSACTION_INTERFACE_ID IN (
10365                      SELECT TRANSACTION_INTERFACE_ID
10366                       FROM MTL_TRANSACTIONS_INTERFACE
10367                       WHERE TRANSACTION_HEADER_ID = p_header_id
10368                       /*WHERE rowid = p_rowid J-dev*/
10369                       AND TRANSACTION_INTERFACE_ID IS NOT NULL
10370                       AND PROCESS_FLAG = 1
10371                       AND transaction_type_id NOT IN
10372                                   (inv_globals.g_type_inv_lot_split
10373                                  , inv_globals.g_type_inv_lot_merge
10374                                  , inv_globals.g_type_inv_lot_translate
10375                                   )))
10376               );
10377 
10378     RETURN TRUE;
10379 
10380  EXCEPTION
10381    WHEN OTHERS THEN
10382     IF (l_debug = 1) THEN
10383        inv_log_util.trace('Error in tmpinsert: sqlerrm : ' || substr(sqlerrm, 1, 200),
10384             'INV_TXN_MANAGER_GRP','9');
10385     END IF;
10386     RETURN FALSE;
10387 
10388 END tmpinsert;
10389 
10390 
10391   /*Bug:5408823. The following procedure populates the column name, data type
10392     and length of all the Serial Attributes into global table g_lot_ser_attr_tbl
10393     which will be later used in procedure get_serial_attr_record. */
10394 
10395   PROCEDURE get_serial_attr_table
10396   IS
10397   l_lot_ser_attr_tbl   inv_lot_sel_attr.lot_sel_attributes_tbl_type;
10398   l_debug              NUMBER
10399                              := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
10400 
10401   BEGIN
10402 
10403     inv_log_util.trace('Before setting all the column names and types' , 'get_serial_attr_table',9);
10404 
10405 
10406     l_lot_ser_attr_tbl (1).column_name :=  'SERIAL_ATTRIBUTE_CATEGORY';
10407     l_lot_ser_attr_tbl (1).column_type  :=  'VARCHAR2';
10408     l_lot_ser_attr_tbl (1).column_length := 30;
10409     l_lot_ser_attr_tbl (2).column_name :=  'C_ATTRIBUTE1';
10410     l_lot_ser_attr_tbl (2).column_type  :=  'VARCHAR2';
10411     l_lot_ser_attr_tbl (2).column_length := 150;
10412     l_lot_ser_attr_tbl (3).column_name :=  'C_ATTRIBUTE2' ;
10413     l_lot_ser_attr_tbl (3).column_type  :=  'VARCHAR2';
10414     l_lot_ser_attr_tbl (3).column_length := 150;
10415     l_lot_ser_attr_tbl (4).column_name :=  'C_ATTRIBUTE3';
10416     l_lot_ser_attr_tbl (4).column_type  :=  'VARCHAR2';
10417     l_lot_ser_attr_tbl (4).column_length := 150;
10418     l_lot_ser_attr_tbl (5).column_name :=  'C_ATTRIBUTE4';
10419     l_lot_ser_attr_tbl (5).column_type  :=  'VARCHAR2';
10420     l_lot_ser_attr_tbl (5).column_length := 150;
10421     l_lot_ser_attr_tbl (6).column_name :=  'C_ATTRIBUTE5';
10422     l_lot_ser_attr_tbl (6).column_type  :=  'VARCHAR2';
10423     l_lot_ser_attr_tbl (6).column_length := 150;
10424     l_lot_ser_attr_tbl (7).column_name :=  'C_ATTRIBUTE6';
10425     l_lot_ser_attr_tbl (7).column_type  :=  'VARCHAR2';
10426     l_lot_ser_attr_tbl (7).column_length := 150;
10427     l_lot_ser_attr_tbl (8).column_name :=  'C_ATTRIBUTE7';
10428     l_lot_ser_attr_tbl (8).column_type  :=  'VARCHAR2';
10429     l_lot_ser_attr_tbl (8).column_length := 150;
10430     l_lot_ser_attr_tbl (9).column_name :=  'C_ATTRIBUTE8';
10431     l_lot_ser_attr_tbl (9).column_type  :=  'VARCHAR2';
10432     l_lot_ser_attr_tbl (9).column_length := 150;
10433     l_lot_ser_attr_tbl (10).column_name :=  'C_ATTRIBUTE9';
10434     l_lot_ser_attr_tbl (10).column_type  :=  'VARCHAR2';
10435     l_lot_ser_attr_tbl (10).column_length := 150;
10436     l_lot_ser_attr_tbl (11).column_name :=  'C_ATTRIBUTE10';
10437     l_lot_ser_attr_tbl (11).column_type  :=  'VARCHAR2';
10438     l_lot_ser_attr_tbl (11).column_length := 150;
10439     l_lot_ser_attr_tbl (12).column_name := 'C_ATTRIBUTE11';
10440     l_lot_ser_attr_tbl (12).column_type  :=  'VARCHAR2';
10441     l_lot_ser_attr_tbl (12).column_length := 150;
10442     l_lot_ser_attr_tbl (13).column_name := 'C_ATTRIBUTE12';
10443     l_lot_ser_attr_tbl (13).column_type  :=  'VARCHAR2';
10444     l_lot_ser_attr_tbl (13).column_length := 150;
10445     l_lot_ser_attr_tbl (14).column_name := 'C_ATTRIBUTE13';
10446     l_lot_ser_attr_tbl (14).column_type  :=  'VARCHAR2';
10447     l_lot_ser_attr_tbl (14).column_length := 150;
10448     l_lot_ser_attr_tbl (15).column_name := 'C_ATTRIBUTE14';
10449     l_lot_ser_attr_tbl (15).column_type  :=  'VARCHAR2';
10450     l_lot_ser_attr_tbl (15).column_length := 150;
10451     l_lot_ser_attr_tbl (16).column_name := 'C_ATTRIBUTE15';
10452     l_lot_ser_attr_tbl (16).column_type  :=  'VARCHAR2';
10453     l_lot_ser_attr_tbl (16).column_length := 150;
10454     l_lot_ser_attr_tbl (17).column_name := 'C_ATTRIBUTE16' ;
10455     l_lot_ser_attr_tbl (17).column_type  :=  'VARCHAR2';
10456     l_lot_ser_attr_tbl (17).column_length := 150;
10457     l_lot_ser_attr_tbl (18).column_name := 'C_ATTRIBUTE17';
10458     l_lot_ser_attr_tbl (18).column_type  :=  'VARCHAR2';
10459     l_lot_ser_attr_tbl (18).column_length := 150;
10460     l_lot_ser_attr_tbl (19).column_name := 'C_ATTRIBUTE18';
10461     l_lot_ser_attr_tbl (19).column_type  :=  'VARCHAR2';
10462     l_lot_ser_attr_tbl (19).column_length := 150;
10463     l_lot_ser_attr_tbl (20).column_name := 'C_ATTRIBUTE19';
10464     l_lot_ser_attr_tbl (20).column_type  :=  'VARCHAR2';
10465     l_lot_ser_attr_tbl (20).column_length := 150;
10466     l_lot_ser_attr_tbl (21).column_name := 'C_ATTRIBUTE20';
10467     l_lot_ser_attr_tbl (21).column_type  :=  'VARCHAR2';
10468     l_lot_ser_attr_tbl (21).column_length := 150;
10469     l_lot_ser_attr_tbl (22).column_name := 'D_ATTRIBUTE1';
10470     l_lot_ser_attr_tbl (22).column_type  :=  'DATE';
10471     l_lot_ser_attr_tbl (22).column_length := 11;
10472     l_lot_ser_attr_tbl (23).column_name := 'D_ATTRIBUTE2';
10473     l_lot_ser_attr_tbl (23).column_type  :=  'DATE';
10474     l_lot_ser_attr_tbl (23).column_length := 11;
10475     l_lot_ser_attr_tbl (24).column_name := 'D_ATTRIBUTE3';
10476     l_lot_ser_attr_tbl (24).column_type  :=  'DATE';
10477     l_lot_ser_attr_tbl (24).column_length := 11;
10478     l_lot_ser_attr_tbl (25).column_name := 'D_ATTRIBUTE4';
10479     l_lot_ser_attr_tbl (25).column_type  :=  'DATE';
10480     l_lot_ser_attr_tbl (25).column_length := 11;
10481     l_lot_ser_attr_tbl (26).column_name := 'D_ATTRIBUTE5';
10482     l_lot_ser_attr_tbl (26).column_type  :=  'DATE';
10483     l_lot_ser_attr_tbl (26).column_length := 11;
10484     l_lot_ser_attr_tbl (27).column_name := 'D_ATTRIBUTE6';
10485     l_lot_ser_attr_tbl (27).column_type  :=  'DATE';
10486     l_lot_ser_attr_tbl (27).column_length := 11;
10487     l_lot_ser_attr_tbl (28).column_name := 'D_ATTRIBUTE7';
10488     l_lot_ser_attr_tbl (28).column_type  :=  'DATE';
10489     l_lot_ser_attr_tbl (28).column_length := 11;
10490     l_lot_ser_attr_tbl (29).column_name := 'D_ATTRIBUTE8';
10491     l_lot_ser_attr_tbl (29).column_type  :=  'DATE';
10492     l_lot_ser_attr_tbl (29).column_length := 11;
10493     l_lot_ser_attr_tbl (30).column_name := 'D_ATTRIBUTE9';
10494     l_lot_ser_attr_tbl (30).column_type  :=  'DATE';
10495     l_lot_ser_attr_tbl (30).column_length := 11;
10496     l_lot_ser_attr_tbl (31).column_name := 'D_ATTRIBUTE10';
10497     l_lot_ser_attr_tbl (31).column_type  :=  'DATE';
10498     l_lot_ser_attr_tbl (31).column_length := 11;
10499     l_lot_ser_attr_tbl (32).column_name := 'N_ATTRIBUTE1';
10500     l_lot_ser_attr_tbl (32).column_type  :=  'NUMBER';
10501     l_lot_ser_attr_tbl (32).column_length := 38;
10502     l_lot_ser_attr_tbl (33).column_name := 'N_ATTRIBUTE2';
10503     l_lot_ser_attr_tbl (33).column_type  :=  'NUMBER';
10504     l_lot_ser_attr_tbl (33).column_length := 38;
10505     l_lot_ser_attr_tbl (34).column_name := 'N_ATTRIBUTE3';
10506     l_lot_ser_attr_tbl (34).column_type  :=  'NUMBER';
10507     l_lot_ser_attr_tbl (34).column_length := 38;
10508     l_lot_ser_attr_tbl (35).column_name := 'N_ATTRIBUTE4';
10509     l_lot_ser_attr_tbl (35).column_type  :=  'NUMBER';
10510     l_lot_ser_attr_tbl (35).column_length := 38;
10511     l_lot_ser_attr_tbl (36).column_name := 'N_ATTRIBUTE5';
10512     l_lot_ser_attr_tbl (36).column_type  :=  'NUMBER';
10513     l_lot_ser_attr_tbl (36).column_length := 38;
10514     l_lot_ser_attr_tbl (37).column_name := 'N_ATTRIBUTE6';
10515     l_lot_ser_attr_tbl (37).column_type  :=  'NUMBER';
10516     l_lot_ser_attr_tbl (37).column_length := 38;
10517     l_lot_ser_attr_tbl (38).column_name := 'N_ATTRIBUTE7';
10518     l_lot_ser_attr_tbl (38).column_type  :=  'NUMBER';
10519     l_lot_ser_attr_tbl (38).column_length := 38;
10520     l_lot_ser_attr_tbl (39).column_name := 'N_ATTRIBUTE8';
10521     l_lot_ser_attr_tbl (39).column_type  :=  'NUMBER';
10522     l_lot_ser_attr_tbl (39).column_length := 38;
10523     l_lot_ser_attr_tbl (40).column_name := 'N_ATTRIBUTE9';
10524     l_lot_ser_attr_tbl (40).column_type  :=  'NUMBER';
10525     l_lot_ser_attr_tbl (40).column_length := 38;
10526     l_lot_ser_attr_tbl (41).column_name := 'N_ATTRIBUTE10';
10527     l_lot_ser_attr_tbl (41).column_type  :=  'NUMBER';
10528     l_lot_ser_attr_tbl (41).column_length := 38;
10529     l_lot_ser_attr_tbl (42).column_name := 'TERRITORY_CODE';
10530     l_lot_ser_attr_tbl (42).column_type  :=  'VARCHAR2';
10531     l_lot_ser_attr_tbl (42).column_length := 30;
10532     l_lot_ser_attr_tbl (43).column_name := 'TIME_SINCE_NEW';
10533     l_lot_ser_attr_tbl (43).column_type  :=  'NUMBER';
10534     l_lot_ser_attr_tbl (43).column_length := 38;
10535     l_lot_ser_attr_tbl (44).column_name := 'CYCLES_SINCE_NEW';
10536     l_lot_ser_attr_tbl (44).column_type  :=  'NUMBER';
10537     l_lot_ser_attr_tbl (44).column_length := 38;
10538     l_lot_ser_attr_tbl (45).column_name := 'TIME_SINCE_OVERHAUL';
10539     l_lot_ser_attr_tbl (45).column_type  :=  'NUMBER';
10540     l_lot_ser_attr_tbl (45).column_length := 38;
10541     l_lot_ser_attr_tbl (46).column_name := 'CYCLES_SINCE_OVERHAUL';
10542     l_lot_ser_attr_tbl (46).column_type  :=  'NUMBER';
10543     l_lot_ser_attr_tbl (46).column_length := 38;
10544     l_lot_ser_attr_tbl (47).column_name := 'TIME_SINCE_REPAIR';
10545     l_lot_ser_attr_tbl (47).column_type  :=  'NUMBER';
10546     l_lot_ser_attr_tbl (47).column_length := 38;
10547     l_lot_ser_attr_tbl (48).column_name := 'CYCLES_SINCE_REPAIR';
10548     l_lot_ser_attr_tbl (48).column_type  :=  'NUMBER';
10549     l_lot_ser_attr_tbl (48).column_length := 38;
10550     l_lot_ser_attr_tbl (49).column_name := 'TIME_SINCE_VISIT';
10551     l_lot_ser_attr_tbl (49).column_type  :=  'NUMBER';
10552     l_lot_ser_attr_tbl (49).column_length := 38;
10553     l_lot_ser_attr_tbl (50).column_name := 'CYCLES_SINCE_VISIT';
10554     l_lot_ser_attr_tbl (50).column_type  :=  'NUMBER';
10555     l_lot_ser_attr_tbl (50).column_length := 38;
10556     l_lot_ser_attr_tbl (51).column_name := 'TIME_SINCE_MARK';
10557     l_lot_ser_attr_tbl (51).column_type  :=  'NUMBER';
10558     l_lot_ser_attr_tbl (51).column_length := 38;
10559     l_lot_ser_attr_tbl (52).column_name := 'CYCLES_SINCE_MARK';
10560     l_lot_ser_attr_tbl (52).column_type  :=  'NUMBER';
10561     l_lot_ser_attr_tbl (52).column_length := 38;
10562     l_lot_ser_attr_tbl (53).column_name := 'NUMBER_OF_REPAIRS';
10563     l_lot_ser_attr_tbl (53).column_type  :=  'NUMBER';
10564     l_lot_ser_attr_tbl (53).column_length := 38;
10565     l_lot_ser_attr_tbl (54).column_name := 'ATTRIBUTE_CATEGORY';
10566     l_lot_ser_attr_tbl (54).column_type  :=  'VARCHAR2';
10567     l_lot_ser_attr_tbl (54).column_length := 30;
10568     l_lot_ser_attr_tbl (55).column_name := 'ATTRIBUTE1';
10569     l_lot_ser_attr_tbl (55).column_type  :=  'VARCHAR2';
10570     l_lot_ser_attr_tbl (55).column_length := 150;
10571     l_lot_ser_attr_tbl (56).column_name := 'ATTRIBUTE2';
10572     l_lot_ser_attr_tbl (56).column_type  :=  'VARCHAR2';
10573     l_lot_ser_attr_tbl (56).column_length := 150;
10574     l_lot_ser_attr_tbl (57).column_name := 'ATTRIBUTE3';
10575     l_lot_ser_attr_tbl (57).column_type  :=  'VARCHAR2';
10576     l_lot_ser_attr_tbl (57).column_length := 150;
10577     l_lot_ser_attr_tbl (58).column_name := 'ATTRIBUTE4';
10578     l_lot_ser_attr_tbl (58).column_type  :=  'VARCHAR2';
10579     l_lot_ser_attr_tbl (58).column_length := 150;
10580     l_lot_ser_attr_tbl (59).column_name := 'ATTRIBUTE5';
10581     l_lot_ser_attr_tbl (59).column_type  :=  'VARCHAR2';
10582     l_lot_ser_attr_tbl (59).column_length := 150;
10583     l_lot_ser_attr_tbl (60).column_name := 'ATTRIBUTE6';
10584     l_lot_ser_attr_tbl (60).column_type  :=  'VARCHAR2';
10585     l_lot_ser_attr_tbl (60).column_length := 150;
10586     l_lot_ser_attr_tbl (61).column_name := 'ATTRIBUTE7';
10587     l_lot_ser_attr_tbl (61).column_type  :=  'VARCHAR2';
10588     l_lot_ser_attr_tbl (61).column_length := 150;
10589     l_lot_ser_attr_tbl (62).column_name := 'ATTRIBUTE8';
10590     l_lot_ser_attr_tbl (62).column_type  :=  'VARCHAR2';
10591     l_lot_ser_attr_tbl (62).column_length := 150;
10592     l_lot_ser_attr_tbl (63).column_name := 'ATTRIBUTE9';
10593     l_lot_ser_attr_tbl (63).column_type  :=  'VARCHAR2';
10594     l_lot_ser_attr_tbl (63).column_length := 150;
10595     l_lot_ser_attr_tbl (64).column_name := 'ATTRIBUTE10';
10596     l_lot_ser_attr_tbl (64).column_type  :=  'VARCHAR2';
10597     l_lot_ser_attr_tbl (64).column_length := 150;
10598     l_lot_ser_attr_tbl (65).column_name := 'ATTRIBUTE11';
10599     l_lot_ser_attr_tbl (65).column_type  :=  'VARCHAR2';
10600     l_lot_ser_attr_tbl (65).column_length := 150;
10601     l_lot_ser_attr_tbl (66).column_name := 'ATTRIBUTE12';
10602     l_lot_ser_attr_tbl (66).column_type  :=  'VARCHAR2';
10603     l_lot_ser_attr_tbl (66).column_length := 150;
10604     l_lot_ser_attr_tbl (67).column_name := 'ATTRIBUTE13';
10605     l_lot_ser_attr_tbl (67).column_type  :=  'VARCHAR2';
10606     l_lot_ser_attr_tbl (67).column_length := 150;
10607     l_lot_ser_attr_tbl (68).column_name := 'ATTRIBUTE14';
10608     l_lot_ser_attr_tbl (68).column_type  :=  'VARCHAR2';
10609     l_lot_ser_attr_tbl (68).column_length := 150;
10610     l_lot_ser_attr_tbl (69).column_name := 'ATTRIBUTE15';
10611     l_lot_ser_attr_tbl (69).column_type  :=  'VARCHAR2';
10612     l_lot_ser_attr_tbl (69).column_length := 150;
10613 
10614     g_lot_ser_attr_tbl  := l_lot_ser_attr_tbl;
10615 
10616 
10617     inv_log_util.trace('After setting all the column names and types' , 'get_serial_attr_table',9);
10618 
10619   EXCEPTION
10620     WHEN OTHERS
10621     THEN
10622 
10623       IF (l_debug = 1)
10624       THEN
10625         inv_log_util.trace('In Exception in get_serial_attr_table' , 'get_serial_attr_table',9);
10626       END IF;
10627 
10628   END get_serial_attr_table;
10629 
10630   /*****************************************************************************
10631    *Private procedure used in tmpinsert2(). This is used to get all the serial *
10632    *attributes from MSNI in x_lot_ser_attr_tbl which is then used for attr val.*
10633    *****************************************************************************/
10634 
10635   PROCEDURE get_serial_attr_record (
10636     x_lot_ser_attr_tbl           OUT NOCOPY   inv_lot_sel_attr.lot_sel_attributes_tbl_type
10637   , p_transaction_interface_id   IN       NUMBER
10638   , p_fm_serial_number           IN VARCHAR2
10639   , p_to_serial_number           IN VARCHAR2
10640   , p_serial_number              IN VARCHAR2
10641   , p_item_id                    IN NUMBER
10642   , p_org_id                     IN NUMBER
10643   , p_organization_id            IN       NUMBER
10644   , p_inventory_item_id          IN       NUMBER
10645   )
10646 
10647   IS
10648     /*Bug:5408823.Commented out the following code as the code to
10649       populate metadata of the serial attributes is moved to
10650       get_serial_attr_table.
10651     */
10652     /*l_app_owner_schema   VARCHAR2 (30);
10653     l_app_status         VARCHAR2 (1);
10654     l_app_industry       VARCHAR2 (1);
10655     l_app_info_status    BOOLEAN
10656       := fnd_installation.get_app_info (application_short_name     => 'INV'
10657                                       , status                     => l_app_status
10658                                       , industry                   => l_app_industry
10659                                       , oracle_schema              => l_app_owner_schema
10660                                        );
10661 
10662     CURSOR serial_column_csr (p_table_name VARCHAR2)
10663     IS
10664       SELECT   column_name
10665              , data_type
10666              , data_length
10667           FROM all_tab_columns
10668          WHERE table_name = UPPER (p_table_name)
10669            AND owner = l_app_owner_schema
10670            Bug:4724150. Commented the following condition 1 as the attribute
10671              columns becomes out of range of 20 to 91 when some extraneous attributes are added
10672            --AND column_id BETWEEN 20 AND 101      --attribute columns.
10673            AND column_name NOT IN ('STATUS_ID','STATUS_NAME', 'ORIGINATION_DATE')
10674       ORDER BY column_id;
10675       */
10676 
10677     l_column_id          NUMBER;
10678     l_lot_ser_attr_tbl   inv_lot_sel_attr.lot_sel_attributes_tbl_type;
10679     l_column_idx         NUMBER;
10680     --l_select_stmt        LONG;
10681     l_sql_p              INTEGER;
10682     l_rows_processed     INTEGER;
10683     l_line               NUMBER;
10684     l_stmt               LONG;
10685     l_debug              NUMBER
10686                              := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
10687   BEGIN
10688 
10689     /*Bug:5408823. Copying the global table which is populated in get_serial_attr_table procedure. */
10690     l_lot_ser_attr_tbl := g_lot_ser_attr_tbl;
10691     l_sql_p := NULL;
10692     l_rows_processed := NULL;
10693     l_line := 1;
10694 
10695 
10696     IF (l_debug = 1)
10697     THEN
10698       mydebug ('breadcrumb 10', 'get_serial_attr_record');
10699     END IF;
10700 
10701     /*Bug:5408823. Commenting the following code which popultes the column name,
10702       type and length of Serial Attributes, as this is being done in seperate procedure
10703       get_serial_attr_table. */
10704 
10705     /*FOR l_lot_ser_column_csr IN
10706       serial_column_csr ('MTL_SERIAL_NUMBERS_INTERFACE')
10707     LOOP
10708       l_column_idx := l_column_idx + 1;
10709       l_lot_ser_attr_tbl (l_column_idx).column_name :=
10710                                              l_lot_ser_column_csr.column_name;
10711       l_lot_ser_attr_tbl (l_column_idx).column_type :=
10712                                                l_lot_ser_column_csr.data_type;
10713 
10714       IF UPPER (l_lot_ser_column_csr.data_type) = 'DATE'
10715       THEN
10716         l_lot_ser_attr_tbl (l_column_idx).column_length := 11;
10717       ELSIF UPPER (l_lot_ser_column_csr.data_type) = 'NUMBER'
10718       THEN
10719         l_lot_ser_attr_tbl (l_column_idx).column_length := 38;
10720       ELSE
10721         l_lot_ser_attr_tbl (l_column_idx).column_length :=
10722                                              l_lot_ser_column_csr.data_length;
10723       END IF;
10724 
10725       IF (l_column_idx = 1)
10726       THEN
10727         l_select_stmt :=
10728              l_select_stmt
10729           || ' NVL(MSNI.'
10730           || l_lot_ser_attr_tbl (l_column_idx).column_name
10731           || ', MSN.'
10732           || l_lot_ser_attr_tbl (l_column_idx).column_name
10733           || ')';
10734       ELSE
10735         l_select_stmt :=
10736              l_select_stmt
10737           || ', NVL(MSNI.'
10738           || l_lot_ser_attr_tbl (l_column_idx).column_name
10739           || ', MSN.'
10740           || l_lot_ser_attr_tbl (l_column_idx).column_name
10741           || ')';
10742       END IF;
10743 
10744     END LOOP;*/
10745 
10746     IF (l_debug = 1)
10747     THEN
10748       mydebug ('breadcrumb 20', 'get_serial_attr_record');
10749     END IF;
10750 
10751 
10752 
10753     -- unlike lot case we do not need a condition for lot_number > 0 for the serials will exists
10754     -- in the system
10755     /*
10756     l_select_stmt :=
10757          l_select_stmt
10758       || '  from   mtl_serial_numbers_interface msni,'
10759       || '               mtl_serial_numbers msn,'
10760       || '                   mtl_transaction_lots_interface mtli,'
10761       || '               mtl_transactions_interface mti'
10762       || '   where mti.parent_id = :b_parent_id'
10763       || '   and         mti.transaction_interface_id <> mti.parent_id'
10764       || '   and   mtli.transaction_interface_id = mti.transaction_interface_id'
10765       || '   and   msni.transaction_interface_id  = mtli.serial_transaction_temp_id'
10766       || '   AND   inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,:b_serial_number) <> -1'
10767       || '   and   inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,nvl(msni.to_serial_number,msni.fm_serial_number)) >='
10768       || '         inv_serial_number_pub.get_serial_diff(msni.fm_serial_number,:b_serial_number)'
10769       || '   AND   msn.serial_number = :b_serial_number'
10770       || '   AND   msn.inventory_item_id = mti.inventory_item_id '
10771       || '   AND   msn.current_organization_id = mti.organization_id ';
10772       */
10773     l_sql_p := DBMS_SQL.open_cursor;
10774 
10775     IF (l_debug = 1)
10776     THEN
10777       mydebug ('breadcrumb 30', 'get_serial_attr_record');
10778     END IF;
10779 
10780     DBMS_SQL.parse (l_sql_p, g_select_stmt, DBMS_SQL.native);
10781 
10782     IF (l_debug = 1)
10783     THEN
10784       mydebug ('breadcrumb 40', 'get_serial_attr_record');
10785       mydebug ('b_parent_id '|| p_transaction_interface_id, 'get_serial_attr_record');
10786       mydebug ('b_serial_number ' || p_serial_number, 'get_serial_attr_record');
10787       mydebug ('b_fm_serial_number ' ||p_fm_serial_number , 'get_serial_attr_record');
10788       mydebug ('b_to_serial_number ' ||p_to_serial_number , 'get_serial_attr_record');
10789       mydebug ('b_item_id ' ||p_item_id , 'get_serial_attr_record');
10790       mydebug ('b_org_id ' ||p_org_id , 'get_serial_attr_record');
10791     END IF;
10792 
10793     DBMS_SQL.bind_variable (l_sql_p, 'B_PARENT_ID', p_transaction_interface_id);
10794     DBMS_SQL.bind_variable (l_sql_p, 'B_FM_SERIAL_NUMBER', p_fm_serial_number);
10795     DBMS_SQL.bind_variable (l_sql_p, 'B_TO_SERIAL_NUMBER', p_to_serial_number);
10796     DBMS_SQL.bind_variable (l_sql_p, 'B_SERIAL_NUMBER', p_serial_number);
10797     DBMS_SQL.bind_variable (l_sql_p, 'B_ITEM_ID', p_item_id);
10798     DBMS_SQL.bind_variable (l_sql_p, 'B_ORG_ID', p_org_id);
10799 
10800     IF (l_debug = 1)
10801     THEN
10802       mydebug ('breadcrumb 50', 'get_serial_attr_record');
10803     END IF;
10804 
10805     l_column_idx := 0;
10806 
10807     FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
10808     LOOP
10809       l_column_idx := i;
10810       DBMS_SQL.define_column (l_sql_p
10811                             , l_column_idx
10812                             , l_lot_ser_attr_tbl (i).column_value
10813                             , l_lot_ser_attr_tbl (i).column_length
10814                              );
10815     END LOOP;
10816 
10817     IF (l_debug = 1)
10818     THEN
10819       mydebug ('breadcrumb 60', 'get_serial_attr_record');
10820     END IF;
10821 
10822     l_rows_processed := DBMS_SQL.EXECUTE (l_sql_p);
10823 
10824     IF (l_debug = 1)
10825     THEN
10826       mydebug ('breadcrumb 70', 'get_serial_attr_record');
10827     END IF;
10828 
10829     LOOP
10830       IF (DBMS_SQL.fetch_rows (l_sql_p) > 0)
10831       THEN
10832         l_column_idx := 0;
10833 
10834         FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
10835         LOOP
10836           l_column_idx := i;
10837           DBMS_SQL.column_value (l_sql_p
10838                                , l_column_idx
10839                                , l_lot_ser_attr_tbl (i).column_value
10840                                 );
10841         END LOOP;
10842 
10843         IF (l_debug = 1)
10844         THEN
10845           mydebug ('breadcrumb 80', 'get_serial_attr_record');
10846         END IF;
10847       ELSE
10848         EXIT;
10849       END IF;
10850 
10851       EXIT;
10852     END LOOP;
10853 
10854     DBMS_SQL.close_cursor (l_sql_p);
10855 
10856     IF (l_debug = 1)
10857     THEN
10858       mydebug ('breadcrumb 90', 'get_serial_attr_record');
10859       mydebug ('l_lot_ser_attr_tbl.COUNT => ' || l_lot_ser_attr_tbl.COUNT
10860                  , 'get_serial_attr_record'
10861                   );
10862 
10863       FOR i IN 1 .. l_lot_ser_attr_tbl.COUNT
10864       LOOP
10865         mydebug (   l_lot_ser_attr_tbl (i).column_name
10866                      || ' => '
10867                      || l_lot_ser_attr_tbl (i).column_value
10868                    , 'get_serial_attr_record'
10869                     );
10870       END LOOP;
10871     END IF;
10872 
10873     x_lot_ser_attr_tbl := l_lot_ser_attr_tbl;
10874   EXCEPTION
10875     WHEN OTHERS
10876     THEN
10877       fnd_message.set_name ('WMS', 'WMS_GET_LOT_ATTR_ERROR');
10878       fnd_msg_pub.ADD;
10879 
10880       IF (l_debug = 1)
10881       THEN
10882         mydebug ('Exception in get_serial_attr_record' || SQLERRM, 'get_lot_attr_record');
10883       END IF;
10884   END get_serial_attr_record;
10885 
10886 
10887   /***********************************************************************
10888    * tmpinsert2() : Procedure to insert records in to MMTT, MTLT and MSNT*
10889    * for lot split/merge/translate transactions                          *
10890    ***************************PSEUDO CODE*********************************
10891    * for each MTI fetched for the given header_id                        *
10892    *                                                                     *
10893    *  insert into MMTT                                                   *
10894    *  fetch the MTLI corresponding to the MTI fetched above.             *
10895    *  insert into MTLT (there will be only one MTLI for a given MTI)     *
10896    *  if(Lot Split OR Lot Merge) then                                    *
10897    *     for each MSNI for the above MTLI                                *
10898    *       Get the number of serials in MSNI (if frm_serial <> to_serial)*
10899    *       Get the serial difference if serials present in range         *
10900    *       For each expanded serial Loop                                 *
10901    *           If Resulting Serial THEN                                  *
10902    *             Do Serial Attribute Validations                         *
10903    *             Insert into MSNT                                        *
10904    *           Else IF Source Serial                                     *
10905    *             Insert into MSNT with serial attribts directly from MSNI*
10906    *       End Loop                                                      *
10907    *   Else If Lot Translate Then                                        *
10908    *       For each serial in MSN for the lot in MTI Loop                *
10909    *       Insert into MSNT                                              *
10910    *       End Loop                                                      *
10911    *       Update the MTLT with the serial_txn_temp_id as txn_temp_id of *
10912    *       the MSNTs inserted above.                                     *
10913    *   End If                                                            *
10914    *                                                                     *
10915    *  Populate the genealogy records for the MSNTs inserted.             *
10916    *  For lot split     : populate the resulting MSNTs                   *
10917    *  For lot merge     : populate the source MSNTs                      *
10918    *  For lot translate : populate the resulting MSNTs                   *
10919    ***********************************************************************/
10920   PROCEDURE tmpinsert2 (
10921     x_return_status       OUT NOCOPY      VARCHAR2
10922   , x_msg_count           OUT NOCOPY      NUMBER
10923   , x_msg_data            OUT NOCOPY      VARCHAR2
10924   , x_validation_status   OUT NOCOPY      VARCHAR2
10925   , p_header_id           IN              NUMBER
10926   , p_validation_level    IN              NUMBER
10927         := fnd_api.g_valid_level_full
10928   )
10929   IS
10930     /*Select only lot split/merge and translate transactions */
10931     CURSOR mti_csr(l_header_id IN NUMBER)
10932     IS
10933       SELECT   mti.transaction_header_id
10934              , mti.parent_id
10935              , mti.transaction_interface_id
10936              , mti.source_code
10937              , mti.source_line_id
10938              , mti.created_by
10939              , mti.last_updated_by
10940              , mti.last_update_login
10941              , mti.program_id
10942              , mti.program_application_id
10943              , mti.request_id
10944              , mti.organization_id
10945              , mti.subinventory_code
10946              , mti.locator_id
10947              , mti.inventory_item_id
10948              , mti.revision
10949              , mti.transaction_type_id
10950              , mti.transaction_action_id
10951              , mti.transaction_source_type_id
10952              , mti.transaction_source_id
10953              , mti.transaction_source_name
10954              , mti.transaction_reference
10955              , mti.reason_id
10956              , mti.transaction_date
10957              , mti.acct_period_id
10958              , mti.transaction_quantity
10959              , mti.transaction_uom
10960              , mti.primary_quantity
10961              , mti.transaction_cost
10962              , mti.distribution_account_id
10963              , mti.transfer_subinventory
10964              , mti.transfer_organization
10965              , mti.transfer_locator
10966              , mti.shipment_number
10967              , mti.transportation_cost
10968              , mti.transfer_cost
10969              , mti.transportation_account
10970              , mti.freight_code
10971              , mti.containers
10972              , mti.waybill_airbill
10973              , mti.expected_arrival_date
10974              , mti.currency_code
10975              , mti.currency_conversion_date
10976              , mti.currency_conversion_type
10977              , mti.currency_conversion_rate
10978              , mti.new_average_cost
10979              , mti.value_change
10980              , mti.percentage_change
10981              , mti.demand_id
10982              , mti.demand_source_header_id
10983              , mti.demand_source_line
10984              , mti.demand_source_delivery
10985              , mti.customer_ship_id
10986              , mti.trx_source_delivery_id
10987              , mti.trx_source_line_id
10988              , mti.picking_line_id
10989              , mti.required_flag
10990              , mti.negative_req_flag
10991              , mti.repetitive_line_id
10992              , mti.primary_switch
10993              , mti.operation_seq_num
10994              , mti.setup_teardown_code
10995              , mti.schedule_update_code
10996              , mti.department_id
10997              , mti.employee_code
10998              , mti.schedule_id
10999              , mti.wip_entity_type
11000              , mti.encumbrance_amount
11001              , mti.encumbrance_account
11002              , mti.ussgl_transaction_code
11003              , mti.shippable_flag
11004              , mti.requisition_line_id
11005              , mti.requisition_distribution_id
11006              , mti.ship_to_location_id
11007              , mti.completion_transaction_id
11008              , mti.attribute_category
11009              , mti.attribute1
11010              , mti.attribute2
11011              , mti.attribute3
11012              , mti.attribute4
11013              , mti.attribute5
11014              , mti.attribute6
11015              , mti.attribute7
11016              , mti.attribute8
11017              , mti.attribute9
11018              , mti.attribute10
11019              , mti.attribute11
11020              , mti.attribute12
11021              , mti.attribute13
11022              , mti.attribute14
11023              , mti.attribute15
11024              , mti.movement_id
11025              , mti.source_project_id
11026              , mti.source_task_id
11027              , mti.expenditure_type
11028              , mti.pa_expenditure_org_id
11029              , mti.project_id
11030              , mti.task_id
11031              , mti.to_project_id
11032              , mti.to_task_id
11033              , mti.final_completion_flag
11034              , mti.transfer_percentage
11035              , mti.material_account
11036              , mti.material_overhead_account
11037              , mti.resource_account
11038              , mti.outside_processing_account
11039              , mti.overhead_account
11040              , mti.cost_group_id
11041              , mti.flow_schedule
11042              , mti.qa_collection_id
11043              , mti.overcompletion_transaction_qty
11044              , mti.overcompletion_primary_qty
11045              , mti.overcompletion_transaction_id
11046              , mti.end_item_unit_number
11047              , mti.org_cost_group_id
11048              , mti.cost_type_id
11049              , mti.lpn_id
11050              , mti.content_lpn_id
11051              , mti.transfer_lpn_id
11052              , mti.organization_type
11053              , mti.transfer_organization_type
11054              , mti.owning_organization_id
11055              , mti.owning_tp_type
11056              , mti.xfr_owning_organization_id
11057              , mti.transfer_owning_tp_type
11058              , mti.planning_organization_id
11059              , mti.planning_tp_type
11060              , mti.xfr_planning_organization_id
11061              , mti.transfer_planning_tp_type
11062              , mti.transaction_batch_id
11063              , mti.transaction_batch_seq
11064              , mti.transfer_cost_group_id
11065              , mti.transaction_mode
11066              , mti.rebuild_item_id
11067              , mti.rebuild_activity_id
11068              , mti.rebuild_serial_number
11069              , mti.rebuild_job_name
11070              , mti.kanban_card_id
11071              , mti.accounting_class
11072              , mti.scheduled_flag
11073              , mti.schedule_number
11074              , mti.routing_revision_date
11075              , mti.move_transaction_id
11076              , mti.wip_supply_type
11077              , mti.build_sequence
11078              , mti.bom_revision
11079              , mti.routing_revision
11080              , mti.bom_revision_date
11081              , mti.alternate_bom_designator
11082              , mti.alternate_routing_designator
11083              , mti.secondary_transaction_quantity
11084              , mti.secondary_uom_code
11085              , mti.relieve_reservations_flag   /*** {{ R12 Enhanced reservations code changes ***/
11086              , mti.relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
11087           FROM mtl_transactions_interface mti
11088          WHERE mti.transaction_header_id = l_header_id
11089            AND mti.transaction_action_id IN
11090                  (inv_globals.g_action_inv_lot_split
11091                 , inv_globals.g_action_inv_lot_merge
11092                 , inv_globals.g_action_inv_lot_translate
11093                  )
11094            AND mti.transaction_source_type_id = 13
11095            AND mti.process_flag = 1
11096       ORDER BY mti.transaction_batch_id
11097              , mti.transaction_batch_seq
11098              , mti.organization_id
11099              , mti.inventory_item_id
11100              , mti.revision
11101              , mti.subinventory_code
11102              , mti.locator_id;
11103 
11104     /*To this cursor we would pass the parent_id from each mti fetched frm the cursor MTI_CSR*/
11105     CURSOR mtli_csr (p_transaction_interface_id IN NUMBER)
11106     IS
11107       SELECT transaction_interface_id
11108            , ltrim(rtrim(lot_number)) lot_number	/*Bug 6390860 added ltrim, rtrim and alias*/
11109            , lot_expiration_date
11110            , last_updated_by
11111            , created_by
11112            , last_update_login
11113            , program_update_date
11114            , program_application_id
11115            , program_id
11116            , request_id
11117            , primary_quantity
11118            , transaction_quantity
11119            , serial_transaction_temp_id
11120            , lot_attribute_category
11121            , c_attribute1
11122            , c_attribute2
11123            , c_attribute3
11124            , c_attribute4
11125            , c_attribute5
11126            , c_attribute6
11127            , c_attribute7
11128            , c_attribute8
11129            , c_attribute9
11130            , c_attribute10
11131            , c_attribute11
11132            , c_attribute12
11133            , c_attribute13
11134            , c_attribute14
11135            , c_attribute15
11136            , c_attribute16
11137            , c_attribute17
11138            , c_attribute18
11139            , c_attribute19
11140            , c_attribute20
11141            , d_attribute1
11142            , d_attribute2
11143            , d_attribute3
11144            , d_attribute4
11145            , d_attribute5
11146            , d_attribute6
11147            , d_attribute7
11148            , d_attribute8
11149            , d_attribute9
11150            , d_attribute10
11151            , n_attribute1
11152            , n_attribute2
11153            , n_attribute3
11154            , n_attribute4
11155            , n_attribute5
11156            , n_attribute6
11157            , n_attribute7
11158            , n_attribute8
11159            , n_attribute9
11160            , n_attribute10
11161            , attribute1
11162            , attribute2
11163            , attribute3
11164            , attribute4
11165            , attribute5
11166            , attribute6
11167            , attribute7
11168            , attribute8
11169            , attribute9
11170            , attribute10
11171            , attribute11
11172            , attribute12
11173            , attribute13
11174            , attribute14
11175            , attribute15
11176            , attribute_category
11177            , p_header_id
11178            , description
11179            , vendor_name
11180            , supplier_lot_number
11181            , origination_date
11182            , date_code
11183            , grade_code
11184            , change_date
11185            , maturity_date
11186            , status_id
11187            , retest_date
11188            , age
11189            , item_size
11190            , color
11191            , volume
11192            , volume_uom
11193            , place_of_origin
11194            , best_by_date
11195            , LENGTH
11196            , length_uom
11197            , recycled_content
11198            , thickness
11199            , thickness_uom
11200            , width
11201            , width_uom
11202            , curl_wrinkle_fold
11203            , vendor_id
11204            , territory_code
11205            , parent_lot_number
11206            , origination_type
11207            , expiration_action_date
11208            , expiration_action_code
11209            , hold_date
11210            , reason_id
11211            , secondary_transaction_quantity
11212                                     --R12 Genealogy enhancements
11213            , parent_object_type
11214                  , parent_object_id
11215                  , parent_object_number
11216                  , parent_item_id
11217                  , parent_object_type2
11218                  , parent_object_id2
11219                  , parent_object_number2  --R12 Genealogy enhancements
11220         FROM mtl_transaction_lots_interface
11221        WHERE transaction_interface_id = p_transaction_interface_id;
11222 
11223     CURSOR msni_csr (l_serial_transaction_temp_id IN NUMBER)
11224     IS
11225       SELECT transaction_interface_id
11226            , last_update_date
11227            , last_updated_by
11228            , creation_date
11229            , created_by
11230            , last_update_login
11231            , request_id
11232            , program_application_id
11233            , program_id
11234            , program_update_date
11235            , vendor_serial_number
11236            , vendor_lot_number
11237            , ltrim(rtrim(fm_serial_number)) fm_serial_number /*Bug 4764048 added ltrim,rtrim*/
11238            , ltrim(rtrim(to_serial_number)) to_serial_number /*Bug 4764048 added ltrim,rtrim*/
11239            , parent_serial_number
11240            , serial_attribute_category
11241            , c_attribute1
11242            , c_attribute2
11243            , c_attribute3
11244            , c_attribute4
11245            , c_attribute5
11246            , c_attribute6
11247            , c_attribute7
11248            , c_attribute8
11249            , c_attribute9
11250            , c_attribute10
11251            , c_attribute11
11252            , c_attribute12
11253            , c_attribute13
11254            , c_attribute14
11255            , c_attribute15
11256            , c_attribute16
11257            , c_attribute17
11258            , c_attribute18
11259            , c_attribute19
11260            , c_attribute20
11261            , d_attribute1
11262            , d_attribute2
11263            , d_attribute3
11264            , d_attribute4
11265            , d_attribute5
11266            , d_attribute6
11267            , d_attribute7
11268            , d_attribute8
11269            , d_attribute9
11270            , d_attribute10
11271            , n_attribute1
11272            , n_attribute2
11273            , n_attribute3
11274            , n_attribute4
11275            , n_attribute5
11276            , n_attribute6
11277            , n_attribute7
11278            , n_attribute8
11279            , n_attribute9
11280            , n_attribute10
11281            , attribute_category
11282            , attribute1
11283            , attribute2
11284            , attribute3
11285            , attribute4
11286            , attribute5
11287            , attribute6
11288            , attribute7
11289            , attribute8
11290            , attribute9
11291            , attribute10
11292            , attribute11
11293            , attribute12
11294            , attribute13
11295            , attribute14
11296            , attribute15
11297            , status_id
11298            , territory_code
11299            , time_since_new
11300            , cycles_since_new
11301            , time_since_overhaul
11302            , cycles_since_overhaul
11303            , time_since_repair
11304            , cycles_since_repair
11305            , time_since_visit
11306            , cycles_since_visit
11307            , time_since_mark
11308            , cycles_since_mark
11309            , number_of_repairs
11310         FROM mtl_serial_numbers_interface msni
11311        WHERE transaction_interface_id = l_serial_transaction_temp_id;
11312 
11313     CURSOR msn_serial_attributes_csr (
11314       l_serial_number       IN   VARCHAR2
11315     , l_inventory_item_id   IN   NUMBER
11316     , l_organization_id     IN   NUMBER
11317     )
11318     IS
11319       SELECT serial_attribute_category
11320            , c_attribute1
11321            , c_attribute2
11322            , c_attribute3
11323            , c_attribute4
11324            , c_attribute5
11325            , c_attribute6
11326            , c_attribute7
11327            , c_attribute8
11328            , c_attribute9
11329            , c_attribute10
11330            , c_attribute11
11331            , c_attribute12
11332            , c_attribute13
11333            , c_attribute14
11334            , c_attribute15
11335            , c_attribute16
11336            , c_attribute17
11337            , c_attribute18
11338            , c_attribute19
11339            , c_attribute20
11340            , d_attribute1
11341            , d_attribute2
11342            , d_attribute3
11343            , d_attribute4
11344            , d_attribute5
11345            , d_attribute6
11346            , d_attribute7
11347            , d_attribute8
11348            , d_attribute9
11349            , d_attribute10
11350            , n_attribute1
11351            , n_attribute2
11352            , n_attribute3
11353            , n_attribute4
11354            , n_attribute5
11355            , n_attribute6
11356            , n_attribute7
11357            , n_attribute8
11358            , n_attribute9
11359            , n_attribute10
11360            , attribute_category
11361            , attribute1
11362            , attribute2
11363            , attribute3
11364            , attribute4
11365            , attribute5
11366            , attribute6
11367            , attribute7
11368            , attribute8
11369            , attribute9
11370            , attribute10
11371            , attribute11
11372            , attribute12
11373            , attribute13
11374            , attribute14
11375            , attribute15
11376            , status_id
11377            , territory_code
11378            , time_since_new
11379            , cycles_since_new
11380            , time_since_overhaul
11381            , cycles_since_overhaul
11382            , time_since_repair
11383            , cycles_since_repair
11384            , time_since_visit
11385            , cycles_since_visit
11386            , time_since_mark
11387            , cycles_since_mark
11388            , number_of_repairs
11389         FROM mtl_serial_numbers msn
11390        WHERE msn.serial_number = l_serial_number
11391          AND msn.inventory_item_id = l_inventory_item_id
11392          AND msn.current_organization_id = l_organization_id;
11393 
11394     /*Bug:5408823. Modified the where condition of the following cursor
11395       to add NVL to locator_id column and add a new parameter p_lpn_id which is
11396       used in the WHERE clause. */
11397     CURSOR msn_csr (
11398       p_lot_number          IN   VARCHAR2
11399     , p_inventory_item_id   IN   NUMBER
11400     , p_subinventory_code   IN   VARCHAR2
11401     , p_locator_id          IN   NUMBER
11402     , p_organization_id     IN   NUMBER
11403     , p_lpn_id              IN   NUMBER
11404     )
11405     IS
11406       SELECT last_update_date
11407            , last_updated_by
11408            , creation_date
11409            , created_by
11410            , last_update_login
11411            , request_id
11412            , program_application_id
11413            , program_id
11414            , program_update_date
11415            , vendor_serial_number
11416            , vendor_lot_number
11417            , serial_number
11418            , parent_serial_number
11419            , serial_attribute_category
11420            , c_attribute1
11421            , c_attribute2
11422            , c_attribute3
11423            , c_attribute4
11424            , c_attribute5
11425            , c_attribute6
11426            , c_attribute7
11427            , c_attribute8
11428            , c_attribute9
11429            , c_attribute10
11430            , c_attribute11
11431            , c_attribute12
11432            , c_attribute13
11433            , c_attribute14
11434            , c_attribute15
11435            , c_attribute16
11436            , c_attribute17
11437            , c_attribute18
11438            , c_attribute19
11439            , c_attribute20
11440            , d_attribute1
11441            , d_attribute2
11442            , d_attribute3
11443            , d_attribute4
11444            , d_attribute5
11445            , d_attribute6
11446            , d_attribute7
11447            , d_attribute8
11448            , d_attribute9
11449            , d_attribute10
11450            , n_attribute1
11451            , n_attribute2
11452            , n_attribute3
11453            , n_attribute4
11454            , n_attribute5
11455            , n_attribute6
11456            , n_attribute7
11457            , n_attribute8
11458            , n_attribute9
11459            , n_attribute10
11460            , p_header_id
11461            , attribute_category
11462            , attribute1
11463            , attribute2
11464            , attribute3
11465            , attribute4
11466            , attribute5
11467            , attribute6
11468            , attribute7
11469            , attribute8
11470            , attribute9
11471            , attribute10
11472            , attribute11
11473            , attribute12
11474            , attribute13
11475            , attribute14
11476            , attribute15
11477            , status_id
11478            , territory_code
11479            , time_since_new
11480            , cycles_since_new
11481            , time_since_overhaul
11482            , cycles_since_overhaul
11483            , time_since_repair
11484            , cycles_since_repair
11485            , time_since_visit
11486            , cycles_since_visit
11487            , time_since_mark
11488            , cycles_since_mark
11489            , number_of_repairs
11490         FROM mtl_serial_numbers
11491         WHERE inventory_item_id = p_inventory_item_id
11492          AND current_organization_id = p_organization_id
11493          AND current_status = 3
11494          AND current_subinventory_code = p_subinventory_code
11495          AND NVL(current_locator_id,-1) = NVL(p_locator_id, -1)
11496          AND NVL(lpn_id, -1) = NVL(p_lpn_id, -1)
11497          AND lot_number = p_lot_number ;
11498 
11499     /*This cursor is used to get the serials in lot merge transaction for which the genealogy
11500      *columns need to be populated/updated. We will pass the serial_transaction_temp_id of the
11501      *resultant lot(l_mtli_csr.serial_transaction_temp_id)
11502      */
11503     CURSOR msnt_serials_csr (l_serial_transaction_temp_id IN NUMBER)
11504     IS
11505       SELECT     fm_serial_number
11506                , transaction_temp_id
11507             FROM mtl_serial_numbers_temp
11508            WHERE transaction_temp_id = l_serial_transaction_temp_id
11509       FOR UPDATE NOWAIT;
11510 
11511     CURSOR mtli_parent_lots_csr (l_transaction_interface_id IN NUMBER)
11512     IS
11513       SELECT mtli.lot_number
11514            , mtli.serial_transaction_temp_id
11515         FROM mtl_transaction_lots_interface mtli
11516        WHERE mtli.transaction_interface_id =
11517                (SELECT mti.transaction_interface_id
11518                   FROM mtl_transactions_interface mti
11519                  WHERE mti.parent_id = l_transaction_interface_id
11520                    AND mti.transaction_interface_id <> mti.parent_id);
11521 
11522     l_parent_id                    NUMBER;
11523     l_transaction_interface_id     NUMBER;
11524     l_next_serial                  VARCHAR2(30);
11525     l_old_serial                  VARCHAR2(30);
11526     l_serial_diff                  NUMBER;
11527     l_serial_code                  NUMBER;
11528     l_parent_object_number2        VARCHAR2 (80);
11529     l_current_serial               VARCHAR2 (30);
11530     l_is_parent_lot                NUMBER;
11531     l_serial_temp_id               NUMBER;
11532     l_current_parent_lot           VARCHAR2 (30);
11533     l_current_serial_txn_temp_id   NUMBER;
11534     l_user_id                      NUMBER;
11535     l_login_id                     NUMBER;
11536     l_sysdate                      DATE;
11537     l_mtli_csr                     mtli_csr%ROWTYPE;
11538     l_serial_attributes_csr        msn_serial_attributes_csr%ROWTYPE;
11539     l_ser_attr_tbl                 inv_lot_sel_attr.lot_sel_attributes_tbl_type;
11540     l_validated_ser_attr_tbl       inv_lot_sel_attr.lot_sel_attributes_tbl_type;
11541     l_debug                        NUMBER;
11542     l_indexed_ser_attr_tbl         lot_sel_index_attr_tbl_type;
11543     l_sequence                     NUMBER;
11544     l_validation_status            VARCHAR2 (1);
11545     l_old_item_id                  NUMBER;
11546     l_old_lot_num                  VARCHAR2(80);
11547     l_old_sub_code                 VARCHAR2(10);
11548     l_old_locator_id               NUMBER;
11549     l_old_lpn_id                   NUMBER; --Bug 5408823
11550     l_context_value_dst            mtl_flex_context.descriptive_flex_context_code%TYPE;
11551     l_context_value_src            mtl_flex_context.descriptive_flex_context_code%TYPE;
11552     l_patchset_j       NUMBER := 0;  /* 0 = No 1 = Yes */
11553 
11554   BEGIN
11555 
11556     l_debug := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
11557 
11558     IF (l_debug = 1)
11559     THEN
11560       mydebug ('breadcrumb 10', 'tmpinsert2');
11561     END IF;
11562 
11563     l_validation_status := 'Y';
11564     x_return_status := fnd_api.g_ret_sts_success;
11565     l_sysdate := SYSDATE;
11566     l_user_id := fnd_global.user_id;
11567     l_login_id := fnd_global.login_id;
11568 
11569     --bug 4574806. this will be used in the statements below for final
11570     --completion flag AS a decode
11571     IF (wip_constants.DMF_PATCHSET_LEVEL>=
11572         wip_constants.DMF_PATCHSET_J_VALUE) THEN
11573        l_patchset_j := 1;
11574     END IF;
11575 
11576     /*Bug:5408823. The following procedure populates the column name, data type
11577       and length of all the Serial Attributes into global table g_lot_ser_attr_tbl
11578       which will be later used in procedure get_serial_attr_record. */
11579     get_serial_attr_table;
11580 
11581     /*  Insert the MMTT for each MTI. For each MTI insert the corresponding MTLT.
11582      *  For each MTLT there might be several MSNIs. Populate these into MSNTs .
11583      *  For lot translate there will be no MSNIs. In this case we have to get the
11584      *  values from the MTLT and MSN.
11585      */
11586     BEGIN
11587       IF (l_debug = 1)
11588       THEN
11589         mydebug ('breadcrumb 20 header id ' || p_header_id, 'tmpinsert2');
11590       END IF;
11591 
11592       FOR l_mti_csr IN mti_csr(p_header_id)
11593       LOOP
11594         l_parent_id := l_mti_csr.parent_id;
11595         l_transaction_interface_id := l_mti_csr.transaction_interface_id;
11596 
11597         IF (l_debug = 1)
11598         THEN
11599           mydebug ('Inserting into MMTT',
11600                        'tmpinsert2');
11601           mydebug ('l_parent_id                => '|| l_parent_id,
11602                         'tmpinsert2');
11603           mydebug ('l_transaction_interface_id => '|| l_transaction_interface_id
11604                        , 'tmpinsert2'
11605                       );
11606         END IF;
11607 
11608         IF (l_debug = 1)
11609         THEN
11610           mydebug ('breadcrumb 30','tmpinsert2');
11611         END IF;
11612 
11613         INSERT INTO mtl_material_transactions_temp
11614                     (transaction_header_id
11615                    , transaction_temp_id
11616                    , source_code
11617                    , source_line_id
11618                    , process_flag
11619                    , creation_date
11620                    , created_by
11621                    , last_update_date
11622                    , last_updated_by
11623                    , last_update_login
11624                    , program_id
11625                    , program_update_date
11626                    , program_application_id
11627                    , request_id
11628                    , organization_id
11629                    , subinventory_code
11630                    , locator_id
11631                    , inventory_item_id
11632                    , revision
11633                    , transaction_type_id
11634                    , transaction_action_id
11635                    , transaction_source_type_id
11636                    , transaction_source_id
11637                    , transaction_source_name
11638                    , transaction_reference
11639                    , reason_id
11640                    , transaction_date
11641                    , acct_period_id
11642                    , transaction_quantity
11643                    , transaction_uom
11644                    , primary_quantity
11645                    , transaction_cost
11646                    , distribution_account_id
11647                    , transfer_subinventory
11648                    , transfer_organization
11649                    , transfer_to_location
11650                    , shipment_number
11651                    , transportation_cost
11652                    , transfer_cost
11653                    , transportation_account
11654                    , freight_code
11655                    , containers
11656                    , waybill_airbill
11657                    , expected_arrival_date
11658                    , currency_code
11659                    , currency_conversion_date
11660                    , currency_conversion_type
11661                    , currency_conversion_rate
11662                    , new_average_cost
11663                    , value_change
11664                    , percentage_change
11665                    , demand_id
11666                    , demand_source_header_id
11667                    , demand_source_line
11668                    , demand_source_delivery
11669                    , customer_ship_id
11670                    , trx_source_delivery_id
11671                    , trx_source_line_id
11672                    , picking_line_id
11673                    , required_flag
11674                    , negative_req_flag
11675                    , repetitive_line_id
11676                    , primary_switch
11677                    , operation_seq_num
11678                    , setup_teardown_code
11679                    , schedule_update_code
11680                    , department_id
11681                    , employee_code
11682                    , schedule_id
11683                    , wip_entity_type
11684                    , encumbrance_amount
11685                    , encumbrance_account
11686                    , ussgl_transaction_code
11687                    , shippable_flag
11688                    , requisition_line_id
11689                    , requisition_distribution_id
11690                    , ship_to_location
11691                    , completion_transaction_id
11692                    , attribute_category
11693                    , attribute1
11694                    , attribute2
11695                    , attribute3
11696                    , attribute4
11697                    , attribute5
11698                    , attribute6
11699                    , attribute7
11700                    , attribute8
11701                    , attribute9
11702                    , attribute10
11703                    , attribute11
11704                    , attribute12
11705                    , attribute13
11706                    , attribute14
11707                    , attribute15
11708                    , movement_id
11709                    , source_project_id
11710                    , source_task_id
11711                    , expenditure_type
11712                    , pa_expenditure_org_id
11713                    , project_id
11714                    , task_id
11715                    , to_project_id
11716                    , to_task_id
11717                    , posting_flag
11718                    , final_completion_flag
11719                    , transfer_percentage
11720                    , material_account
11721                    , material_overhead_account
11722                    , resource_account
11723                    , outside_processing_account
11724                    , overhead_account
11725                    , cost_group_id
11726                    , flow_schedule
11727                    , qa_collection_id
11728                    , overcompletion_transaction_qty
11729                    , overcompletion_primary_qty
11730                    , overcompletion_transaction_id
11731                    , end_item_unit_number
11732                    , org_cost_group_id
11733                    , cost_type_id
11734                    , move_order_line_id
11735                    , lpn_id
11736                    , content_lpn_id
11737                    , transfer_lpn_id
11738                    , organization_type
11739                    , transfer_organization_type
11740                    , owning_organization_id
11741                    , owning_tp_type
11742                    , xfr_owning_organization_id
11743                    , transfer_owning_tp_type
11744                    , planning_organization_id
11745                    , planning_tp_type
11746                    , xfr_planning_organization_id
11747                    , transfer_planning_tp_type
11748                    , transaction_batch_id
11749                    , transaction_batch_seq
11750                    , transfer_cost_group_id
11751                    , transaction_mode
11752                    , rebuild_item_id
11753                    , rebuild_activity_id
11754                    , rebuild_serial_number
11755                    , rebuild_job_name
11756                    , kanban_card_id
11757                    , class_code
11758                    , scheduled_flag
11759                    , schedule_number
11760                    , routing_revision_date
11761                    , move_transaction_id
11762                    , wip_supply_type
11763                    , build_sequence
11764                    , bom_revision
11765                    , routing_revision
11766                    , bom_revision_date
11767                    , alternate_bom_designator
11768                    , alternate_routing_designator
11769                    , secondary_transaction_quantity
11770                    , secondary_uom_code
11771                    , parent_transaction_temp_id
11772                    , relieve_reservations_flag   /*** {{ R12 Enhanced reservations code changes ***/
11773                    , relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
11774                     )
11775              VALUES (l_mti_csr.transaction_header_id
11776                    , l_mti_csr.transaction_interface_id
11777                    , l_mti_csr.source_code
11778                    , l_mti_csr.source_line_id
11779                    , 'Y'
11780                    , l_sysdate
11781                    , l_user_id
11782                    , l_sysdate
11783                    , l_user_id
11784                    , l_login_id
11785                    , l_mti_csr.program_id
11786                    , l_sysdate
11787                    , l_mti_csr.program_application_id
11788                    , l_mti_csr.request_id
11789                    , l_mti_csr.organization_id
11790                    , l_mti_csr.subinventory_code
11791                    , l_mti_csr.locator_id
11792                    , l_mti_csr.inventory_item_id
11793                    , l_mti_csr.revision
11794                    , l_mti_csr.transaction_type_id
11795                    , l_mti_csr.transaction_action_id
11796                    , l_mti_csr.transaction_source_type_id
11797                    , l_mti_csr.transaction_source_id
11798                    , l_mti_csr.transaction_source_name
11799                    , l_mti_csr.transaction_reference
11800                    , l_mti_csr.reason_id
11801                    , l_mti_csr.transaction_date
11802                    , l_mti_csr.acct_period_id
11803                    , l_mti_csr.transaction_quantity
11804                    , l_mti_csr.transaction_uom
11805                    , l_mti_csr.primary_quantity
11806                    , l_mti_csr.transaction_cost
11807                    , l_mti_csr.distribution_account_id
11808                    , l_mti_csr.transfer_subinventory
11809                    , l_mti_csr.transfer_organization
11810                    , l_mti_csr.transfer_locator
11811                    , l_mti_csr.shipment_number
11812                    , l_mti_csr.transportation_cost
11813                    , l_mti_csr.transfer_cost
11814                    , l_mti_csr.transportation_account
11815                    , l_mti_csr.freight_code
11816                    , l_mti_csr.containers
11817                    , l_mti_csr.waybill_airbill
11818                    , l_mti_csr.expected_arrival_date
11819                    , l_mti_csr.currency_code
11820                    , l_mti_csr.currency_conversion_date
11821                    , l_mti_csr.currency_conversion_type
11822                    , l_mti_csr.currency_conversion_rate
11823                    , l_mti_csr.new_average_cost
11824                    , l_mti_csr.value_change
11825                    , l_mti_csr.percentage_change
11826                    , l_mti_csr.demand_id
11827                    , l_mti_csr.demand_source_header_id
11828                    , l_mti_csr.demand_source_line
11829                    , l_mti_csr.demand_source_delivery
11830                    , l_mti_csr.customer_ship_id
11831                    , l_mti_csr.trx_source_delivery_id
11832                    , l_mti_csr.trx_source_line_id
11833                    , l_mti_csr.picking_line_id
11834                    , l_mti_csr.required_flag
11835                    , l_mti_csr.negative_req_flag
11836                    , l_mti_csr.repetitive_line_id
11837                    , l_mti_csr.primary_switch
11838                    , l_mti_csr.operation_seq_num
11839                    , l_mti_csr.setup_teardown_code
11840                    , l_mti_csr.schedule_update_code
11841                    , l_mti_csr.department_id
11842                    , l_mti_csr.employee_code
11843                    , l_mti_csr.schedule_id
11844                    , l_mti_csr.wip_entity_type
11845                    , l_mti_csr.encumbrance_amount
11846                    , l_mti_csr.encumbrance_account
11847                    , l_mti_csr.ussgl_transaction_code
11848                    , l_mti_csr.shippable_flag
11849                    , l_mti_csr.requisition_line_id
11850                    , l_mti_csr.requisition_distribution_id
11851                    , l_mti_csr.ship_to_location_id
11852                    , NVL (l_mti_csr.completion_transaction_id
11853                         , DECODE (l_mti_csr.transaction_action_id
11854                                 , 31, mtl_material_transactions_s.NEXTVAL
11855                                 , 32, mtl_material_transactions_s.NEXTVAL
11856                                 , NULL
11857                                  )
11858                          )
11859                    , l_mti_csr.attribute_category
11860                    , l_mti_csr.attribute1
11861                    , l_mti_csr.attribute2
11862                    , l_mti_csr.attribute3
11863                    , l_mti_csr.attribute4
11864                    , l_mti_csr.attribute5
11865                    , l_mti_csr.attribute6
11866                    , l_mti_csr.attribute7
11867                    , l_mti_csr.attribute8
11868                    , l_mti_csr.attribute9
11869                    , l_mti_csr.attribute10
11870                    , l_mti_csr.attribute11
11871                    , l_mti_csr.attribute12
11872                    , l_mti_csr.attribute13
11873                    , l_mti_csr.attribute14
11874                    , l_mti_csr.attribute15
11875                    , l_mti_csr.movement_id
11876                    , l_mti_csr.source_project_id
11877                    , l_mti_csr.source_task_id
11878                    , l_mti_csr.expenditure_type
11879                    , l_mti_csr.pa_expenditure_org_id
11880                    , l_mti_csr.project_id
11881                    , l_mti_csr.task_id
11882                    , l_mti_csr.to_project_id
11883                    , l_mti_csr.to_task_id
11884                    , 'N'
11885                    , NVL(l_mti_csr.final_completion_flag,Decode(l_patchset_j,1,l_mti_csr.final_completion_flag,'N'))
11886                    , l_mti_csr.transfer_percentage
11887                    , l_mti_csr.material_account
11888                    , l_mti_csr.material_overhead_account
11889                    , l_mti_csr.resource_account
11890                    , l_mti_csr.outside_processing_account
11891                    , l_mti_csr.overhead_account
11892                    , l_mti_csr.cost_group_id
11893                    , l_mti_csr.flow_schedule
11894                    , l_mti_csr.qa_collection_id
11895                    , l_mti_csr.overcompletion_transaction_qty
11896                    ,                         /* Overcompletion Transactions */
11897                      l_mti_csr.overcompletion_primary_qty
11898                    , l_mti_csr.overcompletion_transaction_id
11899                    , l_mti_csr.end_item_unit_number
11900                    , l_mti_csr.org_cost_group_id
11901                    , l_mti_csr.cost_type_id
11902                    , DECODE (l_mti_csr.transaction_source_type_id
11903                            , 4, l_mti_csr.source_line_id
11904                            , NULL
11905                             )
11906                    , l_mti_csr.lpn_id
11907                    , l_mti_csr.content_lpn_id
11908                    , l_mti_csr.transfer_lpn_id
11909                    , l_mti_csr.organization_type
11910                    , l_mti_csr.transfer_organization_type
11911                    , l_mti_csr.owning_organization_id
11912                    , l_mti_csr.owning_tp_type
11913                    , l_mti_csr.xfr_owning_organization_id
11914                    , l_mti_csr.transfer_owning_tp_type
11915                    , l_mti_csr.planning_organization_id
11916                    , l_mti_csr.planning_tp_type
11917                    , l_mti_csr.xfr_planning_organization_id
11918                    , l_mti_csr.transfer_planning_tp_type
11919                    , l_mti_csr.transaction_batch_id
11920                    , l_mti_csr.transaction_batch_seq
11921                    , l_mti_csr.transfer_cost_group_id
11922                    ,
11923                      --this goes into transaction_mode
11924                      DECODE (p_validation_level
11925                            , fnd_api.g_valid_level_none, l_mti_csr.transaction_mode
11926                            , inv_txn_manager_grp.proc_mode_mti
11927                             )
11928                    , l_mti_csr.rebuild_item_id
11929                    , l_mti_csr.rebuild_activity_id
11930                    , l_mti_csr.rebuild_serial_number
11931                    , l_mti_csr.rebuild_job_name
11932                    , l_mti_csr.kanban_card_id
11933                    , l_mti_csr.accounting_class
11934                    , l_mti_csr.scheduled_flag
11935                    , l_mti_csr.schedule_number
11936                    , l_mti_csr.routing_revision_date
11937                    , l_mti_csr.move_transaction_id
11938                    , l_mti_csr.wip_supply_type
11939                    , l_mti_csr.build_sequence
11940                    , l_mti_csr.bom_revision
11941                    , l_mti_csr.routing_revision
11942                    , l_mti_csr.bom_revision_date
11943                    , l_mti_csr.alternate_bom_designator
11944                    , l_mti_csr.alternate_routing_designator
11945                    , l_mti_csr.secondary_transaction_quantity
11946                    , l_mti_csr.secondary_uom_code
11947                    , l_mti_csr.parent_id
11948                    , l_mti_csr.relieve_reservations_flag   /*** {{ R12 Enhanced reservations code changes ***/
11949                    , l_mti_csr.relieve_high_level_rsv_flag /*** {{ R12 Enhanced reservations code changes ***/
11950                     );
11951 
11952         IF (l_debug = 1)
11953         THEN
11954           mydebug ('breadcrumb 40', 'tmpinsert2');
11955         END IF;
11956 
11957 
11958         --For each MTI there will be a corresponding only one MTLI
11959         FOR l_mtli_csr IN mtli_csr(l_transaction_interface_id) LOOP
11960 
11961         IF (l_debug = 1)
11962         THEN
11963           mydebug ('breadcrumb 50', 'tmpinsert2');
11964           mydebug ('Inserting into MTLI', 'tmpinsert2');
11965         END IF;
11966 
11967         INSERT INTO mtl_transaction_lots_temp
11968                     (transaction_temp_id
11969                    , lot_number
11970                    , lot_expiration_date
11971                    , last_updated_by
11972                    , last_update_date
11973                    , creation_date
11974                    , created_by
11975                    , last_update_login
11976                    , program_application_id
11977                    , program_id
11978                    , program_update_date
11979                    , request_id
11980                    , primary_quantity
11981                    , transaction_quantity
11982                    , serial_transaction_temp_id
11983                    , lot_attribute_category
11984                    , c_attribute1
11985                    , c_attribute2
11986                    , c_attribute3
11987                    , c_attribute4
11988                    , c_attribute5
11989                    , c_attribute6
11990                    , c_attribute7
11991                    , c_attribute8
11992                    , c_attribute9
11993                    , c_attribute10
11994                    , c_attribute11
11995                    , c_attribute12
11996                    , c_attribute13
11997                    , c_attribute14
11998                    , c_attribute15
11999                    , c_attribute16
12000                    , c_attribute17
12001                    , c_attribute18
12002                    , c_attribute19
12003                    , c_attribute20
12004                    , d_attribute1
12005                    , d_attribute2
12006                    , d_attribute3
12007                    , d_attribute4
12008                    , d_attribute5
12009                    , d_attribute6
12010                    , d_attribute7
12011                    , d_attribute8
12012                    , d_attribute9
12013                    , d_attribute10
12014                    , n_attribute1
12015                    , n_attribute2
12016                    , n_attribute3
12017                    , n_attribute4
12018                    , n_attribute5
12019                    , n_attribute6
12020                    , n_attribute7
12021                    , n_attribute8
12022                    , n_attribute9
12023                    , n_attribute10
12024                    , attribute1
12025                    , attribute2
12026                    , attribute3
12027                    , attribute4
12028                    , attribute5
12029                    , attribute6
12030                    , attribute7
12031                    , attribute8
12032                    , attribute9
12033                    , attribute10
12034                    , attribute11
12035                    , attribute12
12036                    , attribute13
12037                    , attribute14
12038                    , attribute15
12039                    , attribute_category
12040                    , group_header_id
12041                    , description
12042                    , vendor_name
12043                    , supplier_lot_number
12044                    , origination_date
12045                    , date_code
12046                    , grade_code
12047                    , change_date
12048                    , maturity_date
12049                    , status_id
12050                    , retest_date
12051                    , age
12052                    , item_size
12053                    , color
12054                    , volume
12055                    , volume_uom
12056                    , place_of_origin
12057                    , best_by_date
12058                    , LENGTH
12059                    , length_uom
12060                    , recycled_content
12061                    , thickness
12062                    , thickness_uom
12063                    , width
12064                    , width_uom
12065                    , curl_wrinkle_fold
12066                    , vendor_id
12067                    , territory_code
12068                    , parent_lot_number
12069                    , origination_type
12070                    , expiration_action_date
12071                    , expiration_action_code
12072                    , hold_date
12073                    , reason_id
12074                    , secondary_quantity
12075                      --R12 Genealogy enhancements
12076                    , parent_object_type
12077                          , parent_object_id
12078                          , parent_object_number
12079                          , parent_item_id
12080                          , parent_object_type2
12081                          , parent_object_id2
12082                          , parent_object_number2
12083                      --R12 Genealogy enhancements
12084                     )
12085              VALUES (l_mtli_csr.transaction_interface_id
12086                    , l_mtli_csr.lot_number
12087                    , l_mtli_csr.lot_expiration_date
12088                    , l_user_id
12089                    , l_sysdate
12090                    , l_sysdate
12091                    , l_user_id
12092                    , l_login_id
12093                    , l_mtli_csr.program_application_id
12094                    , l_mtli_csr.program_id
12095                    , l_mtli_csr.program_update_date
12096                    , l_mtli_csr.request_id
12097                    , l_mtli_csr.primary_quantity
12098                    , l_mtli_csr.transaction_quantity
12099                    , l_mtli_csr.serial_transaction_temp_id
12100                    , l_mtli_csr.lot_attribute_category
12101                    , l_mtli_csr.c_attribute1
12102                    , l_mtli_csr.c_attribute2
12103                    , l_mtli_csr.c_attribute3
12104                    , l_mtli_csr.c_attribute4
12105                    , l_mtli_csr.c_attribute5
12106                    , l_mtli_csr.c_attribute6
12107                    , l_mtli_csr.c_attribute7
12108                    , l_mtli_csr.c_attribute8
12109                    , l_mtli_csr.c_attribute9
12110                    , l_mtli_csr.c_attribute10
12111                    , l_mtli_csr.c_attribute11
12112                    , l_mtli_csr.c_attribute12
12113                    , l_mtli_csr.c_attribute13
12114                    , l_mtli_csr.c_attribute14
12115                    , l_mtli_csr.c_attribute15
12116                    , l_mtli_csr.c_attribute16
12117                    , l_mtli_csr.c_attribute17
12118                    , l_mtli_csr.c_attribute18
12119                    , l_mtli_csr.c_attribute19
12120                    , l_mtli_csr.c_attribute20
12121                    , l_mtli_csr.d_attribute1
12122                    , l_mtli_csr.d_attribute2
12123                    , l_mtli_csr.d_attribute3
12124                    , l_mtli_csr.d_attribute4
12125                    , l_mtli_csr.d_attribute5
12126                    , l_mtli_csr.d_attribute6
12127                    , l_mtli_csr.d_attribute7
12128                    , l_mtli_csr.d_attribute8
12129                    , l_mtli_csr.d_attribute9
12130                    , l_mtli_csr.d_attribute10
12131                    , l_mtli_csr.n_attribute1
12132                    , l_mtli_csr.n_attribute2
12133                    , l_mtli_csr.n_attribute3
12134                    , l_mtli_csr.n_attribute4
12135                    , l_mtli_csr.n_attribute5
12136                    , l_mtli_csr.n_attribute6
12137                    , l_mtli_csr.n_attribute7
12138                    , l_mtli_csr.n_attribute8
12139                    , l_mtli_csr.n_attribute9
12140                    , l_mtli_csr.n_attribute10
12141                    , l_mtli_csr.attribute1
12142                    , l_mtli_csr.attribute2
12143                    , l_mtli_csr.attribute3
12144                    , l_mtli_csr.attribute4
12145                    , l_mtli_csr.attribute5
12146                    , l_mtli_csr.attribute6
12147                    , l_mtli_csr.attribute7
12148                    , l_mtli_csr.attribute8
12149                    , l_mtli_csr.attribute9
12150                    , l_mtli_csr.attribute10
12151                    , l_mtli_csr.attribute11
12152                    , l_mtli_csr.attribute12
12153                    , l_mtli_csr.attribute13
12154                    , l_mtli_csr.attribute14
12155                    , l_mtli_csr.attribute15
12156                    , l_mtli_csr.attribute_category
12157                    , l_mtli_csr.p_header_id
12158                    , l_mtli_csr.description
12159                    , l_mtli_csr.vendor_name
12160                    , l_mtli_csr.supplier_lot_number
12161                    , l_mtli_csr.origination_date
12162                    , l_mtli_csr.date_code
12163                    , l_mtli_csr.grade_code
12164                    , l_mtli_csr.change_date
12165                    , l_mtli_csr.maturity_date
12166                    , l_mtli_csr.status_id
12167                    , l_mtli_csr.retest_date
12168                    , l_mtli_csr.age
12169                    , l_mtli_csr.item_size
12170                    , l_mtli_csr.color
12171                    , l_mtli_csr.volume
12172                    , l_mtli_csr.volume_uom
12173                    , l_mtli_csr.place_of_origin
12174                    , l_mtli_csr.best_by_date
12175                    , l_mtli_csr.LENGTH
12176                    , l_mtli_csr.length_uom
12177                    , l_mtli_csr.recycled_content
12178                    , l_mtli_csr.thickness
12179                    , l_mtli_csr.thickness_uom
12180                    , l_mtli_csr.width
12181                    , l_mtli_csr.width_uom
12182                    , l_mtli_csr.curl_wrinkle_fold
12183                    , l_mtli_csr.vendor_id
12184                    , l_mtli_csr.territory_code
12185                    , l_mtli_csr.parent_lot_number
12186                    , l_mtli_csr.origination_type
12187                    , l_mtli_csr.expiration_action_date
12188                    , l_mtli_csr.expiration_action_code
12189                    , l_mtli_csr.hold_date
12190                    , l_mtli_csr.reason_id
12191                    , l_mtli_csr.secondary_transaction_quantity
12192                      --R12 Genealogy enhancements
12193                    , l_mtli_csr.parent_object_type
12194                          , l_mtli_csr.parent_object_id
12195                          , l_mtli_csr.parent_object_number
12196                          , l_mtli_csr.parent_item_id
12197                          , l_mtli_csr.parent_object_type2
12198                          , l_mtli_csr.parent_object_id2
12199                          , l_mtli_csr.parent_object_number2
12200                      --R12 Genealogy enhancements
12201                     );
12202 
12203         IF (l_debug = 1)
12204         THEN
12205           mydebug ('breadcrumb 60', 'tmpinsert2');
12206         END IF;
12207 
12208         /* Need to insert the MSNTs if the item is serial controlled as well */
12209         BEGIN
12210           IF (l_debug = 1)
12211           THEN
12212             mydebug ('Determine the serial control code', 'tmpinsert2');
12213           END IF;
12214 
12215           SELECT serial_number_control_code
12216             INTO l_serial_code
12217             FROM mtl_system_items
12218            WHERE inventory_item_id = l_mti_csr.inventory_item_id
12219              AND organization_id = l_mti_csr.organization_id;
12220         EXCEPTION
12221           WHEN OTHERS
12222           THEN
12223             IF (l_debug = 1)
12224             THEN
12225               mydebug
12226                         ('Cannot fetch the serial control code for the item'
12227                        , 'tmpinsert2'
12228                         );
12229             END IF;
12230 
12231             x_validation_status := 'N';
12232             RAISE fnd_api.g_exc_unexpected_error;
12233         END;
12234 
12235         IF (l_debug = 1)
12236         THEN
12237           mydebug ('breadcrumb 70', 'tmpinsert2');
12238           mydebug ('Serial control code is ' || l_serial_code
12239                      , 'tmpinsert2'
12240                       );
12241         END IF;
12242 
12243         IF (l_serial_code IN (2, 5))
12244         THEN
12245           IF (   l_mti_csr.transaction_action_id =
12246                                               inv_globals.g_action_inv_lot_split
12247               OR l_mti_csr.transaction_action_id =
12248                                               inv_globals.g_action_inv_lot_merge
12249              )
12250           THEN
12251             BEGIN
12252               IF (l_debug = 1)
12253               THEN
12254                 mydebug ('breadcrumb 80', 'tmpinsert2');
12255                 mydebug ('Lot Split/merge transaction', 'tmpinsert2');
12256                 mydebug ('l_mti_csr.transaction_action_id        => ' || l_mti_csr.transaction_action_id
12257                            , 'tmpinsert2'
12258                             );
12259                 mydebug ( 'l_mtli_csr.serial_transaction_temp_id => '|| l_mtli_csr.serial_transaction_temp_id
12260                            , 'tmpinsert2'
12261                             );
12262               END IF;
12263 
12264 
12265               FOR l_ser_csr IN msni_csr (l_mtli_csr.serial_transaction_temp_id)
12266               LOOP
12267                 l_next_serial := l_ser_csr.fm_serial_number;
12268                 l_serial_diff :=
12269                   inv_serial_number_pub.get_serial_diff
12270                                                  (l_ser_csr.fm_serial_number
12271                                                 , l_ser_csr.to_serial_number
12272                                                  );
12273 
12274                 IF (l_debug = 1)
12275                 THEN
12276                   mydebug ('breadcrumb 90', 'tmpinsert2');
12277                   mydebug ('l_next_serial => ' || l_next_serial
12278                              , 'tmpinsert2'
12279                               );
12280                   mydebug ('l_serial_diff => ' || l_serial_diff
12281                              , 'tmpinsert2'
12282                               );
12283                 END IF;
12284 
12285                 IF (l_serial_diff = -1)
12286                 THEN
12287                   fnd_message.set_name ('INV', 'INV_INVALID_SERIAL_RANGE');
12288                   fnd_msg_pub.ADD;
12289                   l_validation_status := 'N';
12290                   RAISE fnd_api.g_exc_error;
12291                 END IF;
12292 
12293                 /***********************************************************************
12294                  * Each MSNI can have a range of serials. Need to expand them and      *
12295                  * process each one individually.                                      *
12296                  ***********************************************************************/
12297 
12298 
12299                 l_next_serial := l_ser_csr.fm_serial_number;
12300                 FOR i IN 1 .. l_serial_diff
12301                 LOOP
12302                   IF (l_debug = 1)
12303                   THEN
12304                     mydebug ('breadcrumb 100', 'tmpinsert2');
12305                   END IF;
12306                   l_old_serial := l_next_serial;
12307 
12308 
12309                   IF (l_debug = 1)
12310                   THEN
12311                     mydebug ('processing serial => ' || l_next_serial
12312                                , 'tmpinsert2'
12313                                 );
12314                     mydebug ('breadcrumb 110', 'tmpinsert2');
12315                   END IF;
12316 
12317                   /************************************************************************************
12318                    * Need to see wether the attributes are present in the MSNI. If yes copy from there*
12319                    *  ..if not copy from MSN...then call validate_serial_attributes....               *
12320                    * Will validate only the resulting MSNTs while for the source MSNTs we will        *
12321                    * just copy the serial attributes from the MSNI to MSNT.                           *
12322                    ************************************************************************************/
12323                   IF (   (    l_mtli_csr.transaction_interface_id <>
12324                                                            l_mti_csr.parent_id
12325                           AND l_mti_csr.transaction_action_id =
12326                                               inv_globals.g_action_inv_lot_split
12327                          )
12328                       OR (    l_mtli_csr.transaction_interface_id =
12329                                                            l_mti_csr.parent_id
12330                           AND l_mti_csr.transaction_action_id =
12331                                               inv_globals.g_action_inv_lot_merge
12332                          )
12333                      )
12334                   THEN
12335                     BEGIN
12336                       IF (l_debug = 1)
12337                       THEN
12338                         mydebug ('breadcrumb 120', 'tmpinsert2');
12339                         mydebug
12340                           ('Processing the child record attrs for split/merge'
12341                          , 'tmpinsert2'
12342                           );
12343                         mydebug ('Calling get_serial_attr_record'
12344                                    , 'tmpinsert2'
12345                                     );
12346                       END IF;
12347 
12348                       get_serial_attr_record
12349                         (x_lot_ser_attr_tbl             => l_ser_attr_tbl
12350                        , p_transaction_interface_id     => l_ser_csr.transaction_interface_id
12351                        , p_serial_number                => l_next_serial
12352                        , p_item_id                      => l_mti_csr.inventory_item_id
12353                        , p_org_id                       => l_mti_csr.organization_id
12354                        , p_fm_serial_number            =>  l_ser_csr.fm_serial_number
12355                        , p_to_serial_number             => l_ser_csr.to_serial_number
12356                        , p_organization_id              => l_mti_csr.organization_id
12357                        , p_inventory_item_id            => l_mti_csr.inventory_item_id
12358                         );
12359                       IF(l_debug = 1) THEN
12360                         mydebug ('Done with get_serial_attr_record'
12361                                      , 'tmpinsert2'
12362                                       );
12363                         mydebug ('l_ser_attr_tbl.count => ' || l_ser_attr_tbl.COUNT
12364                                      , 'tmpinsert2'
12365                                       );
12366                       END IF;
12367 
12368 
12369                     EXCEPTION
12370                       WHEN OTHERS
12371                       THEN
12372                         IF (l_debug = 1)
12373                         THEN
12374                           mydebug
12375                             ('Exception while calling get_Serial_attr_record'
12376                            , 'tmpinsert2'
12377                             );
12378                         END IF;
12379 
12380                         fnd_message.set_name ('WMS', 'WMS_GET_LOT_ATTR_ERROR');
12381                         fnd_msg_pub.ADD;
12382                         l_validation_status := 'N';
12383                         RAISE fnd_api.g_exc_unexpected_error;
12384                     END;
12385 
12386                     BEGIN
12387                       IF (l_debug = 1)
12388                       THEN
12389                         mydebug ('breadcrumb 130', 'tmpinsert2');
12390                         mydebug ('Calling validate_serial_attributes'
12391                                    , 'tmpinsert2'
12392                                     );
12393                       END IF;
12394 
12395                       inv_lot_trx_validation_pub.validate_serial_attributes
12396                           (x_return_status           => x_return_status
12397                          , x_msg_count               => x_msg_count
12398                          , x_msg_data                => x_msg_data
12399                          , x_validation_status       => x_validation_status
12400                          , x_ser_attr_tbl            => l_validated_ser_attr_tbl
12401                          , p_ser_number              => l_next_serial
12402                          , p_organization_id         => l_mti_csr.organization_id
12403                          , p_inventory_item_id       => l_mti_csr.inventory_item_id
12404                          , p_result_ser_attr_tbl     => l_ser_attr_tbl
12405                           );
12406                     EXCEPTION
12407                       WHEN OTHERS
12408                       THEN
12409                         IF (l_debug = 1)
12410                         THEN
12411                           mydebug
12412                               ('validate_serial_attributes rasied exception'
12413                              , 'tmpinsert2'
12414                               );
12415                         END IF;
12416 
12417                         fnd_message.set_name ('WMS'
12418                                             , 'WMS_VALIDATE_ATTR_ERROR');
12419                         fnd_msg_pub.ADD;
12420                         l_validation_status := 'N';
12421                         RAISE fnd_api.g_exc_unexpected_error;
12422                     END;
12423 
12424                     IF (   x_return_status <> fnd_api.g_ret_sts_success
12425                         OR x_validation_status <> 'Y'
12426                        )
12427                     THEN
12428                       IF (l_debug = 1)
12429                       THEN
12430                         mydebug
12431                            ('validate_serial_attributes returned with error'
12432                           , 'tmpinsert2'
12433                            );
12434                       END IF;
12435                       l_validation_status := 'N';
12436                       RAISE fnd_api.g_exc_error;
12437                     END IF;
12438 
12439                     IF (l_debug = 1)
12440                     THEN
12441                       mydebug ('breadcrumb 140', 'tmpinsert2');
12442                       mydebug ('l_validated_ser_attr_tbl.COUNT => ' || l_validated_ser_attr_tbl.COUNT, 'tmpinsert2');
12443                     END IF;
12444 
12445                     FOR j IN 1 .. l_validated_ser_attr_tbl.COUNT
12446                     LOOP
12447                       l_indexed_ser_attr_tbl
12448                                      (l_validated_ser_attr_tbl (j).column_name
12449                                      ).column_value :=
12450                                      l_validated_ser_attr_tbl (j).column_value;
12451                       --mydebug (l_validated_ser_attr_tbl (j).column_name || ' => ' || l_validated_ser_attr_tbl (j).column_value, 'tmpinsert2');
12452                     END LOOP;
12453 
12454                     IF (l_debug = 1)
12455                     THEN
12456                       mydebug ('Inserting into MSNT', 'tmpinsert2');
12457                     END IF;
12458 
12459                     INSERT INTO mtl_serial_numbers_temp
12460                                 (transaction_temp_id
12461                                , last_update_date
12462                                , last_updated_by
12463                                , creation_date
12464                                , created_by
12465                                , last_update_login
12466                                , request_id
12467                                , program_application_id
12468                                , program_id
12469                                , program_update_date
12470                                , vendor_serial_number
12471                                , vendor_lot_number
12472                                , fm_serial_number
12473                                , to_serial_number
12474                                , parent_serial_number
12475                                , dff_updated_flag
12476                                , serial_attribute_category
12477                                , c_attribute1
12478                                , c_attribute2
12479                                , c_attribute3
12480                                , c_attribute4
12481                                , c_attribute5
12482                                , c_attribute6
12483                                , c_attribute7
12484                                , c_attribute8
12485                                , c_attribute9
12486                                , c_attribute10
12487                                , c_attribute11
12488                                , c_attribute12
12489                                , c_attribute13
12490                                , c_attribute14
12491                                , c_attribute15
12492                                , c_attribute16
12493                                , c_attribute17
12494                                , c_attribute18
12495                                , c_attribute19
12496                                , c_attribute20
12497                                , d_attribute1
12498                                , d_attribute2
12499                                , d_attribute3
12500                                , d_attribute4
12501                                , d_attribute5
12502                                , d_attribute6
12503                                , d_attribute7
12504                                , d_attribute8
12505                                , d_attribute9
12506                                , d_attribute10
12507                                , n_attribute1
12508                                , n_attribute2
12509                                , n_attribute3
12510                                , n_attribute4
12511                                , n_attribute5
12512                                , n_attribute6
12513                                , n_attribute7
12514                                , n_attribute8
12515                                , n_attribute9
12516                                , n_attribute10
12517                                , group_header_id
12518                                , attribute_category
12519                                , attribute1
12520                                , attribute2
12521                                , attribute3
12522                                , attribute4
12523                                , attribute5
12524                                , attribute6
12525                                , attribute7
12526                                , attribute8
12527                                , attribute9
12528                                , attribute10
12529                                , attribute11
12530                                , attribute12
12531                                , attribute13
12532                                , attribute14
12533                                , attribute15
12534                                , status_id
12535                                , territory_code
12536                                , time_since_new
12537                                , cycles_since_new
12538                                , time_since_overhaul
12539                                , cycles_since_overhaul
12540                                , time_since_repair
12541                                , cycles_since_repair
12542                                , time_since_visit
12543                                , cycles_since_visit
12544                                , time_since_mark
12545                                , cycles_since_mark
12546                                , number_of_repairs
12547                                 )
12548                          VALUES (l_ser_csr.transaction_interface_id
12549                                , l_sysdate
12550                                , l_ser_csr.last_updated_by
12551                                , l_sysdate
12552                                , l_ser_csr.created_by
12553                                , l_ser_csr.last_update_login
12554                                , l_ser_csr.request_id
12555                                , l_ser_csr.program_application_id
12556                                , l_ser_csr.program_id
12557                                , l_ser_csr.program_update_date
12558                                , l_ser_csr.vendor_serial_number
12559                                , l_ser_csr.vendor_lot_number
12560                                , l_next_serial
12561                                , l_next_serial
12562                                , l_ser_csr.parent_serial_number
12563                                , 'Y'
12564                                , l_indexed_ser_attr_tbl('SERIAL_ATTRIBUTE_CATEGORY').column_value
12565                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE1').column_value
12566                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE2').column_value
12567                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE3').column_value
12568                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE4').column_value
12569                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE5').column_value
12570                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE6').column_value
12571                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE7').column_value
12572                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE8').column_value
12573                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE9').column_value
12574                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE10').column_value
12575                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE11').column_value
12576                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE12').column_value
12577                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE13').column_value
12578                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE14').column_value
12579                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE15').column_value
12580                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE16').column_value
12581                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE17').column_value
12582                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE18').column_value
12583                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE19').column_value
12584                                , l_indexed_ser_attr_tbl ('C_ATTRIBUTE20').column_value
12585                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE1').column_value
12586                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE2').column_value
12587                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE3').column_value
12588                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE4').column_value
12589                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE5').column_value
12590                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE6').column_value
12591                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE7').column_value
12592                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE8').column_value
12593                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE9').column_value
12594                                , l_indexed_ser_attr_tbl ('D_ATTRIBUTE10').column_value
12595                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE1').column_value
12596                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE2').column_value
12597                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE3').column_value
12598                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE4').column_value
12599                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE5').column_value
12600                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE6').column_value
12601                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE7').column_value
12602                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE8').column_value
12603                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE9').column_value
12604                                , l_indexed_ser_attr_tbl ('N_ATTRIBUTE10').column_value
12605                                , p_header_id                    -- Added for J
12606                                , l_indexed_ser_attr_tbl ('ATTRIBUTE_CATEGORY').column_value
12607                                , l_indexed_ser_attr_tbl ('ATTRIBUTE1').column_value
12608                                , l_indexed_ser_attr_tbl ('ATTRIBUTE2').column_value
12609                                , l_indexed_ser_attr_tbl ('ATTRIBUTE3').column_value
12610                                , l_indexed_ser_attr_tbl ('ATTRIBUTE4').column_value
12611                                , l_indexed_ser_attr_tbl ('ATTRIBUTE5').column_value
12612                                , l_indexed_ser_attr_tbl ('ATTRIBUTE6').column_value
12613                                , l_indexed_ser_attr_tbl ('ATTRIBUTE7').column_value
12614                                , l_indexed_ser_attr_tbl ('ATTRIBUTE8').column_value
12615                                , l_indexed_ser_attr_tbl ('ATTRIBUTE9').column_value
12616                                , l_indexed_ser_attr_tbl ('ATTRIBUTE10').column_value
12617                                , l_indexed_ser_attr_tbl ('ATTRIBUTE11').column_value
12618                                , l_indexed_ser_attr_tbl ('ATTRIBUTE12').column_value
12619                                , l_indexed_ser_attr_tbl ('ATTRIBUTE13').column_value
12620                                , l_indexed_ser_attr_tbl ('ATTRIBUTE14').column_value
12621                                , l_indexed_ser_attr_tbl ('ATTRIBUTE15').column_value
12622                                , l_ser_csr.status_id
12623                                , l_indexed_ser_attr_tbl ('TERRITORY_CODE').column_value
12624                                , l_indexed_ser_attr_tbl ('TIME_SINCE_NEW').column_value
12625                                , l_indexed_ser_attr_tbl ('CYCLES_SINCE_NEW').column_value
12626                                , l_indexed_ser_attr_tbl ('TIME_SINCE_OVERHAUL').column_value
12627                                , l_indexed_ser_attr_tbl ('CYCLES_SINCE_OVERHAUL').column_value
12628                                , l_indexed_ser_attr_tbl ('TIME_SINCE_REPAIR').column_value
12629                                , l_indexed_ser_attr_tbl ('CYCLES_SINCE_REPAIR').column_value
12630                                , l_indexed_ser_attr_tbl ('TIME_SINCE_VISIT').column_value
12631                                , l_indexed_ser_attr_tbl ('CYCLES_SINCE_VISIT').column_value
12632                                , l_indexed_ser_attr_tbl ('TIME_SINCE_MARK').column_value
12633                                , l_indexed_ser_attr_tbl ('CYCLES_SINCE_MARK').column_value
12634                                , l_indexed_ser_attr_tbl ('NUMBER_OF_REPAIRS').column_value
12635                                 );
12636 
12637                     IF (l_debug = 1)
12638                     THEN
12639                       mydebug ('breadcrumb 150', 'tmpinsert2');
12640                     END IF;
12641                   ELSE
12642                   /*These are the source MSNTs ...no need to validate the source MSNT attrs*/
12643                     IF (l_debug = 1)
12644                     THEN
12645                       mydebug ('breadcrumb 160', 'tmpinsert2');
12646                       mydebug
12647                            ('Inserting MSNTs for the source for split/merge'
12648                           , 'tmpinsert2'
12649                            );
12650                     END IF;
12651 
12652                     INSERT INTO mtl_serial_numbers_temp
12653                                 (transaction_temp_id
12654                                , last_update_date
12655                                , last_updated_by
12656                                , creation_date
12657                                , created_by
12658                                , last_update_login
12659                                , request_id
12660                                , program_application_id
12661                                , program_id
12662                                , program_update_date
12663                                , vendor_serial_number
12664                                , vendor_lot_number
12665                                , fm_serial_number
12666                                , to_serial_number
12667                                , parent_serial_number
12668                                , dff_updated_flag
12669                                , serial_attribute_category
12670                                , c_attribute1
12671                                , c_attribute2
12672                                , c_attribute3
12673                                , c_attribute4
12674                                , c_attribute5
12675                                , c_attribute6
12676                                , c_attribute7
12677                                , c_attribute8
12678                                , c_attribute9
12679                                , c_attribute10
12680                                , c_attribute11
12681                                , c_attribute12
12682                                , c_attribute13
12683                                , c_attribute14
12684                                , c_attribute15
12685                                , c_attribute16
12686                                , c_attribute17
12687                                , c_attribute18
12688                                , c_attribute19
12689                                , c_attribute20
12690                                , d_attribute1
12691                                , d_attribute2
12692                                , d_attribute3
12693                                , d_attribute4
12694                                , d_attribute5
12695                                , d_attribute6
12696                                , d_attribute7
12697                                , d_attribute8
12698                                , d_attribute9
12699                                , d_attribute10
12700                                , n_attribute1
12701                                , n_attribute2
12702                                , n_attribute3
12703                                , n_attribute4
12704                                , n_attribute5
12705                                , n_attribute6
12706                                , n_attribute7
12707                                , n_attribute8
12708                                , n_attribute9
12709                                , n_attribute10
12710                                , group_header_id
12711                                , attribute_category
12712                                , attribute1
12713                                , attribute2
12714                                , attribute3
12715                                , attribute4
12716                                , attribute5
12717                                , attribute6
12718                                , attribute7
12719                                , attribute8
12720                                , attribute9
12721                                , attribute10
12722                                , attribute11
12723                                , attribute12
12724                                , attribute13
12725                                , attribute14
12726                                , attribute15
12727                                , status_id
12728                                , territory_code
12729                                , time_since_new
12730                                , cycles_since_new
12731                                , time_since_overhaul
12732                                , cycles_since_overhaul
12733                                , time_since_repair
12734                                , cycles_since_repair
12735                                , time_since_visit
12736                                , cycles_since_visit
12737                                , time_since_mark
12738                                , cycles_since_mark
12739                                , number_of_repairs
12740                                 )
12741                          VALUES (l_ser_csr.transaction_interface_id
12742                                , l_sysdate
12743                                , l_user_id
12744                                , l_sysdate
12745                                , l_user_id
12746                                , l_login_id
12747                                , l_ser_csr.request_id
12748                                , l_ser_csr.program_application_id
12749                                , l_ser_csr.program_id
12750                                , l_ser_csr.program_update_date
12751                                , l_ser_csr.vendor_serial_number
12752                                , l_ser_csr.vendor_lot_number
12753                                , l_next_serial
12754                                , l_next_serial
12755                                , l_ser_csr.parent_serial_number
12756                                , 'Y'
12757                                , l_ser_csr.serial_attribute_category
12758                                , l_ser_csr.c_attribute1
12759                                , l_ser_csr.c_attribute2
12760                                , l_ser_csr.c_attribute3
12761                                , l_ser_csr.c_attribute4
12762                                , l_ser_csr.c_attribute5
12763                                , l_ser_csr.c_attribute6
12764                                , l_ser_csr.c_attribute7
12765                                , l_ser_csr.c_attribute8
12766                                , l_ser_csr.c_attribute9
12767                                , l_ser_csr.c_attribute10
12768                                , l_ser_csr.c_attribute11
12769                                , l_ser_csr.c_attribute12
12770                                , l_ser_csr.c_attribute13
12771                                , l_ser_csr.c_attribute14
12772                                , l_ser_csr.c_attribute15
12773                                , l_ser_csr.c_attribute16
12774                                , l_ser_csr.c_attribute17
12775                                , l_ser_csr.c_attribute18
12776                                , l_ser_csr.c_attribute19
12777                                , l_ser_csr.c_attribute20
12778                                , l_ser_csr.d_attribute1
12779                                , l_ser_csr.d_attribute2
12780                                , l_ser_csr.d_attribute3
12781                                , l_ser_csr.d_attribute4
12782                                , l_ser_csr.d_attribute5
12783                                , l_ser_csr.d_attribute6
12784                                , l_ser_csr.d_attribute7
12785                                , l_ser_csr.d_attribute8
12786                                , l_ser_csr.d_attribute9
12787                                , l_ser_csr.d_attribute10
12788                                , l_ser_csr.n_attribute1
12789                                , l_ser_csr.n_attribute2
12790                                , l_ser_csr.n_attribute3
12791                                , l_ser_csr.n_attribute4
12792                                , l_ser_csr.n_attribute5
12793                                , l_ser_csr.n_attribute6
12794                                , l_ser_csr.n_attribute7
12795                                , l_ser_csr.n_attribute8
12796                                , l_ser_csr.n_attribute9
12797                                , l_ser_csr.n_attribute10
12798                                , p_header_id
12799                                , l_ser_csr.attribute_category
12800                                , l_ser_csr.attribute1
12801                                , l_ser_csr.attribute2
12802                                , l_ser_csr.attribute3
12803                                , l_ser_csr.attribute4
12804                                , l_ser_csr.attribute5
12805                                , l_ser_csr.attribute6
12806                                , l_ser_csr.attribute7
12807                                , l_ser_csr.attribute8
12808                                , l_ser_csr.attribute9
12809                                , l_ser_csr.attribute10
12810                                , l_ser_csr.attribute11
12811                                , l_ser_csr.attribute12
12812                                , l_ser_csr.attribute13
12813                                , l_ser_csr.attribute14
12814                                , l_ser_csr.attribute15
12815                                , l_ser_csr.status_id
12816                                , l_ser_csr.territory_code
12817                                , l_ser_csr.time_since_new
12818                                , l_ser_csr.cycles_since_new
12819                                , l_ser_csr.time_since_overhaul
12820                                , l_ser_csr.cycles_since_overhaul
12821                                , l_ser_csr.time_since_repair
12822                                , l_ser_csr.cycles_since_repair
12823                                , l_ser_csr.time_since_visit
12824                                , l_ser_csr.cycles_since_visit
12825                                , l_ser_csr.time_since_mark
12826                                , l_ser_csr.cycles_since_mark
12827                                , l_ser_csr.number_of_repairs
12828                                 );
12829                   END IF;
12830                   l_next_serial :=
12831                     inv_serial_number_pub.increment_ser_num
12832                                                                (l_old_serial
12833                                                               , 1
12834                                                                );
12835 
12836                   IF (l_next_serial = l_old_serial)
12837                   THEN
12838                     IF (l_debug = 1)
12839                     THEN
12840                       mydebug ('Error in increment_serial_number '
12841                                  , 'tmpinsert2'
12842                                   );
12843                     END IF;
12844 
12845                     fnd_message.set_name ('INV', 'INVALID_SERIAL_NUMBER');
12846                     fnd_msg_pub.ADD;
12847                     l_validation_status := 'N';
12848                     RAISE fnd_api.g_exc_error;
12849                   END IF;
12850 
12851                 END LOOP;
12852               END LOOP;
12853 
12854               IF (l_debug = 1)
12855               THEN
12856                 mydebug ('breadcrumb 170', 'tmpinsert2');
12857               END IF;
12858             EXCEPTION
12859               WHEN NO_DATA_FOUND
12860               THEN
12861                 IF (l_debug = 1)
12862                 THEN
12863                   mydebug
12864                     ('NO_DATA_FOUND while inserting into MSNT for lot /split'
12865                    , ''
12866                     );
12867                 END IF;
12868 
12869                 l_validation_status := 'N';
12870                 RAISE fnd_api.g_exc_unexpected_error;
12871               WHEN OTHERS
12872               THEN
12873                 IF (l_debug = 1)
12874                 THEN
12875                   mydebug
12876                     ('exception raised while inserting into MSNT for lot split/merge'
12877                    , SQLERRM
12878                     );
12879                 END IF;
12880                 RAISE fnd_api.g_exc_unexpected_error;
12881             END;
12882           ELSE
12883             IF (l_debug = 1)
12884             THEN
12885               mydebug ('This is lot translate transaction', 'tmpinsert2');
12886               mydebug ('breadcrumb 180', 'tmpinsert2');
12887             END IF;
12888 
12889             /******************************************************************************
12890              *Lot translate transaction. Users are not expected to populate the MSNIs for *
12891              *Lot Translate txns. We need to generate the MSNTs based on MTLIs and MSN.   *
12892              ******************************************************************************/
12893             SELECT mtl_material_transactions_s.NEXTVAL
12894               INTO l_sequence
12895               FROM DUAL;
12896             /******************************************************************************
12897              *If this is the resulting MTIs then we need to query the against the source  *
12898              *item, lot and subinventory because after lot translate these may get changed*
12899              *and there wil be no record in the MSN for the new lot etc.                  *
12900              ******************************************************************************/
12901 
12902             /* Bug:5408823. Also fetching lpn_id column from MTI. */
12903             IF(l_mti_csr.transaction_interface_id <> l_mti_csr.parent_id) THEN
12904             SELECT  mti.inventory_item_id
12905                   , mtli.lot_number
12906                   , mti.subinventory_code
12907                   , mti.locator_id
12908                   , mti.lpn_id
12909               INTO l_old_item_id
12910                   ,l_old_lot_num
12911                   ,l_old_sub_code
12912                   ,l_old_locator_id
12913                   ,l_old_lpn_id
12914               FROM mtl_transactions_interface mti
12915                   ,mtl_transaction_lots_interface mtli
12916               WHERE mti.transaction_interface_id = mtli.transaction_interface_id
12917               AND   mti.transaction_interface_id = mti.parent_id
12918               AND   mti.transaction_interface_id  = l_mti_csr.parent_id;
12919               IF(l_old_item_id <> l_mti_csr.inventory_item_id) THEN
12920               --Check if the source and destination Items have the attribute context.
12921                 IF(l_debug = 1) THEN
12922                     mydebug('In Lot translate : dest Records : checking DFF context', 'tmpinsert2');
12923                 END IF;
12924                 inv_lot_sel_attr.get_context_code(
12925                  context_value  => l_context_value_src
12926                 ,org_id         => l_mti_csr.organization_id
12927                 ,item_id        => l_old_item_id
12928                 ,flex_name      => 'Serial Attributes'
12929                 ,p_lot_serial_number    => null);
12930 
12931                 IF(l_debug = 1) THEN
12932                    mydebug('l_context_value_src => '|| l_context_value_src, 'tmpinsert2');
12933                 END IF;
12934 
12935                 inv_lot_sel_attr.get_context_code(
12936                  context_value  => l_context_value_dst
12937                 ,org_id         => l_mti_csr.organization_id
12938                 ,item_id        => l_mti_csr.inventory_item_id
12939                 ,flex_name      => 'Serial Attributes'
12940                 ,p_lot_serial_number    => null);
12941 
12942                 IF(l_debug = 1) THEN
12943                    mydebug('l_context_value_dst => '|| l_context_value_dst, 'tmpinsert2');
12944                 END IF;
12945 
12946                 IF( NOT(
12947                         (l_context_value_src IS NULL AND l_context_value_dst IS NULL)  OR
12948                         (l_context_value_src = l_context_value_dst)
12949                         )
12950                   ) THEN
12951                  IF(l_debug = 1) THEN
12952                         mydebug('breadcrumb 185', 'tmpinsert2');
12953                         mydebug('Lot translate : Items have different Serial Attr Context', 'tmpinsert2');
12954                  END IF;
12955                  fnd_message.set_name ('INV', 'INV_SERIAL_CONTEXT_DIFF');
12956                  fnd_msg_pub.ADD;
12957                  RAISE fnd_api.g_exc_error;
12958                  l_validation_status := 'N';
12959                 END IF;
12960               END IF;
12961             ELSE    /*Source MTIs*/
12962                    l_old_item_id    := l_mti_csr.inventory_item_id;
12963                    l_old_lot_num    := l_mtli_csr.lot_number;
12964                    l_old_sub_code   := l_mti_csr.subinventory_code;
12965                    l_old_locator_id := l_mti_csr.locator_id;
12966                    l_old_lpn_id     := l_mti_csr.lpn_id; --Bug 5408823
12967             END IF;
12968 
12969             /*Bug:5408823. Added new parameter l_old_lpn_id to pass lpn_id. */
12970             FOR l_ser_csr IN msn_csr (l_old_lot_num
12971                                     , l_old_item_id
12972                                     , l_old_sub_code
12973                                     , l_old_locator_id
12974                                     , l_mti_csr.organization_id
12975                                     , l_old_lpn_id
12976                                      )
12977             LOOP
12978               IF (l_debug = 1)
12979               THEN
12980                 mydebug ('breadcrumb 190', 'tmpinsert2');
12981                 mydebug ('In loop Inserting MSNT for serial => ' || l_ser_csr.serial_number
12982                            , 'tmpinsert2'
12983                             );
12984               END IF;
12985 
12986               INSERT INTO mtl_serial_numbers_temp
12987                           (transaction_temp_id
12988                          , last_update_date
12989                          , last_updated_by
12990                          , creation_date
12991                          , created_by
12992                          , last_update_login
12993                          , request_id
12994                          , program_application_id
12995                          , program_id
12996                          , program_update_date
12997                          , vendor_serial_number
12998                          , vendor_lot_number
12999                          , fm_serial_number
13000                          , to_serial_number
13001                          , parent_serial_number
13002                          , serial_attribute_category
13003                          , c_attribute1
13004                          , c_attribute2
13005                          , c_attribute3
13006                          , c_attribute4
13007                          , c_attribute5
13008                          , c_attribute6
13009                          , c_attribute7
13010                          , c_attribute8
13011                          , c_attribute9
13012                          , c_attribute10
13013                          , c_attribute11
13014                          , c_attribute12
13015                          , c_attribute13
13016                          , c_attribute14
13017                          , c_attribute15
13018                          , c_attribute16
13019                          , c_attribute17
13020                          , c_attribute18
13021                          , c_attribute19
13022                          , c_attribute20
13023                          , d_attribute1
13024                          , d_attribute2
13025                          , d_attribute3
13026                          , d_attribute4
13027                          , d_attribute5
13028                          , d_attribute6
13029                          , d_attribute7
13030                          , d_attribute8
13031                          , d_attribute9
13032                          , d_attribute10
13033                          , n_attribute1
13034                          , n_attribute2
13035                          , n_attribute3
13036                          , n_attribute4
13037                          , n_attribute5
13038                          , n_attribute6
13039                          , n_attribute7
13040                          , n_attribute8
13041                          , n_attribute9
13042                          , n_attribute10
13043                          , group_header_id
13044                          , attribute_category
13045                          , attribute1
13046                          , attribute2
13047                          , attribute3
13048                          , attribute4
13049                          , attribute5
13050                          , attribute6
13051                          , attribute7
13052                          , attribute8
13053                          , attribute9
13054                          , attribute10
13055                          , attribute11
13056                          , attribute12
13057                          , attribute13
13058                          , attribute14
13059                          , attribute15
13060                          , status_id
13061                          , territory_code
13062                          , time_since_new
13063                          , cycles_since_new
13064                          , time_since_overhaul
13065                          , cycles_since_overhaul
13066                          , time_since_repair
13067                          , cycles_since_repair
13068                          , time_since_visit
13069                          , cycles_since_visit
13070                          , time_since_mark
13071                          , cycles_since_mark
13072                          , number_of_repairs
13073                           )
13074                    VALUES (l_sequence
13075                          , l_sysdate
13076                          , l_user_id
13077                          , l_sysdate
13078                          , l_user_id
13079                          , l_login_id
13080                          , l_ser_csr.request_id
13081                          , l_ser_csr.program_application_id
13082                          , l_ser_csr.program_id
13083                          , l_ser_csr.program_update_date
13084                          , l_ser_csr.vendor_serial_number
13085                          , l_ser_csr.vendor_lot_number
13086                          , l_ser_csr.serial_number
13087                          , l_ser_csr.serial_number
13088                          , l_ser_csr.parent_serial_number
13089                          , l_ser_csr.serial_attribute_category
13090                          , l_ser_csr.c_attribute1
13091                          , l_ser_csr.c_attribute2
13092                          , l_ser_csr.c_attribute3
13093                          , l_ser_csr.c_attribute4
13094                          , l_ser_csr.c_attribute5
13095                          , l_ser_csr.c_attribute6
13096                          , l_ser_csr.c_attribute7
13097                          , l_ser_csr.c_attribute8
13098                          , l_ser_csr.c_attribute9
13099                          , l_ser_csr.c_attribute10
13100                          , l_ser_csr.c_attribute11
13101                          , l_ser_csr.c_attribute12
13102                          , l_ser_csr.c_attribute13
13103                          , l_ser_csr.c_attribute14
13104                          , l_ser_csr.c_attribute15
13105                          , l_ser_csr.c_attribute16
13106                          , l_ser_csr.c_attribute17
13107                          , l_ser_csr.c_attribute18
13108                          , l_ser_csr.c_attribute19
13109                          , l_ser_csr.c_attribute20
13110                          , l_ser_csr.d_attribute1
13111                          , l_ser_csr.d_attribute2
13112                          , l_ser_csr.d_attribute3
13113                          , l_ser_csr.d_attribute4
13114                          , l_ser_csr.d_attribute5
13115                          , l_ser_csr.d_attribute6
13116                          , l_ser_csr.d_attribute7
13117                          , l_ser_csr.d_attribute8
13118                          , l_ser_csr.d_attribute9
13119                          , l_ser_csr.d_attribute10
13120                          , l_ser_csr.n_attribute1
13121                          , l_ser_csr.n_attribute2
13122                          , l_ser_csr.n_attribute3
13123                          , l_ser_csr.n_attribute4
13124                          , l_ser_csr.n_attribute5
13125                          , l_ser_csr.n_attribute6
13126                          , l_ser_csr.n_attribute7
13127                          , l_ser_csr.n_attribute8
13128                          , l_ser_csr.n_attribute9
13129                          , l_ser_csr.n_attribute10
13130                          , p_header_id
13131                          , l_ser_csr.attribute_category
13132                          , l_ser_csr.attribute1
13133                          , l_ser_csr.attribute2
13134                          , l_ser_csr.attribute3
13135                          , l_ser_csr.attribute4
13136                          , l_ser_csr.attribute5
13137                          , l_ser_csr.attribute6
13138                          , l_ser_csr.attribute7
13139                          , l_ser_csr.attribute8
13140                          , l_ser_csr.attribute9
13141                          , l_ser_csr.attribute10
13142                          , l_ser_csr.attribute11
13143                          , l_ser_csr.attribute12
13144                          , l_ser_csr.attribute13
13145                          , l_ser_csr.attribute14
13146                          , l_ser_csr.attribute15
13147                          , l_ser_csr.status_id
13148                          , l_ser_csr.territory_code
13149                          , l_ser_csr.time_since_new
13150                          , l_ser_csr.cycles_since_new
13151                          , l_ser_csr.time_since_overhaul
13152                          , l_ser_csr.cycles_since_overhaul
13153                          , l_ser_csr.time_since_repair
13154                          , l_ser_csr.cycles_since_repair
13155                          , l_ser_csr.time_since_visit
13156                          , l_ser_csr.cycles_since_visit
13157                          , l_ser_csr.time_since_mark
13158                          , l_ser_csr.cycles_since_mark
13159                          , l_ser_csr.number_of_repairs
13160                           );
13161 
13162               IF (l_debug = 1)
13163               THEN
13164                 mydebug ('breadcrumb 200', 'tmpinsert2');
13165               END IF;
13166             END LOOP;
13167 
13168             /*Need to update the MTLT with the serial_transaction_temp_id generated above */
13169             IF (l_debug = 1)
13170             THEN
13171               mydebug
13172                     (' update the MTLT with the serial transaction temp_id '
13173                    , 'tmpinsert2'
13174                     );
13175               mydebug (' serial_txn_temp_id => ' || l_sequence
13176                          , 'tmpinsert2'
13177                           );
13178             END IF;
13179 
13180             UPDATE mtl_transaction_lots_temp
13181                SET serial_transaction_temp_id = l_sequence
13182              WHERE transaction_temp_id = l_mtli_csr.transaction_interface_id;
13183           END IF;  --if transaction lot split/merge
13184 
13185           IF (l_debug = 1)
13186           THEN
13187             mydebug ('Abt to populate the genealogy columns  '
13188                        , 'tmpinsert2'
13189                         );
13190             mydebug ('breadcrumb 210', 'tmpinsert2');
13191           END IF;
13192 
13193         /*****************************************************************************************
13194          *  Following genealogy columns need to be populated :-                                  *
13195          *  parent_object_number            : parent_serial_number                               *
13196          *  object_number2                  : current lot to which the serial number belong to   *
13197          *  parent_object_number2           : previous lot to which the serial number belonged to*
13198          *  Object_type2/parent_object_type2 : The type of object                                *
13199          *  This is how the colums are populated:-                                               *
13200          *  For lot split : populate the resulting MSNTs                                         *
13201          *  For lot merge : populate the source MSNTs                                            *
13202          *  For lot translate : populate the resulting MSNTs                                     *
13203          *****************************************************************************************/
13204           IF (l_mtli_csr.transaction_interface_id <> l_mti_csr.parent_id)
13205           THEN
13206             BEGIN
13207               IF (l_debug = 1)
13208               THEN
13209                 mydebug ('breadcrumb 220', 'tmpinsert2');
13210               END IF;
13211 
13212               SELECT lot_number
13213                 INTO l_parent_object_number2
13214                 FROM mtl_transaction_lots_interface
13215                WHERE transaction_interface_id = l_mti_csr.parent_id;
13216 
13217               SELECT serial_transaction_temp_id
13218                 INTO l_serial_temp_id
13219                 FROM mtl_transaction_lots_temp
13220                WHERE transaction_temp_id = l_mtli_csr.transaction_interface_id;
13221 
13222               IF (l_debug = 1)
13223               THEN
13224                 mydebug (   'l_parent_object_number2 => '
13225                              || l_parent_object_number2
13226                            , 'tmpinsert2'
13227                             );
13228                 mydebug ('l_serial_temp_id => ' || l_serial_temp_id
13229                            , 'tmpinsert2'
13230                             );
13231               END IF;
13232 
13233               IF ((   l_mti_csr.transaction_action_id =
13234                                               inv_globals.g_action_inv_lot_split
13235                    OR l_mti_csr.transaction_action_id =
13236                                           inv_globals.g_action_inv_lot_translate
13237                   )
13238                  )
13239               THEN
13240                 IF (l_debug = 1)
13241                 THEN
13242                   mydebug ('breadcrumb 230', 'tmpinsert2');
13243                   mydebug (' Genealogy columns for lot split/translate '
13244                              , 'tmpinsert2'
13245                               );
13246                   mydebug (   'parent_object_number2 => '
13247                                || l_mtli_csr.lot_number
13248                              , 'tmpinsert2'
13249                               );
13250                   mydebug ('object_number2 => ' || l_parent_object_number2
13251                              , 'tmpinsert2'
13252                               );
13253                 END IF;
13254                 /*The behaviour here is taken from LotTrxManager.Bit Strange!*/
13255                 UPDATE mtl_serial_numbers_temp
13256                    SET parent_object_number2 = l_mtli_csr.lot_number
13257                      , parent_object_number = fm_serial_number
13258                      , object_number2 = l_parent_object_number2
13259                      , object_type2 = 1
13260                      , parent_object_type2 = 1
13261                  WHERE transaction_temp_id =
13262                          NVL (l_mtli_csr.serial_transaction_temp_id --For Lot translate
13263                             , l_serial_temp_id
13264                              );
13265               ELSIF (l_mti_csr.transaction_action_id =
13266                                               inv_globals.g_action_inv_lot_merge
13267                     )
13268               THEN
13269                 IF (l_debug = 1)
13270                 THEN
13271                   mydebug ('breadcrumb 240', 'tmpinsert2');
13272                   mydebug (' Genealogy columns for lot merge '
13273                              , 'tmpinsert2'
13274                               );
13275                   mydebug (   'parent_object_number2 => '|| l_parent_object_number2
13276                              , 'tmpinsert2'
13277                               );
13278                   mydebug ('object_number2           => '|| l_mtli_csr.lot_number
13279                              , 'tmpinsert2'
13280                               );
13281                 END IF;
13282 
13283                 UPDATE mtl_serial_numbers_temp
13284                    SET parent_object_number2 = l_parent_object_number2
13285                      , parent_object_number = fm_serial_number
13286                      , object_number2 = l_mtli_csr.lot_number
13287                      , object_type2 = 1
13288                      , parent_object_type2 = 1
13289                  WHERE transaction_temp_id =
13290                                          l_mtli_csr.serial_transaction_temp_id;
13291               END IF;
13292 
13293               IF (l_debug = 1)
13294               THEN
13295                 mydebug ('breadcrumb 250', 'tmpinsert2');
13296               END IF;
13297             EXCEPTION
13298               WHEN NO_DATA_FOUND
13299               THEN
13300                 IF (l_debug = 1)
13301                 THEN
13302                   mydebug ('breadcrumb 260', 'tmpinsert2');
13303                   mydebug
13304                        ('NO_DATA_FOUND while fetching the genealogy columns'
13305                       , 'tmpinsert2'
13306                        );
13307                 END IF;
13308 
13309                 l_validation_status := 'N';
13310                 RAISE fnd_api.g_exc_unexpected_error;
13311               WHEN OTHERS
13312               THEN
13313                 IF (l_debug = 1)
13314                 THEN
13315                   mydebug ('breadcrumb 270', 'tmpinsert2');
13316                   mydebug
13317                            ('exception while fetching the genealogy columns'
13318                           , 'tmpinsert2'
13319                            );
13320                 END IF;
13321 
13322                 l_validation_status := 'N';
13323                 RAISE fnd_api.g_exc_unexpected_error;
13324             END;
13325           END IF;
13326          END IF;                                         --if serial_controlled
13327        END LOOP;--loop of MTLI
13328       END LOOP;                                                  --loop of MTI
13329     EXCEPTION
13330       WHEN OTHERS
13331       THEN
13332         IF (l_debug = 1)
13333         THEN
13334           mydebug ('breadcrumb 280', 'tmpinsert2');
13335           mydebug (' exception happened in tmpinsert2 ' || SQLERRM, 'tmpinsert2');
13336         END IF;
13337 
13338         l_validation_status := 'N';
13339         RAISE fnd_api.g_exc_unexpected_error;
13340     END;
13341 
13342     /*All records processed successfully*/
13343     IF (l_debug = 1)
13344     THEN
13345       mydebug (' insertions done .. !! ', 'tmpinsert2');
13346     END IF;
13347 
13348     x_validation_status := 'Y';
13349     x_return_status := fnd_api.g_ret_sts_success;
13350   EXCEPTION
13351     WHEN fnd_api.g_exc_error
13352     THEN
13353       IF (l_debug = 1)
13354       THEN
13355         mydebug ('breadcrumb 290', 'tmpinsert2');
13356       END IF;
13357 
13358       x_validation_status := l_validation_status;
13359       x_return_status := fnd_api.g_ret_sts_error;
13360       fnd_msg_pub.count_and_get (p_count     => x_msg_count
13361                                , p_data      => x_msg_data);
13362     WHEN fnd_api.g_exc_unexpected_error
13363     THEN
13364       x_validation_status := l_validation_status;
13365       x_return_status := fnd_api.g_ret_sts_unexp_error;
13366       fnd_msg_pub.count_and_get (p_count     => x_msg_count
13367                                , p_data      => x_msg_data);
13368     WHEN OTHERS
13369     THEN
13370       x_validation_status := l_validation_status;
13371       x_return_status := fnd_api.g_ret_sts_unexp_error;
13372 
13373       IF fnd_msg_pub.check_msg_level (fnd_msg_pub.g_msg_lvl_unexp_error)
13374       THEN
13375         fnd_msg_pub.add_exc_msg (g_pkg_name, 'tmpinert2');
13376       END IF;
13377 
13378       fnd_msg_pub.count_and_get (p_count     => x_msg_count
13379                                , p_data      => x_msg_data);
13380   END tmpinsert2;
13381 
13382 
13383 
13384 
13385 
13386 
13387 
13388 
13389 /******************************************************************
13390  *
13391  * poget()
13392  *
13393  ******************************************************************/
13394 PROCEDURE poget(p_prof IN VARCHAR2, x_ret OUT NOCOPY VARCHAR2)
13395 IS
13396 BEGIN
13397   SELECT FND_PROFILE.value(p_prof)
13398   INTO x_ret
13399   FROM dual;
13400 END poget;
13401 
13402 
13403 
13404 
13405 
13406 
13407 
13408 -----------------------------------------------------------------------
13409    -- Name : Validate_Transactions
13410    -- Desc : This procedure is used ot validate record inserted in MYI
13411    --through desktop forms AND moved TO mmtt. it does NOT call the
13412    --  transaction manager TO process the transactions.
13413    --        It is called to validate a batch of transaction_records .
13414    --
13415    -- I/P Params :
13416    --     p_header_id  : Transaction Header Id
13417    -- O/P Params :
13418    --     x_trans_count : count of transaction records validate
13419    --History
13420    --  Jalaj Srivastava Bug 5155661
13421    --    Add new parameter p_free_tree
13422    --  Namit Singhi Bug 5286961.
13423    --    Do not call the query_tree for gme yield transactions.
13424    -----------------------------------------------------------------------
13425    FUNCTION Validate_Transactions(
13426           p_api_version         IN     NUMBER            ,
13427           p_init_msg_list       IN      VARCHAR2 := fnd_api.g_false     ,
13428           p_validation_level IN NUMBER  := fnd_api.g_valid_level_full  ,
13429           p_header_id           IN      NUMBER,
13430           x_return_status       OUT     NOCOPY VARCHAR2                        ,
13431           x_msg_count           OUT     NOCOPY NUMBER                          ,
13432           x_msg_data            OUT     NOCOPY VARCHAR2                        ,
13433           x_trans_count         OUT     NOCOPY NUMBER                          ,
13434           p_free_tree           IN      VARCHAR2 := fnd_api.g_true)
13435 
13436      RETURN NUMBER
13437      IS
13438         l_header_id NUMBER;
13439         l_source_header_id NUMBER;
13440         l_totrows NUMBER;
13441         l_initotrows NUMBER;
13442         l_midtotrows NUMBER;
13443         l_userid NUMBER;
13444         l_loginid NUMBER;
13445         l_progid NUMBER;
13446         l_applid NUMBER;
13447         l_reqstid NUMBER;
13448         l_trx_batch_id NUMBER;
13449         batch_error BOOLEAN;
13450         l_last_trx_batch_id NUMBER;
13451         line_vldn_error_flag VARCHAR(1);
13452         l_Line_Rec_Type inv_txn_manager_pub.Line_Rec_Type;
13453 
13454         l_tempid NUMBER;
13455 	l_item_id NUMBER;
13456    	l_org_id NUMBER;
13457 	l_locid NUMBER;
13458 	l_srctypeid NUMBER;
13459 	l_actid NUMBER;
13460 	l_srcid NUMBER;
13461 	l_xlocid NUMBER;
13462 	l_temp_rowid VARCHAR2(21);
13463 	l_sub_code VARCHAR2(11);
13464 	-- Increased lot size to 80 Char - Mercy Thomas - B4625329
13465 	l_lotnum VARCHAR2(80);
13466 	l_src_code VARCHAR2(30);
13467 	l_xfrsub VARCHAR2(11);
13468 	l_rev VARCHAR2(4);
13469 	l_srclineid VARCHAR2(40);
13470 	l_trxdate DATE;
13471 	l_qoh NUMBER;
13472 	l_rqoh NUMBER;
13473 	l_pqoh NUMBER;
13474 	l_qr NUMBER;
13475 	l_qs NUMBER;
13476 	l_att NUMBER;
13477 	l_atr NUMBER;
13478 
13479 	/* Added the following variables for Bug 3679189 */
13480 	l_neg_inv_rcpt number;
13481 	l_cnt_res number;
13482 	l_item_qoh NUMBER;
13483 	l_item_rqoh NUMBER;
13484 	l_item_pqoh NUMBER;
13485 	l_item_qr NUMBER;
13486 	l_item_qs NUMBER;
13487 	l_item_att NUMBER;
13488 	l_item_atr NUMBER;
13489 
13490 	/*Added following variables for Bug 4194323 */
13491 	l_dem_hdr_id NUMBER ;
13492 	l_dem_line_id NUMBER ;
13493 
13494 
13495 	l_rctrl NUMBER;
13496 	l_lctrl NUMBER;
13497 	l_flow_schedule NUMBER;
13498 	l_trx_qty NUMBER;
13499 	l_qty  NUMBER := 0;
13500 	tree_exists BOOLEAN;
13501 	l_revision_control BOOLEAN;
13502 	l_lot_control BOOLEAN;
13503 	l_disp  VARCHAR2(3000);
13504 	l_msg_count  NUMBER;
13505 	l_msg_data   VARCHAR2(2000);
13506 	l_return_status VARCHAR2(1);
13507 	l_tree_id NUMBER;
13508 	l_override_neg_for_backflush NUMBER := 0;
13509 	l_override_rsv_for_backflush NUMBER := 2; --Bug 4764343 Base 4645686.Added for a specific customer.Default value is set to 'NO'(value 2)
13510 	l_translate BOOLEAN := TRUE;
13511 	/*Bug#5075521. Added the below 3 variables.*/
13512 	l_current_batch_failed BOOLEAN := FALSE;
13513 	l_current_err_batch_id NUMBER;
13514 	l_count_success NUMBER;
13515 
13516 
13517         CURSOR AA1 IS
13518            SELECT
13519         TRANSACTION_INTERFACE_ID,
13520         TRANSACTION_HEADER_ID,
13521         REQUEST_ID,
13522         INVENTORY_ITEM_ID,
13523         ORGANIZATION_ID,
13524         SUBINVENTORY_CODE,
13525         TRANSFER_ORGANIZATION,
13526         TRANSFER_SUBINVENTORY,
13527         TRANSACTION_UOM,
13528         TRANSACTION_DATE,
13529         TRANSACTION_QUANTITY,
13530         LOCATOR_ID,
13531         TRANSFER_LOCATOR,
13532         TRANSACTION_SOURCE_ID,
13533         TRANSACTION_SOURCE_TYPE_ID,
13534         TRANSACTION_ACTION_ID,
13535         TRANSACTION_TYPE_ID,
13536         DISTRIBUTION_ACCOUNT_ID,
13537         NVL(SHIPPABLE_FLAG,'Y'),
13538         ROWID,
13539         NEW_AVERAGE_COST,
13540         VALUE_CHANGE,
13541         PERCENTAGE_CHANGE,
13542         MATERIAL_ACCOUNT,
13543         MATERIAL_OVERHEAD_ACCOUNT,
13544         RESOURCE_ACCOUNT,
13545         OUTSIDE_PROCESSING_ACCOUNT,
13546         OVERHEAD_ACCOUNT,
13547         REQUISITION_LINE_ID,
13548         OVERCOMPLETION_TRANSACTION_QTY,   /* Overcompletion Transactions */
13549         END_ITEM_UNIT_NUMBER,
13550         SCHEDULED_PAYBACK_DATE, /* Borrow Payback */
13551         REVISION,   /* Borrow Payback */
13552         ORG_COST_GROUP_ID,  /* PCST */
13553         COST_TYPE_ID, /* PCST */
13554         PRIMARY_QUANTITY,
13555         SOURCE_LINE_ID,
13556         PROCESS_FLAG,
13557         TRANSACTION_SOURCE_NAME,
13558         TRX_SOURCE_DELIVERY_ID,
13559         TRX_SOURCE_LINE_ID,
13560         PARENT_ID,
13561         TRANSACTION_BATCH_ID,
13562         TRANSACTION_BATCH_SEQ,
13563         -- INVCONV start fabdi
13564         SECONDARY_TRANSACTION_QUANTITY,
13565         SECONDARY_UOM_CODE
13566         -- INVCONV end fabdi
13567         ,SHIP_TO_LOCATION_ID -- eIB Build; Bug# 4348541
13568         ,TRANSFER_PRICE      -- OPM INVCONV umoogala Process-Discrete Xfers Enh.
13569         ,WIP_ENTITY_TYPE     -- Pawan  11th july added for subinventory issue
13570         /*Bug:5392366. Added following two columns. */
13571         ,COMPLETION_TRANSACTION_ID
13572         ,MOVE_TRANSACTION_ID
13573     FROM MTL_TRANSACTIONS_INTERFACE
13574     WHERE TRANSACTION_HEADER_ID = p_header_id
13575     AND PROCESS_FLAG = 1
13576    /* added for bug 4634810 */
13577     AND NOT( transaction_source_type_id = 5 AND
13578              NVL(operation_seq_num, 1) < 0 AND
13579              NVL(wip_supply_type, 0) = 6
13580             )
13581     ORDER BY TRANSACTION_BATCH_ID,TRANSACTION_BATCH_SEQ,ORGANIZATION_ID,
13582       INVENTORY_ITEM_ID,REVISION,SUBINVENTORY_CODE,LOCATOR_ID;
13583 
13584 
13585 
13586       CURSOR Z1 (p_flow_sch NUMBER,p_line_rec_type inv_txn_manager_pub.line_rec_type) IS
13587        SELECT
13588          p_line_rec_type.ROWID,
13589          p_line_rec_type.INVENTORY_ITEM_ID,
13590          p_line_rec_type.REVISION,
13591          p_line_rec_type.ORGANIZATION_ID,
13592          p_line_rec_type.SUBINVENTORY_CODE,
13593          p_line_rec_type.LOCATOR_ID,
13594          ABS(p_line_rec_type.PRIMARY_QUANTITY) PRIMARY_QUANTITY,
13595          NULL LOT_NUMBER,
13596          p_line_rec_type.TRANSACTION_SOURCE_TYPE_ID,
13597          p_line_rec_type.TRANSACTION_ACTION_ID,
13598          p_line_rec_type.TRANSACTION_SOURCE_ID,
13599          p_line_rec_type.TRANSACTION_SOURCE_NAME,
13600          --Jalaj Srivastava 5010595
13601          --for GME (wip_enity_type=10) select trx_source_line_id as source_line_id
13602          decode(p_line_rec_type.transaction_source_type_id,5,decode(p_line_rec_type.wip_entity_type,10,p_line_rec_type.TRX_SOURCE_LINE_ID,p_line_rec_type.SOURCE_LINE_ID),p_line_rec_type.SOURCE_LINE_ID) SOURCE_LINE_ID,
13603          MSI.REVISION_QTY_CONTROL_CODE,
13604          decode(p_line_rec_type.transaction_source_type_id,5,1,MSI.lot_control_code) lot_control_code,--j-dev
13605          decode(p_line_rec_type.TRANSACTION_ACTION_ID,2,p_line_rec_type.TRANSFER_SUBINVENTORY,28,p_line_rec_type.TRANSFER_SUBINVENTORY,null) TRANSFER_SUBINVENTORY,
13606          p_line_rec_type.TRANSFER_LOCATOR,
13607          p_line_rec_type.transaction_date,
13608          MP.NEGATIVE_INV_RECEIPT_CODE
13609     FROM MTL_PARAMETERS MP,
13610          MTL_SYSTEM_ITEMS MSI
13611    WHERE MP.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13612     -- AND MP.NEGATIVE_INV_RECEIPT_CODE = 2 'bug 3679189'
13613      AND p_line_rec_type.PROCESS_FLAG = 1
13614      --Jalaj Srivastava 5010595
13615      --for GME (wip_enity_type=10) select only non lot controlled items
13616      AND ((MSI.LOT_CONTROL_CODE = 1) OR (p_line_rec_type.transaction_source_type_id=5 and p_line_rec_type.wip_entity_type <> 10))--J-dev--verify this
13617      AND (    (     (p_line_rec_type.wip_entity_type <> 10)
13618                 AND (       (p_flow_sch <> 1
13619                          AND p_line_rec_type.TRANSACTION_ACTION_ID IN (1,2,3,21,32,34,5) )
13620                       OR    (p_flow_sch = 1
13621                          AND p_line_rec_type.TRANSACTION_ACTION_ID = 32 )
13622                     )
13623               )
13624            --Jalaj Srivastava 5232394
13625            --select all transactions for GME
13626            OR (p_line_rec_type.wip_entity_type = 10)
13627          )
13628      AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
13629      AND MSI.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13630      AND MSI.INVENTORY_ITEM_ID = p_line_rec_type.INVENTORY_ITEM_ID
13631    UNION
13632      SELECT
13633        p_line_rec_type.ROWID,
13634        p_line_rec_type.INVENTORY_ITEM_ID,
13635        p_line_rec_type.REVISION,
13636        p_line_rec_type.ORGANIZATION_ID,
13637        p_line_rec_type.SUBINVENTORY_CODE,
13638        p_line_rec_type.LOCATOR_ID,
13639        ABS(MTLI.PRIMARY_QUANTITY) PRIMARY_QUANTITY,
13640        MTLI.lot_number LOT_NUMBER,
13641        p_line_rec_type.TRANSACTION_SOURCE_TYPE_ID,
13642        p_line_rec_type.TRANSACTION_ACTION_ID,
13643        p_line_rec_type.TRANSACTION_SOURCE_ID,
13644        p_line_rec_type.TRANSACTION_SOURCE_NAME,
13645        --Jalaj Srivastava 5010595
13646        --for GME (wip_enity_type=10) select trx_source_line_id as source_line_id
13647        decode(p_line_rec_type.wip_entity_type,10,p_line_rec_type.TRX_SOURCE_LINE_ID,p_line_rec_type.SOURCE_LINE_ID) SOURCE_LINE_ID,
13648        MSI.REVISION_QTY_CONTROL_CODE,
13649        MSI.lot_control_code lot_control_code,
13650        decode(p_line_rec_type.TRANSACTION_ACTION_ID,2,p_line_rec_type.TRANSFER_SUBINVENTORY,28,p_line_rec_type.TRANSFER_SUBINVENTORY,5,p_line_rec_type.transfer_subinventory,null) TRANSFER_SUBINVENTORY,
13651        p_line_rec_type.TRANSFER_LOCATOR,
13652          p_line_rec_type.transaction_date,
13653          MP.NEGATIVE_INV_RECEIPT_CODE
13654   FROM MTL_TRANSACTION_LOTS_INTERFACE MTLI,
13655        MTL_PARAMETERS MP,
13656        MTL_SYSTEM_ITEMS MSI
13657  WHERE MP.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13658    --AND MP.NEGATIVE_INV_RECEIPT_CODE = 2 'bug 3679189'
13659    AND MTLI.TRANSACTION_INTERFACE_ID = p_line_rec_type.TRANSACTION_INTERFACE_ID
13660    AND p_line_rec_type.PROCESS_FLAG = 1
13661    AND MSI.LOT_CONTROL_CODE = 2
13662    AND (    (       (p_line_rec_type.wip_entity_type <> 10)
13663                 AND (       (p_flow_sch <> 1
13664                          AND p_line_rec_type.TRANSACTION_ACTION_ID IN (1,2,3,21,32,34,5) )
13665                       OR    (p_flow_sch = 1
13666                          AND p_line_rec_type.TRANSACTION_ACTION_ID = 32 )
13667                     )
13668             )
13669            --Jalaj Srivastava 5232394
13670            --select all transactions for GME
13671          OR (p_line_rec_type.wip_entity_type = 10)
13672        )
13673    AND MSI.ORGANIZATION_ID = MP.ORGANIZATION_ID
13674    AND MSI.ORGANIZATION_ID = p_line_rec_type.ORGANIZATION_ID
13675    AND MSI.INVENTORY_ITEM_ID = p_line_rec_type.INVENTORY_ITEM_ID
13676     -- Pawan  11th july added this for validation of lot for GME only
13677    AND ((p_line_rec_type.transaction_source_type_id <> 5) OR
13678         (p_line_rec_type.transaction_source_type_id = 5 AND
13679          p_line_rec_type.wip_entity_type = 10 ));--J-dev verify
13680 
13681    BEGIN
13682       l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
13683 
13684       l_header_id := p_header_id;
13685 
13686       IF (l_debug = 1)
13687         THEN
13688          inv_log_util.trace('-----Inside validate_Transactions-------.trxhdr='||p_header_id, 'INV_TXN_MANAGER_GRP', 9);
13689       END IF;
13690 
13691 
13692     /*----------------------------------------------------------+
13693     |  retrieving information
13694     +----------------------------------------------------------*/
13695 
13696     poget('LOGIN_ID', l_loginid);
13697     poget('USER_ID', l_userid);
13698     poget('CONC_PROGRAM_ID', l_progid);
13699     poget('CONC_REQUEST_ID', l_reqstid);
13700     poget('PROG_APPL_ID', l_applid);
13701 
13702     IF l_loginid is NULL THEN
13703     l_loginid := -1;
13704     END IF;
13705     IF l_userid is NULL THEN
13706     l_userid := -1;
13707     END IF;
13708 
13709     x_return_status := FND_API.G_RET_STS_ERROR;
13710     x_msg_count  :=  0;
13711     x_msg_data := '';
13712     x_trans_count := 0;
13713 
13714 
13715     /*+--------------------------------------------------------------+
13716     | The global gi_flow_schedule will be '1' (or true) for        |
13717     | WIP flow schedules ONLY.                                     |
13718     +--------------------------------------------------------------+ */
13719       BEGIN
13720           SELECT DECODE(UPPER(FLOW_SCHEDULE),'Y', 1, 0)
13721             INTO gi_flow_schedule
13722             FROM MTL_TRANSACTIONS_INTERFACE
13723             WHERE TRANSACTION_HEADER_ID = l_header_id
13724             AND TRANSACTION_SOURCE_TYPE_ID = 5
13725             AND TRANSACTION_ACTION_ID IN (30,31, 32) --CFM Scrap Transactions
13726             AND PROCESS_FLAG = 1
13727             AND ROWNUM < 2 ;
13728       EXCEPTION
13729           WHEN NO_DATA_FOUND THEN
13730             gi_flow_schedule := 0;
13731       END;
13732 
13733   --Group Validate
13734     /***** Group Validation *******************************/
13735     validate_group(l_header_id,
13736                     x_return_status,
13737                     x_msg_count,
13738                     x_msg_data,
13739                     l_userid,
13740                     l_loginid,
13741                     p_validation_level);
13742 
13743     IF x_return_status = FND_API.G_RET_STS_ERROR   THEN
13744         IF (l_debug = 1) THEN
13745           inv_log_util.trace('Unexpected Error in Validate Group : ' || x_msg_data,'INV_TXN_MANAGER_GRP', 9);
13746         END IF;
13747         RAISE fnd_api.g_exc_unexpected_error;
13748     END IF;
13749 
13750     batch_error := FALSE;
13751 
13752     FOR l_Line_rec_Type IN AA1 LOOP
13753 
13754         l_trx_batch_id := l_Line_rec_Type.TRANSACTION_BATCH_ID;
13755         IF batch_error AND l_trx_batch_id = l_last_trx_batch_id THEN
13756           /** This group of transactions has failed move on to next **/
13757           /** UPDATE MTI row with Group Failure Message **/
13758           null;
13759         ELSE
13760           batch_error := FALSE;
13761           l_last_trx_batch_id := l_trx_batch_id;
13762 
13763 	  /* Bug 6679112, adding BEGIN-EXCEPTION-END */
13764           BEGIN  --validate_lines block
13765 
13766           	validate_lines( p_line_Rec_Type =>l_Line_rec_type,
13767                           p_validation_level =>p_validation_level,
13768                           p_error_flag =>line_vldn_error_flag,
13769                           p_userid => l_userid,
13770                           p_loginid => l_loginid,
13771                           p_applid => l_applid,
13772                           p_progid => l_progid
13773                           );
13774          	IF (line_vldn_error_flag = 'Y') then
13775 	              IF (l_debug = 1) THEN
13776         	        inv_log_util.trace('Error in Line Validatin', 'INV_TXN_MANAGER_GRP', 9);
13777               	      END IF;
13778 	              RAISE  fnd_api.g_exc_unexpected_error;
13779         	      --SQL error
13780 		END IF;
13781 	  EXCEPTION
13782 	  /* Added for Bug 6679112 */
13783 	         WHEN others THEN
13784 	                batch_error := TRUE;
13785 	                IF (l_debug = 1) THEN
13786                                 inv_log_util.trace('Error:'||sqlerrm,'INV_TXN_MANAGER_GRP', 9);
13787                         END IF;
13788 	  END; --validate_lines block
13789 	  /* Changes for bug 6679112 end */
13790 
13791         END IF;--BatchId
13792     END LOOP;--AA1
13793 
13794 
13795     /*-------------------------------------------------------------+
13796     | If a single transaction within a group fails all transactions
13797     | in that group should not be processed.
13798     +--------------------------------------------------------------*/
13799 
13800 
13801       --check for batch error at line validation
13802       loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
13803 
13804     UPDATE MTL_TRANSACTIONS_INTERFACE MTI
13805       SET LAST_UPDATE_DATE = SYSDATE,
13806           LAST_UPDATED_BY = l_userid,
13807       LAST_UPDATE_LOGIN = l_loginid,
13808       PROGRAM_UPDATE_DATE = SYSDATE,
13809       PROCESS_FLAG = 3,
13810       LOCK_FLAG = 2,
13811       ERROR_CODE = substrb(l_error_code,1,240)
13812       WHERE TRANSACTION_HEADER_ID = l_header_id
13813       AND PROCESS_FLAG = 1
13814       AND TRANSACTION_BATCH_ID IN
13815       (SELECT DISTINCT MTI2.TRANSACTION_BATCH_ID
13816         FROM MTL_TRANSACTIONS_INTERFACE MTI2
13817         WHERE MTI2.TRANSACTION_HEADER_ID = l_header_id
13818         AND MTI2.PROCESS_FLAG = 3
13819         AND MTI2.ERROR_CODE IS NOT NULL);
13820         --                               group error changes.
13821 
13822 
13823 
13824         --Need to call the qty tree.
13825         --LOOP for each record
13826         --create tree
13827         --query tree
13828         --compare qty
13829         --UPDATE tree
13830         --END LOOP
13831     --clear all tree cache.
13832 
13833     IF (l_debug = 1) THEN
13834         inv_log_util.trace('Going to open cursor AA1', 'INV_TXN_MANAGER_GRP', 9);
13835     END IF;
13836 
13837     FOR l_Line_rec_Type IN AA1 LOOP
13838     	/*Bug#5075521. Moved all the validation code inside the below IF condition so that
13839       	the validation is done only if the current record does not belong to an errored
13840 	      batch.*/
13841       IF (    l_current_err_batch_id IS NULL
13842             OR l_Line_rec_Type.transaction_batch_id IS NULL
13843             OR l_current_err_batch_id <>  l_Line_rec_Type.transaction_batch_id )THEN --050
13844         l_current_batch_failed := FALSE;
13845         FOR z1_rec IN
13846           Z1(gi_flow_schedule,l_Line_rec_type) LOOP
13847 
13848             tree_exists := FALSE;
13849 
13850           IF (l_debug = 1) THEN
13851           	inv_log_util.trace('Getting values from Z1 cursor', 'INV_TXN_MANAGER_GRP', 9);
13852           END IF;
13853 
13854           l_temp_rowid :=z1_rec.ROWID;
13855           l_item_id:=z1_rec.inventory_item_id;
13856           l_rev:=z1_rec.revision;
13857           l_org_id:=z1_rec.organization_id;
13858           l_sub_code:=z1_rec.subinventory_code;
13859           l_locid :=z1_rec.locator_id;
13860           l_trx_qty:=z1_rec.primary_quantity;
13861           l_lotnum:=z1_rec.lot_number;
13862           l_srctypeid:=z1_rec.transaction_source_type_id;
13863           l_actid:=z1_rec.transaction_action_id;
13864           l_srcid:=z1_rec.transaction_source_id;
13865           l_src_code:=z1_rec.transaction_source_name;
13866           l_srclineid:=z1_rec.source_line_id;
13867           l_rctrl:=z1_rec.revision_qty_control_code;
13868           l_lctrl:=z1_rec.lot_control_code;
13869           l_xfrsub:=z1_rec.transfer_subinventory;
13870           l_xlocid:=z1_rec.transfer_locator;
13871           l_trxdate:=z1_rec.TRANSACTION_DATE;
13872           l_neg_inv_rcpt:=z1_rec.negative_inv_receipt_code;
13873 
13874 
13875           IF l_rctrl = 1 THEN
13876             l_revision_control := FALSE;
13877 	        ELSE
13878   	        l_revision_control := TRUE;
13879     	    END IF;
13880 
13881           IF l_lctrl = 1 THEN
13882             l_lot_control := FALSE;
13883           ELSE
13884             l_lot_control := TRUE;
13885           END IF;
13886 
13887           IF (l_debug = 1) THEN
13888 	          inv_log_util.trace('Calling Create tree', 'INV_TXN_MANAGER_GRP', 9);
13889   	  END IF;
13890 
13891 	  -- Bug 4194323 WIP Assembly Return transactions need to look for Available Quantity against the Sales Order
13892 	  --  if it's linked to job
13893 
13894           IF ( NOT l_current_batch_failed) THEN --350
13895           	BEGIN
13896             		SELECT demand_source_header_id , demand_source_line
13897             		INTO l_dem_hdr_id,l_dem_line_id
13898             		FROM mtl_transactions_interface
13899             		WHERE
13900             		ROWID = l_temp_rowid ;
13901           	EXCEPTION
13902             		WHEN OTHERS THEN
13903               		IF (l_debug = 1) THEN
13904 	              		inv_log_util.trace('Error in getting Demand Info : '
13905                                      		|| x_msg_data,'INV_TXN_MANAGER_GRP', 9);
13906   	            	END IF;
13907     	          	l_error_code := 'Error in getting Demand Info';
13908       	        	l_error_exp := 'Error in getting Demand Info';
13909 
13910 			UPDATE MTL_TRANSACTIONS_INTERFACE
13911 				SET LAST_UPDATE_DATE = SYSDATE,
13912 				LAST_UPDATED_BY = l_userid,
13913 				LAST_UPDATE_LOGIN = l_loginid,
13914 				PROGRAM_UPDATE_DATE = SYSDATE,
13915 				PROCESS_FLAG = 3,
13916 				LOCK_FLAG = 2,
13917 				ERROR_CODE = substrb(l_error_code,1,240),
13918 				ERROR_EXPLANATION = substrb(l_error_exp,1,240)
13919 			WHERE ROWID  = l_temp_rowid
13920 				AND PROCESS_FLAG = 1;
13921 
13922       			--check for batch error
13923       			loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
13924 
13925       			UPDATE MTL_TRANSACTIONS_INTERFACE MTI
13926         			SET LAST_UPDATE_DATE = SYSDATE,
13927         			LAST_UPDATED_BY = l_userid,
13928         			LAST_UPDATE_LOGIN = l_loginid,
13929         			PROGRAM_UPDATE_DATE = SYSDATE,
13930         			PROCESS_FLAG = 3,
13931         			LOCK_FLAG = 2,
13932         			ERROR_CODE = substrb(l_error_code,1,240)
13933       			WHERE TRANSACTION_HEADER_ID = l_header_id
13934         			AND PROCESS_FLAG = 1
13935         			AND TRANSACTION_BATCH_ID =l_Line_rec_Type.transaction_batch_id;
13936 
13937 			l_current_batch_failed := TRUE;--Bug#5075521
13938                         l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
13939                 END ;
13940 
13941   		IF ( NOT l_current_batch_failed) THEN --400
13942 	  		IF ( l_srctypeid = INv_GLOBALS.G_SOURCETYPE_WIP AND
13943 			        l_actid = INV_GLOBALS.G_ACTION_ASSYRETURN AND l_dem_hdr_id IS NOT NULL ) then
13944 
13945         			INV_QUANTITY_TREE_PVT.create_tree
13946           			(   p_api_version_number       => 1.0
13947               			,  p_init_msg_lst             => fnd_api.g_false
13948               			,  x_return_status            => l_return_status
13949               			,  x_msg_count                => l_msg_count
13950               			,  x_msg_data                 => l_msg_data
13951               			,  p_organization_id          => l_org_id
13952               			,  p_inventory_item_id        => l_item_id
13953               			,  p_tree_mode                => 2
13954               			,  p_is_revision_control      => l_revision_control
13955               			,  p_is_lot_control           => l_lot_control
13956               			,  p_is_serial_control        => FALSE
13957               			,  p_include_suggestion       => FALSE
13958               			,  p_demand_source_type_id    => 2
13959               			,  p_demand_source_header_id  => nvl(l_dem_hdr_id,-9999)
13960               			,  p_demand_source_line_id    => nvl(l_dem_line_id,-9999)
13961               			,  p_demand_source_name       => l_src_code
13962               			,  p_demand_source_delivery   => NULL
13963               			,  p_lot_expiration_date      => NULL
13964               			,  x_tree_id                  => l_tree_id
13965               			,  p_onhand_source            => 3 --g_all_subs
13966               			,  p_exclusive                => 0 --g_non_exclusive
13967               			,  p_pick_release             => 0 --g_pick_release_no
13968           			) ;
13969                       	ELSE
13970 
13971                    		INV_QUANTITY_TREE_PVT.create_tree
13972                       		(   p_api_version_number       => 1.0
13973                           	,  p_init_msg_lst             => fnd_api.g_false
13974                           	,  x_return_status            => l_return_status
13975                           	,  x_msg_count                => l_msg_count
13976                           	,  x_msg_data                 => l_msg_data
13977                           	,  p_organization_id          => l_org_id
13978                           	,  p_inventory_item_id        => l_item_id
13979                           	,  p_tree_mode                => 2
13980                           	,  p_is_revision_control      => l_revision_control
13981                           	,  p_is_lot_control           => l_lot_control
13982                           	,  p_is_serial_control        => FALSE
13983                           	,  p_include_suggestion       => FALSE
13984                           	,  p_demand_source_type_id    => nvl(l_srctypeid,-9999)
13985                           	,  p_demand_source_header_id  => nvl(l_srcid,-9999)
13986                           	,  p_demand_source_line_id    => nvl(l_srclineid,-9999)
13987                           	,  p_demand_source_name       => l_src_code
13988                           	,  p_demand_source_delivery   => NULL
13989                           	,  p_lot_expiration_date      => NULL
13990                           	,  x_tree_id                  => l_tree_id
13991                           	,  p_onhand_source            => 3 --g_all_subs
13992                           	,  p_exclusive                => 0 --g_non_exclusive
13993                       			,  p_pick_release             => 0 --g_pick_release_no
13994                       		) ;
13995 			END IF;
13996 			-- Bug 4194323 Ends
13997 
13998                                 IF (l_debug = 1) THEN
13999                                      inv_log_util.trace('After create tree tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14000                                   END IF;
14001 
14002 
14003 
14004                                IF l_return_status IN (fnd_api.g_ret_sts_error, fnd_api.g_ret_sts_unexp_error) THEN
14005                                   IF (l_debug = 1) THEN
14006                                      inv_log_util.trace('Error while creating tree : x_msg_data = ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14007                                   END IF;
14008                                   FND_MESSAGE.set_name('INV','INV_ERR_CREATETREE');
14009                                   FND_MESSAGE.set_token('ROUTINE','UE:AVAIL_TO_TRX');
14010                                   l_error_code := FND_MESSAGE.get;
14011                                   l_error_exp := l_msg_data;
14012                                   x_msg_data := l_msg_data;
14013                                   UPDATE MTL_TRANSACTIONS_INTERFACE
14014                                     SET LAST_UPDATE_DATE = SYSDATE,
14015                                     LAST_UPDATED_BY = l_userid,
14016                                     LAST_UPDATE_LOGIN = l_loginid,
14017                                     PROGRAM_UPDATE_DATE = SYSDATE,
14018                                     PROCESS_FLAG = 3,
14019                                     LOCK_FLAG = 2,
14020                                     ERROR_CODE = substrb(l_error_code,1,240),
14021                                     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14022                                     WHERE ROWID  = l_temp_rowid
14023                                     AND PROCESS_FLAG = 1;
14024 
14025                                   --check for batch error
14026                                   loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14027 
14028                                  UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14029                                  SET LAST_UPDATE_DATE = SYSDATE,
14030                                  LAST_UPDATED_BY = l_userid,
14031                                  LAST_UPDATE_LOGIN = l_loginid,
14032                                  PROGRAM_UPDATE_DATE = SYSDATE,
14033                                  PROCESS_FLAG = 3,
14034                                  LOCK_FLAG = 2,
14035                                  ERROR_CODE = substrb(l_error_code,1,240)
14036                                  WHERE TRANSACTION_HEADER_ID = l_header_id
14037                                  AND PROCESS_FLAG = 1
14038                                  AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;  --Bug#5075521
14039 --                               group error changes.
14040 
14041                                   l_current_batch_failed := TRUE;--Bug#5075521
14042                                   l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14043                                END IF ;
14044                                END IF; --400
14045                                END IF;--350
14046 
14047                                IF ( NOT l_current_batch_failed) THEN --100
14048 
14049                                INV_QUANTITY_TREE_PVT.query_tree
14050                                  (   p_api_version_number   => 1.0
14051                                      ,  p_init_msg_lst         => fnd_api.g_false
14052                                      ,  x_return_status        => l_return_status
14053                                      ,  x_msg_count            => l_msg_count
14054                                      ,  x_msg_data             => l_msg_data
14055                                      ,  p_tree_id              => l_tree_id
14056                                      ,  p_revision             => l_rev
14057                                      ,  p_lot_number           => l_lotnum
14058                                      ,  p_subinventory_code    => l_sub_code
14059                                      ,  p_transfer_subinventory_code    => l_xfrsub
14060                                      ,  p_locator_id           => l_locid
14061                                      ,  x_qoh                  => l_qoh
14062                                      ,  x_rqoh                 => l_rqoh
14063                                      ,  x_pqoh                 => l_pqoh
14064                                      ,  x_qr                   => l_qr
14065                                      ,  x_qs                   => l_qs
14066                                      ,  x_att                  => l_att
14067                                      ,  x_atr                  => l_atr
14068                                      );
14069 
14070                                IF l_return_status = fnd_api.g_ret_sts_error THEN
14071                                   IF (l_debug = 1) THEN
14072                                      inv_log_util.trace('Expected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14073                                   END IF;
14074 
14075                                   FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14076                                   FND_MESSAGE.set_token('token1','XACT_QTY1');
14077                                   l_error_code := FND_MESSAGE.get;
14078                                   l_error_exp := l_msg_data;
14079                                   x_msg_data := l_msg_data;
14080                                   UPDATE MTL_TRANSACTIONS_INTERFACE
14081                                     SET LAST_UPDATE_DATE = SYSDATE,
14082                                     LAST_UPDATED_BY = l_userid,
14083                                     LAST_UPDATE_LOGIN = l_loginid,
14084                                     PROGRAM_UPDATE_DATE = SYSDATE,
14085                                     PROCESS_FLAG = 3,
14086                                     LOCK_FLAG = 2,
14087                                     ERROR_CODE = substrb(l_error_code,1,240),
14088                                     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14089                                     WHERE TRANSACTION_interface_id = l_temp_rowid
14090                                     AND PROCESS_FLAG = 1;
14091                                    --check for batch error
14092                                   loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14093 
14094                                  UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14095                                  SET LAST_UPDATE_DATE = SYSDATE,
14096                                  LAST_UPDATED_BY = l_userid,
14097                                  LAST_UPDATE_LOGIN = l_loginid,
14098                                  PROGRAM_UPDATE_DATE = SYSDATE,
14099                                  PROCESS_FLAG = 3,
14100                                  LOCK_FLAG = 2,
14101                                  ERROR_CODE = substrb(l_error_code,1,240)
14102                                  WHERE TRANSACTION_HEADER_ID = l_header_id
14103                                  AND PROCESS_FLAG = 1
14104                                  AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id; --Bug#5075521
14105 --                               group error changes.
14106                                   l_current_batch_failed := TRUE;--Bug#5075521
14107                                   l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14108 
14109                                END IF ;
14110 
14111                                IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
14112                                   IF (l_debug = 1) THEN
14113                                      inv_log_util.trace('UnExpected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14114                                   END IF;
14115 
14116                                   FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14117                                   FND_MESSAGE.set_token('token1','XACT_QTY1');
14118                                   l_error_code := FND_MESSAGE.get;
14119                                   l_error_exp := l_msg_data;
14120                                   x_msg_data := l_msg_data;
14121                                   UPDATE MTL_TRANSACTIONS_INTERFACE
14122                                     SET LAST_UPDATE_DATE = SYSDATE,
14123                                     LAST_UPDATED_BY = l_userid,
14124                                     LAST_UPDATE_LOGIN = l_loginid,
14125                                     PROGRAM_UPDATE_DATE = SYSDATE,
14126                                     PROCESS_FLAG = 3,
14127                                     LOCK_FLAG = 2,
14128                                     ERROR_CODE = substrb(l_error_code,1,240),
14129                                     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14130                                     WHERE ROWID = l_temp_rowid
14131                                     AND PROCESS_FLAG = 1;
14132                                    --check for batch error
14133                                  loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14134 
14135                                  UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14136                                  SET LAST_UPDATE_DATE = SYSDATE,
14137                                  LAST_UPDATED_BY = l_userid,
14138                                  LAST_UPDATE_LOGIN = l_loginid,
14139                                  PROGRAM_UPDATE_DATE = SYSDATE,
14140                                  PROCESS_FLAG = 3,
14141                                  LOCK_FLAG = 2,
14142                                  ERROR_CODE = substrb(l_error_code,1,240)
14143                                  WHERE TRANSACTION_HEADER_ID = l_header_id
14144                                  AND PROCESS_FLAG = 1
14145                                  AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14146                                   --group error changes.
14147                                   l_current_batch_failed := TRUE;--Bug#5075521
14148                                   l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14149                                END IF;
14150 
14151                                IF (l_debug = 1) THEN
14152                                inv_log_util.trace('L_QOH : ' || l_qoh,'INV_TXN_MANAGER_GRP', 9);
14153                                inv_log_util.trace('L_RQOH : ' || l_rqoh,'INV_TXN_MANAGER_GRP', 9);
14154                                inv_log_util.trace('L_PQOH : ' || l_pqoh,'INV_TXN_MANAGER_GRP', 9);
14155                                inv_log_util.trace('L_QR : ' || l_qr,'INV_TXN_MANAGER_GRP', 9);
14156                                inv_log_util.trace('L_QS : ' || l_qs,'INV_TXN_MANAGER_GRP', 9);
14157                                inv_log_util.trace('L_ATT : ' || l_att,'INV_TXN_MANAGER_GRP', 9);
14158                                inv_log_util.trace('L_ATR : ' || l_atr,'INV_TXN_MANAGER_GRP', 9);
14159                                END IF;
14160                                END IF;--100
14161 
14162                                -- Bug 3427817: For WIP backflush transactions, we should not
14163                                -- check for negative availability. If it is
14164                                -- a backflush transaction, then get the
14165                                -- profile value and do not check for
14166                                -- availability if the profile is set to
14167                                -- YES.
14168 
14169                                IF ( NOT l_current_batch_failed ) THEN--150
14170 
14171                                -- nsinghi bug#5286961. Do not call the query_tree for gme yield transactions.
14172 
14173                                IF ((l_Line_rec_Type.wip_entity_type <> 10) OR -- not GME
14174                                (l_Line_rec_Type.wip_entity_type = 10 AND
14175                                l_line_rec_Type.transaction_type_id NOT IN (43, 44, 1002))) THEN
14176 
14177                                  /*Bug:5392366. Modified the following condition to also check
14178                                    completion_transaction_id and move_transaction_id to make sure it
14179                                    is a backflush transaction. If both these values are null then
14180                                    it is is not a backflush transaction*/
14181                                  IF ((l_line_rec_Type.transaction_source_type_id = inv_globals.G_SOURCETYPE_WIP) AND
14182                                      (l_line_rec_Type.transaction_action_id
14183                                       IN (inv_globals.G_ACTION_ISSUE, inv_globals.G_ACTION_NEGCOMPRETURN) AND (l_line_rec_type.completion_transaction_id is not null OR l_line_rec_type.move_transaction_id is not null))) THEN
14184                                     -- It is a backflush transaction. Get the
14185                                     -- override flag.
14186                                     l_override_neg_for_backflush :=
14187                                       fnd_profile.value('INV_OVERRIDE_NEG_FOR_BACKFLUSH');
14188                                     /*Bug 4764343 Base Bug:4645686. Introducing a new profile
14189                                     'INV_OVERRIDE_RSV_FOR_BACKFLUSH' for a specific customer.If set to 'Yes',
14190                                     backflush transaction can drive inventory negative, even if any reservations
14191                                     exist for the item*/
14192                                   l_override_rsv_for_backflush := NVL(fnd_profile.value('INV_OVERRIDE_RSV_FOR_BACKFLUSH'), 2);
14193                                  ELSE
14194                                    l_override_neg_for_backflush := 0;
14195                                    l_override_rsv_for_backflush := 2;
14196                                  END IF;
14197                                  IF (l_debug = 1) THEN
14198                                     inv_log_util.trace('l_override_neg_for_backflush ' || l_override_neg_for_backflush,'INV_TXN_MANAGER_GRP', 9);
14199                                     inv_log_util.trace('l_override_rsv_for_backflush ' || l_override_rsv_for_backflush,'INV_TXN_MANAGER_GRP', 9);
14200                                  END IF;
14201 
14202                                  --Bug 3487453: Added and set the variable l_translate
14203                                  -- to true for the token to be translated.
14204                                  IF  (l_att < l_trx_qty) THEN
14205                                     IF (l_neg_inv_rcpt = 1 OR l_override_neg_for_backflush = 1) THEN
14206 
14207                                        IF (l_qr >l_trx_qty  OR l_qs >0) THEN
14208                                           /*Bug 4764343 base Bug::4645686. This condition is added for a specific customer by introducing
14209                                            a new profile 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' . If this profile is not set to 'Yes'
14210                                            then the backflush transaction can not consume existing reservations.Else it can consume
14211                                            existing reservation and can drive inventory go negative. */
14212                                           IF (l_override_rsv_for_backflush <> 1 ) THEN
14213                                           inv_log_util.trace('Transaction quantity must be less than or equal to available quantity','INV_TXN_MANAGER_GRP', 9);
14214                                           FND_MESSAGE.set_name('INV','INV_INT_PROCCODE');
14215                                           l_error_code := FND_MESSAGE.get;
14216                                           FND_MESSAGE.set_name('INV','INV_QTY_LESS_OR_EQUAL');
14217                                           l_error_exp := FND_MESSAGE.get;
14218                                           x_msg_data := l_error_exp;
14219                                           UPDATE MTL_TRANSACTIONS_INTERFACE
14220                                             SET LAST_UPDATE_DATE = SYSDATE,
14221                                             LAST_UPDATED_BY = l_userid,
14222                                             LAST_UPDATE_LOGIN = l_loginid,
14223                                             PROGRAM_UPDATE_DATE = SYSDATE,
14224                                             PROCESS_FLAG = 3,
14225                                             LOCK_FLAG = 2,
14226                                             ERROR_CODE = substrb(l_error_code,1,240),
14227                                             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14228                                             WHERE ROWID = l_temp_rowid
14229                                             AND PROCESS_FLAG = 1;
14230                                           --check for batch error
14231                                           loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14232 
14233                                           UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14234                                             SET LAST_UPDATE_DATE = SYSDATE,
14235                                             LAST_UPDATED_BY = l_userid,
14236                                             LAST_UPDATE_LOGIN = l_loginid,
14237                                             PROGRAM_UPDATE_DATE = SYSDATE,
14238                                             PROCESS_FLAG = 3,
14239                                             LOCK_FLAG = 2,
14240                                             ERROR_CODE = substrb(l_error_code,1,240)
14241                                             WHERE TRANSACTION_HEADER_ID = l_header_id
14242                                             AND PROCESS_FLAG = 1
14243                                             AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14244                                              --                               group error changes.
14245                                              l_current_batch_failed := TRUE;--Bug#5075521
14246                                              l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14247                                           END IF; --override_rsv_for_backflush
14248                                        END IF;
14249 
14250                                        IF (NOT l_current_batch_failed ) THEN --200
14251                                        INV_QUANTITY_TREE_PVT.query_tree
14252                                          (   p_api_version_number   => 1.0
14253                                              ,  p_init_msg_lst         => fnd_api.g_false
14254                                              ,  x_return_status        => l_return_status
14255                                              ,  x_msg_count            => l_msg_count
14256                                              ,  x_msg_data             => l_msg_data
14257                                              ,  p_tree_id              => l_tree_id
14258                                              ,  p_revision             => NULL
14259                                              ,  p_lot_number           => NULL
14260                                              ,  p_subinventory_code    => NULL
14261                                              ,  p_locator_id           => NULL
14262                                              ,  x_qoh                  => l_item_qoh
14263                                              ,  x_rqoh                 => l_item_rqoh
14264                                              ,  x_pqoh                 => l_item_pqoh
14265                                              ,  x_qr                   => l_item_qr
14266                                              ,  x_qs                   => l_item_qs
14267                                              ,  x_att                  => l_item_att
14268                                              ,  x_atr                  => l_item_atr
14269                                              );
14270 
14271                                        IF l_return_status = fnd_api.g_ret_sts_error THEN
14272                                           IF (l_debug = 1) THEN
14273                                              inv_log_util.trace('Expected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14274                                           END IF;
14275 
14276                                           FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14277                                           FND_MESSAGE.set_token('token1','XACT_QTY1');
14278                                           l_error_code := FND_MESSAGE.get;
14279                                           l_error_exp := l_msg_data;
14280                                           x_msg_data := l_msg_data;
14281                                           UPDATE MTL_TRANSACTIONS_INTERFACE
14282                                             SET LAST_UPDATE_DATE = SYSDATE,
14283                                             LAST_UPDATED_BY = l_userid,
14284                                             LAST_UPDATE_LOGIN = l_loginid,
14285                                             PROGRAM_UPDATE_DATE = SYSDATE,
14286                                             PROCESS_FLAG = 3,
14287                                             LOCK_FLAG = 2,
14288                                             ERROR_CODE = substrb(l_error_code,1,240),
14289                                             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14290                                             WHERE TRANSACTION_interface_id = l_temp_rowid
14291                                             AND PROCESS_FLAG = 1;
14292                                           --check for batch error
14293                                           loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14294 
14295                                           UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14296                                             SET LAST_UPDATE_DATE = SYSDATE,
14297                                             LAST_UPDATED_BY = l_userid,
14298                                             LAST_UPDATE_LOGIN = l_loginid,
14299                                             PROGRAM_UPDATE_DATE = SYSDATE,
14300                                             PROCESS_FLAG = 3,
14301                                             LOCK_FLAG = 2,
14302                                             ERROR_CODE = substrb(l_error_code,1,240)
14303                                             WHERE TRANSACTION_HEADER_ID = l_header_id
14304                                             AND PROCESS_FLAG = 1
14305                                             AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14306                                              --                               group error changes.
14307                                              l_current_batch_failed := TRUE;--Bug#5075521
14308                                              l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14309                                        END IF ;
14310 
14311                                        IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
14312                                           IF (l_debug = 1) THEN
14313                                              inv_log_util.trace('UnExpected Error while querying tree : ' || l_msg_data,'INV_TXN_MANAGER_GRP', 9);
14314                                           END IF;
14315 
14316                                           FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14317                                           FND_MESSAGE.set_token('token1','XACT_QTY1');
14318                                           l_error_code := FND_MESSAGE.get;
14319                                           l_error_exp := l_msg_data;
14320                                           x_msg_data := l_msg_data;
14321                                           UPDATE MTL_TRANSACTIONS_INTERFACE
14322                                             SET LAST_UPDATE_DATE = SYSDATE,
14323                                             LAST_UPDATED_BY = l_userid,
14324                                             LAST_UPDATE_LOGIN = l_loginid,
14325                                             PROGRAM_UPDATE_DATE = SYSDATE,
14326                                             PROCESS_FLAG = 3,
14327                                             LOCK_FLAG = 2,
14328                                             ERROR_CODE = substrb(l_error_code,1,240),
14329                                             ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14330                                             WHERE ROWID = l_temp_rowid
14331                                             AND PROCESS_FLAG = 1;
14332                                           --check for batch error
14333                                           loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14334 
14335                                           UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14336                                             SET LAST_UPDATE_DATE = SYSDATE,
14337                                             LAST_UPDATED_BY = l_userid,
14338                                             LAST_UPDATE_LOGIN = l_loginid,
14339                                             PROGRAM_UPDATE_DATE = SYSDATE,
14340                                             PROCESS_FLAG = 3,
14341                                             LOCK_FLAG = 2,
14342                                             ERROR_CODE = substrb(l_error_code,1,240)
14343                                             WHERE TRANSACTION_HEADER_ID = l_header_id
14344                                             AND PROCESS_FLAG = 1
14345                                             AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14346                                              --group error changes.
14347                                              l_current_batch_failed := TRUE;--Bug#5075521
14348                                              l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14349                                        END IF;
14350                                        END IF; --200
14351                                        inv_log_util.trace('L_ITEM_QOH : ' || l_item_qoh,'INV_TXN_MANAGER_GRP', 9);
14352                                        inv_log_util.trace('L_ITEM_RQOH : ' || l_item_rqoh,'INV_TXN_MANAGER_GRP', 9);
14353                                        inv_log_util.trace('L_ITEM_PQOH : ' || l_item_pqoh,'INV_TXN_MANAGER_GRP', 9);
14354                                        inv_log_util.trace('L_ITEM_QR : ' || l_item_qr,'INV_TXN_MANAGER_GRP', 9);
14355                                        inv_log_util.trace('L_ITEM_QS : ' || l_item_qs,'INV_TXN_MANAGER_GRP', 9);
14356                                        inv_log_util.trace('L_ITEM_ATT : ' || l_item_att,'INV_TXN_MANAGER_GRP', 9);
14357                                        inv_log_util.trace('L_ITEM_ATR : ' || l_item_atr,'INV_TXN_MANAGER_GRP', 9);
14358                                        inv_log_util.trace('L_TRX_QTY : ' || l_trx_qty,'INV_TXN_MANAGER_GRP', 9);
14359 
14360                                        IF ( NOT l_current_batch_failed) THEN --250
14361                                        IF (l_item_qoh <> l_item_att) THEN -- Higher Level Reservations
14362                                           IF (l_item_att < l_trx_qty AND l_item_qr > 0) THEN
14363                                           /*Bug 4764343 Base Bug::4645686. This condition is added for a specific customer by introducing
14364                                            a new profile 'INV_OVERRIDE_RSV_FOR_BACKFLUSH' . If this profile is not set to 'Yes'then the
14365                                            backflush transaction can not consume existing reservations.Else it can consume existing
14366                                            reservation and can drive inventory  negative. */
14367                                           IF (l_override_rsv_for_backflush <> 1 ) THEN
14368                                              inv_log_util.trace('Total Org quantity cannot become negative when there are reservations present','INV_TXN_MANAGER_GRP', 9);
14369                                              FND_MESSAGE.set_name('INV','INV_INT_PROCCODE');
14370                                              l_error_code := FND_MESSAGE.get;
14371                                              FND_MESSAGE.set_name('INV','INV_ORG_QUANTITY');
14372                                              l_error_exp := FND_MESSAGE.get;
14373                                              FND_MESSAGE.set_name('INV','INV_INTERNAL_ERROR');
14374                                              x_msg_data := l_error_exp;
14375                                             UPDATE MTL_TRANSACTIONS_INTERFACE
14376                                               SET LAST_UPDATE_DATE = SYSDATE,
14377                                               LAST_UPDATED_BY = l_userid,
14378                                               LAST_UPDATE_LOGIN = l_loginid,
14379                                               PROGRAM_UPDATE_DATE = SYSDATE,
14380                                               PROCESS_FLAG = 3,
14381                                               LOCK_FLAG = 2,
14382                                               ERROR_CODE = substrb(l_error_code,1,240),
14383                                               ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14384                                               WHERE ROWID = l_temp_rowid
14385                                               AND PROCESS_FLAG = 1;
14386                                             --check for batch error
14387                                             loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14388 
14389                                             UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14390                                               SET LAST_UPDATE_DATE = SYSDATE,
14391                                               LAST_UPDATED_BY = l_userid,
14392                                               LAST_UPDATE_LOGIN = l_loginid,
14393                                               PROGRAM_UPDATE_DATE = SYSDATE,
14394                                               PROCESS_FLAG = 3,
14395                                               LOCK_FLAG = 2,
14396                                               ERROR_CODE = substrb(l_error_code,1,240)
14397                                               WHERE TRANSACTION_HEADER_ID = l_header_id
14398                                               AND PROCESS_FLAG = 1
14399                                               AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14400                                                --group error changes.
14401                                                l_current_batch_failed := TRUE;--Bug#5075521
14402                                                l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14403                                           END IF;-- override_rsv_for_backflush
14404                                           END IF;--total org quantity
14405                                        END IF;--high level
14406                                        END IF; --250
14407 
14408                                        ELSE --(neg_inv_rcpt = 1)
14409                                          IF (l_debug = 1) THEN
14410                                             inv_log_util.trace('Not Enough Qty: l_att,l_trx_qty:' || l_att||','||l_trx_qty,'INV_TXN_MANAGER_GRP', 9);
14411                                          END IF;
14412                                          FND_MESSAGE.set_name('INV','INV_NO_NEG_BALANCES');
14413                                          l_error_code := FND_MESSAGE.get;
14414                                          FND_MESSAGE.set_name('INV','INV_LESS_OR_EQUAL');
14415                                          FND_MESSAGE.set_token('ENTITY1','INV_QUANTITY',l_translate);
14416                                          FND_MESSAGE.set_token('ENTITY2','AVAIL_TO_TRANSACT',l_translate);
14417                                          l_error_exp := FND_MESSAGE.get;
14418                                          x_msg_data := l_error_exp;
14419                                          UPDATE MTL_TRANSACTIONS_INTERFACE
14420                                            SET LAST_UPDATE_DATE = SYSDATE,
14421                                            LAST_UPDATED_BY = l_userid,
14422                                            LAST_UPDATE_LOGIN = l_loginid,
14423                                            PROGRAM_UPDATE_DATE = SYSDATE,
14424                                            PROCESS_FLAG = 3,
14425                                            LOCK_FLAG = 2,
14426                                            ERROR_CODE = substrb(l_error_code,1,240),
14427                                            ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14428                                            WHERE ROWID = l_temp_rowid
14429                                            AND PROCESS_FLAG = 1;
14430                                          --check for batch error
14431                                          loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14432 
14433                                          UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14434                                            SET LAST_UPDATE_DATE = SYSDATE,
14435                                            LAST_UPDATED_BY = l_userid,
14436                                            LAST_UPDATE_LOGIN = l_loginid,
14437                                            PROGRAM_UPDATE_DATE = SYSDATE,
14438                                            PROCESS_FLAG = 3,
14439                                            LOCK_FLAG = 2,
14440                                            ERROR_CODE = substrb(l_error_code,1,240)
14441                                            WHERE TRANSACTION_HEADER_ID = l_header_id
14442                                            AND PROCESS_FLAG = 1
14443                                            AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14444                                             --                               group error changes.
14445                                             l_current_batch_failed := TRUE;--Bug#5075521
14446                                             l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14447                                     END IF;
14448                                  END IF;--check for att and trx qty
14449                                END IF; --nsinghi bug#5286961 l_Line_rec_Type.wip_entity_type = 10
14450 
14451 
14452                                -- update the qty
14453                            -- Pawan  11th july Added -  GME does not have transfer subinventory
14454                            IF ( NOT l_current_batch_failed ) THEN --300
14455                             IF (l_actid in (2,28)) then
14456                                inv_quantity_tree_pub.update_quantities
14457                                  (p_api_version_number        => 1.0,
14458                                   p_init_msg_lst              => fnd_api.g_false,
14459                                   x_return_status             => l_return_status,
14460                                   x_msg_count                 => l_msg_count,
14461                                   x_msg_data                  => l_msg_data,
14462                                   p_organization_id           => l_org_id,
14463                                   p_inventory_item_id         => l_item_id,
14464                                   p_tree_mode                 => 2,
14465                                   p_is_revision_control       => l_revision_control,
14466                                   p_is_lot_control            => l_lot_control,
14467                                   p_is_serial_control         => FALSE,
14468                                   p_demand_source_type_id     => nvl(l_srctypeid,-9999),
14469                                   p_demand_source_header_id => nvl(l_srcid,-9999),
14470                                   p_demand_source_line_id => nvl(l_srclineid,-9999),
14471                                   p_revision                  => l_rev,
14472                                   p_lot_number                => l_lotnum,
14473                                   p_subinventory_code         => l_xfrsub,
14474                                   p_locator_id                => l_xlocid,
14475                                   p_primary_quantity          => l_trx_qty,
14476                                   p_quantity_type             => inv_quantity_tree_pvt.g_qoh,
14477                                  p_onhand_source             => inv_quantity_tree_pvt.g_all_subs,
14478                                  x_qoh                       => l_qoh,
14479                                  x_rqoh                      => l_rqoh,
14480                                  x_qr                        => l_qr,
14481                                  x_qs                        => l_qs,
14482                                  x_att                       => l_att,
14483                                  x_atr                       => l_atr);
14484 
14485 
14486                                IF l_return_status <> fnd_api.g_ret_sts_success THEN
14487                                   FND_MESSAGE.set_name('INV', 'INV_ERR_CREATETREE');
14488                                   FND_MESSAGE.set_token('ROUTINE','INV_QUANTITY_TREE_PUB.UPDATE_QUANTITIES');
14489                                   l_error_code:= fnd_message.get;
14490                                   l_error_exp :=l_msg_data;
14491                                   x_msg_data := l_msg_data;
14492                                   UPDATE MTL_TRANSACTIONS_INTERFACE
14493                                     SET LAST_UPDATE_DATE = SYSDATE,
14494                                     LAST_UPDATED_BY = l_userid,
14495                                     LAST_UPDATE_LOGIN = l_loginid,
14496                                     PROGRAM_UPDATE_DATE = SYSDATE,
14497                                     PROCESS_FLAG = 3,
14498                                     LOCK_FLAG = 2,
14499                                     ERROR_CODE = substrb(l_error_code,1,240),
14500                                     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14501                                     WHERE ROWID = l_temp_rowid
14502                                     AND PROCESS_FLAG = 1;
14503                                   --check for batch error
14504                                   loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14505 
14506                                   UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14507                                     SET LAST_UPDATE_DATE = SYSDATE,
14508                                     LAST_UPDATED_BY = l_userid,
14509                                     LAST_UPDATE_LOGIN = l_loginid,
14510                                     PROGRAM_UPDATE_DATE = SYSDATE,
14511                                     PROCESS_FLAG = 3,
14512                                     LOCK_FLAG = 2,
14513                                     ERROR_CODE = substrb(l_error_code,1,240)
14514                                     WHERE TRANSACTION_HEADER_ID = l_header_id
14515                                     AND PROCESS_FLAG = 1
14516                                     AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14517                                      --                               group error changes.
14518                                      l_current_batch_failed := TRUE;--Bug#5075521
14519                                      l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14520                                   END IF;
14521                               ELSE
14522                                 /* Jalaj Srivastava Bug 5232394
14523                                     update tree with correct sign.
14524                                     sign is derived from transaction_quantity */
14525 
14526                                 inv_quantity_tree_pub.update_quantities
14527                                  (p_api_version_number        => 1.0,
14528                                   p_init_msg_lst              => fnd_api.g_false,
14529                                   x_return_status             => l_return_status,
14530                                   x_msg_count                 => l_msg_count,
14531                                   x_msg_data                  => l_msg_data,
14532                                   p_organization_id           => l_org_id,
14533                                   p_inventory_item_id         => l_item_id,
14534                                   p_tree_mode                 => 2,
14535                                   p_is_revision_control       => l_revision_control,
14536                                   p_is_lot_control            => l_lot_control,
14537                                   p_is_serial_control         => FALSE,
14538                                   p_demand_source_type_id     => nvl(l_srctypeid,-9999),
14539                                   p_demand_source_header_id => nvl(l_srcid,-9999),
14540                                   p_demand_source_line_id => nvl(l_srclineid,-9999),
14541                                   p_revision                  => l_rev,
14542                                   p_lot_number                => l_lotnum,
14543                                   p_subinventory_code         => l_sub_code,
14544                                   p_locator_id                => l_locid,
14545                                   p_primary_quantity          => (sign(l_line_rec_type.transaction_quantity)*(l_trx_qty)),
14546                                   p_quantity_type             => inv_quantity_tree_pvt.g_qoh,
14547                                  p_onhand_source             => inv_quantity_tree_pvt.g_all_subs,
14548                                  x_qoh                       => l_qoh,
14549                                  x_rqoh                      => l_rqoh,
14550                                  x_qr                        => l_qr,
14551                                  x_qs                        => l_qs,
14552                                  x_att                       => l_att,
14553                                  x_atr                       => l_atr);
14554 
14555                                IF l_return_status <> fnd_api.g_ret_sts_success THEN
14556                                   FND_MESSAGE.set_name('INV', 'INV_ERR_CREATETREE');
14557                                   FND_MESSAGE.set_token('ROUTINE','INV_QUANTITY_TREE_PUB.UPDATE_QUANTITIES');
14558                                   l_error_code:= fnd_message.get;
14559                                   l_error_exp :=l_msg_data;
14560                                   x_msg_data := l_msg_data;
14561                                   UPDATE MTL_TRANSACTIONS_INTERFACE
14562                                     SET LAST_UPDATE_DATE = SYSDATE,
14563                                     LAST_UPDATED_BY = l_userid,
14564                                     LAST_UPDATE_LOGIN = l_loginid,
14565                                     PROGRAM_UPDATE_DATE = SYSDATE,
14566                                     PROCESS_FLAG = 3,
14567                                     LOCK_FLAG = 2,
14568                                     ERROR_CODE = substrb(l_error_code,1,240),
14569                                     ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14570                                     WHERE ROWID = l_temp_rowid
14571                                     AND PROCESS_FLAG = 1;
14572                                   --check for batch error
14573                                   loaderrmsg('INV_GROUP_ERROR','INV_GROUP_ERROR');
14574 
14575                                   UPDATE MTL_TRANSACTIONS_INTERFACE MTI
14576                                     SET LAST_UPDATE_DATE = SYSDATE,
14577                                     LAST_UPDATED_BY = l_userid,
14578                                     LAST_UPDATE_LOGIN = l_loginid,
14579                                     PROGRAM_UPDATE_DATE = SYSDATE,
14580                                     PROCESS_FLAG = 3,
14581                                     LOCK_FLAG = 2,
14582                                     ERROR_CODE = substrb(l_error_code,1,240)
14583                                     WHERE TRANSACTION_HEADER_ID = l_header_id
14584                                     AND PROCESS_FLAG = 1
14585                                     AND TRANSACTION_BATCH_ID = l_Line_rec_Type.transaction_batch_id;
14586                                      --                               group error changes.
14587                                      l_current_batch_failed := TRUE;--Bug#5075521
14588                                      l_current_err_batch_id := l_Line_rec_Type.transaction_batch_id;--Bug#5075521
14589                                  ELSE
14590                                    --qty tree update was successful
14591                                    IF (l_debug = 1) THEN
14592                                      inv_log_util.trace('after update of quantity tree qoh='||l_qoh||' l_att='||l_att||' l_atr='||l_atr,'INV_TXN_MANAGER_GRP', 9);
14593                                    END IF;
14594                                  END IF;
14595                                END IF;-- Pawan Added for IF (l_actid in (2,28))
14596                                END IF; --300
14597                               END IF; --150
14598                               END LOOP;--
14599                            END IF;--050
14600                                  /* This should be for any error other than not found */
14601                                  --IF z1%OPEN
14602                                  --CLOSE Z1;
14603                                  --------------Qty tree end
14604 
14605                             END LOOP; --AA1
14606 
14607                             --free all trees created so far.
14608                             /* INV_QUANTITY_TREE_PVT.free_All
14609                             (   p_api_version_number   => 1.0
14610                               ,  p_init_msg_lst         => fnd_api.g_false
14611                               ,  x_return_status        => l_return_status
14612                               ,  x_msg_count            => l_msg_count
14613                               ,  x_msg_data             => l_msg_data); */
14614 
14615                               --Jalaj Srivastava Bug 4672291
14616                               --Call free_tree only when l_tree_id is not null
14617                               --Jalaj Srivastava Bug 5155661
14618                               --free the tree only if p_free_tree is true
14619                               IF    (p_free_tree = fnd_api.G_TRUE)
14620                                 AND (l_tree_id IS NOT NULL) THEN
14621                                 INV_QUANTITY_TREE_PVT.free_tree
14622                                   (  p_api_version_number  => 1.0
14623                                    , p_init_msg_lst        => fnd_api.g_false
14624                                    , x_return_status       => l_return_status
14625                                    , x_msg_count           => l_msg_count
14626                                    , x_msg_data            => l_msg_data
14627                                    , p_tree_id              => l_tree_id );
14628                               END IF;
14629 
14630                               SELECT COUNT(*)
14631                               INTO l_count_success
14632                               FROM mtl_transactions_interface
14633                               WHERE transaction_header_id = l_header_id
14634                                 AND process_flag = 1;
14635 
14636                               IF (l_count_success = 0) THEN
14637                                   RETURN -1;
14638                               END IF;
14639 
14640                             -- ADD tmp Insert here. In case of an error
14641                             --return -1.
14642                             --J-dev
14643 
14644                             IF (NOT tmpinsert(l_header_id,p_validation_level)) THEN
14645                                l_error_exp := FND_MESSAGE.get;
14646                                IF (l_debug = 1) THEN
14647                                   inv_log_util.trace('Error in tmpinsert='|| l_error_exp, 'INV_TXN_MANAGER_GRP', 9);
14648                                END IF;
14649                                FND_MESSAGE.set_name('INV','INV_INT_TMPXFRCODE');
14650                                l_error_code := FND_MESSAGE.get;
14651                                x_msg_data := l_error_exp;
14652                                UPDATE MTL_TRANSACTIONS_INTERFACE
14653                                  SET LAST_UPDATE_DATE = SYSDATE,
14654                                  LAST_UPDATED_BY = l_userid,
14655                                  LAST_UPDATE_LOGIN = l_loginid,
14656                                  PROGRAM_UPDATE_DATE = SYSDATE,
14657                                  PROCESS_FLAG = 3,
14658                                  LOCK_FLAG = 2,
14659                                  ERROR_CODE = substrb(l_error_code,1,240),
14660                                  ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14661                                  WHERE TRANSACTION_HEADER_ID =l_header_id
14662                                  AND PROCESS_FLAG = 1;
14663 
14664                                return -1;
14665                              ELSE
14666                                --delete from mti/mtli/msni
14667 
14668                                DELETE FROM MTL_SERIAL_NUMBERS_INTERFACE
14669                                  WHERE TRANSACTION_INTERFACE_ID
14670                                  IN(
14671                                     SELECT TRANSACTION_INTERFACE_ID
14672                                     FROM MTL_TRANSACTIONS_INTERFACE
14673                                     WHERE TRANSACTION_HEADER_ID =l_header_id
14674                                     AND PROCESS_FLAG <> 3
14675                                  union all
14676                                  SELECT SERIAL_TRANSACTION_TEMP_ID
14677                                  FROM MTL_TRANSACTION_LOTS_INTERFACE
14678                                  WHERE TRANSACTION_INTERFACE_ID
14679                                  IN (
14680                                       SELECT TRANSACTION_INTERFACE_ID
14681                                       FROM MTL_TRANSACTIONS_INTERFACE
14682                                       WHERE TRANSACTION_HEADER_ID = l_header_id
14683                                       AND PROCESS_FLAG <> 3 )) ;
14684                                DELETE FROM MTL_TRANSACTION_LOTS_INTERFACE
14685                                  WHERE TRANSACTION_INTERFACE_ID IN
14686                                  (SELECT TRANSACTION_INTERFACE_ID
14687                                   FROM MTL_TRANSACTIONS_INTERFACE
14688                                   WHERE TRANSACTION_HEADER_ID =l_header_id
14689                                   AND PROCESS_FLAG <> 3);
14690                                DELETE FROM MTL_TRANSACTIONS_INTERFACE
14691                                  WHERE TRANSACTION_HEADER_ID = l_header_id
14692                                  AND PROCESS_FLAG <> 3;
14693                                IF (l_debug = 1) THEN
14694                                   inv_log_util.trace('*** Del recs mti valid trx', 'INV_TXN_MANAGER_GRP',9);
14695                                END IF;
14696                             END IF;--tmpinsert
14697 
14698                             return 0;--return success.
14699 
14700 
14701  EXCEPTION
14702    WHEN OTHERS THEN
14703         IF (l_debug = 1) THEN
14704         inv_log_util.trace('*** SQL error '||substr(sqlerrm, 1, 200), 'INV_TXN_MANAGER_GRP',9);
14705         END IF;
14706 
14707           FND_MESSAGE.set_name('INV','INV_INT_SQLCODE');
14708           l_error_code := FND_MESSAGE.get;
14709 
14710           UPDATE MTL_TRANSACTIONS_INTERFACE
14711              SET LAST_UPDATE_DATE = SYSDATE,
14712                  LAST_UPDATED_BY = l_userid,
14713                  LAST_UPDATE_LOGIN = l_loginid,
14714                  PROGRAM_UPDATE_DATE = SYSDATE,
14715                  PROCESS_FLAG = 3,
14716                  LOCK_FLAG = 2,
14717                  ERROR_CODE = substrb(l_error_code,1,240),
14718                  ERROR_EXPLANATION = substrb(l_error_exp,1,240)
14719            WHERE TRANSACTION_HEADER_ID = l_header_id
14720              AND PROCESS_FLAG = 1;
14721 
14722           return -1;
14723 
14724 
14725    END Validate_Transactions;
14726 
14727 
14728 
14729 FUNCTION Validate_Additional_Attr(
14730        p_api_version            IN     NUMBER
14731      , p_init_msg_list          IN      VARCHAR2 := fnd_api.g_false
14732          , p_validation_level           IN      NUMBER  := fnd_api.g_valid_level_full
14733          , p_intid                                      IN     NUMBER
14734          , p_rowid                  IN     VARCHAR2
14735      , p_inventory_item_id      IN     NUMBER
14736      , p_organization_id        IN     NUMBER
14737      , p_lot_number             IN     VARCHAR2
14738      , p_grade_code             IN OUT NOCOPY    VARCHAR2
14739      , p_retest_date            IN OUT NOCOPY    DATE
14740      , p_maturity_date          IN OUT NOCOPY    DATE
14741      , p_parent_lot_number      IN OUT NOCOPY    VARCHAR2
14742      , p_origination_date       IN OUT NOCOPY    DATE
14743      , p_origination_type       IN OUT NOCOPY    NUMBER
14744      , p_expiration_action_code IN OUT NOCOPY    VARCHAR2
14745      , p_expiration_action_date IN OUT NOCOPY    DATE
14746      , p_expiration_date        IN OUT NOCOPY    DATE
14747      , p_hold_date                  IN OUT NOCOPY    DATE
14748          , p_reason_id              IN OUT NOCOPY    NUMBER
14749          , p_copy_lot_attribute_flag IN  VARCHAR2
14750          , x_return_status       OUT NOCOPY VARCHAR2
14751          , x_msg_count           OUT NOCOPY NUMBER
14752      , x_msg_data            OUT NOCOPY VARCHAR2        )
14753 RETURN BOOLEAN
14754 IS
14755 
14756   /* get lot record info  */
14757    CURSOR  c_get_lot_record ( p_orgid NUMBER, p_itemid NUMBER, p_lotnum VARCHAR2)
14758    IS
14759    SELECT  *
14760      FROM  mtl_lot_numbers
14761     WHERE  lot_number        = p_lotnum
14762       AND  inventory_item_id = p_itemid
14763       AND  organization_id   = p_orgid;
14764 
14765    l_lot_record    c_get_lot_record%ROWTYPE;
14766    l_parent_lot_record    c_get_lot_record%ROWTYPE;
14767 
14768    /* Get reason code info */
14769    CURSOR c_get_reason_info  IS
14770     SELECT MTR.REASON_ID
14771     FROM MTL_TRANSACTION_REASONS MTR
14772     WHERE MTR.REASON_ID = p_reason_id
14773     AND NVL(MTR.DISABLE_DATE, SYSDATE + 1) > SYSDATE;
14774 
14775     /* get item information */
14776     CURSOR  c_get_item_info IS
14777     select RETEST_INTERVAL,
14778                EXPIRATION_ACTION_INTERVAL ,
14779                    SHELF_LIFE_CODE,
14780                    MATURITY_DAYS,
14781                    HOLD_DAYS,
14782                    CHILD_LOT_FLAG ,
14783                    GRADE_CONTROL_FLAG
14784         from mtl_system_items
14785         WHERE inventory_item_id = p_inventory_item_id
14786     AND  organization_id   = p_organization_id;
14787 
14788 
14789   l_return_status        VARCHAR2(1);
14790   l_msg_count            NUMBER;
14791   l_msg_data             VARCHAR2(3000);
14792 
14793 
14794   l_api_version        NUMBER         := 1.0;
14795   l_init_msg_list      VARCHAR2(3)    := 'F';
14796   l_commit             VARCHAR2(3)    := 'F';
14797 
14798 
14799   -- FABDI
14800     l_userid NUMBER := -1; --prg_info.userid;
14801     l_reqstid NUMBER := -1; -- prg_info.reqstid;
14802     l_applid NUMBER := -1; -- prg_info.appid;
14803     l_progid NUMBER := -1; -- prg_info.progid;
14804     l_loginid NUMBER := -1; -- prg_info.loginid;
14805 
14806     l_retest_interval NUMBER;
14807     l_exp_action_interval NUMBER;
14808     l_shelf_life_code  NUMBER;
14809     l_maturity_days   NUMBER;
14810     l_hold_days      NUMBER;
14811     l_reason_id      NUMBER;
14812     l_check BOOLEAN := TRUE;
14813 
14814     l_parent_lot_number VARCHAR2(80);
14815     l_lot_number VARCHAR2(80);
14816     l_itemid   NUMBER;
14817     l_orgid    NUMBER;
14818 
14819     l_child_lot_flag VARCHAR2(1);
14820     l_grade_control_flag VARCHAR2(1);
14821 
14822     l_new_parent_lot BOOLEAN ;
14823     l_new_child_lot BOOLEAN ;
14824     l_lot_onhand NUMBER; --Bug#7139549
14825     l_orig_date              DATE;
14826 
14827   BEGIN
14828 
14829          IF (l_debug is null)
14830          THEN
14831        l_debug := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
14832          END IF;
14833 
14834      IF (l_debug = 1) THEN
14835                 inv_log_util.trace('inside Validate_Additional_Attr' , 'INV_TXN_MANAGER_GRP', 9);
14836      END IF;
14837 
14838 
14839 
14840     /* Get Lot Child Information*/
14841     OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, p_lot_number);
14842     FETCH c_get_lot_record INTO l_lot_record;
14843 
14844     IF  c_get_lot_record%NOTFOUND
14845     THEN
14846         -- dbms_output.put_line('New Lot Child  ');
14847         l_new_child_lot := TRUE;
14848     ELSE
14849       /*Bug#7139549 check if the lot exists but it is a pending product lot */
14850 
14851         SELECT count(1) into l_lot_onhand
14852         FROM   mtl_onhand_quantities_detail
14853         WHERE  INVENTORY_ITEM_ID = p_inventory_item_id
14854         AND    ORGANIZATION_ID = p_organization_id
14855         AND    lot_number = p_lot_number
14856         AND    PRIMARY_TRANSACTION_QUANTITY > 0
14857         AND    rownum = 1;
14858 
14859         IF (l_lot_onhand = 0) THEN
14860              inv_calculate_exp_date.get_origination_date
14861                      (  p_inventory_item_id    => p_inventory_item_id
14862                        ,p_organization_id      => p_organization_id
14863                        ,p_lot_number           => p_lot_number
14864                        ,x_orig_date            => l_orig_date
14865                        ,x_return_status        => l_return_status
14866                      );
14867 
14868              IF l_return_status <> 'S' THEN
14869               IF (l_debug = 1) THEN
14870                 inv_log_util.trace('Error from get_origination_date', 'INV_TXN_MANAGER_GRP', 9);
14871               END IF;
14872                CLOSE c_get_lot_record;
14873                 RAISE FND_API.G_EXC_ERROR;
14874              END IF;
14875         --  dbms_output.put_line('Existing Lot Child  ');
14876           IF (l_orig_date IS NULL AND p_expiration_date IS NULL) THEN
14877            IF (l_debug = 1) THEN
14878              inv_log_util.trace('existing pending lot having no expiry date', 'INV_TXN_MANAGER_GRP', 9);
14879            END IF;
14880            l_new_child_lot := TRUE;
14881           END IF; --expiration date null
14882         ELSE
14883            IF (l_debug = 1) THEN
14884              inv_log_util.trace('new lot', 'INV_TXN_MANAGER_GRP', 9);
14885            END IF;
14886           l_new_child_lot := FALSE;
14887         END IF; --lot onhand condition
14888     END IF;
14889 
14890     CLOSE c_get_lot_record;
14891 
14892     if p_parent_lot_number IS NOT NULL
14893     THEN
14894         /* Get Parent Lot Child Information*/
14895         OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, p_parent_lot_number);
14896         FETCH c_get_lot_record INTO l_parent_lot_record;
14897 
14898         IF  c_get_lot_record%NOTFOUND
14899         THEN
14900                 -- dbms_output.put_line('New Lot Parent Lot ' );
14901                 l_new_parent_lot := TRUE;
14902         Else
14903                 -- dbms_output.put_line('Existing Parent Lot ' );
14904                 l_new_parent_lot := FALSE;
14905         END IF;
14906         CLOSE c_get_lot_record;
14907     ELSE
14908                 -- dbms_output.put_line('No Parent Lot  ' );
14909                 l_new_parent_lot := FALSE;
14910     END IF;
14911 
14912 
14913 
14914     /* Get item info */
14915     OPEN c_get_item_info;
14916     FETCH c_get_item_info INTO l_retest_interval,  l_exp_action_interval, l_shelf_life_code,
14917                                         l_maturity_days, l_hold_days, l_child_lot_flag, l_grade_control_flag;
14918     CLOSE c_get_item_info;
14919 
14920     /* Check Lot */
14921     IF (l_new_child_lot) THEN
14922 
14923       IF (l_debug = 1) THEN
14924                 inv_log_util.trace('Validate_Additional_Attr: This is a New Lot : ' , 'INV_TXN_MANAGER_GRP', 9);
14925       END IF;
14926 
14927       /* defult missing values */
14928       l_lot_record.inventory_item_id  := p_inventory_item_id ;
14929       l_lot_record.organization_id := p_organization_id ;
14930 
14931       l_lot_record.lot_number := p_lot_number ;
14932       l_lot_record.parent_lot_number :=  p_parent_lot_number ;
14933 
14934       l_lot_record.grade_code := p_grade_code ;
14935       l_lot_record.retest_date := p_retest_date ;
14936           l_lot_record.maturity_date := p_maturity_date ;
14937 
14938       l_lot_record.origination_date  := NVL(p_origination_date, SYSDATE);
14939 
14940       l_lot_record.origination_type := p_origination_type ;
14941       l_lot_record.expiration_action_code := p_expiration_action_code ;
14942       l_lot_record.expiration_action_date := p_expiration_action_date ;
14943       l_lot_record.hold_date := p_hold_date ;
14944       /*Fixed for bug#6626120
14945         Lot record is initialized with exp date if lot expiration is 'user defined'.
14946         This code ensure that for user defined the exp date passed is not ignored
14947         and not assigned to null.
14948         For shelf life day the exp date is always calcualted so no need to
14949         initialize for that case. If we initalize for that as well then
14950         system will not calculate the exp date for shel life days hence will
14951         break the functionality. Hence the initialzation is done
14952         conditionally.
14953       */
14954        if l_shelf_life_code = 4 and p_expiration_date is not null then
14955           l_lot_record.expiration_date :=p_expiration_date;
14956        end if;
14957 
14958       -- dbms_output.put_line('l_copy_lot_attribute_flag   ' || p_copy_lot_attribute_flag   );
14959 
14960       IF (l_debug = 1) THEN
14961                 inv_log_util.trace('Validate_Additional_Attr: p_copy_lot_attribute_flag   ' || p_copy_lot_attribute_flag , 'INV_TXN_MANAGER_GRP', 9);
14962        END IF;
14963 
14964       IF ((p_parent_lot_number IS NOT NULL) AND
14965                  (l_child_lot_flag = 'Y'))
14966       THEN
14967         IF p_copy_lot_attribute_flag = 'N'
14968         THEN
14969                     IF (l_debug = 1) THEN
14970                                 inv_log_util.trace('Calling   Inv_Lot_API_PKG.Set_Msi_Default_Attr (1) ' , 'INV_TXN_MANAGER_GRP', 9);
14971                 END IF;
14972             -- dbms_output.put_line('Calling   Inv_Lot_API_PKG.Set_Msi_Default_Attr (1 )');
14973                 /* Default attributes for lot from item master */
14974                 -- inv_lot_api_pub.Set_Msi_Default_Attr(p_lot_rec  => l_lot_record);
14975 
14976             Inv_Lot_API_PKG.Set_Msi_Default_Attr ( p_lot_rec           => l_lot_record
14977                                                                                   , x_return_status     => l_return_status
14978                                                   , x_msg_count         => l_msg_count
14979                                                   , x_msg_data         => l_msg_data);
14980 
14981             IF l_return_status <> fnd_api.g_ret_sts_success
14982                     THEN
14983                                         l_error_code := l_msg_data;
14984                                         l_error_exp := l_msg_data;
14985                                 RAISE FND_API.G_EXC_ERROR;
14986                         END IF;
14987 
14988                 p_grade_code                    :=   l_lot_record.grade_code;
14989                 p_retest_date                   :=       l_lot_record.retest_date;
14990                         p_maturity_date                 :=   l_lot_record.maturity_date;
14991                 p_origination_date              :=   l_lot_record.origination_date;
14992                 p_origination_type              :=   l_lot_record.origination_type;
14993                 p_expiration_action_code        :=   l_lot_record.expiration_action_code;
14994                 p_expiration_action_date  :=   l_lot_record.expiration_action_date;
14995                 p_hold_date                             :=      l_lot_record.hold_date;
14996                 p_expiration_date           := l_lot_record.expiration_date;
14997         ELSE
14998          -- Default attributes form Parent lot
14999          OPEN c_get_lot_record (p_organization_id, p_inventory_item_id, l_lot_record.parent_lot_number);
15000          FETCH c_get_lot_record INTO l_parent_lot_record;
15001          CLOSE c_get_lot_record;
15002          /* Check if Parent lot exists */
15003          IF NOT (l_new_parent_lot)
15004                  THEN
15005                     IF (l_debug = 1) THEN
15006                                 inv_log_util.trace('Validate_Additional_Attr: Parent lot EXISTS   ' , 'INV_TXN_MANAGER_GRP', 9);
15007                 END IF;
15008             if p_expiration_date is null
15009             then
15010                         p_expiration_date                       :=    l_parent_lot_record.expiration_date;
15011                         end if;
15012 
15013                     IF p_grade_code IS NULL
15014                     THEN
15015                         p_grade_code                    :=    l_parent_lot_record.grade_code;
15016                     END IF;
15017                     IF p_retest_date IS NULL
15018                     THEN
15019                 p_retest_date                           :=        l_parent_lot_record.retest_date;
15020                 END IF;
15021                     IF p_maturity_date IS NULL
15022                     THEN
15023                                 p_maturity_date                 :=    l_parent_lot_record.maturity_date;
15024                         END IF;
15025                     IF p_origination_date IS NULL
15026                     THEN
15027                         p_origination_date              :=    l_parent_lot_record.origination_date;
15028                 END IF;
15029                     IF p_origination_type IS NULL
15030                     THEN
15031                         p_origination_type              :=    l_parent_lot_record.origination_type;
15032                 END IF;
15033                     IF p_expiration_action_code IS NULL
15034                     THEN
15035                         p_expiration_action_code :=   l_parent_lot_record.expiration_action_code;
15036                 END IF;
15037                     IF p_expiration_action_date IS NULL
15038                     THEN
15039                         p_expiration_action_date :=   l_parent_lot_record.expiration_action_date;
15040                 END IF;
15041                     IF p_hold_date IS NULL
15042                     THEN
15043                         p_hold_date                      :=   l_parent_lot_record.hold_date;
15044                 END IF;
15045              Else
15046                 -- dbms_output.put_line('Parent lot does not EXISTS, default from item '  );
15047                     IF (l_debug = 1) THEN
15048                                 inv_log_util.trace('Calling   Inv_Lot_API_PKG.Set_Msi_Default_Attr (2) ' , 'INV_TXN_MANAGER_GRP', 9);
15049                 END IF;
15050 
15051              /* new parent lot , default from item master */
15052 
15053            Inv_Lot_API_PKG.Set_Msi_Default_Attr (
15054                     p_lot_rec           => l_lot_record
15055                   , x_return_status     => l_return_status
15056                   , x_msg_count         => l_msg_count
15057                   , x_msg_data         => l_msg_data
15058                   );
15059 
15060             IF l_return_status <> fnd_api.g_ret_sts_success THEN
15061                                         l_error_code := l_msg_data;
15062                                         l_error_exp := l_msg_data;
15063                                 RAISE FND_API.G_EXC_ERROR;
15064                         END IF;
15065 
15066                 p_grade_code                    :=   l_lot_record.grade_code;
15067                 p_retest_date                   :=       l_lot_record.retest_date;
15068                         p_maturity_date                 :=   l_lot_record.maturity_date;
15069                 p_origination_date              :=   l_lot_record.origination_date;
15070                 p_origination_type              :=   l_lot_record.origination_type;
15071                 p_expiration_action_code        :=   l_lot_record.expiration_action_code;
15072                 p_expiration_action_date  :=   l_lot_record.expiration_action_date;
15073                 p_hold_date                             :=      l_lot_record.hold_date;
15074                 p_expiration_date           := l_lot_record.expiration_date;
15075              END IF;
15076             END IF; -- end copy lot attrib check
15077            ELSE
15078                  -- dbms_output.put_line('lot is new and Item is not child lot enabled  ' );
15079             /* lot is new and Item is not child lot enabled */
15080 
15081                     IF (l_debug = 1) THEN
15082                                 inv_log_util.trace('Calling   Inv_Lot_API_PKG.Set_Msi_Default_Attr (3) ' , 'INV_TXN_MANAGER_GRP', 9);
15083                 END IF;
15084 
15085             Inv_Lot_API_PKG.Set_Msi_Default_Attr (
15086                     p_lot_rec           => l_lot_record
15087                   , x_return_status     => l_return_status
15088                   , x_msg_count         => l_msg_count
15089                   , x_msg_data         => l_msg_data
15090                   );
15091 
15092             IF l_return_status <> fnd_api.g_ret_sts_success THEN
15093                                         l_error_code := l_msg_data;
15094                                         l_error_exp := l_msg_data;
15095                                 RAISE FND_API.G_EXC_ERROR;
15096                         END IF;
15097 
15098                 p_grade_code                    :=   l_lot_record.grade_code;
15099                 p_retest_date                   :=       l_lot_record.retest_date;
15100                         p_maturity_date                 :=   l_lot_record.maturity_date;
15101                 p_origination_date              :=   l_lot_record.origination_date;
15102                 p_origination_type              :=   l_lot_record.origination_type;
15103                 p_expiration_action_code        :=   l_lot_record.expiration_action_code;
15104                 p_expiration_action_date  :=   l_lot_record.expiration_action_date;
15105                 p_hold_date                             :=      l_lot_record.hold_date;
15106                 p_expiration_date           := l_lot_record.expiration_date;
15107           END IF;
15108 
15109 
15110 
15111       l_itemid   := p_inventory_item_id;
15112       l_orgid    := p_organization_id;
15113 /*
15114           dbms_output.put_line('***************************************' );
15115       dbms_output.put_line('grade code ' || p_grade_code  );
15116       dbms_output.put_line('retest date ' || p_retest_date   );
15117           dbms_output.put_line('maturity date ' || p_maturity_date  );
15118       dbms_output.put_line('origination date ' || p_origination_date   )  ;
15119       dbms_output.put_line('origination type ' || p_origination_type   );
15120       dbms_output.put_line('expiration action Code ' || p_expiration_action_code   );
15121       dbms_output.put_line('expiration action date ' || p_expiration_action_date   );
15122       dbms_output.put_line('Hold date ' || p_hold_date   );
15123       dbms_output.put_line('expiration date ' || p_expiration_date   );
15124           dbms_output.put_line('***************************************' );
15125 */
15126 
15127       /* VALIDATE parent/child lot number */
15128           l_check := INV_LOT_ATTR_PUB.validate_child_lot( p_parent_lot_number => p_parent_lot_number
15129                                                                                                         ,p_lot_number               => p_lot_number
15130                                                                                                         ,p_org_id                       => l_orgid
15131                                                                                                         ,p_inventory_item_id  => l_itemid
15132                                                                                                         ,p_child_lot_flag     => l_child_lot_flag
15133                                                                                                         ,x_return_status      => l_return_status
15134                                                                                                         ,x_msg_count          => l_msg_count
15135                                                                                                         ,x_msg_data           => l_msg_data);
15136                 IF NOT(l_check)
15137                 THEN
15138                         l_error_code := l_msg_data;
15139                         l_error_exp := l_msg_data;
15140                     RAISE FND_API.G_EXC_ERROR;
15141 
15142                 END IF;
15143 
15144         IF (l_debug = 1) THEN
15145                         inv_log_util.trace('validate_child_lot pass', 'INV_TXN_MANAGER_GRP', 9);
15146         END IF;
15147 
15148 
15149         /******************* START Grade Code validation logic ********************/
15150         l_check := INV_LOT_ATTR_PUB.validate_grade_code( p_grade_code                   => p_grade_code
15151                                                                                         , p_org_id              => l_orgid
15152                                                                                         , p_inventory_item_id   => l_itemid
15153                                                                                         , p_grade_control_flag  => l_grade_control_flag
15154                                                                                         , x_return_status               => l_return_status
15155                                                                                         , x_msg_count                   => l_msg_count
15156                                                                                         , x_msg_data                    => l_msg_data);
15157                 IF NOT(l_check)
15158                 THEN
15159                         l_error_code := l_msg_data;
15160                         l_error_exp := l_msg_data;
15161                     RAISE FND_API.G_EXC_ERROR;
15162                 END IF;
15163 
15164         IF (l_debug = 1) THEN
15165                         inv_log_util.trace('validate_grade_code pass', 'INV_TXN_MANAGER_GRP', 9);
15166         END IF;
15167 
15168                   /******************* START Origination Type validation logic ********************/
15169           l_check := INV_LOT_ATTR_PUB.validate_origination_type(  p_origination_type => p_origination_type
15170                                                                                                                                 , x_return_status        => l_return_status
15171                                                                                                                                 , x_msg_count                => l_msg_count
15172                                                                                                                                 , x_msg_data                => l_msg_data);
15173               IF NOT(l_check)
15174                   THEN
15175                         l_error_code := l_msg_data;
15176                         l_error_exp := l_msg_data;
15177                     RAISE FND_API.G_EXC_ERROR;
15178                  END IF;
15179         IF (l_debug = 1) THEN
15180                         inv_log_util.trace('validate_origination_type pass', 'INV_TXN_MANAGER_GRP', 9);
15181         END IF;
15182 
15183 
15184           -- dbms_output.put_line('Validate_Additional_Attr: Origination type validation - PASS...');
15185 
15186         /******************* START Expiration Action Code validation logic ********************/
15187         l_check := INV_LOT_ATTR_PUB.validate_exp_action_code( p_expiration_action_code => p_expiration_action_code
15188                                                                                                                         , p_org_id => l_orgid
15189                                                                                                                         , p_inventory_item_id => l_itemid
15190                                                                                                                         , p_shelf_life_code => l_shelf_life_code
15191                                                                                                                         , x_return_status => l_return_status
15192                                                                                                                         , x_msg_count => l_msg_count
15193                                                                                                                         , x_msg_data => l_msg_data);
15194                 IF NOT(l_check)
15195                 THEN
15196                         l_error_code := l_msg_data;
15197                         l_error_exp := l_msg_data;
15198                     RAISE FND_API.G_EXC_ERROR;
15199                 END IF;
15200        IF (l_debug = 1) THEN
15201                         inv_log_util.trace('validate_exp_action_code pass', 'INV_TXN_MANAGER_GRP', 9);
15202         END IF;
15203 
15204         -- dbms_output.put_line('Validate_Additional_Attr: Expiration Action Code validation - PASS...');
15205 
15206         /******************* START Retest Date validation logic ********************/
15207         l_check := INV_LOT_ATTR_PUB.validate_retest_date(p_retest_date          => p_retest_date
15208                                                                                                                 ,p_origination_date       => p_origination_date
15209                                                                                                                 ,x_return_status         => l_return_status
15210                                                                                                                 ,x_msg_count              => l_msg_count
15211                                                                                                                 ,x_msg_data                       => l_msg_data);
15212                 IF NOT(l_check)
15213                 THEN
15214                         l_error_code := l_msg_data;
15215                         l_error_exp := l_msg_data;
15216                     RAISE FND_API.G_EXC_ERROR;
15217                 END IF;
15218         IF (l_debug = 1) THEN
15219                         inv_log_util.trace('validate_retest_date pass', 'INV_TXN_MANAGER_GRP', 9);
15220         END IF;
15221 
15222         /******************* START Expiration Action Date validation logic ********************/
15223          l_check := INV_LOT_ATTR_PUB.validate_exp_action_date( p_expiration_action_date => p_expiration_action_date
15224                                                                                                                          , p_expiration_date => p_expiration_date
15225                                                                                                                          , x_return_status => l_return_status
15226                                                                                                                          , x_msg_count => l_msg_count
15227                                                                                                                          , x_msg_data => l_msg_data);
15228                 IF NOT(l_check)
15229                 THEN
15230                         l_error_code := l_msg_data;
15231                         l_error_exp := l_msg_data;
15232                     RAISE FND_API.G_EXC_ERROR;
15233 
15234                 END IF;
15235         IF (l_debug = 1) THEN
15236                         inv_log_util.trace('validate_exp_action_date pass', 'INV_TXN_MANAGER_GRP', 9);
15237         END IF;
15238 
15239 
15240         /******************* START Maturity Date validation logic ********************/
15241         l_check := INV_LOT_ATTR_PUB.validate_maturity_date( p_maturity_date => p_maturity_date
15242                                                                                                                    ,p_origination_date => p_origination_date
15243                                                                                                                    ,x_return_status => l_return_status
15244                                                                                                                    ,x_msg_count => l_msg_count
15245                                                                                                                    ,x_msg_data => l_msg_data);
15246                 IF NOT(l_check)
15247                 THEN
15248                         l_error_code := l_msg_data;
15249                         l_error_exp := l_msg_data;
15250                         RAISE FND_API.G_EXC_ERROR;
15251                 END IF;
15252         IF (l_debug = 1) THEN
15253                         inv_log_util.trace('validate_maturity_date pass', 'INV_TXN_MANAGER_GRP', 9);
15254         END IF;
15255 
15256         /******************* START Hold Date validation logic ********************/
15257         l_check := INV_LOT_ATTR_PUB.validate_hold_date( p_hold_date => p_hold_date
15258                                                                                                                    ,p_origination_date => p_origination_date
15259                                                                                                                    ,x_return_status => l_return_status
15260                                                                                                                    ,x_msg_count => l_msg_count
15261                                                                                                                    ,x_msg_data => l_msg_data);
15262                 IF NOT(l_check)
15263                 THEN
15264                         l_error_code := l_msg_data;
15265                         l_error_exp := l_msg_data;
15266                     RAISE FND_API.G_EXC_ERROR;
15267                 END IF;
15268        IF (l_debug = 1) THEN
15269                         inv_log_util.trace('validate_hold_date pass', 'INV_TXN_MANAGER_GRP', 9);
15270         END IF;
15271 
15272                 /******************* START Reason Code validation logic ********************/
15273             l_check := INV_LOT_ATTR_PUB.validate_reason_code( p_reason_code => null
15274                                                                                                                  ,p_reason_id => p_reason_id
15275                                                                                                                  ,x_return_status => l_return_status
15276                                                                                                                  ,x_msg_count => l_msg_count
15277                                                                                                                  ,x_msg_data => l_msg_count);
15278                 IF NOT(l_check)
15279                 THEN
15280                         l_error_code := l_msg_data;
15281                         l_error_exp := l_msg_data;
15282                     RAISE FND_API.G_EXC_ERROR;
15283                 END IF;
15284         IF (l_debug = 1) THEN
15285                         inv_log_util.trace('validate_reason_code pass', 'INV_TXN_MANAGER_GRP', 9);
15286         END IF;
15287 
15288     ELSE
15289         IF (l_debug = 1) THEN
15290                         inv_log_util.trace('Validate_Additional_Attr: NO NEED FOR VALIDATION.. just default ',
15291                          'INV_TXN_MANAGER_GRP', 9);
15292         END IF;
15293 
15294         -- dbms_output.put_line('Validate_Additional_Attr: LOT EXISTS, NO NEED FOR VALIDATION.. just default from MLN : '||
15295                 --                       l_lot_record.lot_number);
15296 
15297                 p_parent_lot_number                     :=    l_lot_record.parent_lot_number;
15298                 p_expiration_date                       :=    l_lot_record.expiration_date;
15299                 p_grade_code                                    :=    l_lot_record.grade_code;
15300         p_retest_date                                   :=        l_lot_record.retest_date;
15301                 p_maturity_date                                 :=    l_lot_record.maturity_date;
15302         p_origination_date                              :=    l_lot_record.origination_date;
15303         p_origination_type                              :=    l_lot_record.origination_type;
15304         p_expiration_action_code                :=    l_lot_record.expiration_action_code;
15305         p_expiration_action_date                :=    l_lot_record.expiration_action_date;
15306         p_hold_date                                     :=    l_lot_record.hold_date;
15307 /*
15308           dbms_output.put_line('***************************************' );
15309       dbms_output.put_line('p_parent_lot_number ' || p_parent_lot_number  );
15310       dbms_output.put_line('grade code ' || p_grade_code  );
15311       dbms_output.put_line('retest date ' || p_retest_date   );
15312           dbms_output.put_line('maturity date ' || p_maturity_date  );
15313       dbms_output.put_line('origination date ' || p_origination_date   )  ;
15314       dbms_output.put_line('origination type ' || p_origination_type   );
15315       dbms_output.put_line('expiration action Code ' || p_expiration_action_code   );
15316       dbms_output.put_line('expiration action date ' || p_expiration_action_date   );
15317       dbms_output.put_line('Hold date ' || p_hold_date   );
15318       dbms_output.put_line('expiration date ' || p_expiration_date   );
15319           dbms_output.put_line('***************************************' );
15320 */
15321 
15322     END IF;
15323 
15324  return true;
15325  /******************* END Perform Date validation logic ********************/
15326   EXCEPTION
15327          WHEN FND_API.G_EXC_ERROR  THEN
15328       x_return_status  := FND_API.G_RET_STS_ERROR;
15329       UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15330       SET LAST_UPDATE_DATE = SYSDATE,
15331                LAST_UPDATED_BY = l_userid,
15332                LAST_UPDATE_LOGIN = l_loginid,
15333                PROGRAM_APPLICATION_ID = l_applid,
15334                PROGRAM_ID = l_progid,
15335                PROGRAM_UPDATE_DATE = SYSDATE,
15336                REQUEST_ID = l_reqstid,
15337                ERROR_CODE = substrb(l_error_code,1,240)
15338       WHERE TRANSACTION_INTERFACE_ID = p_intid;
15339 
15340       errupdate(p_rowid,null);
15341 
15342      RETURN FALSE;
15343 
15344      WHEN NO_DATA_FOUND THEN
15345       IF (l_debug = 1) THEN
15346                 inv_log_util.trace('Validate_Additional_Attr: error NO_DATA_FOUND' , 'INV_TXN_MANAGER_GRP', 9);
15347       END IF;
15348 
15349       x_return_status  := fnd_api.g_ret_sts_error;
15350 
15351       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
15352                                     p_count => x_msg_count,
15353                                                                 p_data => x_msg_data);
15354       if( x_msg_count > 1 ) then
15355           x_msg_data := fnd_msg_pub.get(x_msg_count, FND_API.G_FALSE);
15356       end if;
15357 
15358       l_error_code := x_msg_data;
15359       l_error_exp := x_msg_data;
15360       UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15361       SET LAST_UPDATE_DATE = SYSDATE,
15362                LAST_UPDATED_BY = l_userid,
15363                LAST_UPDATE_LOGIN = l_loginid,
15364                PROGRAM_APPLICATION_ID = l_applid,
15365                PROGRAM_ID = l_progid,
15366                PROGRAM_UPDATE_DATE = SYSDATE,
15367                REQUEST_ID = l_reqstid,
15368                ERROR_CODE = substrb(l_error_code,1,240)
15369       WHERE TRANSACTION_INTERFACE_ID = p_intid;
15370 
15371       errupdate(p_rowid,null);
15372       RETURN FALSE;
15373 
15374 
15375      WHEN OTHERS THEN
15376       IF (l_debug = 1) THEN
15377                 inv_log_util.trace('Validate_Additional_Attr: error OTHERS exception' , 'INV_TXN_MANAGER_GRP', 9);
15378       END IF;
15379 
15380       x_return_status  := fnd_api.g_ret_sts_unexp_error;
15381 
15382       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
15383                                     p_count => x_msg_count,
15384                                                                 p_data => x_msg_data);
15385       if( x_msg_count > 1 ) then
15386           x_msg_data := fnd_msg_pub.get(x_msg_count, FND_API.G_FALSE);
15387       end if;
15388 
15389       l_error_code := x_msg_data;
15390       l_error_exp := x_msg_data;
15391 
15392       UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15393       SET LAST_UPDATE_DATE = SYSDATE,
15394                LAST_UPDATED_BY = l_userid,
15395                LAST_UPDATE_LOGIN = l_loginid,
15396                PROGRAM_APPLICATION_ID = l_applid,
15397                PROGRAM_ID = l_progid,
15398                PROGRAM_UPDATE_DATE = SYSDATE,
15399                REQUEST_ID = l_reqstid,
15400                ERROR_CODE = substrb(l_error_code,1,240)
15401       WHERE TRANSACTION_INTERFACE_ID = p_intid;
15402 
15403       errupdate(p_rowid,null);
15404 
15405      RETURN FALSE;
15406 
15407 
15408   END Validate_Additional_Attr;
15409 
15410 
15411 PROCEDURE validate_derive_object_details
15412 ( p_org_id              IN  NUMBER
15413 , p_object_type         IN  NUMBER
15414 , p_object_id           IN  NUMBER
15415 , p_object_number       IN  VARCHAR2
15416 , p_item_id             IN  NUMBER
15417 , p_object_type2        IN  NUMBER
15418 , p_object_id2          IN  NUMBER
15419 , p_object_number2      IN  VARCHAR2
15420 , p_serctrl             IN  NUMBER
15421 , p_lotctrl             IN  NUMBER
15422 , p_rowid               IN  ROWID
15423 , p_table               IN  VARCHAR2
15424 , x_return_status       OUT NOCOPY VARCHAR2
15425 , x_msg_count           OUT NOCOPY NUMBER
15426 , x_msg_data            OUT NOCOPY VARCHAR2)
15427 IS
15428     l_api_name        CONSTANT VARCHAR2(30)    := 'validate_derive_object_details';
15429     l_object_id         NUMBER;
15430     l_object_id2        NUMBER;
15431     l_object_number     VARCHAR2(240);
15432     l_object_number2    VARCHAR2(240);
15433     l_inventory_item_id NUMBER;
15434 
15435 BEGIN
15436     x_return_status  := lg_ret_sts_success;
15437     -- Standard Start of API savepoint
15438     SAVEPOINT   sp_validations;
15439 
15440     g_pkg_name := l_api_name;
15441     IF (l_debug = 1) THEN
15442        mydebug('Entered  validate_derive_object_details ...');
15443        mydebug ('p_org_id        : ' || p_org_id );
15444        mydebug ('p_object_type   : ' || p_object_type );
15445        mydebug ('p_object_id     : ' || p_object_id );
15446        mydebug ('p_object_number : ' || p_object_number);
15447        mydebug ('p_item_id       : ' || p_item_id );
15448        mydebug ('p_object_type2  : ' || p_object_type2 );
15449        mydebug ('p_object_id2    : ' || p_object_id2 );
15450        mydebug ('p_object_number2: ' || p_object_number2);
15451        mydebug ('p_serctrl       : ' || p_serctrl );
15452        mydebug ('p_lotctrl       : ' || p_lotctrl );
15453        mydebug ('p_rowid         : ' || p_rowid );
15454        mydebug ('p_table         : ' || p_table );
15455     END IF;
15456    l_object_id := p_object_id;
15457    l_object_id2 := p_object_id2;
15458    l_object_number := p_object_number;
15459    l_object_number2 := p_object_number2;
15460 
15461    IF p_object_id is NOT NULL and p_object_type is NOT NULL
15462    THEN
15463       IF (l_debug = 1) THEN mydebug('{{- Use p_object_id and  p_object_type to - }}' ); END IF;
15464       IF p_object_type = 1 THEN
15465          IF (l_debug = 1) THEN mydebug('{{  Select lot_number from MLN}}' ); END IF;
15466          select lot_number
15467          INTO   l_object_number
15468          FROM   mtl_lot_numbers
15469          WHERE  gen_object_id = p_object_id;
15470       ELSIF p_object_type = 2 THEN
15471          IF (l_debug = 1) THEN mydebug('{{  Select serial_number from MSN }}' ); END IF;
15472          SELECT serial_number
15473          INTO   l_object_number
15474          FROM   mtl_serial_numbers
15475          WHERE  gen_object_id = p_object_id;
15476       END IF;
15477       IF (l_debug = 1) THEN mydebug('l_object_number : ' || l_object_number ); END IF;
15478 
15479    ELSIF p_object_type is NOT NULL AND p_object_number IS NOT NULL AND p_item_id IS NOT NULL
15480    THEN
15481       IF (l_debug = 1) THEN mydebug('{{- Use p_object_number,p_item_id, p_org_id to - }}' ); END IF;
15482       IF p_object_type = 1 THEN
15483          IF (l_debug = 1) THEN mydebug('{{  Select gen_object_id from MLN }}' ); END IF;
15484          select gen_object_id
15485          INTO   l_object_id
15486          FROM   mtl_lot_numbers
15487          WHERE  organization_id = p_org_id
15488          AND    inventory_item_id = p_item_id
15489          AND    lot_number = p_object_number;
15490       ELSIF p_object_type = 2 THEN
15491          IF (l_debug = 1) THEN mydebug('{{  Select gen_object_id from MSN}}' ); END IF;
15492          SELECT gen_object_id
15493          INTO   l_object_id
15494          FROM   mtl_serial_numbers
15495          WHERE  current_organization_id = p_org_id
15496          AND    inventory_item_id = p_item_id
15497          AND    serial_number = p_object_number;
15498       END IF;
15499       IF (l_debug = 1) THEN mydebug('l_object_id2 : ' || l_object_id2 ); END IF;
15500    END IF;
15501    IF p_object_id2 is NOT NULL and p_object_type2 is NOT NULL
15502    THEN
15503       IF (l_debug = 1) THEN mydebug('{{- Use p_object_id2 and  p_object_type2 to - }}' ); END IF;
15504       IF p_object_type2 = 1 THEN
15505          IF (l_debug = 1) THEN mydebug('{{  Select lot_number from MLN}}' ); END IF;
15506          select lot_number
15507          INTO   l_object_number2
15508          FROM   mtl_lot_numbers
15509          WHERE  gen_object_id = p_object_id2;
15510       ELSIF p_object_type2 = 2 THEN
15511          IF (l_debug = 1) THEN mydebug('{{  Select serial_number from MSN }}' ); END IF;
15512          SELECT serial_number
15513          INTO   l_object_number2
15514          FROM   mtl_serial_numbers
15515          WHERE  gen_object_id = p_object_id2;
15516       END IF;
15517       IF (l_debug = 1) THEN mydebug('l_object_number2 : ' || l_object_number2 ); END IF;
15518    ELSIF p_object_type2 is NOT NULL AND p_object_number2 IS NOT NULL AND p_item_id IS NOT NULL
15519    THEN
15520       IF (l_debug = 1) THEN mydebug('{{- Use p_object_number2,p_item_id, p_org_id to - }}' ); END IF;
15521       IF p_object_type2 = 1 THEN
15522          IF (l_debug = 1) THEN mydebug('{{  Select gen_object_id from MLN }}' ); END IF;
15523          select gen_object_id
15524          INTO   l_object_id2
15525          FROM   mtl_lot_numbers
15526          WHERE  organization_id = p_org_id
15527          AND    inventory_item_id = p_item_id
15528          AND    lot_number = p_object_number2;
15529       ELSIF p_object_type = 2 THEN
15530          IF (l_debug = 1) THEN mydebug('{{  Select gen_object_id from MSN}}' ); END IF;
15531          SELECT gen_object_id
15532          INTO   l_object_id2
15533          FROM   mtl_serial_numbers
15534          WHERE  current_organization_id = p_org_id
15535          AND    inventory_item_id = p_item_id
15536          AND    serial_number = p_object_number2;
15537       END IF;
15538       IF (l_debug = 1) THEN mydebug('l_object_id2 : ' || l_object_id2 ); END IF;
15539    END IF;
15540 
15541    IF l_object_id IS NOT NULL OR l_object_number IS NOT NULL OR
15542       l_object_number2 IS NOT NULL OR l_object_id2 IS NOT NULL
15543    THEN
15544       IF p_table = 'MTLI' THEN
15545          UPDATE MTL_TRANSACTION_LOTS_INTERFACE MTLI
15546          SET    parent_object_id = l_object_id
15547                 ,parent_object_id2 = l_object_id2
15548                 ,parent_object_number = l_object_number
15549                 ,parent_object_number2 = l_object_number2
15550          WHERE ROWID = p_rowid;
15551       ELSIF p_table = 'MSNI' THEN
15552          UPDATE MTL_SERIAL_NUMBERS_INTERFACE MSNI
15553          SET    parent_object_id = l_object_id
15554                 ,parent_object_id2 = l_object_id2
15555                 ,parent_object_number = l_object_number
15556                 ,parent_object_number2 = l_object_number2
15557          WHERE ROWID = p_rowid;
15558       END IF;
15559    END IF;
15560 
15561 EXCEPTION
15562 WHEN OTHERS THEN
15563 IF (l_debug = 1) THEN mydebug('exception WHEN OTHERS'|| x_msg_data || ':' || sqlerrm); END IF;
15564       x_return_status  := lg_ret_sts_unexp_error;
15565       ROLLBACK TO sp_validations;
15566 
15567 END validate_derive_object_details;
15568 
15569 
15570 PROCEDURE validate_serial_genealogy_data
15571 ( p_interface_id        IN    NUMBER
15572 , p_org_id              IN    NUMBER
15573 , x_return_status       OUT NOCOPY VARCHAR2
15574 , x_msg_count           OUT NOCOPY NUMBER
15575 , x_msg_data            OUT NOCOPY VARCHAR2)
15576 IS
15577   CURSOR cur_MSNI IS
15578   SELECT FM_SERIAL_NUMBER
15579          ,TO_SERIAL_NUMBER
15580          ,PARENT_SERIAL_NUMBER
15581          ,PARENT_OBJECT_TYPE
15582          ,PARENT_OBJECT_ID
15583          ,PARENT_OBJECT_NUMBER
15584          ,PARENT_OBJECT_TYPE2
15585          ,PARENT_OBJECT_ID2
15586          ,PARENT_OBJECT_NUMBER2
15587          ,PARENT_ITEM_ID
15588          ,ROWID
15589   FROM  MTL_SERIAL_NUMBERS_INTERFACE
15590   WHERE TRANSACTION_INTERFACE_ID = p_interface_id;
15591 
15592 BEGIN
15593     x_return_status  := lg_ret_sts_success;
15594     -- Standard Start of API savepoint
15595     SAVEPOINT   sp_gen_validations;
15596 
15597     g_pkg_name := 'validate_serial_genealogy_data';
15598     IF (l_debug = 1) THEN
15599         mydebug ('p_interface_id : ' ||  p_interface_id);
15600         mydebug ('p_org_id  : '  || p_org_id );
15601     END IF;
15602 
15603 
15604    FOR rec_MSNI in cur_MSNI
15605    LOOP
15606 
15607    IF (l_debug = 1) THEN
15608         mydebug ('FM_SERIAL_NUMBER : ' ||  rec_MSNI.FM_SERIAL_NUMBER);
15609         mydebug ('TO_SERIAL_NUMBER  : '  || rec_MSNI.TO_SERIAL_NUMBER );
15610         mydebug('PARENT_OBJECT_TYPE   :' || rec_MSNI.PARENT_OBJECT_TYPE   );
15611         mydebug('PARENT_OBJECT_ID     :' || rec_MSNI.PARENT_OBJECT_ID     );
15612         mydebug('PARENT_OBJECT_NUMBER :' || rec_MSNI.PARENT_OBJECT_NUMBER );
15613         mydebug('PARENT_OBJECT_TYPE2  :' || rec_MSNI.PARENT_OBJECT_TYPE2  );
15614         mydebug('PARENT_OBJECT_ID2    :' || rec_MSNI.PARENT_OBJECT_ID2    );
15615         mydebug('PARENT_OBJECT_NUMBER2:' || rec_MSNI.PARENT_OBJECT_NUMBER2);
15616         mydebug('PARENT_ITEM_ID:' || rec_MSNI.PARENT_ITEM_ID);
15617         mydebug('PARENT_SERIAL_NUMBER:' || rec_MSNI.PARENT_SERIAL_NUMBER);
15618         mydebug('ROWID:' || rec_MSNI.ROWID);
15619     END IF;
15620 
15621 
15622    IF (rec_MSNI.parent_object_id is NOT NULL AND rec_MSNI.parent_object_type is NOT NULL) OR
15623       (rec_MSNI.parent_object_type is NOT NULL AND rec_MSNI.parent_object_number is NOT NULL
15624                                                AND rec_MSNI.parent_Item_id IS NOT NULL)  THEN
15625       IF (l_debug = 1) THEN
15626          mydebug('{{- Parent details are available - Validation/derivation of  }} ' ||
15627                  '{{  parent object details is called here}}' );
15628       END IF;
15629       validate_derive_object_details
15630             ( p_org_id              => p_org_id
15631             , p_object_type         => rec_MSNI.parent_object_type
15632             , p_object_id           => rec_MSNI.parent_object_id
15633             , p_object_number       => rec_MSNI.parent_object_number
15634             , p_item_id             => rec_MSNI.parent_Item_id
15635             , p_object_type2        => rec_MSNI.parent_object_type2
15636             , p_object_id2          => rec_MSNI.parent_object_id2
15637             , p_object_number2      => rec_MSNI.parent_object_number2
15638             , p_serctrl             => NULL
15639             , p_lotctrl             => NULL
15640             , p_rowid               => rec_MSNI.rowid
15641             , p_table               => 'MSNI'
15642             , x_return_status       => x_return_status
15643             , x_msg_count           => x_msg_count
15644             , x_msg_data            => x_msg_data);
15645       IF x_return_status <> lg_ret_sts_success THEN
15646          IF (l_debug=1) THEN mydebug(' x_return_status: ' || x_return_status); END IF;
15647          --RAISE lg_exc_error; ????
15648       END IF;
15649    ELSE
15650       IF (l_debug = 1) THEN
15651          mydebug('{{- Parent details are NOT available, so no validations }}' );
15652       END IF;
15653    END IF;
15654    END LOOP;
15655 
15656 EXCEPTION WHEN OTHERS THEN
15657 IF (l_debug = 1) THEN mydebug('exception WHEN OTHERS'|| x_msg_data || ':' || sqlerrm); END IF;
15658 x_return_status  := lg_ret_sts_unexp_error;
15659 ROLLBACK TO sp_gen_validations;
15660 
15661 
15662 NULL;
15663 
15664 END validate_serial_genealogy_data;
15665 
15666 --
15667 --     Name: GET_SERIAL_DIFF_WRP
15668 --
15669 --     Input parameters:
15670 --       p_fm_serial          'from' Serial Number
15671 --       p_to_serial          'to'   Serial Number
15672 --
15673 --      Output parameters:
15674 --       return_status       quantity between passed serial numbers,
15675 --                           0 if pased serial numbers are invalid.
15676 --
15677 FUNCTION get_serial_diff_wrp(p_fm_serial IN VARCHAR2, p_to_serial IN VARCHAR2)
15678 RETURN NUMBER AS
15679    l_qty NUMBER := 0;
15680 BEGIN
15681    l_qty := inv_serial_number_pub.get_serial_diff(p_fm_serial, p_to_serial);
15682    IF (l_qty <= 0) THEN
15683       return 0;
15684    ELSE
15685       return l_qty;
15686    END IF;
15687 
15688 END get_serial_diff_wrp;
15689 
15690 END INV_TXN_MANAGER_GRP;