DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSI_DIAGNOSTICS_PKG

Source


1 PACKAGE BODY csi_diagnostics_pkg as
2 /* $Header: csidiagb.pls 120.18 2007/10/24 00:34:50 lakmohan ship $ */
3 
4   g_no_lot constant number := 1;
5   g_lot    constant number := 2;
6 
7   CURSOR error_cur is
8     SELECT /*+ parallel(cte) */
9            cte.inv_material_transaction_id mtl_txn_id,
10            cte.transaction_error_id        txn_error_id
11     FROM   csi_txn_errors cte
12     WHERE  cte.processed_flag in ('E', 'R')
13     AND    cte.inv_material_transaction_id is not null;
14 
15   -- this CURSOR returns the serial numbers that are in the transaction
16   CURSOR srl_cur(
17     p_mtl_txn_id     in number)
18   IS
19     SELECT mut.serial_number           serial_number,
20            mut.inventory_item_id       item_id,
21            mut.organization_id         organization_id
22     FROM   mtl_unit_transactions mut
23     WHERE  mut.transaction_id    = p_mtl_txn_id
24     UNION
25     SELECT mut.serial_number           serial_number,
26            mut.inventory_item_id       item_id,
27            mut.organization_id         organization_id
28     FROM   mtl_transaction_lot_numbers mtln,
29            mtl_unit_transactions       mut
30     WHERE  mtln.transaction_id   = p_mtl_txn_id
31     AND    mut.transaction_id    = mtln.serial_transaction_id;
32 
33   CURSOR all_txn_cur(
34     p_serial_number  in varchar2,
35     p_item_id        in number)
36   IS
37     SELECT mmt.creation_date               mtl_creation_date,
38            mmt.transaction_id              mtl_txn_id,
39            mmt.transaction_date            mtl_txn_date,
40            mmt.inventory_item_id           item_id,
41            mmt.organization_id             organization_id,
42            mmt.transaction_type_id         mtl_type_id,
43            mtt.transaction_type_name       mtl_txn_name,
44            mmt.transaction_action_id       mtl_action_id,
45            mmt.transaction_source_type_id  mtl_source_type_id,
46            mmt.transaction_source_id       mtl_source_id,
47            mmt.trx_source_line_id          mtl_source_line_id,
48            mmt.transaction_quantity        mtl_txn_qty,
49            mtt.type_class                  mtl_type_class,
50            mmt.transfer_transaction_id     mtl_xfer_txn_id,
51            mmt.revision                    mtl_revision,
52            to_char(null)                   lot_number,
53            to_char(mmt.transaction_date,'dd-mm-yy hh24:mi:ss') mtl_txn_char_date
54     FROM   mtl_unit_transactions     mut,
55            mtl_material_transactions mmt,
56            mtl_transaction_types     mtt
57     WHERE  mut.serial_number       = p_serial_number
58     AND    mut.inventory_item_id   = p_item_id
59     AND    mmt.transaction_id      = mut.transaction_id
60     AND    mtt.transaction_type_id = mmt.transaction_type_id
61     UNION
62     SELECT mmt.creation_date               mtl_creation_date,
63            mmt.transaction_id              mtl_txn_id,
64            mmt.transaction_date            mtl_txn_date,
65            mmt.inventory_item_id           item_id,
66            mmt.organization_id             organization_id,
67            mmt.transaction_type_id         mtl_type_id,
68            mtt.transaction_type_name       mtl_txn_name,
69            mmt.transaction_action_id       mtl_action_id,
70            mmt.transaction_source_type_id  mtl_source_type_id,
71            mmt.transaction_source_id       mtl_source_id,
72            mmt.trx_source_line_id          mtl_source_line_id,
73            mmt.transaction_quantity        mtl_txn_qty,
74            mtt.type_class                  mtl_type_class,
75            mmt.transfer_transaction_id     mtl_xfer_txn_id,
76            mmt.revision                    mtl_revision,
77            mtln.lot_number                 lot_number,
78            to_char(mmt.transaction_date,'dd-mm-yy hh24:mi:ss') mtl_txn_char_date
79     FROM   mtl_unit_transactions       mut,
80            mtl_transaction_lot_numbers mtln,
81            mtl_material_transactions   mmt,
82            mtl_transaction_types       mtt
83     WHERE  mut.serial_number          = p_serial_number
84     AND    mut.inventory_item_id      = p_item_id
85     AND    mtln.organization_id       = mut.organization_id
86     AND    mtln.transaction_date      = mut.transaction_date
87     AND    mtln.serial_transaction_id = mut.transaction_id
88     AND    mmt.transaction_id         = mtln.transaction_id
89     AND    mtt.transaction_type_id    = mmt.transaction_type_id
90     ORDER BY 1 desc, 2 desc;
91 
92   CURSOR inv_cur(p_mtl_txn_id in number) IS
93     SELECT mmt.inventory_item_id        item_id,
94            mmt.organization_id          organization_id,
95            mmt.transfer_organization_id xfer_organization_id,
96            mmt.subinventory_code        subinv_code,
97            mmt.locator_id               locator_id,
98            mmt.revision                 revision,
99            abs(mmt.primary_quantity)    quantity,
100            mmt.transaction_date         mtl_txn_date,
101            mmt.transaction_id           mtl_txn_id,
102            mmt.transaction_action_id    mtl_action_id,
103            mmt.trx_source_line_id       trx_source_line_id,
104            mmt.transaction_source_id    mtl_source_id,
105            mmt.source_project_id        source_project_id,
106            mmt.source_task_id           source_task_id
107     FROM   mtl_material_transactions mmt
108     WHERE  mmt.transaction_id = p_mtl_txn_id;
109 
110   CURSOR from_sixfer_cur(
111     p_mtl_txn_id       in number,
112     p_mtl_xfer_txn_id  in number)
113   IS
114     SELECT mmt.inventory_item_id      item_id,
115            mmt.organization_id        organization_id,
116            mmt.subinventory_code      subinv_code,
117            mmt.locator_id             locator_id,
118            mmt.revision               revision,
119            to_char(null)              lot_number,
120            abs(mmt.primary_quantity)  quantity,
121            mmt.transaction_date       mtl_txn_date,
122            mmt.transaction_id         mtl_txn_id,
123            mmt.trx_source_line_id     trx_source_line_id
124     FROM   mtl_material_transactions mmt
125     WHERE  (mmt.transaction_id = p_mtl_txn_id
126              OR
127             mmt.transaction_id = p_mtl_xfer_txn_id)
128     AND    mmt.transaction_quantity < 0
129     UNION
130     SELECT mmt.inventory_item_id      item_id,
131            mmt.organization_id        organization_id,
132            mmt.subinventory_code      subinv_code,
133            mmt.locator_id             locator_id,
134            mmt.revision               revision,
135            mtln.lot_number            lot_number,
136            abs(mtln.primary_quantity) quantity,
137            mmt.transaction_date       mtl_txn_date,
138            mmt.transaction_id         mtl_txn_id,
139            mmt.trx_source_line_id     trx_source_line_id
140     FROM   mtl_material_transactions   mmt,
141            mtl_transaction_lot_numbers mtln
142     WHERE  (mmt.transaction_id  = p_mtl_txn_id
143             OR
144             mmt.transaction_id  = p_mtl_xfer_txn_id)
145     AND    mmt.transaction_quantity < 0
146     AND    mtln.transaction_id  = mmt.transaction_id;
147 
148   --
149   PROCEDURE log(
150     p_message       in varchar2)
151   IS
152   BEGIN
153 
154     fnd_file.put_line(fnd_file.log, p_message);
155 
156     csi_t_gen_utility_pvt.g_debug_level := 10;
157 
158     csi_t_gen_utility_pvt.build_file_name(
159       p_file_segment1 => 'csisynclog',
160       p_file_segment2 => to_char(sysdate, 'mmddyy'));
161 
162     csi_t_gen_utility_pvt.add(p_message);
163 
164     csi_t_gen_utility_pvt.g_debug_level := 0;
165 
166   END log;
167 
168   --
169   PROCEDURE out(
170     p_message       in varchar2)
171   IS
172   BEGIN
173 
174     fnd_file.put_line(fnd_file.output, p_message);
175 
176     csi_t_gen_utility_pvt.g_debug_level := 10;
177 
178     csi_t_gen_utility_pvt.build_file_name(
179       p_file_segment1 => 'csisyncout',
180       p_file_segment2 => to_char(sysdate, 'mmddyy'));
181 
182     csi_t_gen_utility_pvt.add(p_message);
183 
184     csi_t_gen_utility_pvt.g_debug_level := 0;
185 
186   END out;
187 
188   --
189   FUNCTION date_time_stamp RETURN varchar2
190   IS
191     l_date_time_stamp varchar2(30);
192   BEGIN
193 
194     SELECT to_char(sysdate,'DD-MON-YYYY HH24:MI:SS : ')
195     INTO   l_date_time_stamp
196     FROM   sys.dual;
197 
198     RETURN l_date_time_stamp;
199   END date_time_stamp;
200 
201   --
202   PROCEDURE debug_off IS
203   BEGIN
204     fnd_profile.put('CSI_DEBUG_LEVEL',0);
205     fnd_profile.put('CSE_DEBUG_OPTION','N');
206     fnd_profile.put('OKS_DEBUG','N');
207     csi_t_gen_utility_pvt.g_debug_level := 0;
208   END debug_off;
209 
210   --
211   PROCEDURE stack_message(
212     p_message       in varchar2)
213   IS
214   BEGIN
215     fnd_msg_pub.initialize;
216     fnd_message.set_name('FND','FND_GENERIC_MESSAGE');
217     fnd_message.set_token('MESSAGE',p_message);
218     fnd_msg_pub.add;
219   END stack_message;
220   --
221   PROCEDURE Update_Lookup(p_routine_name in varchar2) IS
222      l_type        VARCHAR2(30) := 'CSI_CORRECTION_ROUTINES';
223   BEGIN
224      UPDATE FND_LOOKUP_VALUES
225      SET enabled_flag = 'N',
226          last_updated_by = -1,
227          last_update_date = sysdate
228      WHERE lookup_type = l_type
229      AND   lookup_code = p_routine_name;
230   END Update_Lookup;
231   --
232   FUNCTION correction_txn_type_id RETURN NUMBER
233   IS
234     l_txn_type_id  number;
235   BEGIN
236 
237     BEGIN
238       SELECT transaction_type_id
239       INTO   l_txn_type_id
240       FROM   csi_txn_types
241       WHERE  source_transaction_type = 'DATA_CORRECTION';
242     EXCEPTION
243       WHEN no_data_found THEN
244         l_txn_type_id := 2;
245     END;
246 
247     RETURN l_txn_type_id;
248 
249   END correction_txn_type_id;
250 
251   PROCEDURE get_lot_number(
252     p_lot_code        IN  number,
253     p_mtl_txn_id      IN  number,
254     p_serial_number   IN  varchar2,
255     x_lot_number      OUT nocopy varchar2)
256   IS
257     CURSOR lot_cur(cp_mtl_txn_id IN number, cp_serial_number IN varchar2) IS
258       SELECT mtln.lot_number
259       FROM   mtl_transaction_lot_numbers mtln,
260              mtl_unit_transactions       mut
261       WHERE  mtln.transaction_id       = cp_mtl_txn_id
262       AND    mut.transaction_id        = mtln.serial_transaction_id
263       AND    mut.serial_number         = cp_serial_number;
264   BEGIN
265 
266     IF p_lot_code = 1 THEN
267      x_lot_number := fnd_api.g_miss_char;
268     END IF;
269 
270     IF p_lot_code = 2 THEN
271       x_lot_number := fnd_api.g_miss_char;
272       FOR lot_rec IN lot_cur(p_mtl_txn_id, p_serial_number)
273       LOOP
274         x_lot_number := lot_rec.lot_number;
275       END LOOP;
276     END IF;
277 
278   END get_lot_number;
279 
280   --
281   PROCEDURE Build_Inst_Rec_of_Table
282      (
283        p_inst_tbl           IN      csi_datastructures_pub.instance_tbl
284       ,p_inst_rec_tab       IN OUT NOCOPY   csi_diagnostics_pkg.instance_rec_tab
285       ,p_inst_hist_tbl      IN OUT NOCOPY csi_diagnostics_pkg.T_NUM
286      ) IS
287   BEGIN
288      FOR i in p_inst_tbl.FIRST .. p_inst_tbl.LAST LOOP
289         select CSI_ITEM_INSTANCES_H_S.nextval
290         into p_inst_hist_tbl(i) from dual;
291         --
292 	p_inst_rec_tab.INSTANCE_ID(i)                := p_inst_tbl(i).INSTANCE_ID;
293 	p_inst_rec_tab.INSTANCE_NUMBER(i)            := p_inst_tbl(i).INSTANCE_NUMBER;
294 	p_inst_rec_tab.EXTERNAL_REFERENCE(i)         := p_inst_tbl(i).EXTERNAL_REFERENCE;
295 	p_inst_rec_tab.INVENTORY_ITEM_ID(i)          := p_inst_tbl(i).INVENTORY_ITEM_ID;
296 	p_inst_rec_tab.VLD_ORGANIZATION_ID(i)        := p_inst_tbl(i).VLD_ORGANIZATION_ID;
297 	p_inst_rec_tab.INVENTORY_REVISION(i)         := p_inst_tbl(i).INVENTORY_REVISION;
298 	p_inst_rec_tab.INV_MASTER_ORGANIZATION_ID(i) :=	p_inst_tbl(i).INV_MASTER_ORGANIZATION_ID;
299 	p_inst_rec_tab.SERIAL_NUMBER(i)              := p_inst_tbl(i).SERIAL_NUMBER;
300 	p_inst_rec_tab.MFG_SERIAL_NUMBER_FLAG(i)     :=	p_inst_tbl(i).MFG_SERIAL_NUMBER_FLAG;
301 	p_inst_rec_tab.LOT_NUMBER(i)                 := p_inst_tbl(i).LOT_NUMBER;
302 	p_inst_rec_tab.QUANTITY(i)                   := p_inst_tbl(i).QUANTITY;
303 	p_inst_rec_tab.UNIT_OF_MEASURE(i)       :=	p_inst_tbl(i).UNIT_OF_MEASURE;
304 	p_inst_rec_tab.ACCOUNTING_CLASS_CODE(i)       :=	p_inst_tbl(i).ACCOUNTING_CLASS_CODE;
305 	p_inst_rec_tab.INSTANCE_CONDITION_ID(i)       :=	p_inst_tbl(i).INSTANCE_CONDITION_ID;
306 	p_inst_rec_tab.INSTANCE_STATUS_ID(i)       :=	p_inst_tbl(i).INSTANCE_STATUS_ID;
307 	p_inst_rec_tab.CUSTOMER_VIEW_FLAG(i)       :=	p_inst_tbl(i).CUSTOMER_VIEW_FLAG;
308 	p_inst_rec_tab.MERCHANT_VIEW_FLAG(i)       :=	p_inst_tbl(i).MERCHANT_VIEW_FLAG;
309 	p_inst_rec_tab.SELLABLE_FLAG(i)       :=	p_inst_tbl(i).SELLABLE_FLAG;
310 	p_inst_rec_tab.SYSTEM_ID(i)       :=	p_inst_tbl(i).SYSTEM_ID;
311 	p_inst_rec_tab.INSTANCE_TYPE_CODE(i)       :=	p_inst_tbl(i).INSTANCE_TYPE_CODE;
312 	p_inst_rec_tab.ACTIVE_START_DATE(i)       :=	p_inst_tbl(i).ACTIVE_START_DATE;
313 	p_inst_rec_tab.ACTIVE_END_DATE(i)       :=	p_inst_tbl(i).ACTIVE_END_DATE;
314 	p_inst_rec_tab.LOCATION_TYPE_CODE(i)       :=	p_inst_tbl(i).LOCATION_TYPE_CODE;
315 	p_inst_rec_tab.LOCATION_ID(i)       :=	p_inst_tbl(i).LOCATION_ID;
319 	p_inst_rec_tab.PA_PROJECT_ID(i)       :=	p_inst_tbl(i).PA_PROJECT_ID;
316 	p_inst_rec_tab.INV_ORGANIZATION_ID(i)       :=	p_inst_tbl(i).INV_ORGANIZATION_ID;
317 	p_inst_rec_tab.INV_SUBINVENTORY_NAME(i)       :=	p_inst_tbl(i).INV_SUBINVENTORY_NAME;
318 	p_inst_rec_tab.INV_LOCATOR_ID(i)       :=	p_inst_tbl(i).INV_LOCATOR_ID;
320 	p_inst_rec_tab.PA_PROJECT_TASK_ID(i)       :=	p_inst_tbl(i).PA_PROJECT_TASK_ID;
321 	p_inst_rec_tab.IN_TRANSIT_ORDER_LINE_ID(i)       :=	p_inst_tbl(i).IN_TRANSIT_ORDER_LINE_ID;
322 	p_inst_rec_tab.WIP_JOB_ID(i)       :=	p_inst_tbl(i).WIP_JOB_ID;
323 	p_inst_rec_tab.PO_ORDER_LINE_ID(i)       :=	p_inst_tbl(i).PO_ORDER_LINE_ID;
324 	p_inst_rec_tab.LAST_OE_ORDER_LINE_ID(i)       :=	p_inst_tbl(i).LAST_OE_ORDER_LINE_ID;
325 	p_inst_rec_tab.LAST_OE_RMA_LINE_ID(i)       :=	p_inst_tbl(i).LAST_OE_RMA_LINE_ID;
326 	p_inst_rec_tab.LAST_PO_PO_LINE_ID(i)       :=	p_inst_tbl(i).LAST_PO_PO_LINE_ID;
327 	p_inst_rec_tab.LAST_OE_PO_NUMBER(i)       :=	p_inst_tbl(i).LAST_OE_PO_NUMBER;
328 	p_inst_rec_tab.LAST_WIP_JOB_ID(i)       :=	p_inst_tbl(i).LAST_WIP_JOB_ID;
329 	p_inst_rec_tab.LAST_PA_PROJECT_ID(i)       :=	p_inst_tbl(i).LAST_PA_PROJECT_ID;
330 	p_inst_rec_tab.LAST_PA_TASK_ID(i)       :=	p_inst_tbl(i).LAST_PA_TASK_ID;
331 	p_inst_rec_tab.LAST_OE_AGREEMENT_ID(i)       :=	p_inst_tbl(i).LAST_OE_AGREEMENT_ID;
332 	p_inst_rec_tab.INSTALL_DATE(i)       :=	p_inst_tbl(i).INSTALL_DATE;
333 	p_inst_rec_tab.MANUALLY_CREATED_FLAG(i)       :=	p_inst_tbl(i).MANUALLY_CREATED_FLAG;
334 	p_inst_rec_tab.RETURN_BY_DATE(i)       :=	p_inst_tbl(i).RETURN_BY_DATE;
335 	p_inst_rec_tab.ACTUAL_RETURN_DATE(i)       :=	p_inst_tbl(i).ACTUAL_RETURN_DATE;
336 	p_inst_rec_tab.CREATION_COMPLETE_FLAG(i)       :=	p_inst_tbl(i).CREATION_COMPLETE_FLAG;
337 	p_inst_rec_tab.COMPLETENESS_FLAG(i)       :=	p_inst_tbl(i).COMPLETENESS_FLAG;
338 	p_inst_rec_tab.VERSION_LABEL(i)       :=	p_inst_tbl(i).VERSION_LABEL;
339 	p_inst_rec_tab.VERSION_LABEL_DESCRIPTION(i)       :=	p_inst_tbl(i).VERSION_LABEL_DESCRIPTION;
340 	p_inst_rec_tab.CONTEXT(i)       :=	p_inst_tbl(i).CONTEXT;
341 	p_inst_rec_tab.ATTRIBUTE1(i)       :=	p_inst_tbl(i).ATTRIBUTE1;
342 	p_inst_rec_tab.ATTRIBUTE2(i)       :=	p_inst_tbl(i).ATTRIBUTE2;
343 	p_inst_rec_tab.ATTRIBUTE3(i)       :=	p_inst_tbl(i).ATTRIBUTE3;
344 	p_inst_rec_tab.ATTRIBUTE4(i)       :=	p_inst_tbl(i).ATTRIBUTE4;
345 	p_inst_rec_tab.ATTRIBUTE5(i)       :=	p_inst_tbl(i).ATTRIBUTE5;
346 	p_inst_rec_tab.ATTRIBUTE6(i)       :=	p_inst_tbl(i).ATTRIBUTE6;
347 	p_inst_rec_tab.ATTRIBUTE7(i)       :=	p_inst_tbl(i).ATTRIBUTE7;
348 	p_inst_rec_tab.ATTRIBUTE8(i)       :=	p_inst_tbl(i).ATTRIBUTE8;
349 	p_inst_rec_tab.ATTRIBUTE9(i)       :=	p_inst_tbl(i).ATTRIBUTE9;
350 	p_inst_rec_tab.ATTRIBUTE10(i)       :=	p_inst_tbl(i).ATTRIBUTE10;
351 	p_inst_rec_tab.ATTRIBUTE11(i)       :=	p_inst_tbl(i).ATTRIBUTE11;
352 	p_inst_rec_tab.ATTRIBUTE12(i)       :=	p_inst_tbl(i).ATTRIBUTE12;
353 	p_inst_rec_tab.ATTRIBUTE13(i)       :=	p_inst_tbl(i).ATTRIBUTE13;
354 	p_inst_rec_tab.ATTRIBUTE14(i)       :=	p_inst_tbl(i).ATTRIBUTE14;
355 	p_inst_rec_tab.ATTRIBUTE15(i)       :=	p_inst_tbl(i).ATTRIBUTE15;
356 	p_inst_rec_tab.OBJECT_VERSION_NUMBER(i)       :=	p_inst_tbl(i).OBJECT_VERSION_NUMBER;
357 	p_inst_rec_tab.LAST_TXN_LINE_DETAIL_ID(i)       :=	p_inst_tbl(i).LAST_TXN_LINE_DETAIL_ID;
358 	p_inst_rec_tab.INSTALL_LOCATION_TYPE_CODE(i)       :=	p_inst_tbl(i).INSTALL_LOCATION_TYPE_CODE;
359 	p_inst_rec_tab.INSTALL_LOCATION_ID(i)       :=	p_inst_tbl(i).INSTALL_LOCATION_ID;
360 	p_inst_rec_tab.INSTANCE_USAGE_CODE(i)       :=	p_inst_tbl(i).INSTANCE_USAGE_CODE;
361 	p_inst_rec_tab.CONFIG_INST_HDR_ID(i)       :=	p_inst_tbl(i).CONFIG_INST_HDR_ID;
362 	p_inst_rec_tab.CONFIG_INST_REV_NUM(i)       :=	p_inst_tbl(i).CONFIG_INST_REV_NUM;
363 	p_inst_rec_tab.CONFIG_INST_ITEM_ID(i)       :=	p_inst_tbl(i).CONFIG_INST_ITEM_ID;
364 	p_inst_rec_tab.CONFIG_VALID_STATUS(i)       :=	p_inst_tbl(i).CONFIG_VALID_STATUS;
365 	p_inst_rec_tab.INSTANCE_DESCRIPTION(i)       :=	p_inst_tbl(i).INSTANCE_DESCRIPTION;
366      END LOOP;
367   END Build_Inst_Rec_of_Table;
368   --
369   PROCEDURE Build_Rel_Rec_of_Table
370      (
371        p_ii_relationship_tbl     IN csi_datastructures_pub.ii_relationship_tbl
372       ,p_ii_relationship_rec_tab IN OUT NOCOPY csi_diagnostics_pkg.ii_relationship_rec_tab
373       ,p_rel_hist_tbl            IN OUT NOCOPY csi_diagnostics_pkg.T_NUM
374      ) IS
375   BEGIN
376      FOR i in p_ii_relationship_tbl.FIRST .. p_ii_relationship_tbl.LAST LOOP
377         select CSI_II_RELATIONSHIPS_H_S.nextval
378         into p_rel_hist_tbl(i) from dual;
379         --
380 	p_ii_relationship_rec_tab.RELATIONSHIP_ID(i)	:= p_ii_relationship_tbl(i).RELATIONSHIP_ID;
381 	p_ii_relationship_rec_tab.RELATIONSHIP_TYPE_CODE(i)	:= p_ii_relationship_tbl(i).RELATIONSHIP_TYPE_CODE;
382 	p_ii_relationship_rec_tab.OBJECT_ID(i)	:= p_ii_relationship_tbl(i).OBJECT_ID;
383 	p_ii_relationship_rec_tab.SUBJECT_ID(i)	:= p_ii_relationship_tbl(i).SUBJECT_ID;
384 	p_ii_relationship_rec_tab.SUBJECT_HAS_CHILD(i)	:= p_ii_relationship_tbl(i).SUBJECT_HAS_CHILD;
385 	p_ii_relationship_rec_tab.POSITION_REFERENCE(i)	:= p_ii_relationship_tbl(i).POSITION_REFERENCE;
386 	p_ii_relationship_rec_tab.ACTIVE_START_DATE(i)	:= p_ii_relationship_tbl(i).ACTIVE_START_DATE;
387 	p_ii_relationship_rec_tab.ACTIVE_END_DATE(i)	:= p_ii_relationship_tbl(i).ACTIVE_END_DATE;
388 	p_ii_relationship_rec_tab.DISPLAY_ORDER(i)	:= p_ii_relationship_tbl(i).DISPLAY_ORDER;
389 	p_ii_relationship_rec_tab.MANDATORY_FLAG(i)	:= p_ii_relationship_tbl(i).MANDATORY_FLAG;
390 	p_ii_relationship_rec_tab.CONTEXT(i)	:= p_ii_relationship_tbl(i).CONTEXT;
391 	p_ii_relationship_rec_tab.ATTRIBUTE1(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE1;
392 	p_ii_relationship_rec_tab.ATTRIBUTE2(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE2;
396 	p_ii_relationship_rec_tab.ATTRIBUTE6(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE6;
393 	p_ii_relationship_rec_tab.ATTRIBUTE3(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE3;
394 	p_ii_relationship_rec_tab.ATTRIBUTE4(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE4;
395 	p_ii_relationship_rec_tab.ATTRIBUTE5(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE5;
397 	p_ii_relationship_rec_tab.ATTRIBUTE7(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE7;
398 	p_ii_relationship_rec_tab.ATTRIBUTE8(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE8;
399 	p_ii_relationship_rec_tab.ATTRIBUTE9(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE9;
400 	p_ii_relationship_rec_tab.ATTRIBUTE10(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE10;
401 	p_ii_relationship_rec_tab.ATTRIBUTE11(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE11;
402 	p_ii_relationship_rec_tab.ATTRIBUTE12(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE12;
403 	p_ii_relationship_rec_tab.ATTRIBUTE13(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE13;
404 	p_ii_relationship_rec_tab.ATTRIBUTE14(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE14;
405 	p_ii_relationship_rec_tab.ATTRIBUTE15(i)	:= p_ii_relationship_tbl(i).ATTRIBUTE15;
406 	p_ii_relationship_rec_tab.OBJECT_VERSION_NUMBER(i)	:= p_ii_relationship_tbl(i).OBJECT_VERSION_NUMBER;
407      END LOOP;
408   END Build_Rel_Rec_of_Table;
409   --
410   PROCEDURE Build_Ver_Label_Rec_of_Table
411      (
412        p_version_label_tbl     IN     csi_datastructures_pub.version_label_tbl
413       ,p_version_label_rec_tab IN OUT NOCOPY  csi_diagnostics_pkg.version_label_rec_tab
414       ,p_ver_label_hist_tbl    IN OUT NOCOPY csi_diagnostics_pkg.T_NUM
415      ) IS
416   BEGIN
417      FOR i in p_version_label_tbl.FIRST .. p_version_label_tbl.LAST LOOP
418         select CSI_I_VERSION_LABELS_H_S.nextval
419         into p_ver_label_hist_tbl(i) from dual;
420         --
421 	p_version_label_rec_tab.version_label_id(i)	:= p_version_label_tbl(i).version_label_id;
422 	p_version_label_rec_tab.instance_id(i)	:= p_version_label_tbl(i).instance_id;
423 	p_version_label_rec_tab.version_label(i)	:= p_version_label_tbl(i).version_label;
424 	p_version_label_rec_tab.description(i)	:= p_version_label_tbl(i).description;
425 	p_version_label_rec_tab.date_time_stamp(i)	:= p_version_label_tbl(i).date_time_stamp;
426 	p_version_label_rec_tab.active_start_date(i)	:= p_version_label_tbl(i).active_start_date;
427 	p_version_label_rec_tab.active_end_date(i)	:= p_version_label_tbl(i).active_end_date;
428 	p_version_label_rec_tab.context(i)	:= p_version_label_tbl(i).context;
429 	p_version_label_rec_tab.attribute1(i)	:= p_version_label_tbl(i).attribute1;
430 	p_version_label_rec_tab.attribute2(i)	:= p_version_label_tbl(i).attribute2;
431 	p_version_label_rec_tab.attribute3(i)	:= p_version_label_tbl(i).attribute3;
432 	p_version_label_rec_tab.attribute4(i)	:= p_version_label_tbl(i).attribute4;
433 	p_version_label_rec_tab.attribute5(i)	:= p_version_label_tbl(i).attribute5;
434 	p_version_label_rec_tab.attribute6(i)	:= p_version_label_tbl(i).attribute6;
435 	p_version_label_rec_tab.attribute7(i)	:= p_version_label_tbl(i).attribute7;
436 	p_version_label_rec_tab.attribute8(i)	:= p_version_label_tbl(i).attribute8;
437 	p_version_label_rec_tab.attribute9(i)	:= p_version_label_tbl(i).attribute9;
438 	p_version_label_rec_tab.attribute10(i)	:= p_version_label_tbl(i).attribute10;
439 	p_version_label_rec_tab.attribute11(i)	:= p_version_label_tbl(i).attribute11;
440 	p_version_label_rec_tab.attribute12(i)	:= p_version_label_tbl(i).attribute12;
441 	p_version_label_rec_tab.attribute13(i)	:= p_version_label_tbl(i).attribute13;
442 	p_version_label_rec_tab.attribute14(i)	:= p_version_label_tbl(i).attribute14;
443 	p_version_label_rec_tab.attribute15(i)	:= p_version_label_tbl(i).attribute15;
444 	p_version_label_rec_tab.object_version_number(i)	:= p_version_label_tbl(i).object_version_number;
445      END LOOP;
446   END Build_Ver_Label_Rec_of_Table;
447   --
448   PROCEDURE Build_Party_Rec_of_Table
449      ( p_party_tbl          IN   csi_datastructures_pub.party_tbl
450       ,p_party_rec_tab      IN OUT NOCOPY  csi_diagnostics_pkg.party_rec_tab
451       ,p_party_hist_tbl     IN OUT NOCOPY  csi_diagnostics_pkg.T_NUM
452      ) IS
453   BEGIN
454      FOR i in p_party_tbl.FIRST .. p_party_tbl.LAST LOOP
455         select CSI_I_PARTIES_H_S.nextval
456         into p_party_hist_tbl(i) from dual;
457         --
458 	p_party_rec_tab.instance_party_id(i)	  := p_party_tbl(i).instance_party_id;
459 	p_party_rec_tab.instance_id(i)	  := p_party_tbl(i).instance_id;
460 	p_party_rec_tab.party_source_table(i)	  := p_party_tbl(i).party_source_table;
461 	p_party_rec_tab.party_id(i)	  := p_party_tbl(i).party_id;
462 	p_party_rec_tab.relationship_type_code(i)	  := p_party_tbl(i).relationship_type_code;
463 	p_party_rec_tab.contact_flag(i)	  := p_party_tbl(i).contact_flag;
464 	p_party_rec_tab.contact_ip_id(i)	  := p_party_tbl(i).contact_ip_id;
465 	p_party_rec_tab.active_start_date(i)	  := p_party_tbl(i).active_start_date;
466 	p_party_rec_tab.active_end_date(i)	  := p_party_tbl(i).active_end_date;
467 	p_party_rec_tab.context(i)	  := p_party_tbl(i).context;
468 	p_party_rec_tab.attribute1(i)	  := p_party_tbl(i).attribute1;
469 	p_party_rec_tab.attribute2(i)	  := p_party_tbl(i).attribute2;
470 	p_party_rec_tab.attribute3(i)	  := p_party_tbl(i).attribute3;
471 	p_party_rec_tab.attribute4(i)	  := p_party_tbl(i).attribute4;
472 	p_party_rec_tab.attribute5(i)	  := p_party_tbl(i).attribute5;
473 	p_party_rec_tab.attribute6(i)	  := p_party_tbl(i).attribute6;
474 	p_party_rec_tab.attribute7(i)	  := p_party_tbl(i).attribute7;
475 	p_party_rec_tab.attribute8(i)	  := p_party_tbl(i).attribute8;
479 	p_party_rec_tab.attribute12(i)	  := p_party_tbl(i).attribute12;
476 	p_party_rec_tab.attribute9(i)	  := p_party_tbl(i).attribute9;
477 	p_party_rec_tab.attribute10(i)	  := p_party_tbl(i).attribute10;
478 	p_party_rec_tab.attribute11(i)	  := p_party_tbl(i).attribute11;
480 	p_party_rec_tab.attribute13(i)	  := p_party_tbl(i).attribute13;
481 	p_party_rec_tab.attribute14(i)	  := p_party_tbl(i).attribute14;
482 	p_party_rec_tab.attribute15(i)	  := p_party_tbl(i).attribute15;
483 	p_party_rec_tab.object_version_number(i)	  := p_party_tbl(i).object_version_number;
484 	p_party_rec_tab.primary_flag(i)	  := p_party_tbl(i).primary_flag;
485 	p_party_rec_tab.preferred_flag(i)	  := p_party_tbl(i).preferred_flag;
486      END LOOP;
487   END Build_Party_Rec_of_Table;
488   --
489   PROCEDURE Build_Acct_Rec_of_Table
490      (
491        p_account_tbl        IN     csi_datastructures_pub.party_account_tbl
492       ,p_account_rec_tab    IN OUT NOCOPY  csi_diagnostics_pkg.account_rec_tab
493       ,p_account_hist_tbl   IN OUT NOCOPY  csi_diagnostics_pkg.T_NUM
494      ) IS
495   BEGIN
496      FOR i in p_account_tbl.FIRST .. p_account_tbl.LAST LOOP
497         select CSI_IP_ACCOUNTS_H_S.nextval
498         into p_account_hist_tbl(i) from dual;
499         --
500 	p_account_rec_tab.ip_account_id(i)	 := p_account_tbl(i).ip_account_id;
501 	p_account_rec_tab.parent_tbl_index(i)	 := p_account_tbl(i).parent_tbl_index;
502 	p_account_rec_tab.instance_party_id(i)	 := p_account_tbl(i).instance_party_id;
503 	p_account_rec_tab.party_account_id(i)	 := p_account_tbl(i).party_account_id;
504 	p_account_rec_tab.relationship_type_code(i)	 := p_account_tbl(i).relationship_type_code;
505 	p_account_rec_tab.bill_to_address(i)	 := p_account_tbl(i).bill_to_address;
506 	p_account_rec_tab.ship_to_address(i)	 := p_account_tbl(i).ship_to_address;
507 	p_account_rec_tab.active_start_date(i)	 := p_account_tbl(i).active_start_date;
508 	p_account_rec_tab.active_end_date(i)	 := p_account_tbl(i).active_end_date;
509 	p_account_rec_tab.context(i)	 := p_account_tbl(i).context;
510 	p_account_rec_tab.attribute1(i)	 := p_account_tbl(i).attribute1;
511 	p_account_rec_tab.attribute2(i)	 := p_account_tbl(i).attribute2;
512 	p_account_rec_tab.attribute3(i)	 := p_account_tbl(i).attribute3;
513 	p_account_rec_tab.attribute4(i)	 := p_account_tbl(i).attribute4;
514 	p_account_rec_tab.attribute5(i)	 := p_account_tbl(i).attribute5;
515 	p_account_rec_tab.attribute6(i)	 := p_account_tbl(i).attribute6;
516 	p_account_rec_tab.attribute7(i)	 := p_account_tbl(i).attribute7;
517 	p_account_rec_tab.attribute8(i)	 := p_account_tbl(i).attribute8;
518 	p_account_rec_tab.attribute9(i)	 := p_account_tbl(i).attribute9;
519 	p_account_rec_tab.attribute10(i)	 := p_account_tbl(i).attribute10;
520 	p_account_rec_tab.attribute11(i)	 := p_account_tbl(i).attribute11;
521 	p_account_rec_tab.attribute12(i)	 := p_account_tbl(i).attribute12;
522 	p_account_rec_tab.attribute13(i)	 := p_account_tbl(i).attribute13;
523 	p_account_rec_tab.attribute14(i)	 := p_account_tbl(i).attribute14;
524 	p_account_rec_tab.attribute15(i)	 := p_account_tbl(i).attribute15;
525 	p_account_rec_tab.object_version_number(i)	 := p_account_tbl(i).object_version_number;
526 	p_account_rec_tab.call_contracts(i)	 := p_account_tbl(i).call_contracts;
527 	p_account_rec_tab.vld_organization_id(i)	 := p_account_tbl(i).vld_organization_id;
528 	p_account_rec_tab.expire_flag(i)	 := p_account_tbl(i).expire_flag;
529      END LOOP;
530   END Build_Acct_Rec_of_Table;
531   --
532   PROCEDURE Build_Org_Rec_of_Table
533      (
534        p_org_tbl                 IN      csi_datastructures_pub.organization_units_tbl
535       ,p_org_units_rec_tab       IN OUT NOCOPY   csi_diagnostics_pkg.org_units_rec_tab
536      ,p_org_hist_tbl             IN OUT NOCOPY   csi_diagnostics_pkg.T_NUM
537      ) IS
538   BEGIN
539      FOR i in p_org_tbl.FIRST .. p_org_tbl.LAST LOOP
540        select CSI_I_ORG_ASSIGNMENTS_H_S.nextval
541        into p_org_hist_tbl(i) from dual;
542        --
543        p_org_units_rec_tab.instance_ou_id(i)          := p_org_tbl(i).instance_ou_id;
544        p_org_units_rec_tab.instance_id(i)	            := p_org_tbl(i).instance_id;
545        p_org_units_rec_tab.operating_unit_id(i)       := p_org_tbl(i).operating_unit_id;
546        p_org_units_rec_tab.relationship_type_code(i)  := p_org_tbl(i).relationship_type_code;
547        p_org_units_rec_tab.active_start_date(i)       := p_org_tbl(i).active_start_date;
548        p_org_units_rec_tab.active_end_date(i)         := p_org_tbl(i).active_end_date;
549        p_org_units_rec_tab.context(i)	            := p_org_tbl(i).context;
550        p_org_units_rec_tab.attribute1(i)	            := p_org_tbl(i).attribute1;
551        p_org_units_rec_tab.attribute2(i)	            := p_org_tbl(i).attribute2;
552        p_org_units_rec_tab.attribute3(i)	            := p_org_tbl(i).attribute3;
553        p_org_units_rec_tab.attribute4(i)	            := p_org_tbl(i).attribute4;
554        p_org_units_rec_tab.attribute5(i)	            := p_org_tbl(i).attribute5;
555        p_org_units_rec_tab.attribute6(i)	            := p_org_tbl(i).attribute6;
556        p_org_units_rec_tab.attribute7(i)	            := p_org_tbl(i).attribute7;
557        p_org_units_rec_tab.attribute8(i)	            := p_org_tbl(i).attribute8;
558        p_org_units_rec_tab.attribute9(i)	            := p_org_tbl(i).attribute9;
559        p_org_units_rec_tab.attribute10(i)	            := p_org_tbl(i).attribute10;
560        p_org_units_rec_tab.attribute11(i)	            := p_org_tbl(i).attribute11;
561        p_org_units_rec_tab.attribute12(i)	            := p_org_tbl(i).attribute12;
565        p_org_units_rec_tab.object_version_number(i)   := p_org_tbl(i).object_version_number;
562        p_org_units_rec_tab.attribute13(i)	            := p_org_tbl(i).attribute13;
563        p_org_units_rec_tab.attribute14(i)	            := p_org_tbl(i).attribute14;
564        p_org_units_rec_tab.attribute15(i)	            := p_org_tbl(i).attribute15;
566      END LOOP;
567   END Build_Org_Rec_of_Table;
568   --
569   PROCEDURE Build_pricing_Rec_of_Table
570      (
571        p_pricing_tbl           IN      csi_datastructures_pub.pricing_attribs_tbl
572       ,p_pricing_rec_tab       IN OUT NOCOPY   csi_diagnostics_pkg.pricing_attribs_rec_tab
573       ,p_pricing_hist_tbl      IN OUT NOCOPY   csi_diagnostics_pkg.T_NUM
574      ) IS
575   BEGIN
576      FOR i in p_pricing_tbl.FIRST .. p_pricing_tbl.LAST LOOP
577         select CSI_I_PRICING_ATTRIBS_H_S.nextval
578         into p_pricing_hist_tbl(i) from dual;
579         --
580 	 p_pricing_rec_tab.pricing_attribute_id(i)    := p_pricing_tbl(i).pricing_attribute_id;
581 	 p_pricing_rec_tab.instance_id(i)	            := p_pricing_tbl(i).instance_id;
582 	 p_pricing_rec_tab.active_start_date(i)	    := p_pricing_tbl(i).active_start_date;
583 	 p_pricing_rec_tab.active_end_date(i)	        := p_pricing_tbl(i).active_end_date;
584 	 p_pricing_rec_tab.pricing_context(i)	        := p_pricing_tbl(i).pricing_context;
585 	 p_pricing_rec_tab.pricing_attribute1(i)	    := p_pricing_tbl(i).pricing_attribute1;
586 	 p_pricing_rec_tab.pricing_attribute2(i)	    := p_pricing_tbl(i).pricing_attribute2;
587 	 p_pricing_rec_tab.pricing_attribute3(i)	    := p_pricing_tbl(i).pricing_attribute3;
588 	 p_pricing_rec_tab.pricing_attribute4(i)	    := p_pricing_tbl(i).pricing_attribute4;
589 	 p_pricing_rec_tab.pricing_attribute5(i)	    := p_pricing_tbl(i).pricing_attribute5;
590 	 p_pricing_rec_tab.pricing_attribute6(i)	    := p_pricing_tbl(i).pricing_attribute6;
591 	 p_pricing_rec_tab.pricing_attribute7(i)	    := p_pricing_tbl(i).pricing_attribute7;
592 	 p_pricing_rec_tab.pricing_attribute8(i) 	    := p_pricing_tbl(i).pricing_attribute8;
593 	 p_pricing_rec_tab.pricing_attribute9(i)	    := p_pricing_tbl(i).pricing_attribute9;
594 	 p_pricing_rec_tab.pricing_attribute10(i)	    := p_pricing_tbl(i).pricing_attribute10;
595 	 p_pricing_rec_tab.pricing_attribute11(i)	    := p_pricing_tbl(i).pricing_attribute11;
596 	 p_pricing_rec_tab.pricing_attribute12(i)	    := p_pricing_tbl(i).pricing_attribute12;
597 	 p_pricing_rec_tab.pricing_attribute13(i)	    := p_pricing_tbl(i).pricing_attribute13;
598 	 p_pricing_rec_tab.pricing_attribute14(i)	    := p_pricing_tbl(i).pricing_attribute14;
599 	 p_pricing_rec_tab.pricing_attribute15(i)	    := p_pricing_tbl(i).pricing_attribute15;
600 	 p_pricing_rec_tab.pricing_attribute16(i)	    := p_pricing_tbl(i).pricing_attribute16;
601 	 p_pricing_rec_tab.pricing_attribute17(i)	    := p_pricing_tbl(i).pricing_attribute17;
602 	 p_pricing_rec_tab.pricing_attribute18(i)	    := p_pricing_tbl(i).pricing_attribute18;
603 	 p_pricing_rec_tab.pricing_attribute19(i)	    := p_pricing_tbl(i).pricing_attribute19;
604 	 p_pricing_rec_tab.pricing_attribute20(i)	    := p_pricing_tbl(i).pricing_attribute20;
605 	 p_pricing_rec_tab.pricing_attribute21(i)	    := p_pricing_tbl(i).pricing_attribute21;
606 	 p_pricing_rec_tab.pricing_attribute22(i)	    := p_pricing_tbl(i).pricing_attribute22;
607 	 p_pricing_rec_tab.pricing_attribute23(i)	    := p_pricing_tbl(i).pricing_attribute23;
608 	 p_pricing_rec_tab.pricing_attribute24(i)	    := p_pricing_tbl(i).pricing_attribute24;
609 	 p_pricing_rec_tab.pricing_attribute25(i)	    := p_pricing_tbl(i).pricing_attribute25;
610 	 p_pricing_rec_tab.pricing_attribute26(i)	    := p_pricing_tbl(i).pricing_attribute26;
611 	 p_pricing_rec_tab.pricing_attribute27(i)	    := p_pricing_tbl(i).pricing_attribute27;
612 	 p_pricing_rec_tab.pricing_attribute28(i)	    := p_pricing_tbl(i).pricing_attribute28;
613 	 p_pricing_rec_tab.pricing_attribute29(i)	    := p_pricing_tbl(i).pricing_attribute29;
614 	 p_pricing_rec_tab.pricing_attribute30(i)	    := p_pricing_tbl(i).pricing_attribute30;
615 	 p_pricing_rec_tab.pricing_attribute31(i)	    := p_pricing_tbl(i).pricing_attribute31;
616 	 p_pricing_rec_tab.pricing_attribute32(i)	    := p_pricing_tbl(i).pricing_attribute32;
617 	 p_pricing_rec_tab.pricing_attribute33(i)     := p_pricing_tbl(i).pricing_attribute33;
618 	 p_pricing_rec_tab.pricing_attribute34(i)	    := p_pricing_tbl(i).pricing_attribute34;
619 	 p_pricing_rec_tab.pricing_attribute35(i)	    := p_pricing_tbl(i).pricing_attribute35;
620 	 p_pricing_rec_tab.pricing_attribute36(i)	    := p_pricing_tbl(i).pricing_attribute36;
621 	 p_pricing_rec_tab.pricing_attribute37(i)	    := p_pricing_tbl(i).pricing_attribute37;
622 	 p_pricing_rec_tab.pricing_attribute38(i)	    := p_pricing_tbl(i).pricing_attribute38;
623 	 p_pricing_rec_tab.pricing_attribute39(i)	    := p_pricing_tbl(i).pricing_attribute39;
624 	 p_pricing_rec_tab.pricing_attribute40(i)	    := p_pricing_tbl(i).pricing_attribute40;
625 	 p_pricing_rec_tab.pricing_attribute41(i)	    := p_pricing_tbl(i).pricing_attribute41;
626 	 p_pricing_rec_tab.pricing_attribute42(i)	    := p_pricing_tbl(i).pricing_attribute42;
627 	 p_pricing_rec_tab.pricing_attribute43(i)     := p_pricing_tbl(i).pricing_attribute43;
628 	 p_pricing_rec_tab.pricing_attribute44(i)	    := p_pricing_tbl(i).pricing_attribute44;
629 	 p_pricing_rec_tab.pricing_attribute45(i)	    := p_pricing_tbl(i).pricing_attribute45;
630 	 p_pricing_rec_tab.pricing_attribute46(i)	    := p_pricing_tbl(i).pricing_attribute46;
631 	 p_pricing_rec_tab.pricing_attribute47(i)	    := p_pricing_tbl(i).pricing_attribute47;
632 	 p_pricing_rec_tab.pricing_attribute48(i)	    := p_pricing_tbl(i).pricing_attribute48;
633 	 p_pricing_rec_tab.pricing_attribute49(i)	    := p_pricing_tbl(i).pricing_attribute49;
634 	 p_pricing_rec_tab.pricing_attribute50(i)	    := p_pricing_tbl(i).pricing_attribute50;
635 	 p_pricing_rec_tab.pricing_attribute51(i)	    := p_pricing_tbl(i).pricing_attribute51;
639 	 p_pricing_rec_tab.pricing_attribute55(i)	    := p_pricing_tbl(i).pricing_attribute55;
636 	 p_pricing_rec_tab.pricing_attribute52(i)	    := p_pricing_tbl(i).pricing_attribute52;
637 	 p_pricing_rec_tab.pricing_attribute53(i)	    := p_pricing_tbl(i).pricing_attribute53;
638 	 p_pricing_rec_tab.pricing_attribute54(i)	    := p_pricing_tbl(i).pricing_attribute54;
640 	 p_pricing_rec_tab.pricing_attribute56(i)	    := p_pricing_tbl(i).pricing_attribute56;
641 	 p_pricing_rec_tab.pricing_attribute57(i)	    := p_pricing_tbl(i).pricing_attribute57;
642 	 p_pricing_rec_tab.pricing_attribute58(i)	    := p_pricing_tbl(i).pricing_attribute58;
643 	 p_pricing_rec_tab.pricing_attribute59(i)	    := p_pricing_tbl(i).pricing_attribute59;
644 	 p_pricing_rec_tab.pricing_attribute60(i)	    := p_pricing_tbl(i).pricing_attribute60;
645 	 p_pricing_rec_tab.pricing_attribute61(i)	    := p_pricing_tbl(i).pricing_attribute61;
646 	 p_pricing_rec_tab.pricing_attribute62(i)	    := p_pricing_tbl(i).pricing_attribute62;
647 	 p_pricing_rec_tab.pricing_attribute63(i)	    := p_pricing_tbl(i).pricing_attribute63;
648 	 p_pricing_rec_tab.pricing_attribute64(i)	    := p_pricing_tbl(i).pricing_attribute64;
649 	 p_pricing_rec_tab.pricing_attribute65(i)	    := p_pricing_tbl(i).pricing_attribute65;
650 	 p_pricing_rec_tab.pricing_attribute66(i)	    := p_pricing_tbl(i).pricing_attribute66;
651 	 p_pricing_rec_tab.pricing_attribute67(i)	    := p_pricing_tbl(i).pricing_attribute67;
652 	 p_pricing_rec_tab.pricing_attribute68(i)	    := p_pricing_tbl(i).pricing_attribute68;
653 	 p_pricing_rec_tab.pricing_attribute69(i)	    := p_pricing_tbl(i).pricing_attribute69;
654 	 p_pricing_rec_tab.pricing_attribute70(i)	    := p_pricing_tbl(i).pricing_attribute70;
655 	 p_pricing_rec_tab.pricing_attribute71(i)	    := p_pricing_tbl(i).pricing_attribute71;
656 	 p_pricing_rec_tab.pricing_attribute72(i)	    := p_pricing_tbl(i).pricing_attribute72;
657 	 p_pricing_rec_tab.pricing_attribute73(i)	    := p_pricing_tbl(i).pricing_attribute73;
658 	 p_pricing_rec_tab.pricing_attribute74(i)	    := p_pricing_tbl(i).pricing_attribute74;
659 	 p_pricing_rec_tab.pricing_attribute75(i)	    := p_pricing_tbl(i).pricing_attribute75;
660 	 p_pricing_rec_tab.pricing_attribute76(i)	    := p_pricing_tbl(i).pricing_attribute76;
661 	 p_pricing_rec_tab.pricing_attribute77(i)	    := p_pricing_tbl(i).pricing_attribute77;
662 	 p_pricing_rec_tab.pricing_attribute78(i)	    := p_pricing_tbl(i).pricing_attribute78;
663 	 p_pricing_rec_tab.pricing_attribute79(i)	    := p_pricing_tbl(i).pricing_attribute79;
664 	 p_pricing_rec_tab.pricing_attribute80(i)	    := p_pricing_tbl(i).pricing_attribute80;
665 	 p_pricing_rec_tab.pricing_attribute81(i)	    := p_pricing_tbl(i).pricing_attribute81;
666 	 p_pricing_rec_tab.pricing_attribute82(i)	    := p_pricing_tbl(i).pricing_attribute82;
667 	 p_pricing_rec_tab.pricing_attribute83(i)	    := p_pricing_tbl(i).pricing_attribute83;
668 	 p_pricing_rec_tab.pricing_attribute84(i)	    := p_pricing_tbl(i).pricing_attribute84;
669 	 p_pricing_rec_tab.pricing_attribute85(i)	    := p_pricing_tbl(i).pricing_attribute85;
670 	 p_pricing_rec_tab.pricing_attribute86(i)	    := p_pricing_tbl(i).pricing_attribute86;
671 	 p_pricing_rec_tab.pricing_attribute87(i)	    := p_pricing_tbl(i).pricing_attribute87;
672 	 p_pricing_rec_tab.pricing_attribute88(i)	    := p_pricing_tbl(i).pricing_attribute88;
673 	 p_pricing_rec_tab.pricing_attribute89(i)	    := p_pricing_tbl(i).pricing_attribute89;
674 	 p_pricing_rec_tab.pricing_attribute90(i)	    := p_pricing_tbl(i).pricing_attribute90;
675 	 p_pricing_rec_tab.pricing_attribute91(i)	    := p_pricing_tbl(i).pricing_attribute91;
676 	 p_pricing_rec_tab.pricing_attribute92(i)	    := p_pricing_tbl(i).pricing_attribute92;
677 	 p_pricing_rec_tab.pricing_attribute93(i)	    := p_pricing_tbl(i).pricing_attribute93;
678 	 p_pricing_rec_tab.pricing_attribute94(i)	    := p_pricing_tbl(i).pricing_attribute94;
679 	 p_pricing_rec_tab.pricing_attribute95(i)	    := p_pricing_tbl(i).pricing_attribute95;
680 	 p_pricing_rec_tab.pricing_attribute96(i)	    := p_pricing_tbl(i).pricing_attribute96;
681 	 p_pricing_rec_tab.pricing_attribute97(i)	    := p_pricing_tbl(i).pricing_attribute97;
682 	 p_pricing_rec_tab.pricing_attribute98(i)	    := p_pricing_tbl(i).pricing_attribute98;
683 	 p_pricing_rec_tab.pricing_attribute99(i)	    := p_pricing_tbl(i).pricing_attribute99;
684 	 p_pricing_rec_tab.pricing_attribute100(i)    := p_pricing_tbl(i).pricing_attribute100;
685 	 p_pricing_rec_tab.context(i)	                := p_pricing_tbl(i).context;
686 	 p_pricing_rec_tab.attribute1(i)	            := p_pricing_tbl(i).attribute1;
687 	 p_pricing_rec_tab.attribute2(i)	            := p_pricing_tbl(i).attribute2;
688 	 p_pricing_rec_tab.attribute3(i)	            := p_pricing_tbl(i).attribute3;
689 	 p_pricing_rec_tab.attribute4(i)	            := p_pricing_tbl(i).attribute4;
690 	 p_pricing_rec_tab.attribute5(i)	            := p_pricing_tbl(i).attribute5;
691 	 p_pricing_rec_tab.attribute6(i)	            := p_pricing_tbl(i).attribute6;
692 	 p_pricing_rec_tab.attribute7(i)	            := p_pricing_tbl(i).attribute7;
693 	 p_pricing_rec_tab.attribute8(i)	            := p_pricing_tbl(i).attribute8;
694 	 p_pricing_rec_tab.attribute9(i)	            := p_pricing_tbl(i).attribute9;
695 	 p_pricing_rec_tab.attribute10(i)	            := p_pricing_tbl(i).attribute10;
696 	 p_pricing_rec_tab.attribute11(i)	            := p_pricing_tbl(i).attribute11;
697 	 p_pricing_rec_tab.attribute12(i)	            := p_pricing_tbl(i).attribute12;
698 	 p_pricing_rec_tab.attribute13(i)	            := p_pricing_tbl(i).attribute13;
699 	 p_pricing_rec_tab.attribute14(i)	            := p_pricing_tbl(i).attribute14;
700 	 p_pricing_rec_tab.attribute15(i)	            := p_pricing_tbl(i).attribute15;
701 	 p_pricing_rec_tab.object_version_number(i)   := p_pricing_tbl(i).object_version_number;
702      END LOOP;
703   END Build_pricing_Rec_of_Table;
704   --
705   PROCEDURE Build_Ext_Attr_Rec_Table
706      (
710      ) IS
707        p_ext_attr_tbl     IN     csi_datastructures_pub.extend_attrib_values_tbl
708       ,p_ext_attr_rec_tab IN OUT NOCOPY  csi_diagnostics_pkg.extend_attrib_values_rec_tab
709      ,p_ext_hist_tbl      IN OUT NOCOPY  csi_diagnostics_pkg.T_NUM
711 
712   BEGIN
713      FOR i in p_ext_attr_tbl.FIRST .. p_ext_attr_tbl.LAST LOOP
714        select CSI_IEA_VALUES_H_S.nextval
715        into p_ext_hist_tbl(i) from dual;
716        --
717        p_ext_attr_rec_tab.attribute_value_id(i)      :=  p_ext_attr_tbl(i).attribute_value_id;
718        p_ext_attr_rec_tab.instance_id(i)             :=  p_ext_attr_tbl(i).instance_id;
719        p_ext_attr_rec_tab.attribute_id(i)            :=  p_ext_attr_tbl(i).attribute_id;
720        p_ext_attr_rec_tab.attribute_code(i)          :=  p_ext_attr_tbl(i).attribute_code;
721        p_ext_attr_rec_tab.attribute_value(i)         :=  p_ext_attr_tbl(i).attribute_value;
722        p_ext_attr_rec_tab.active_start_date(i)       :=  p_ext_attr_tbl(i).active_start_date;
723        p_ext_attr_rec_tab.active_end_date(i)         :=  p_ext_attr_tbl(i).active_end_date;
724        p_ext_attr_rec_tab.context(i)                 :=  p_ext_attr_tbl(i).context;
725        p_ext_attr_rec_tab.attribute1(i)              :=  p_ext_attr_tbl(i).attribute1;
726        p_ext_attr_rec_tab.attribute2 (i)             :=  p_ext_attr_tbl(i).attribute2;
727        p_ext_attr_rec_tab.attribute3(i)              :=  p_ext_attr_tbl(i).attribute3;
728        p_ext_attr_rec_tab.attribute4(i)              :=  p_ext_attr_tbl(i).attribute4;
729        p_ext_attr_rec_tab.attribute5(i)              :=  p_ext_attr_tbl(i).attribute5;
730        p_ext_attr_rec_tab.attribute6(i)              :=  p_ext_attr_tbl(i).attribute6;
731        p_ext_attr_rec_tab.attribute7(i)              :=  p_ext_attr_tbl(i).attribute7;
732        p_ext_attr_rec_tab.attribute8(i)              :=  p_ext_attr_tbl(i).attribute8;
733        p_ext_attr_rec_tab.attribute9(i)              :=  p_ext_attr_tbl(i).attribute9;
734        p_ext_attr_rec_tab.attribute10(i)             :=  p_ext_attr_tbl(i).attribute10;
735        p_ext_attr_rec_tab.attribute11(i)             :=  p_ext_attr_tbl(i).attribute11;
736        p_ext_attr_rec_tab.attribute12(i)             :=  p_ext_attr_tbl(i).attribute12;
737        p_ext_attr_rec_tab.attribute13(i)             :=  p_ext_attr_tbl(i).attribute13;
738        p_ext_attr_rec_tab.attribute14(i)             :=  p_ext_attr_tbl(i).attribute14;
739        p_ext_attr_rec_tab.attribute15(i)             :=  p_ext_attr_tbl(i).attribute15;
740        p_ext_attr_rec_tab.object_version_number(i)   :=  p_ext_attr_tbl(i).object_version_number;
741      END LOOP;
742   END Build_Ext_Attr_Rec_Table;
743   --
744   PROCEDURE Build_Asset_Rec_Table
745      (
746        p_asset_tbl     IN     csi_datastructures_pub.instance_asset_tbl
747       ,p_asset_rec_tab IN OUT NOCOPY  csi_diagnostics_pkg.instance_asset_rec_tab
748       ,p_asset_hist_tbl IN OUT NOCOPY  csi_diagnostics_pkg.T_NUM
749      ) IS
750 
751   BEGIN
752      FOR i in p_asset_tbl.FIRST .. p_asset_tbl.LAST LOOP
753        select CSI_I_ASSETS_H_S.nextval
754        into p_asset_hist_tbl(i) from dual;
755        --
756        p_asset_rec_tab.instance_asset_id(i)          := p_asset_tbl(i).instance_asset_id;
757        p_asset_rec_tab.instance_id(i)                := p_asset_tbl(i).instance_id;
758        p_asset_rec_tab.fa_asset_id(i)                := p_asset_tbl(i).fa_asset_id;
759        p_asset_rec_tab.fa_book_type_code(i)          := p_asset_tbl(i).fa_book_type_code;
760        p_asset_rec_tab.fa_location_id(i)             := p_asset_tbl(i).fa_location_id;
761        p_asset_rec_tab.asset_quantity(i)             := p_asset_tbl(i).asset_quantity;
762        p_asset_rec_tab.update_status(i)              := p_asset_tbl(i).update_status;
763        p_asset_rec_tab.active_start_date(i)          := p_asset_tbl(i).active_start_date;
764        p_asset_rec_tab.active_end_date(i)            := p_asset_tbl(i).active_end_date;
765        p_asset_rec_tab.object_version_number(i)      := p_asset_tbl(i).object_version_number;
766        p_asset_rec_tab.check_for_instance_expiry(i)  := p_asset_tbl(i).check_for_instance_expiry;
767 
768      END LOOP;
769      --
770   END Build_Asset_Rec_Table;
771   --
772 
773   PROCEDURE make_non_header(
774     p_inst_h_rec       IN  csi_datastructures_pub.instance_header_rec,
775     p_pty_h_tbl        IN  csi_datastructures_pub.party_header_tbl,
776     p_pa_h_tbl         IN  csi_datastructures_pub.party_account_header_tbl,
777     p_ou_h_tbl         IN  csi_datastructures_pub.org_units_header_tbl,
778     p_asset_h_tbl      IN  csi_datastructures_pub.instance_asset_header_tbl,
779     x_inst_rec         OUT nocopy csi_datastructures_pub.instance_rec,
780     x_pty_tbl          OUT nocopy csi_datastructures_pub.party_tbl,
781     x_pa_tbl           OUT nocopy csi_datastructures_pub.party_account_tbl,
782     x_ou_tbl           OUT nocopy csi_datastructures_pub.organization_units_tbl,
783     x_asset_tbl        OUT nocopy csi_datastructures_pub.instance_asset_tbl,
784     x_return_status    OUT nocopy varchar2)
785   IS
786   BEGIN
787 
788     x_return_status := fnd_api.g_ret_sts_success;
789 
790     x_inst_rec.instance_id                := p_inst_h_rec.instance_id;
791     x_inst_rec.instance_number            := p_inst_h_rec.instance_number;
792     x_inst_rec.external_reference         := p_inst_h_rec.external_reference;
793     x_inst_rec.inventory_item_id          := p_inst_h_rec.inventory_item_id;
794     x_inst_rec.inventory_revision         := p_inst_h_rec.inventory_revision;
795     x_inst_rec.inv_master_organization_id := p_inst_h_rec.inv_master_organization_id;
799     x_inst_rec.quantity                   := p_inst_h_rec.quantity;
796     x_inst_rec.serial_number              := p_inst_h_rec.serial_number;
797     x_inst_rec.mfg_serial_number_flag     := p_inst_h_rec.mfg_serial_number_flag;
798     x_inst_rec.lot_number                 := p_inst_h_rec.lot_number;
800     x_inst_rec.unit_of_measure            := p_inst_h_rec.unit_of_measure;
801     x_inst_rec.accounting_class_code      := p_inst_h_rec.accounting_class_code;
802     x_inst_rec.instance_condition_id      := p_inst_h_rec.instance_condition_id;
803     x_inst_rec.instance_usage_code        := p_inst_h_rec.instance_usage_code;
804     x_inst_rec.instance_status_id         := p_inst_h_rec.instance_status_id;
805     x_inst_rec.customer_view_flag         := p_inst_h_rec.customer_view_flag;
806     x_inst_rec.merchant_view_flag         := p_inst_h_rec.merchant_view_flag;
807     x_inst_rec.sellable_flag              := p_inst_h_rec.sellable_flag;
808     x_inst_rec.system_id                  := p_inst_h_rec.system_id;
809     x_inst_rec.instance_type_code         := p_inst_h_rec.instance_type_code;
810     x_inst_rec.active_start_date          := p_inst_h_rec.active_start_date;
811     x_inst_rec.active_end_date            := p_inst_h_rec.active_end_date;
812     x_inst_rec.location_type_code         := p_inst_h_rec.location_type_code;
813     x_inst_rec.location_id                := p_inst_h_rec.location_id;
814     x_inst_rec.install_location_type_code := p_inst_h_rec.install_location_type_code;
815     x_inst_rec.install_location_id        := p_inst_h_rec.install_location_id;
816     x_inst_rec.inv_organization_id        := p_inst_h_rec.inv_organization_id;
817     x_inst_rec.inv_subinventory_name      := p_inst_h_rec.inv_subinventory_name;
818     x_inst_rec.inv_locator_id             := p_inst_h_rec.inv_locator_id;
819     x_inst_rec.pa_project_id              := p_inst_h_rec.pa_project_id;
820     x_inst_rec.pa_project_task_id         := p_inst_h_rec.pa_project_task_id;
821     x_inst_rec.in_transit_order_line_id   := p_inst_h_rec.in_transit_order_line_id;
822     x_inst_rec.wip_job_id                 := p_inst_h_rec.wip_job_id;
823     x_inst_rec.po_order_line_id           := p_inst_h_rec.po_order_line_id;
824     x_inst_rec.last_oe_order_line_id      := p_inst_h_rec.last_oe_order_line_id;
825     x_inst_rec.last_oe_rma_line_id        := p_inst_h_rec.last_oe_rma_line_id;
826     x_inst_rec.last_po_po_line_id         := p_inst_h_rec.last_po_po_line_id;
827     x_inst_rec.last_oe_po_number          := p_inst_h_rec.last_oe_po_number;
828     x_inst_rec.last_wip_job_id            := p_inst_h_rec.last_wip_job_id;
829     x_inst_rec.last_pa_project_id         := p_inst_h_rec.last_pa_project_id;
830     x_inst_rec.last_pa_task_id            := p_inst_h_rec.last_pa_task_id;
831     x_inst_rec.last_oe_agreement_id       := p_inst_h_rec.last_oe_agreement_id;
832     x_inst_rec.install_date               := p_inst_h_rec.install_date;
833     x_inst_rec.manually_created_flag      := p_inst_h_rec.manually_created_flag;
834     x_inst_rec.return_by_date             := p_inst_h_rec.return_by_date;
835     x_inst_rec.actual_return_date         := p_inst_h_rec.actual_return_date;
836     x_inst_rec.creation_complete_flag     := p_inst_h_rec.creation_complete_flag;
837     x_inst_rec.completeness_flag          := p_inst_h_rec.completeness_flag;
838     x_inst_rec.context                    := p_inst_h_rec.context;
839     x_inst_rec.attribute1                 := p_inst_h_rec.attribute1;
840     x_inst_rec.attribute2                 := p_inst_h_rec.attribute2;
841     x_inst_rec.attribute3                 := p_inst_h_rec.attribute3;
842     x_inst_rec.attribute4                 := p_inst_h_rec.attribute4;
843     x_inst_rec.attribute5                 := p_inst_h_rec.attribute5;
844     x_inst_rec.attribute6                 := p_inst_h_rec.attribute6;
845     x_inst_rec.attribute7                 := p_inst_h_rec.attribute7;
846     x_inst_rec.attribute8                 := p_inst_h_rec.attribute8;
847     x_inst_rec.attribute9                 := p_inst_h_rec.attribute9;
848     x_inst_rec.attribute10                := p_inst_h_rec.attribute10;
849     x_inst_rec.attribute11                := p_inst_h_rec.attribute11;
850     x_inst_rec.attribute12                := p_inst_h_rec.attribute12;
851     x_inst_rec.attribute13                := p_inst_h_rec.attribute13;
852     x_inst_rec.attribute14                := p_inst_h_rec.attribute14;
853     x_inst_rec.attribute15                := p_inst_h_rec.attribute15;
854     x_inst_rec.object_version_number      := p_inst_h_rec.object_version_number;
855     x_inst_rec.config_inst_hdr_id         := p_inst_h_rec.config_inst_hdr_id;
856     x_inst_rec.config_inst_rev_num        := p_inst_h_rec.config_inst_rev_num;
857     x_inst_rec.config_inst_item_id        := p_inst_h_rec.config_inst_item_id;
858     x_inst_rec.config_valid_status        := p_inst_h_rec.config_valid_status;
859     x_inst_rec.instance_description       := p_inst_h_rec.instance_description;
860 
861 
862     IF p_pty_h_tbl.COUNT > 0 THEN
863       FOR l_ind IN p_pty_h_tbl.FIRST .. p_pty_h_tbl.LAST
864       LOOP
865         x_pty_tbl(l_ind).instance_party_id        := p_pty_h_tbl(l_ind).instance_party_id;
866         x_pty_tbl(l_ind).instance_id              := p_pty_h_tbl(l_ind).instance_id;
867         x_pty_tbl(l_ind).party_source_table       := p_pty_h_tbl(l_ind).party_source_table;
868         x_pty_tbl(l_ind).party_id                 := p_pty_h_tbl(l_ind).party_id;
869         x_pty_tbl(l_ind).relationship_type_code   := p_pty_h_tbl(l_ind).relationship_type_code;
870         x_pty_tbl(l_ind).contact_flag             := p_pty_h_tbl(l_ind).contact_flag;
871         x_pty_tbl(l_ind).contact_ip_id            := p_pty_h_tbl(l_ind).contact_ip_id;
875         x_pty_tbl(l_ind).attribute1               := p_pty_h_tbl(l_ind).attribute1;
872         x_pty_tbl(l_ind).active_start_date        := p_pty_h_tbl(l_ind).active_start_date;
873         x_pty_tbl(l_ind).active_end_date          := p_pty_h_tbl(l_ind).active_end_date;
874         x_pty_tbl(l_ind).context                  := p_pty_h_tbl(l_ind).context;
876         x_pty_tbl(l_ind).attribute2               := p_pty_h_tbl(l_ind).attribute2;
877         x_pty_tbl(l_ind).attribute3               := p_pty_h_tbl(l_ind).attribute3;
878         x_pty_tbl(l_ind).attribute4               := p_pty_h_tbl(l_ind).attribute4;
879         x_pty_tbl(l_ind).attribute5               := p_pty_h_tbl(l_ind).attribute5;
880         x_pty_tbl(l_ind).attribute6               := p_pty_h_tbl(l_ind).attribute6;
881         x_pty_tbl(l_ind).attribute7               := p_pty_h_tbl(l_ind).attribute7;
882         x_pty_tbl(l_ind).attribute8               := p_pty_h_tbl(l_ind).attribute8;
883         x_pty_tbl(l_ind).attribute9               := p_pty_h_tbl(l_ind).attribute9;
884         x_pty_tbl(l_ind).attribute10              := p_pty_h_tbl(l_ind).attribute10;
885         x_pty_tbl(l_ind).attribute11              := p_pty_h_tbl(l_ind).attribute11;
886         x_pty_tbl(l_ind).attribute12              := p_pty_h_tbl(l_ind).attribute12;
887         x_pty_tbl(l_ind).attribute13              := p_pty_h_tbl(l_ind).attribute13;
888         x_pty_tbl(l_ind).attribute14              := p_pty_h_tbl(l_ind).attribute14;
889         x_pty_tbl(l_ind).attribute15              := p_pty_h_tbl(l_ind).attribute15;
890         x_pty_tbl(l_ind).primary_flag             := p_pty_h_tbl(l_ind).primary_flag;
891         x_pty_tbl(l_ind).preferred_flag           := p_pty_h_tbl(l_ind).preferred_flag;
892         SELECT object_version_number
893         INTO   x_pty_tbl(l_ind).object_version_number
894         FROM   csi_i_parties
895         WHERE  instance_party_id = p_pty_h_tbl(l_ind).instance_party_id;
896       END LOOP;
897     END IF;
898 
899     IF p_pa_h_tbl.count > 0 THEN
900       FOR l_ind IN p_pa_h_tbl.FIRST .. p_pa_h_tbl.LAST
901       LOOP
902 
903         x_pa_tbl(l_ind).ip_account_id          := p_pa_h_tbl(l_ind).ip_account_id;
904         x_pa_tbl(l_ind).instance_party_id      := p_pa_h_tbl(l_ind).instance_party_id;
905         x_pa_tbl(l_ind).party_account_id       := p_pa_h_tbl(l_ind).party_account_id;
906         x_pa_tbl(l_ind).relationship_type_code := p_pa_h_tbl(l_ind).relationship_type_code;
907         x_pa_tbl(l_ind).bill_to_address        := p_pa_h_tbl(l_ind).bill_to_address;
908         x_pa_tbl(l_ind).ship_to_address        := p_pa_h_tbl(l_ind).ship_to_address;
909         x_pa_tbl(l_ind).active_start_date      := p_pa_h_tbl(l_ind).active_start_date;
910         x_pa_tbl(l_ind).active_end_date        := p_pa_h_tbl(l_ind).active_end_date;
911         x_pa_tbl(l_ind).context                := p_pa_h_tbl(l_ind).context;
912         x_pa_tbl(l_ind).attribute1             := p_pa_h_tbl(l_ind).attribute1;
913         x_pa_tbl(l_ind).attribute2             := p_pa_h_tbl(l_ind).attribute2;
914         x_pa_tbl(l_ind).attribute3             := p_pa_h_tbl(l_ind).attribute3;
915         x_pa_tbl(l_ind).attribute4             := p_pa_h_tbl(l_ind).attribute4;
916         x_pa_tbl(l_ind).attribute5             := p_pa_h_tbl(l_ind).attribute5;
917         x_pa_tbl(l_ind).attribute6             := p_pa_h_tbl(l_ind).attribute6;
918         x_pa_tbl(l_ind).attribute7             := p_pa_h_tbl(l_ind).attribute7;
919         x_pa_tbl(l_ind).attribute8             := p_pa_h_tbl(l_ind).attribute8;
920         x_pa_tbl(l_ind).attribute9             := p_pa_h_tbl(l_ind).attribute9;
921         x_pa_tbl(l_ind).attribute10            := p_pa_h_tbl(l_ind).attribute10;
922         x_pa_tbl(l_ind).attribute11            := p_pa_h_tbl(l_ind).attribute11;
923         x_pa_tbl(l_ind).attribute12            := p_pa_h_tbl(l_ind).attribute12;
924         x_pa_tbl(l_ind).attribute13            := p_pa_h_tbl(l_ind).attribute13;
925         x_pa_tbl(l_ind).attribute14            := p_pa_h_tbl(l_ind).attribute14;
926         x_pa_tbl(l_ind).attribute15            := p_pa_h_tbl(l_ind).attribute15;
927         SELECT object_version_number
928         INTO   x_pa_tbl(l_ind).object_version_number
929         FROM   csi_ip_accounts
930         WHERE  ip_account_id = p_pa_h_tbl(l_ind).ip_account_id;
931 
932       END LOOP;
933     END IF;
934 
935     IF p_ou_h_tbl.count > 0 THEN
936       FOR l_ind IN p_ou_h_tbl.FIRST .. p_ou_h_tbl.LAST
937       LOOP
938 
939         x_ou_tbl(l_ind).instance_ou_id         := p_ou_h_tbl(l_ind).instance_ou_id;
940         x_ou_tbl(l_ind).instance_id            := p_ou_h_tbl(l_ind).instance_id;
941         x_ou_tbl(l_ind).operating_unit_id      := p_ou_h_tbl(l_ind).operating_unit_id;
942         x_ou_tbl(l_ind).relationship_type_code := p_ou_h_tbl(l_ind).relationship_type_code;
943         x_ou_tbl(l_ind).active_start_date      := p_ou_h_tbl(l_ind).active_start_date;
944         x_ou_tbl(l_ind).active_end_date        := p_ou_h_tbl(l_ind).active_end_date;
945         x_ou_tbl(l_ind).context                := p_ou_h_tbl(l_ind).context;
946         x_ou_tbl(l_ind).attribute1             := p_ou_h_tbl(l_ind).attribute1;
947         x_ou_tbl(l_ind).attribute2             := p_ou_h_tbl(l_ind).attribute2;
948         x_ou_tbl(l_ind).attribute3             := p_ou_h_tbl(l_ind).attribute3;
949         x_ou_tbl(l_ind).attribute4             := p_ou_h_tbl(l_ind).attribute4;
950         x_ou_tbl(l_ind).attribute5             := p_ou_h_tbl(l_ind).attribute5;
951         x_ou_tbl(l_ind).attribute6             := p_ou_h_tbl(l_ind).attribute6;
955         x_ou_tbl(l_ind).attribute10            := p_ou_h_tbl(l_ind).attribute10;
952         x_ou_tbl(l_ind).attribute7             := p_ou_h_tbl(l_ind).attribute7;
953         x_ou_tbl(l_ind).attribute8             := p_ou_h_tbl(l_ind).attribute8;
954         x_ou_tbl(l_ind).attribute9             := p_ou_h_tbl(l_ind).attribute9;
956         x_ou_tbl(l_ind).attribute11            := p_ou_h_tbl(l_ind).attribute11;
957         x_ou_tbl(l_ind).attribute12            := p_ou_h_tbl(l_ind).attribute12;
958         x_ou_tbl(l_ind).attribute13            := p_ou_h_tbl(l_ind).attribute13;
959         x_ou_tbl(l_ind).attribute14            := p_ou_h_tbl(l_ind).attribute14;
960         x_ou_tbl(l_ind).attribute15            := p_ou_h_tbl(l_ind).attribute15;
961         SELECT object_version_number
962         INTO   x_ou_tbl(l_ind).object_version_number
963         FROM   csi_i_org_assignments
964         WHERE  instance_ou_id = p_ou_h_tbl(l_ind).instance_ou_id;
965 
966       END LOOP;
967     END IF;
968 
969     IF p_asset_h_tbl.count > 0 THEN
970       FOR l_ind IN p_asset_h_tbl.FIRST .. p_asset_h_tbl.LAST
971       LOOP
972 
973         x_asset_tbl(l_ind).instance_asset_id     := p_asset_h_tbl(l_ind).instance_asset_id;
974         x_asset_tbl(l_ind).instance_id           := p_asset_h_tbl(l_ind).instance_id;
975         x_asset_tbl(l_ind).fa_asset_id           := p_asset_h_tbl(l_ind).fa_asset_id;
976         x_asset_tbl(l_ind).fa_book_type_code     := p_asset_h_tbl(l_ind).fa_book_type_code;
977         x_asset_tbl(l_ind).fa_location_id        := p_asset_h_tbl(l_ind).fa_location_id;
978         x_asset_tbl(l_ind).asset_quantity        := p_asset_h_tbl(l_ind).asset_quantity;
979         x_asset_tbl(l_ind).update_status         := p_asset_h_tbl(l_ind).update_status;
980         x_asset_tbl(l_ind).active_start_date     := p_asset_h_tbl(l_ind).active_start_date;
981         x_asset_tbl(l_ind).active_end_date       := p_asset_h_tbl(l_ind).active_end_date;
982         SELECT object_version_number
983         INTO   x_asset_tbl(l_ind).object_version_number
984         FROM   csi_i_assets
985         WHERE  instance_asset_id = p_asset_h_tbl(l_ind).instance_asset_id;
986 
987       END LOOP;
988     END IF;
989 
990   END make_non_header;
991   --
992   PROCEDURE forward_sync IS
993 
994     CURSOR fs_cur IS
995       SELECT instance_id,
996              date_time_stamp,
997              inventory_item_id,
998              serial_number,
999              lot_control_code,
1000              mtl_txn_id,
1001              mtl_txn_creation_date
1002       FROM   csi_ii_forward_sync_temp
1003       WHERE  process_flag <> 'P';
1004 
1005     l_txn_type_id          number;
1006     l_error_exists         varchar2(1) := 'N';
1007     l_csi_txn_rec          csi_datastructures_pub.transaction_rec;
1008 
1009     -- get instance details variables
1010     g_inst_rec             csi_datastructures_pub.instance_header_rec;
1011     g_pty_tbl              csi_datastructures_pub.party_header_tbl;
1012     g_pa_tbl               csi_datastructures_pub.party_account_header_tbl;
1013     g_ou_tbl               csi_datastructures_pub.org_units_header_tbl;
1014     g_prc_tbl              csi_datastructures_pub.pricing_attribs_tbl;
1015     g_eav_tbl              csi_datastructures_pub.extend_attrib_values_tbl;
1016     g_ea_tbl               csi_datastructures_pub.extend_attrib_tbl;
1017     g_asset_tbl            csi_datastructures_pub.instance_asset_header_tbl;
1018 
1019 
1020     -- get version label variables
1021     g_vl_qry_rec           csi_datastructures_pub.version_label_query_rec;
1022     g_vl_tbl               csi_datastructures_pub.version_label_tbl;
1023 
1024     -- get relationship variables
1025     l_iir_qry_rec          csi_datastructures_pub.relationship_query_rec;
1026     g_iir_qry_rec          csi_datastructures_pub.relationship_query_rec;
1027     l_iir_tbl              csi_datastructures_pub.ii_relationship_tbl;
1028     g_iir_tbl              csi_datastructures_pub.ii_relationship_tbl;
1029     iir_ind                binary_integer := 0;
1030 
1031 
1032     -- update item instance variables
1033     l_inst_rec             csi_datastructures_pub.instance_rec;
1034     l_pty_tbl              csi_datastructures_pub.party_tbl;
1035     l_pa_tbl               csi_datastructures_pub.party_account_tbl;
1036     l_ou_tbl               csi_datastructures_pub.organization_units_tbl;
1037     l_eav_tbl              csi_datastructures_pub.extend_attrib_values_tbl;
1038     l_prc_tbl              csi_datastructures_pub.pricing_attribs_tbl;
1039     l_asset_tbl            csi_datastructures_pub.instance_asset_tbl;
1040     l_inst_ids_tbl         csi_datastructures_pub.id_tbl;
1041     l_txn_rec              csi_datastructures_pub.transaction_rec;
1042     l_vl_tbl               csi_datastructures_pub.version_label_tbl;
1043 
1044     l_return_status        varchar2(1);
1045     l_msg_data             varchar2(2000);
1046     l_msg_count            number;
1047 
1048     PROCEDURE init_struct(
1049       px_inst_rec     IN OUT nocopy csi_datastructures_pub.instance_header_rec,
1050       px_pty_tbl      IN OUT nocopy csi_datastructures_pub.party_header_tbl,
1051       px_pa_tbl       IN OUT nocopy csi_datastructures_pub.party_account_header_tbl,
1052       px_ou_tbl       IN OUT nocopy csi_datastructures_pub.org_units_header_tbl,
1053       px_prc_tbl      IN OUT nocopy csi_datastructures_pub.pricing_attribs_tbl,
1054       px_eav_tbl      IN OUT nocopy csi_datastructures_pub.extend_attrib_values_tbl,
1055       px_ea_tbl       IN OUT nocopy csi_datastructures_pub.extend_attrib_tbl,
1056       px_asset_tbl    IN OUT nocopy csi_datastructures_pub.instance_asset_header_tbl,
1060       px_iir_tbl      IN OUT nocopy csi_datastructures_pub.ii_relationship_tbl)
1057       px_vl_qry_rec   IN OUT nocopy csi_datastructures_pub.version_label_query_rec,
1058       px_vl_tbl       IN OUT nocopy csi_datastructures_pub.version_label_tbl,
1059       px_iir_qry_rec  IN OUT nocopy csi_datastructures_pub.relationship_query_rec,
1061     IS
1062       l_inst_rec      csi_datastructures_pub.instance_header_rec;
1063       l_vl_qry_rec    csi_datastructures_pub.version_label_query_rec;
1064       l_iir_qry_rec   csi_datastructures_pub.relationship_query_rec;
1065     BEGIN
1066       px_inst_rec     := l_inst_rec;
1067       px_vl_qry_rec   := l_vl_qry_rec;
1068       px_iir_qry_rec  := l_iir_qry_rec;
1069       px_pty_tbl.delete;
1070       px_pa_tbl.delete;
1071       px_ou_tbl.delete;
1072       px_prc_tbl.delete;
1073       px_eav_tbl.delete;
1074       px_ea_tbl.delete;
1075       px_asset_tbl.delete;
1076       px_vl_tbl.delete;
1077       px_iir_tbl.delete;
1078     END init_struct;
1079   BEGIN
1080 
1081     l_csi_txn_rec.transaction_type_id     := correction_txn_type_id;
1082     l_csi_txn_rec.transaction_date        := sysdate;
1083     l_csi_txn_rec.source_transaction_date := sysdate;
1084     l_csi_txn_rec.source_header_ref       := 'Forward Synch';
1085 
1086     SELECT csi_ii_forward_sync_temp_s.nextval
1087     INTO   l_csi_txn_rec.source_line_ref_id
1088     FROM   sys.dual;
1089 
1090     FOR fs_rec IN fs_cur
1091     LOOP
1092 
1093       iir_ind := 0;
1094 
1095       -- check for pending errors
1096       FOR all_txn in all_txn_cur(fs_rec.serial_number,fs_rec.inventory_item_id)
1097       LOOP
1098 
1099         IF all_txn.mtl_creation_date < fs_rec.mtl_txn_creation_date THEN
1100           BEGIN
1101             SELECT 'Y'
1102             INTO   l_error_exists
1103             FROM   csi_txn_errors
1104             WHERE  processed_flag in ('E','R')
1105             AND    inv_material_transaction_id = all_txn.mtl_txn_id
1106             AND    rownum < 2;
1107             EXIT;
1108           EXCEPTION
1109             WHEN no_data_found then
1110               l_error_exists := 'N';
1111           END;
1112         END IF;
1113       END LOOP;
1114 
1115       IF l_error_exists = 'N' THEN
1116 
1117         init_struct(
1118           px_inst_rec     => g_inst_rec,
1119           px_pty_tbl      => g_pty_tbl,
1120           px_pa_tbl       => g_pa_tbl,
1121           px_ou_tbl       => g_ou_tbl,
1122           px_prc_tbl      => g_prc_tbl,
1123           px_eav_tbl      => g_eav_tbl,
1124           px_ea_tbl       => g_ea_tbl,
1125           px_asset_tbl    => g_asset_tbl,
1126           px_vl_qry_rec   => g_vl_qry_rec,
1127           px_vl_tbl       => g_vl_tbl,
1128           px_iir_qry_rec  => g_iir_qry_rec,
1129           px_iir_tbl      => g_iir_tbl);
1130 
1131         BEGIN
1132 
1133           savepoint forward_sync;
1134 
1135           g_inst_rec.instance_id := fs_rec.instance_id;
1136 
1137           log('time stamp for old fetch : '||to_char(fs_rec.date_time_stamp, 'dd-mon-yyyy hh24:mi:ss'));
1138 
1139           csi_item_instance_pub.get_item_instance_details (
1140             p_api_version           => 1.0,
1141             p_commit                => fnd_api.g_false,
1142             p_init_msg_list         => fnd_api.g_true,
1143             p_validation_level      => fnd_api.g_valid_level_full,
1144             p_instance_rec          => g_inst_rec,
1145             p_get_parties           => fnd_api.g_true,
1146             p_party_header_tbl      => g_pty_tbl,
1147             p_get_accounts          => fnd_api.g_true,
1148             p_account_header_tbl    => g_pa_tbl,
1149             p_get_org_assignments   => fnd_api.g_true,
1150             p_org_header_tbl        => g_ou_tbl,
1151             p_get_pricing_attribs   => fnd_api.g_true,
1152             p_pricing_attrib_tbl    => g_prc_tbl,
1153             p_get_ext_attribs       => fnd_api.g_true,
1154             p_ext_attrib_tbl        => g_eav_tbl,
1155             p_ext_attrib_def_tbl    => g_ea_tbl,
1156             p_get_asset_assignments => fnd_api.g_true,
1157             p_asset_header_tbl      => g_asset_tbl,
1158             p_resolve_id_columns    => fnd_api.g_false,
1159             p_time_stamp            => fs_rec.date_time_stamp,
1160             x_return_status         => l_return_status,
1161             x_msg_count             => l_msg_count,
1162             x_msg_data              => l_msg_data);
1163 
1164           IF l_return_status <> fnd_api.g_ret_sts_success THEN
1165             RAISE fnd_api.g_exc_error;
1166           END IF;
1167 
1168           -- some missed out or wrong data columns - re-query and populate
1169           SELECT customer_view_flag,
1170                  merchant_view_flag,
1171                  quantity,
1172                  object_version_number
1173           INTO   g_inst_rec.customer_view_flag,
1174                  g_inst_rec.merchant_view_flag,
1175                  g_inst_rec.quantity,
1176                  g_inst_rec.object_version_number
1177           FROM   csi_item_instances
1178           WHERE  instance_id = g_inst_rec.instance_id;
1179 
1180           g_vl_qry_rec.instance_id := g_inst_rec.instance_id;
1181 
1182           -- get the version label on that day
1183           csi_item_instance_pub.get_version_labels(
1184             p_api_version             => 1.0,
1188             p_version_label_query_rec => g_vl_qry_rec,
1185             p_commit                  => fnd_api.g_false,
1186             p_init_msg_list           => fnd_api.g_true,
1187             p_validation_level        => fnd_api.g_valid_level_full,
1189             p_time_stamp              => fs_rec.date_time_stamp,
1190             x_version_label_tbl       => g_vl_tbl,
1191             x_return_status           => l_return_status,
1192             x_msg_count               => l_msg_count,
1193             x_msg_data                => l_msg_data);
1194 
1195           IF l_return_status <> fnd_api.g_ret_sts_success THEN
1196             RAISE fnd_api.g_exc_error;
1197           END IF;
1198 
1199           make_non_header(
1200             p_inst_h_rec            => g_inst_rec,
1201             p_pty_h_tbl             => g_pty_tbl,
1202             p_pa_h_tbl              => g_pa_tbl,
1203             p_ou_h_tbl              => g_ou_tbl,
1204             p_asset_h_tbl           => g_asset_tbl,
1205             x_inst_rec              => l_inst_rec,
1206             x_pty_tbl               => l_pty_tbl,
1207             x_pa_tbl                => l_pa_tbl,
1208             x_ou_tbl                => l_ou_tbl,
1209             x_asset_tbl             => l_asset_tbl,
1210             x_return_status         => l_return_status);
1211 
1212           l_csi_txn_rec.inv_material_transaction_id := fs_rec.mtl_txn_id;
1213 
1214           csi_item_instance_pub.update_item_instance(
1215             p_api_version           => 1.0,
1216             p_commit                => fnd_api.g_false,
1217             p_init_msg_list         => fnd_api.g_true,
1218             p_validation_level      => fnd_api.g_valid_level_full,
1219             p_instance_rec          => l_inst_rec,
1220             p_party_tbl             => l_pty_tbl,
1221             p_account_tbl           => l_pa_tbl,
1222             p_org_assignments_tbl   => l_ou_tbl,
1223             p_ext_attrib_values_tbl => l_eav_tbl,
1224             p_pricing_attrib_tbl    => l_prc_tbl,
1225             p_asset_assignment_tbl  => l_asset_tbl,
1226             p_txn_rec               => l_csi_txn_rec,
1227             x_instance_id_lst       => l_inst_ids_tbl,
1228             x_return_status         => l_return_status,
1229             x_msg_count             => l_msg_count,
1230             x_msg_data              => l_msg_data);
1231 
1232           IF l_return_status not in (fnd_api.g_ret_sts_success, 'W') THEN
1233             RAISE fnd_api.g_exc_error;
1234           END IF;
1235 
1236           l_vl_tbl := g_vl_tbl;
1237 
1238           IF l_vl_tbl.count > 0 THEN
1239 
1240             FOR l_ind IN l_vl_tbl.FIRST .. l_vl_tbl.LAST
1241             LOOP
1242               SELECT object_version_number
1243               INTO   l_vl_tbl(l_ind).object_version_number
1244               FROM   csi_i_version_labels
1245               WHERE  version_label_id = l_vl_tbl(l_ind).version_label_id;
1246             END LOOP;
1247 
1248             csi_item_instance_pub.update_version_label(
1249               p_api_version         => 1.0,
1250               p_commit              => fnd_api.g_false,
1251               p_init_msg_list       => fnd_api.g_true,
1252               p_validation_level    => fnd_api.g_valid_level_full,
1253               p_version_label_tbl   => l_vl_tbl,
1254               p_txn_rec             => l_csi_txn_rec,
1255               x_return_status       => l_return_status,
1256               x_msg_count           => l_msg_count,
1257               x_msg_data            => l_msg_data);
1258 
1259             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1260               RAISE fnd_api.g_exc_error;
1261             END IF;
1262 
1263           END IF;
1264 
1265           g_iir_qry_rec.object_id              := g_inst_rec.instance_id;
1266           g_iir_qry_rec.relationship_type_code := 'COMPONENT-OF';
1267 
1268           csi_ii_relationships_pub.get_relationships(
1269             p_api_version                => 1.0,
1270             p_commit                     => fnd_api.g_false,
1271             p_init_msg_list              => fnd_api.g_true,
1272             p_validation_level           => fnd_api.g_valid_level_full,
1273             p_relationship_query_rec     => g_iir_qry_rec,
1274             p_depth                      => null,
1275             p_time_stamp                 => fs_rec.date_time_stamp,
1276             p_active_relationship_only   => fnd_api.g_false,
1277             x_relationship_tbl           => g_iir_tbl,
1278             x_return_status              => l_return_status,
1279             x_msg_count                  => l_msg_count,
1280             x_msg_data                   => l_msg_data);
1281 
1282           IF l_return_status <> fnd_api.g_ret_sts_success THEN
1283             RAISE fnd_api.g_exc_error;
1284           END IF;
1285 
1286           IF g_iir_tbl.count > 0 THEN
1287             FOR l_ind IN g_iir_tbl.FIRST .. g_iir_tbl.LAST
1288             LOOP
1289               iir_ind := iir_ind + 1;
1290               l_iir_tbl(iir_ind) := g_iir_tbl(l_ind);
1291 
1292               SELECT object_version_number
1293               INTO   l_iir_tbl(iir_ind).object_version_number
1294               FROM   csi_ii_relationships
1295               WHERE  relationship_id = l_iir_tbl(iir_ind).relationship_id;
1296             END LOOP;
1297           END IF;
1298 
1299           g_iir_qry_rec                        := l_iir_qry_rec;
1300           g_iir_tbl.delete;
1304 
1301 
1302           g_iir_qry_rec.subject_id             := g_inst_rec.instance_id;
1303           g_iir_qry_rec.relationship_type_code := 'COMPONENT-OF';
1305           csi_ii_relationships_pub.get_relationships(
1306             p_api_version                => 1.0,
1307             p_commit                     => fnd_api.g_false,
1308             p_init_msg_list              => fnd_api.g_true,
1309             p_validation_level           => fnd_api.g_valid_level_full,
1310             p_relationship_query_rec     => g_iir_qry_rec,
1311             p_depth                      => NULL,
1312             p_time_stamp                 => fs_rec.date_time_stamp,
1313             p_active_relationship_only   => fnd_api.g_false,
1314             x_relationship_tbl           => g_iir_tbl,
1315             x_return_status              => l_return_status,
1316             x_msg_count                  => l_msg_count,
1317             x_msg_data                   => l_msg_data);
1318 
1319           IF l_return_status <> fnd_api.g_ret_sts_success THEN
1320             RAISE fnd_api.g_exc_error;
1321           END IF;
1322 
1323           IF g_iir_tbl.count > 0 THEN
1324             FOR l_ind IN g_iir_tbl.FIRST .. g_iir_tbl.LAST
1325             LOOP
1326               iir_ind := iir_ind + 1;
1327               l_iir_tbl(iir_ind) := g_iir_tbl(l_ind);
1328               SELECT object_version_number
1329               INTO   l_iir_tbl(iir_ind).object_version_number
1330               FROM   csi_ii_relationships
1331               WHERE  relationship_id = l_iir_tbl(iir_ind).relationship_id;
1332 
1333             END LOOP;
1334           END IF;
1335 
1336           IF l_iir_tbl.COUNT > 0 THEN
1337             csi_ii_relationships_pub.update_relationship (
1338               p_api_version             => 1.0,
1339               p_commit                  => fnd_api.g_false,
1340               p_init_msg_list           => fnd_api.g_true,
1341               p_validation_level        => fnd_api.g_valid_level_full,
1342               p_relationship_tbl        => l_iir_tbl,
1343               p_txn_rec                 => l_csi_txn_rec,
1344               x_return_status           => l_return_status,
1345               x_msg_count               => l_msg_count,
1346               x_msg_data                => l_msg_data);
1347 
1348             IF l_return_status not in (fnd_api.g_ret_sts_success, 'W') THEN
1349               RAISE fnd_api.g_exc_error;
1350             END IF;
1351           END IF;
1352 
1353           UPDATE csi_ii_forward_sync_temp
1354           SET    process_flag = 'P'
1355           WHERE  instance_id = fs_rec.instance_id;
1356 
1357         EXCEPTION
1358           WHEN fnd_api.g_exc_error THEN
1359             rollback to forward_sync;
1360             l_msg_data := csi_t_gen_utility_pvt.dump_error_stack;
1361             log('Error in forward_sync : '||fs_rec.instance_id||' : '||l_msg_data);
1362         END;
1363       END IF;
1364 
1365     END LOOP;
1366 
1367   EXCEPTION
1368     when others then
1369       log('OTHERS exception from forward sync : '||sqlerrm);
1370   END forward_sync;
1371   --
1372   PROCEDURE insert_full_dump(p_instance_id    IN NUMBER) IS
1373     p_instance_rec       CSI_DATASTRUCTURES_PUB.INSTANCE_HEADER_REC;
1374     p_temp_instance_rec  CSI_DATASTRUCTURES_PUB.INSTANCE_HEADER_REC;
1375     p_party_header_tbl   CSI_DATASTRUCTURES_PUB.PARTY_HEADER_TBL;
1376     p_account_header_tbl CSI_DATASTRUCTURES_PUB.PARTY_ACCOUNT_HEADER_TBL;
1377     p_org_header_tbl     CSI_DATASTRUCTURES_PUB.ORG_UNITS_HEADER_TBL;
1378     p_pricing_attrib_tbl CSI_DATASTRUCTURES_PUB.PRICING_ATTRIBS_TBL;
1379     p_ext_attrib_tbl     CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_VALUES_TBL;
1380     p_ext_attrib_def_tbl CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_TBL;
1381     p_asset_header_tbl   CSI_DATASTRUCTURES_PUB.INSTANCE_ASSET_HEADER_TBL;
1382     p_ver_label_query_rec CSI_DATASTRUCTURES_PUB.VERSION_LABEL_QUERY_REC;
1383     p_rel_query_rec      CSI_DATASTRUCTURES_PUB.RELATIONSHIP_QUERY_REC;
1384     p_temp_rel_query_rec CSI_DATASTRUCTURES_PUB.RELATIONSHIP_QUERY_REC;
1385     x_version_label_tbl  csi_datastructures_pub.version_label_tbl;
1386     x_relationship_tbl   csi_datastructures_pub.ii_relationship_tbl;
1387     l_init_msg_list      VARCHAR2(2000);
1388     x_return_status      VARCHAR2(2000);
1389     x_msg_count          NUMBER;
1390     x_msg_data           VARCHAR2(2000);
1391     l_msg_index          NUMBER;
1392     l_msg_count          NUMBER;
1393      --
1394     l_instance_tbl          csi_datastructures_pub.instance_tbl;
1395     l_party_tbl             csi_datastructures_pub.party_tbl;
1396     l_party_account_tbl     csi_datastructures_pub.party_account_tbl;
1397     l_org_units_tbl         csi_datastructures_pub.organization_units_tbl;
1398     l_pricing_attribs_tbl   csi_datastructures_pub.pricing_attribs_tbl;
1399     l_ext_attrib_values_tbl csi_datastructures_pub.extend_attrib_values_tbl;
1400     l_instance_asset_tbl    csi_datastructures_pub.instance_asset_tbl;
1401     l_version_label_tbl     csi_datastructures_pub.version_label_tbl;
1402     l_ii_relationship_tbl   csi_datastructures_pub.ii_relationship_tbl;
1403     --
1404     l_inst_rec_tab                csi_diagnostics_pkg.instance_rec_tab;
1405     l_version_label_rec_tab       csi_diagnostics_pkg.version_label_rec_tab;
1406     l_party_rec_tab               csi_diagnostics_pkg.party_rec_tab;
1407     l_account_rec_tab             csi_diagnostics_pkg.account_rec_tab;
1411     l_pricing_rec_tab             csi_diagnostics_pkg.pricing_attribs_rec_tab;
1408     l_ext_attr_rec_tab            csi_diagnostics_pkg.extend_attrib_values_rec_tab;
1409     l_asset_rec_tab               csi_diagnostics_pkg.instance_asset_rec_tab;
1410     l_org_units_rec_tab           csi_diagnostics_pkg.org_units_rec_tab;
1412     l_ii_relationship_rec_tab     csi_diagnostics_pkg.ii_relationship_rec_tab;
1413     --
1414     l_inst_hist_tbl               csi_diagnostics_pkg.T_NUM;
1415     l_party_hist_tbl              csi_diagnostics_pkg.T_NUM;
1416     l_account_hist_tbl            csi_diagnostics_pkg.T_NUM;
1417     l_org_hist_tbl                csi_diagnostics_pkg.T_NUM;
1418     l_ext_hist_tbl                csi_diagnostics_pkg.T_NUM;
1419     l_asset_hist_tbl              csi_diagnostics_pkg.T_NUM;
1420     l_pricing_hist_tbl            csi_diagnostics_pkg.T_NUM;
1421     l_rel_hist_tbl                csi_diagnostics_pkg.T_NUM;
1422     l_ver_label_hist_tbl          csi_diagnostics_pkg.T_NUM;
1423     --
1424     l_owner_src_table             VARCHAR2(30);
1425     l_owner_party                 NUMBER;
1426     l_owner_account               NUMBER;
1427     l_user_id                     NUMBER := fnd_global.user_id;
1428     l_txn_id                      NUMBER;
1429     v_txn_type_id                 NUMBER;
1430     l_char_ins_id                 VARCHAR2(50);
1431     --
1432     l_ctr                 NUMBER;
1433     l_exists              VARCHAR2(1);
1434     --
1435     Process_next          EXCEPTION;
1436     Comp_error            EXCEPTION;
1437     --
1438   BEGIN
1439     savepoint Insert_Full_Dump;
1440     IF p_instance_id IS NULL OR p_instance_id = FND_API.G_MISS_NUM THEN
1441       Raise comp_error;
1442     END IF;
1443     -- Get the Transaction Type ID for Txn Type MIGRATED
1444     v_txn_type_id := correction_txn_type_id;
1445 
1446     SELECT csi_transactions_s.nextval
1447     INTO   l_txn_id
1448     FROM   sys.dual;
1449 
1450     --
1451     BEGIN
1452       p_instance_rec := p_temp_instance_rec;
1453       p_party_header_tbl.DELETE;
1454       p_account_header_tbl.DELETE;
1455       p_org_header_tbl.DELETE;
1456       p_pricing_attrib_tbl.DELETE;
1457       p_ext_attrib_tbl.DELETE;
1458       p_ext_attrib_def_tbl.DELETE;
1459       p_asset_header_tbl.DELETE;
1460       x_version_label_tbl.DELETE;
1461       x_relationship_tbl.DELETE;
1462       --
1463       l_exists := 'N';
1464       p_instance_rec.instance_id := p_instance_id;
1465       l_char_ins_id := to_char(p_instance_id);
1466 
1467       -- Call Get API with the time stamp
1468       csi_item_instance_pub.get_item_instance_details (
1469         p_api_version           => 1.0,
1470         p_commit                => fnd_api.g_false,
1471         p_init_msg_list         => fnd_api.g_true,
1472         p_validation_level      => fnd_api.g_valid_level_full,
1473         p_instance_rec          => p_instance_rec,
1474         p_get_parties           => fnd_api.g_true,
1475         p_party_header_tbl      => p_party_header_tbl,
1476         p_get_accounts          => fnd_api.g_true,
1477         p_account_header_tbl    => p_account_header_tbl,
1478         p_get_org_assignments   => fnd_api.g_true,
1479         p_org_header_tbl        => p_org_header_tbl,
1480         p_get_pricing_attribs   => fnd_api.g_true,
1481         p_pricing_attrib_tbl    => p_pricing_attrib_tbl,
1482         p_get_ext_attribs       => fnd_api.g_true,
1483         p_ext_attrib_tbl        => p_ext_attrib_tbl,
1484         p_ext_attrib_def_tbl    => p_ext_attrib_def_tbl,
1485         p_get_asset_assignments => fnd_api.g_true,
1486         p_asset_header_tbl      => p_asset_header_tbl,
1487         p_resolve_id_columns    => fnd_api.g_false,
1488         p_time_stamp            => sysdate,
1489         x_return_status         => x_return_status,
1490         x_msg_count             => x_msg_count,
1491         x_msg_data              => x_msg_data);
1492       --
1493       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1494         l_msg_index := 1;
1495         l_msg_count := x_msg_count;
1496         WHILE l_msg_count > 0 LOOP
1497           x_msg_data := FND_MSG_PUB.GET (  l_msg_index, FND_API.G_FALSE );
1498           l_msg_index := l_msg_index + 1;
1499           l_msg_count := l_msg_count - 1;
1500         END LOOP;
1501         log('Error in Get_Item_Instance Details for Instance : '||l_char_ins_id||'  '||x_msg_data);
1502         Raise Process_next;
1503       END IF;
1504       -- Build the Regular tables using the respective header tables
1505       -- Get the Customer and Merchant view flags
1506 
1507       SELECT customer_view_flag,
1508              merchant_view_flag,
1509              quantity
1510       INTO   p_instance_rec.customer_view_flag,
1511              p_instance_rec.merchant_view_flag,
1512              p_instance_rec.quantity
1513       FROM   csi_item_instances
1514       WHERE  instance_id = p_instance_rec.instance_id;
1515       --
1516       l_ctr := l_instance_tbl.count;
1517       l_ctr := l_ctr + 1;
1518       --
1519       l_instance_tbl(l_ctr).INSTANCE_ID  := p_instance_rec.INSTANCE_ID;
1520       l_instance_tbl(l_ctr).INSTANCE_NUMBER  := p_instance_rec.INSTANCE_NUMBER;
1521       l_instance_tbl(l_ctr).EXTERNAL_REFERENCE  := p_instance_rec.EXTERNAL_REFERENCE;
1522       l_instance_tbl(l_ctr).INVENTORY_ITEM_ID  := p_instance_rec.INVENTORY_ITEM_ID;
1523       l_instance_tbl(l_ctr).VLD_ORGANIZATION_ID  := p_instance_rec.VLD_ORGANIZATION_ID;
1527       l_instance_tbl(l_ctr).MFG_SERIAL_NUMBER_FLAG  := p_instance_rec.MFG_SERIAL_NUMBER_FLAG;
1524       l_instance_tbl(l_ctr).INVENTORY_REVISION  := p_instance_rec.INVENTORY_REVISION;
1525       l_instance_tbl(l_ctr).INV_MASTER_ORGANIZATION_ID  := p_instance_rec.INV_MASTER_ORGANIZATION_ID;
1526       l_instance_tbl(l_ctr).SERIAL_NUMBER  := p_instance_rec.SERIAL_NUMBER;
1528       l_instance_tbl(l_ctr).LOT_NUMBER  := p_instance_rec.LOT_NUMBER;
1529       l_instance_tbl(l_ctr).QUANTITY  := p_instance_rec.QUANTITY;
1530       l_instance_tbl(l_ctr).UNIT_OF_MEASURE  := p_instance_rec.UNIT_OF_MEASURE;
1531       l_instance_tbl(l_ctr).ACCOUNTING_CLASS_CODE  := p_instance_rec.ACCOUNTING_CLASS_CODE;
1532       l_instance_tbl(l_ctr).INSTANCE_CONDITION_ID  := p_instance_rec.INSTANCE_CONDITION_ID;
1533       l_instance_tbl(l_ctr).INSTANCE_STATUS_ID  := p_instance_rec.INSTANCE_STATUS_ID;
1534       l_instance_tbl(l_ctr).CUSTOMER_VIEW_FLAG  := p_instance_rec.CUSTOMER_VIEW_FLAG;
1535       l_instance_tbl(l_ctr).MERCHANT_VIEW_FLAG  := p_instance_rec.MERCHANT_VIEW_FLAG;
1536       l_instance_tbl(l_ctr).SELLABLE_FLAG  := p_instance_rec.SELLABLE_FLAG;
1537       l_instance_tbl(l_ctr).SYSTEM_ID  := p_instance_rec.SYSTEM_ID;
1538       l_instance_tbl(l_ctr).INSTANCE_TYPE_CODE  := p_instance_rec.INSTANCE_TYPE_CODE;
1539       l_instance_tbl(l_ctr).ACTIVE_START_DATE  := p_instance_rec.ACTIVE_START_DATE;
1540       l_instance_tbl(l_ctr).ACTIVE_END_DATE  := p_instance_rec.ACTIVE_END_DATE;
1541       l_instance_tbl(l_ctr).LOCATION_TYPE_CODE  := p_instance_rec.LOCATION_TYPE_CODE;
1542       l_instance_tbl(l_ctr).LOCATION_ID  := p_instance_rec.LOCATION_ID;
1543       l_instance_tbl(l_ctr).INV_ORGANIZATION_ID  := p_instance_rec.INV_ORGANIZATION_ID;
1544       l_instance_tbl(l_ctr).INV_SUBINVENTORY_NAME  := p_instance_rec.INV_SUBINVENTORY_NAME;
1545       l_instance_tbl(l_ctr).INV_LOCATOR_ID  := p_instance_rec.INV_LOCATOR_ID;
1546       l_instance_tbl(l_ctr).PA_PROJECT_ID  := p_instance_rec.PA_PROJECT_ID;
1547       l_instance_tbl(l_ctr).PA_PROJECT_TASK_ID  := p_instance_rec.PA_PROJECT_TASK_ID;
1548       l_instance_tbl(l_ctr).IN_TRANSIT_ORDER_LINE_ID  := p_instance_rec.IN_TRANSIT_ORDER_LINE_ID;
1549       l_instance_tbl(l_ctr).WIP_JOB_ID  := p_instance_rec.WIP_JOB_ID;
1550       l_instance_tbl(l_ctr).PO_ORDER_LINE_ID  := p_instance_rec.PO_ORDER_LINE_ID;
1551       l_instance_tbl(l_ctr).LAST_OE_ORDER_LINE_ID  := p_instance_rec.LAST_OE_ORDER_LINE_ID;
1552       l_instance_tbl(l_ctr).LAST_OE_RMA_LINE_ID  := p_instance_rec.LAST_OE_RMA_LINE_ID;
1553       l_instance_tbl(l_ctr).LAST_PO_PO_LINE_ID  := p_instance_rec.LAST_PO_PO_LINE_ID;
1554       l_instance_tbl(l_ctr).LAST_OE_PO_NUMBER  := p_instance_rec.LAST_OE_PO_NUMBER;
1555       l_instance_tbl(l_ctr).LAST_WIP_JOB_ID  := p_instance_rec.LAST_WIP_JOB_ID;
1556       l_instance_tbl(l_ctr).LAST_PA_PROJECT_ID  := p_instance_rec.LAST_PA_PROJECT_ID;
1557       l_instance_tbl(l_ctr).LAST_PA_TASK_ID  := p_instance_rec.LAST_PA_TASK_ID;
1558       l_instance_tbl(l_ctr).LAST_OE_AGREEMENT_ID  := p_instance_rec.LAST_OE_AGREEMENT_ID;
1559       l_instance_tbl(l_ctr).INSTALL_DATE  := p_instance_rec.INSTALL_DATE;
1560       l_instance_tbl(l_ctr).MANUALLY_CREATED_FLAG  := p_instance_rec.MANUALLY_CREATED_FLAG;
1561       l_instance_tbl(l_ctr).RETURN_BY_DATE  := p_instance_rec.RETURN_BY_DATE;
1562       l_instance_tbl(l_ctr).ACTUAL_RETURN_DATE  := p_instance_rec.ACTUAL_RETURN_DATE;
1563       l_instance_tbl(l_ctr).CREATION_COMPLETE_FLAG  := p_instance_rec.CREATION_COMPLETE_FLAG;
1564       l_instance_tbl(l_ctr).COMPLETENESS_FLAG  := p_instance_rec.COMPLETENESS_FLAG;
1565       l_instance_tbl(l_ctr).CONTEXT  := p_instance_rec.CONTEXT;
1566       l_instance_tbl(l_ctr).ATTRIBUTE1  := p_instance_rec.ATTRIBUTE1;
1567       l_instance_tbl(l_ctr).ATTRIBUTE2  := p_instance_rec.ATTRIBUTE2;
1568       l_instance_tbl(l_ctr).ATTRIBUTE3  := p_instance_rec.ATTRIBUTE3;
1569       l_instance_tbl(l_ctr).ATTRIBUTE4  := p_instance_rec.ATTRIBUTE4;
1570       l_instance_tbl(l_ctr).ATTRIBUTE5  := p_instance_rec.ATTRIBUTE5;
1571       l_instance_tbl(l_ctr).ATTRIBUTE6  := p_instance_rec.ATTRIBUTE6;
1572       l_instance_tbl(l_ctr).ATTRIBUTE7  := p_instance_rec.ATTRIBUTE7;
1573       l_instance_tbl(l_ctr).ATTRIBUTE8  := p_instance_rec.ATTRIBUTE8;
1574       l_instance_tbl(l_ctr).ATTRIBUTE9  := p_instance_rec.ATTRIBUTE9;
1575       l_instance_tbl(l_ctr).ATTRIBUTE10  := p_instance_rec.ATTRIBUTE10;
1576       l_instance_tbl(l_ctr).ATTRIBUTE11  := p_instance_rec.ATTRIBUTE11;
1577       l_instance_tbl(l_ctr).ATTRIBUTE12  := p_instance_rec.ATTRIBUTE12;
1578       l_instance_tbl(l_ctr).ATTRIBUTE13  := p_instance_rec.ATTRIBUTE13;
1579       l_instance_tbl(l_ctr).ATTRIBUTE14  := p_instance_rec.ATTRIBUTE14;
1580       l_instance_tbl(l_ctr).ATTRIBUTE15  := p_instance_rec.ATTRIBUTE15;
1581       l_instance_tbl(l_ctr).OBJECT_VERSION_NUMBER  := p_instance_rec.OBJECT_VERSION_NUMBER;
1582       l_instance_tbl(l_ctr).LAST_TXN_LINE_DETAIL_ID  := p_instance_rec.LAST_TXN_LINE_DETAIL_ID;
1583       l_instance_tbl(l_ctr).INSTALL_LOCATION_TYPE_CODE  := p_instance_rec.INSTALL_LOCATION_TYPE_CODE;
1584       l_instance_tbl(l_ctr).INSTALL_LOCATION_ID  := p_instance_rec.INSTALL_LOCATION_ID;
1585       l_instance_tbl(l_ctr).INSTANCE_USAGE_CODE  := p_instance_rec.INSTANCE_USAGE_CODE;
1586       l_instance_tbl(l_ctr).CONFIG_INST_HDR_ID  := p_instance_rec.CONFIG_INST_HDR_ID;
1587       l_instance_tbl(l_ctr).CONFIG_INST_REV_NUM  := p_instance_rec.CONFIG_INST_REV_NUM;
1588       l_instance_tbl(l_ctr).CONFIG_INST_ITEM_ID  := p_instance_rec.CONFIG_INST_ITEM_ID;
1589       l_instance_tbl(l_ctr).CONFIG_VALID_STATUS  := p_instance_rec.CONFIG_VALID_STATUS;
1590       l_instance_tbl(l_ctr).INSTANCE_DESCRIPTION  := p_instance_rec.INSTANCE_DESCRIPTION;
1591       -- Build Party Table
1592       IF p_party_header_tbl.count > 0 THEN
1593         l_ctr := l_party_tbl.count;
1594         FOR i in p_party_header_tbl.FIRST .. p_party_header_tbl.LAST LOOP
1598           l_party_tbl(l_ctr).instance_id   := p_party_header_tbl(i).instance_id;
1595           l_ctr := l_ctr + 1;
1596           --
1597           l_party_tbl(l_ctr).instance_party_id   := p_party_header_tbl(i).instance_party_id;
1599           l_party_tbl(l_ctr).party_source_table   := p_party_header_tbl(i).party_source_table;
1600           l_party_tbl(l_ctr).party_id   := p_party_header_tbl(i).party_id;
1601           l_party_tbl(l_ctr).relationship_type_code   := p_party_header_tbl(i).relationship_type_code;
1602           l_party_tbl(l_ctr).contact_flag   := p_party_header_tbl(i).contact_flag;
1603           l_party_tbl(l_ctr).contact_ip_id   := p_party_header_tbl(i).contact_ip_id;
1604           l_party_tbl(l_ctr).active_start_date   := p_party_header_tbl(i).active_start_date;
1605           l_party_tbl(l_ctr).active_end_date   := p_party_header_tbl(i).active_end_date;
1606           l_party_tbl(l_ctr).context   := p_party_header_tbl(i).context;
1607           l_party_tbl(l_ctr).attribute1   := p_party_header_tbl(i).attribute1;
1608           l_party_tbl(l_ctr).attribute2   := p_party_header_tbl(i).attribute2;
1609           l_party_tbl(l_ctr).attribute3   := p_party_header_tbl(i).attribute3;
1610           l_party_tbl(l_ctr).attribute4   := p_party_header_tbl(i).attribute4;
1611           l_party_tbl(l_ctr).attribute5   := p_party_header_tbl(i).attribute5;
1612           l_party_tbl(l_ctr).attribute6   := p_party_header_tbl(i).attribute6;
1613           l_party_tbl(l_ctr).attribute7   := p_party_header_tbl(i).attribute7;
1614           l_party_tbl(l_ctr).attribute8   := p_party_header_tbl(i).attribute8;
1615           l_party_tbl(l_ctr).attribute9   := p_party_header_tbl(i).attribute9;
1616           l_party_tbl(l_ctr).attribute10   := p_party_header_tbl(i).attribute10;
1617           l_party_tbl(l_ctr).attribute11   := p_party_header_tbl(i).attribute11;
1618           l_party_tbl(l_ctr).attribute12   := p_party_header_tbl(i).attribute12;
1619           l_party_tbl(l_ctr).attribute13   := p_party_header_tbl(i).attribute13;
1620           l_party_tbl(l_ctr).attribute14   := p_party_header_tbl(i).attribute14;
1621           l_party_tbl(l_ctr).attribute15   := p_party_header_tbl(i).attribute15;
1622           l_party_tbl(l_ctr).object_version_number   := p_party_header_tbl(i).object_version_number;
1623           l_party_tbl(l_ctr).primary_flag   := p_party_header_tbl(i).primary_flag;
1624           l_party_tbl(l_ctr).preferred_flag   := p_party_header_tbl(i).preferred_flag;
1625         END LOOP;
1626       END IF;
1627       --
1628       -- Build Account Table from Account Header Table
1629       IF p_account_header_tbl.count > 0 THEN
1630         l_ctr := l_party_account_tbl.count;
1631         FOR i in p_account_header_tbl.FIRST .. p_account_header_tbl.LAST LOOP
1632           l_ctr := l_ctr + 1;
1633           --
1634           l_party_account_tbl(l_ctr).ip_account_id := p_account_header_tbl(i).ip_account_id;
1635           l_party_account_tbl(l_ctr).instance_party_id := p_account_header_tbl(i).instance_party_id;
1636           l_party_account_tbl(l_ctr).party_account_id := p_account_header_tbl(i).party_account_id;
1637           l_party_account_tbl(l_ctr).relationship_type_code := p_account_header_tbl(i).relationship_type_code;
1638           l_party_account_tbl(l_ctr).bill_to_address := p_account_header_tbl(i).bill_to_address;
1639           l_party_account_tbl(l_ctr).ship_to_address := p_account_header_tbl(i).ship_to_address;
1640           l_party_account_tbl(l_ctr).active_start_date := p_account_header_tbl(i).active_start_date;
1641           l_party_account_tbl(l_ctr).active_end_date := p_account_header_tbl(i).active_end_date;
1642           l_party_account_tbl(l_ctr).context := p_account_header_tbl(i).context;
1643           l_party_account_tbl(l_ctr).attribute1 := p_account_header_tbl(i).attribute1;
1644           l_party_account_tbl(l_ctr).attribute2 := p_account_header_tbl(i).attribute2;
1645           l_party_account_tbl(l_ctr).attribute3 := p_account_header_tbl(i).attribute3;
1646           l_party_account_tbl(l_ctr).attribute4 := p_account_header_tbl(i).attribute4;
1647           l_party_account_tbl(l_ctr).attribute5 := p_account_header_tbl(i).attribute5;
1648           l_party_account_tbl(l_ctr).attribute6 := p_account_header_tbl(i).attribute6;
1649           l_party_account_tbl(l_ctr).attribute7 := p_account_header_tbl(i).attribute7;
1650           l_party_account_tbl(l_ctr).attribute8 := p_account_header_tbl(i).attribute8;
1651           l_party_account_tbl(l_ctr).attribute9 := p_account_header_tbl(i).attribute9;
1652           l_party_account_tbl(l_ctr).attribute10 := p_account_header_tbl(i).attribute10;
1653           l_party_account_tbl(l_ctr).attribute11 := p_account_header_tbl(i).attribute11;
1654           l_party_account_tbl(l_ctr).attribute12 := p_account_header_tbl(i).attribute12;
1655           l_party_account_tbl(l_ctr).attribute13 := p_account_header_tbl(i).attribute13;
1656           l_party_account_tbl(l_ctr).attribute14 := p_account_header_tbl(i).attribute14;
1657           l_party_account_tbl(l_ctr).attribute15 := p_account_header_tbl(i).attribute15;
1658           l_party_account_tbl(l_ctr).object_version_number := p_account_header_tbl(i).object_version_number;
1659         END LOOP;
1660       END IF;
1661       -- Build org Assignments table
1662       IF p_org_header_tbl.count > 0 THEN
1663         l_ctr := l_org_units_tbl.count;
1664         FOR i in p_org_header_tbl.FIRST .. p_org_header_tbl.LAST LOOP
1665           l_ctr := l_ctr + 1;
1666           --
1667           l_org_units_tbl(l_ctr).instance_ou_id := p_org_header_tbl(i).instance_ou_id;
1668           l_org_units_tbl(l_ctr).instance_id := p_org_header_tbl(i).instance_id;
1672           l_org_units_tbl(l_ctr).active_end_date := p_org_header_tbl(i).active_end_date;
1669           l_org_units_tbl(l_ctr).operating_unit_id := p_org_header_tbl(i).operating_unit_id;
1670           l_org_units_tbl(l_ctr).relationship_type_code := p_org_header_tbl(i).relationship_type_code;
1671           l_org_units_tbl(l_ctr).active_start_date := p_org_header_tbl(i).active_start_date;
1673           l_org_units_tbl(l_ctr).context := p_org_header_tbl(i).context;
1674           l_org_units_tbl(l_ctr).attribute1 := p_org_header_tbl(i).attribute1;
1675           l_org_units_tbl(l_ctr).attribute2 := p_org_header_tbl(i).attribute2;
1676           l_org_units_tbl(l_ctr).attribute3 := p_org_header_tbl(i).attribute3;
1677           l_org_units_tbl(l_ctr).attribute4 := p_org_header_tbl(i).attribute4;
1678           l_org_units_tbl(l_ctr).attribute5 := p_org_header_tbl(i).attribute5;
1679           l_org_units_tbl(l_ctr).attribute6 := p_org_header_tbl(i).attribute6;
1680           l_org_units_tbl(l_ctr).attribute7 := p_org_header_tbl(i).attribute7;
1681           l_org_units_tbl(l_ctr).attribute8 := p_org_header_tbl(i).attribute8;
1682           l_org_units_tbl(l_ctr).attribute9 := p_org_header_tbl(i).attribute9;
1683           l_org_units_tbl(l_ctr).attribute10 := p_org_header_tbl(i).attribute10;
1684           l_org_units_tbl(l_ctr).attribute11 := p_org_header_tbl(i).attribute11;
1685           l_org_units_tbl(l_ctr).attribute12 := p_org_header_tbl(i).attribute12;
1686           l_org_units_tbl(l_ctr).attribute13 := p_org_header_tbl(i).attribute13;
1687           l_org_units_tbl(l_ctr).attribute14 := p_org_header_tbl(i).attribute14;
1688           l_org_units_tbl(l_ctr).attribute15 := p_org_header_tbl(i).attribute15;
1689           l_org_units_tbl(l_ctr).object_version_number := p_org_header_tbl(i).object_version_number;
1690         END LOOP;
1691       END IF;
1692       -- Build Pricing Attrib Table
1693       IF p_pricing_attrib_tbl.count > 0 THEN
1694         l_ctr := l_pricing_attribs_tbl.count;
1695         FOR i in p_pricing_attrib_tbl.FIRST .. p_pricing_attrib_tbl.LAST LOOP
1696           l_ctr := l_ctr + 1;
1697           l_pricing_attribs_tbl(l_ctr) := p_pricing_attrib_tbl(i);
1698         END LOOP;
1699       END IF;
1700 
1701       -- Build Extended Attributes Table
1702       IF p_ext_attrib_tbl.count > 0 THEN
1703         l_ctr := l_ext_attrib_values_tbl.count;
1704         FOR i in p_ext_attrib_tbl.FIRST .. p_ext_attrib_tbl.LAST LOOP
1705           l_ctr := l_ctr + 1;
1706           l_ext_attrib_values_tbl(l_ctr) := p_ext_attrib_tbl(i);
1707         END LOOP;
1708       END IF;
1709 
1710       -- Build Instance Asset Table
1711       IF p_asset_header_tbl.count > 0 THEN
1712         l_ctr := l_instance_asset_tbl.count;
1713         FOR i in p_asset_header_tbl.FIRST .. p_asset_header_tbl.LAST LOOP
1714           l_ctr := l_ctr + 1;
1715           --
1716           l_instance_asset_tbl(l_ctr).instance_asset_id := p_asset_header_tbl(i).instance_asset_id;
1717           l_instance_asset_tbl(l_ctr).instance_id := p_asset_header_tbl(i).instance_id;
1718           l_instance_asset_tbl(l_ctr).fa_asset_id := p_asset_header_tbl(i).fa_asset_id;
1719           l_instance_asset_tbl(l_ctr).fa_book_type_code := p_asset_header_tbl(i).fa_book_type_code;
1720           l_instance_asset_tbl(l_ctr).fa_location_id := p_asset_header_tbl(i).fa_location_id;
1721           l_instance_asset_tbl(l_ctr).asset_quantity := p_asset_header_tbl(i).asset_quantity;
1722           l_instance_asset_tbl(l_ctr).update_status := p_asset_header_tbl(i).update_status;
1723           l_instance_asset_tbl(l_ctr).active_start_date := p_asset_header_tbl(i).active_start_date;
1724           l_instance_asset_tbl(l_ctr).active_end_date := p_asset_header_tbl(i).active_end_date;
1725           l_instance_asset_tbl(l_ctr).object_version_number := p_asset_header_tbl(i).object_version_number;
1726         END LOOP;
1727       END IF;
1728 
1729       --   Add version Label. Use Get_Version_Label API
1730       p_ver_label_query_rec.instance_id := p_instance_id;
1731       csi_item_instance_pub.get_version_labels (
1732         p_api_version             => 1.0,
1733         p_commit                  => fnd_api.g_false,
1734         p_init_msg_list           => l_init_msg_list,
1735         p_validation_level        => fnd_api.g_valid_level_full,
1736         p_version_label_query_rec => p_ver_label_query_rec,
1737         p_time_stamp              => fnd_api.g_miss_date,
1738         x_version_label_tbl       => x_version_label_tbl,
1739         x_return_status           => x_return_status,
1740         x_msg_count               => x_msg_count,
1741         x_msg_data                => x_msg_data);
1742 
1743       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1744         IF x_version_label_tbl.count > 0 THEN
1745           l_ctr := l_version_label_tbl.count;
1746           FOR i in x_version_label_tbl.FIRST .. x_version_label_tbl.LAST LOOP
1747             l_ctr := l_ctr + 1;
1748             l_version_label_tbl(l_ctr) := x_version_label_tbl(i);
1749           END LOOP;
1750         END IF;
1751       END IF;
1752 
1753       --
1754       -- Add Get Relationships API
1755       p_rel_query_rec := p_temp_rel_query_rec;
1756       p_rel_query_rec.object_id := p_instance_id;
1757       p_rel_query_rec.relationship_type_code := 'COMPONENT-OF';
1758       csi_ii_relationships_pub.get_relationships(
1759         p_api_version                => 1.0,
1760         p_commit                     => fnd_api.g_false,
1761         p_init_msg_list              => l_init_msg_list,
1762         p_validation_level           => fnd_api.g_valid_level_full,
1763         p_relationship_query_rec     => p_rel_query_rec,
1767         x_relationship_tbl           => x_relationship_tbl,
1764         p_depth                      => NULL,
1765         p_time_stamp                 => fnd_api.g_miss_date,
1766         p_active_relationship_only   => fnd_api.g_true, -- BUG#5897084
1768         x_return_status              => x_return_status,
1769         x_msg_count                  => x_msg_count,
1770         x_msg_data                   => x_msg_data);
1771       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1772         IF x_relationship_tbl.count > 0 THEN
1773           FOR i in x_relationship_tbl.FIRST .. x_relationship_tbl.LAST LOOP
1774             l_exists := 'N';
1775             IF l_ii_relationship_tbl.count > 0 THEN
1776               FOR k in l_ii_relationship_tbl.FIRST .. l_ii_relationship_tbl.LAST LOOP
1777                 IF l_ii_relationship_tbl(k).relationship_id = x_relationship_tbl(i).relationship_id THEN
1778                   l_exists := 'Y';
1779                   exit;
1780                 END IF;
1781               END LOOP;
1782             END IF;
1783             IF l_exists <> 'Y' THEN
1784               l_ctr := l_ii_relationship_tbl.count;
1785               l_ctr := l_ctr + 1;
1786               l_ii_relationship_tbl(l_ctr) := x_relationship_tbl(i);
1787             END IF;
1788           END LOOP;
1789         END IF;
1790       END IF;
1791       --
1792       p_rel_query_rec := p_temp_rel_query_rec;
1793       p_rel_query_rec.subject_id := p_instance_id;
1794       p_rel_query_rec.relationship_type_code := 'COMPONENT-OF';
1795       csi_ii_relationships_pub.get_relationships(
1796         p_api_version                => 1.0,
1797         p_commit                     => fnd_api.g_false,
1798         p_init_msg_list              => l_init_msg_list,
1799         p_validation_level           => fnd_api.g_valid_level_full,
1800         p_relationship_query_rec     => p_rel_query_rec,
1801         p_depth                      => NULL,
1802         p_time_stamp                 => fnd_api.g_miss_date,
1803         p_active_relationship_only   => fnd_api.g_true,  -- BUG#5897084
1804         x_relationship_tbl           => x_relationship_tbl,
1805         x_return_status              => x_return_status,
1806         x_msg_count                  => x_msg_count,
1807         x_msg_data                   => x_msg_data);
1808       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1809         IF x_relationship_tbl.count > 0 THEN
1810           FOR i in x_relationship_tbl.FIRST .. x_relationship_tbl.LAST LOOP
1811             l_exists := 'N';
1812             IF l_ii_relationship_tbl.count > 0 THEN
1813               FOR k in l_ii_relationship_tbl.FIRST .. l_ii_relationship_tbl.LAST LOOP
1814                 IF l_ii_relationship_tbl(k).relationship_id = x_relationship_tbl(i).relationship_id THEN
1815                   l_exists := 'Y';
1816                   exit;
1817                 END IF;
1818               END LOOP;
1819             END IF;
1820             IF l_exists <> 'Y' THEN
1821               l_ctr := l_ii_relationship_tbl.count;
1822               l_ctr := l_ctr + 1;
1823               l_ii_relationship_tbl(l_ctr) := x_relationship_tbl(i);
1824             END IF;
1825           END LOOP;
1826         END IF;
1827       END IF;
1828       --
1829     EXCEPTION
1830        when Process_next then
1831          null;
1832     End;
1833 
1834     --
1835     IF l_instance_tbl.count > 0 THEN
1836       log('Before Build_Inst_Rec_of_Table');
1837       build_inst_rec_of_table (
1838         p_inst_tbl      => l_instance_tbl ,
1839         p_inst_rec_tab  => l_inst_rec_tab ,
1840         p_inst_hist_tbl => l_inst_hist_tbl);
1841       --
1842       l_ctr := l_inst_rec_tab.instance_id.count;
1843       -- Insert into History
1844       log('Before Inserting into Instances history..');
1845       FORALL i in 1 .. l_inst_rec_tab.instance_id.count
1846         INSERT INTO CSI_ITEM_INSTANCES_H(
1847           INSTANCE_HISTORY_ID,
1848           INSTANCE_ID,
1849           TRANSACTION_ID,
1850           NEW_INSTANCE_NUMBER,
1851           NEW_EXTERNAL_REFERENCE,
1852           NEW_INVENTORY_ITEM_ID,
1853           NEW_INVENTORY_REVISION,
1854           NEW_INV_MASTER_ORGANIZATION_ID,
1855           NEW_SERIAL_NUMBER ,
1856           NEW_MFG_SERIAL_NUMBER_FLAG,
1857           NEW_LOT_NUMBER,
1858           NEW_QUANTITY,
1859           NEW_UNIT_OF_MEASURE,
1860           NEW_ACCOUNTING_CLASS_CODE,
1861           NEW_INSTANCE_CONDITION_ID,
1862           NEW_INSTANCE_STATUS_ID,
1863           NEW_CUSTOMER_VIEW_FLAG,
1864           NEW_MERCHANT_VIEW_FLAG,
1865           NEW_SELLABLE_FLAG,
1866           NEW_SYSTEM_ID,
1867           NEW_INSTANCE_TYPE_CODE,
1868           NEW_ACTIVE_START_DATE,
1869           NEW_ACTIVE_END_DATE,
1870           NEW_LOCATION_TYPE_CODE,
1871           NEW_LOCATION_ID,
1872           NEW_INV_ORGANIZATION_ID,
1873           NEW_INV_SUBINVENTORY_NAME,
1874           NEW_INV_LOCATOR_ID,
1875           NEW_PA_PROJECT_ID,
1876           NEW_PA_PROJECT_TASK_ID,
1877           NEW_IN_TRANSIT_ORDER_LINE_ID,
1878           NEW_WIP_JOB_ID,
1879           NEW_PO_ORDER_LINE_ID,
1880           NEW_COMPLETENESS_FLAG,
1881           FULL_DUMP_FLAG,
1882           NEW_CONTEXT,
1883           NEW_ATTRIBUTE1,
1884           NEW_ATTRIBUTE2,
1885           NEW_ATTRIBUTE3,
1889           NEW_ATTRIBUTE7,
1886           NEW_ATTRIBUTE4,
1887           NEW_ATTRIBUTE5,
1888           NEW_ATTRIBUTE6,
1890           NEW_ATTRIBUTE8,
1891           NEW_ATTRIBUTE9,
1892           NEW_ATTRIBUTE10,
1893           NEW_ATTRIBUTE11,
1894           NEW_ATTRIBUTE12,
1895           NEW_ATTRIBUTE13,
1896           NEW_ATTRIBUTE14,
1897           NEW_ATTRIBUTE15,
1898           CREATED_BY,
1899           CREATION_DATE,
1900           LAST_UPDATED_BY,
1901           LAST_UPDATE_DATE,
1902           LAST_UPDATE_LOGIN,
1903           OBJECT_VERSION_NUMBER,
1904           NEW_INST_LOC_TYPE_CODE,
1905           NEW_INST_LOC_ID,
1906           NEW_INST_USAGE_CODE,
1907           NEW_last_vld_organization_id,
1908           NEW_CONFIG_INST_REV_NUM,
1909           NEW_CONFIG_VALID_STATUS,
1910           NEW_INSTANCE_DESCRIPTION)
1911         VALUES(
1912           l_inst_hist_tbl(i),
1913           l_inst_rec_tab.INSTANCE_ID(i),
1914           l_txn_id,
1915           l_inst_rec_tab.INSTANCE_NUMBER(i),
1916           l_inst_rec_tab.EXTERNAL_REFERENCE(i),
1917           l_inst_rec_tab.INVENTORY_ITEM_ID(i),
1918           l_inst_rec_tab.INVENTORY_REVISION(i),
1919           l_inst_rec_tab.INV_MASTER_ORGANIZATION_ID(i),
1920           l_inst_rec_tab.SERIAL_NUMBER (i),
1921           l_inst_rec_tab.MFG_SERIAL_NUMBER_FLAG(i),
1922           l_inst_rec_tab.LOT_NUMBER(i),
1923           l_inst_rec_tab.QUANTITY(i),
1924           l_inst_rec_tab.UNIT_OF_MEASURE(i),
1925           l_inst_rec_tab.ACCOUNTING_CLASS_CODE(i),
1926           l_inst_rec_tab.INSTANCE_CONDITION_ID(i),
1927           l_inst_rec_tab.INSTANCE_STATUS_ID(i),
1928           l_inst_rec_tab.CUSTOMER_VIEW_FLAG(i),
1929           l_inst_rec_tab.MERCHANT_VIEW_FLAG(i),
1930           l_inst_rec_tab.SELLABLE_FLAG(i),
1931           l_inst_rec_tab.SYSTEM_ID(i),
1932           l_inst_rec_tab.INSTANCE_TYPE_CODE(i),
1933           l_inst_rec_tab.ACTIVE_START_DATE(i),
1934           l_inst_rec_tab.ACTIVE_END_DATE(i),
1935           l_inst_rec_tab.LOCATION_TYPE_CODE(i),
1936           l_inst_rec_tab.LOCATION_ID(i),
1937           l_inst_rec_tab.INV_ORGANIZATION_ID(i),
1938           l_inst_rec_tab.INV_SUBINVENTORY_NAME(i),
1939           l_inst_rec_tab.INV_LOCATOR_ID(i),
1940           l_inst_rec_tab.PA_PROJECT_ID(i),
1941           l_inst_rec_tab.PA_PROJECT_TASK_ID(i),
1942           l_inst_rec_tab.IN_TRANSIT_ORDER_LINE_ID(i),
1943           l_inst_rec_tab.WIP_JOB_ID(i),
1944           l_inst_rec_tab.PO_ORDER_LINE_ID(i),
1945           l_inst_rec_tab.COMPLETENESS_FLAG(i),
1946           'Y',
1947           l_inst_rec_tab.CONTEXT(i),
1948           l_inst_rec_tab.ATTRIBUTE1(i),
1949           l_inst_rec_tab.ATTRIBUTE2(i),
1950           l_inst_rec_tab.ATTRIBUTE3(i),
1951           l_inst_rec_tab.ATTRIBUTE4(i),
1952           l_inst_rec_tab.ATTRIBUTE5(i),
1953           l_inst_rec_tab.ATTRIBUTE6(i),
1954           l_inst_rec_tab.ATTRIBUTE7(i),
1955           l_inst_rec_tab.ATTRIBUTE8(i),
1956           l_inst_rec_tab.ATTRIBUTE9(i),
1957           l_inst_rec_tab.ATTRIBUTE10(i),
1958           l_inst_rec_tab.ATTRIBUTE11(i),
1959           l_inst_rec_tab.ATTRIBUTE12(i),
1960           l_inst_rec_tab.ATTRIBUTE13(i),
1961           l_inst_rec_tab.ATTRIBUTE14(i),
1962           l_inst_rec_tab.ATTRIBUTE15(i),
1963           l_user_id,
1964           sysdate,
1965           l_user_id,
1966           sysdate,
1967           -1,
1968           1,
1969           l_inst_rec_tab.INSTALL_LOCATION_TYPE_CODE(i), --fix for bug4881769
1970           l_inst_rec_tab.INSTALL_LOCATION_ID(i),
1971           l_inst_rec_tab.INSTANCE_USAGE_CODE(i),
1972           l_inst_rec_tab.vld_organization_id(i),
1973           l_inst_rec_tab.CONFIG_INST_REV_NUM(i),
1974           l_inst_rec_tab.CONFIG_VALID_STATUS(i),
1975           l_inst_rec_tab.INSTANCE_DESCRIPTION(i));
1976     END IF;
1977       --
1978     IF l_version_label_tbl.count > 0 THEN
1979       log('Before Build_Ver_Label_Rec_of_Table');
1980       Build_Ver_Label_Rec_of_Table (
1981         p_version_label_tbl     => l_version_label_tbl,
1982         p_version_label_rec_tab => l_version_label_rec_tab,
1983         p_ver_label_hist_tbl    => l_ver_label_hist_tbl);
1984       --
1985       l_ctr := l_version_label_rec_tab.version_label_id.count;
1986       -- Insert into History
1987       log('Before Inserting into Version Labels history ..');
1988       FORALL i in 1 .. l_version_label_rec_tab.version_label_id.count
1989         INSERT INTO CSI_I_VERSION_LABELS_H(
1990           VERSION_LABEL_HISTORY_ID,
1991           VERSION_LABEL_ID,
1992           TRANSACTION_ID,
1993           NEW_VERSION_LABEL,
1994           NEW_DESCRIPTION,
1995           NEW_DATE_TIME_STAMP,
1996           NEW_ACTIVE_START_DATE,
1997           NEW_ACTIVE_END_DATE,
1998           NEW_CONTEXT,
1999           NEW_ATTRIBUTE1,
2000           NEW_ATTRIBUTE2,
2001           NEW_ATTRIBUTE3,
2002           NEW_ATTRIBUTE4,
2003           NEW_ATTRIBUTE5,
2004           NEW_ATTRIBUTE6,
2005           NEW_ATTRIBUTE7,
2006           NEW_ATTRIBUTE8,
2007           NEW_ATTRIBUTE9,
2008           NEW_ATTRIBUTE10,
2009           NEW_ATTRIBUTE11,
2010           NEW_ATTRIBUTE12,
2011           NEW_ATTRIBUTE13,
2012           NEW_ATTRIBUTE14,
2013           NEW_ATTRIBUTE15,
2014           FULL_DUMP_FLAG,
2015           CREATED_BY,
2016           CREATION_DATE,
2017           LAST_UPDATED_BY,
2021         VALUES(
2018           LAST_UPDATE_DATE,
2019           LAST_UPDATE_LOGIN,
2020           OBJECT_VERSION_NUMBER)
2022           l_ver_label_hist_tbl(i),
2023           l_version_label_rec_tab.VERSION_LABEL_ID(i),
2024           l_txn_id,
2025           l_version_label_rec_tab.VERSION_LABEL(i),
2026           l_version_label_rec_tab.DESCRIPTION(i),
2027           l_version_label_rec_tab.DATE_TIME_STAMP(i),
2028           l_version_label_rec_tab.ACTIVE_START_DATE(i),
2029           l_version_label_rec_tab.ACTIVE_END_DATE(i),
2030           l_version_label_rec_tab.CONTEXT(i),
2031           l_version_label_rec_tab.ATTRIBUTE1(i),
2032           l_version_label_rec_tab.ATTRIBUTE2(i),
2033           l_version_label_rec_tab.ATTRIBUTE3(i),
2034           l_version_label_rec_tab.ATTRIBUTE4(i),
2035           l_version_label_rec_tab.ATTRIBUTE5(i),
2036           l_version_label_rec_tab.ATTRIBUTE6(i),
2037           l_version_label_rec_tab.ATTRIBUTE7(i),
2038           l_version_label_rec_tab.ATTRIBUTE8(i),
2039           l_version_label_rec_tab.ATTRIBUTE9(i),
2040           l_version_label_rec_tab.ATTRIBUTE10(i),
2041           l_version_label_rec_tab.ATTRIBUTE11(i),
2042           l_version_label_rec_tab.ATTRIBUTE12(i),
2043           l_version_label_rec_tab.ATTRIBUTE13(i),
2044           l_version_label_rec_tab.ATTRIBUTE14(i),
2045           l_version_label_rec_tab.ATTRIBUTE15(i),
2046           'Y',
2047           l_user_id,
2048           sysdate,
2049           l_user_id,
2050           sysdate,
2051           -1,
2052           1);
2053     END IF;
2054     --
2055     IF l_party_tbl.count > 0 THEN
2056       log('Before Build_Party_Rec_of_Table');
2057       build_party_rec_of_table(
2058         p_party_tbl    => l_party_tbl,
2059         p_party_rec_tab => l_party_rec_tab,
2060         p_party_hist_tbl => l_party_hist_tbl);
2061       --
2062       l_ctr := l_party_rec_tab.instance_party_id.count;
2063       --
2064       -- Insert into History
2065       log('Before inserting into Parties history..');
2066       FORALL i in 1 .. l_party_rec_tab.instance_party_id.count
2067         INSERT INTO CSI_I_PARTIES_H(
2068           INSTANCE_PARTY_HISTORY_ID,
2069           INSTANCE_PARTY_ID,
2070           TRANSACTION_ID,
2071           NEW_PARTY_SOURCE_TABLE,
2072           NEW_PARTY_ID,
2073           NEW_RELATIONSHIP_TYPE_CODE,
2074           NEW_CONTACT_FLAG,
2075           NEW_CONTACT_IP_ID,
2076           NEW_ACTIVE_START_DATE,
2077           NEW_ACTIVE_END_DATE,
2078           NEW_CONTEXT,
2079           NEW_ATTRIBUTE1,
2080           NEW_ATTRIBUTE2,
2081           NEW_ATTRIBUTE3,
2082           NEW_ATTRIBUTE4,
2083           NEW_ATTRIBUTE5,
2084           NEW_ATTRIBUTE6,
2085           NEW_ATTRIBUTE7,
2086           NEW_ATTRIBUTE8,
2087           NEW_ATTRIBUTE9,
2088           NEW_ATTRIBUTE10,
2089           NEW_ATTRIBUTE11,
2090           NEW_ATTRIBUTE12,
2091           NEW_ATTRIBUTE13,
2092           NEW_ATTRIBUTE14,
2093           NEW_ATTRIBUTE15,
2094           NEW_PRIMARY_FLAG,
2095           NEW_PREFERRED_FLAG,
2096           FULL_DUMP_FLAG,
2097           CREATED_BY,
2098           CREATION_DATE,
2099           LAST_UPDATED_BY,
2100           LAST_UPDATE_DATE,
2101           LAST_UPDATE_LOGIN,
2102           OBJECT_VERSION_NUMBER)
2103         VALUES(
2104           l_party_hist_tbl(i),
2105           l_party_rec_tab.INSTANCE_PARTY_ID(i),
2106           l_txn_id,
2107           l_party_rec_tab.PARTY_SOURCE_TABLE(i),
2108           l_party_rec_tab.PARTY_ID(i),
2109           l_party_rec_tab.RELATIONSHIP_TYPE_CODE(i),
2110           l_party_rec_tab.CONTACT_FLAG(i),
2111           l_party_rec_tab.CONTACT_IP_ID(i),
2112           l_party_rec_tab.ACTIVE_START_DATE(i),
2113           l_party_rec_tab.ACTIVE_END_DATE(i),
2114           l_party_rec_tab.CONTEXT(i),
2115           l_party_rec_tab.ATTRIBUTE1(i),
2116           l_party_rec_tab.ATTRIBUTE2(i),
2117           l_party_rec_tab.ATTRIBUTE3(i),
2118           l_party_rec_tab.ATTRIBUTE4(i),
2119           l_party_rec_tab.ATTRIBUTE5(i),
2120           l_party_rec_tab.ATTRIBUTE6(i),
2121           l_party_rec_tab.ATTRIBUTE7(i),
2122           l_party_rec_tab.ATTRIBUTE8(i),
2123           l_party_rec_tab.ATTRIBUTE9(i),
2124           l_party_rec_tab.ATTRIBUTE10(i),
2125           l_party_rec_tab.ATTRIBUTE11(i),
2126           l_party_rec_tab.ATTRIBUTE12(i),
2127           l_party_rec_tab.ATTRIBUTE13(i),
2128           l_party_rec_tab.ATTRIBUTE14(i),
2129           l_party_rec_tab.ATTRIBUTE15(i),
2130           l_party_rec_tab.PRIMARY_FLAG(i),
2131           l_party_rec_tab.PREFERRED_FLAG(i),
2132           'Y',
2133           l_user_id,
2134           sysdate,
2135           l_user_id,
2136           sysdate,
2137           -1,
2138           1);
2139     END IF;
2140     --
2141    IF l_party_account_tbl.count > 0 THEN
2142      log('Before Build_Acct_Rec_of_Table');
2143      Build_Acct_Rec_of_Table(
2144        p_account_tbl       => l_party_account_tbl,
2145        p_account_rec_tab   => l_account_rec_tab,
2146        p_account_hist_tbl  => l_account_hist_tbl);
2147      --
2148      l_ctr := l_account_rec_tab.ip_account_id.count;
2149      --
2150      -- Insert into History
2151      log('Before Inserting into Party Accounts history');
2152      FORALL i in 1 .. l_account_rec_tab.ip_account_id.count
2153        INSERT INTO CSI_IP_ACCOUNTS_H(
2154           IP_ACCOUNT_HISTORY_ID,
2155           IP_ACCOUNT_ID,
2156           TRANSACTION_ID,
2157           NEW_PARTY_ACCOUNT_ID,
2161           NEW_CONTEXT,
2158           NEW_RELATIONSHIP_TYPE_CODE,
2159           NEW_ACTIVE_START_DATE,
2160           NEW_ACTIVE_END_DATE,
2162           NEW_ATTRIBUTE1,
2163           NEW_ATTRIBUTE2,
2164           NEW_ATTRIBUTE3,
2165           NEW_ATTRIBUTE4,
2166           NEW_ATTRIBUTE5,
2167           NEW_ATTRIBUTE6,
2168           NEW_ATTRIBUTE7,
2169           NEW_ATTRIBUTE8,
2170           NEW_ATTRIBUTE9,
2171           NEW_ATTRIBUTE10,
2172           NEW_ATTRIBUTE11,
2173           NEW_ATTRIBUTE12,
2174           NEW_ATTRIBUTE13,
2175           NEW_ATTRIBUTE14,
2176           NEW_ATTRIBUTE15,
2177           NEW_BILL_TO_ADDRESS,
2178           NEW_SHIP_TO_ADDRESS,
2179           FULL_DUMP_FLAG,
2180           CREATED_BY,
2181           CREATION_DATE,
2182           LAST_UPDATED_BY,
2183           LAST_UPDATE_DATE,
2184           LAST_UPDATE_LOGIN,
2185           OBJECT_VERSION_NUMBER)
2186         VALUES(
2187           l_account_hist_tbl(i),
2188           l_account_rec_tab.IP_ACCOUNT_ID(i),
2189           l_txn_id,
2190           l_account_rec_tab.PARTY_ACCOUNT_ID(i),
2191           l_account_rec_tab.RELATIONSHIP_TYPE_CODE(i),
2192           l_account_rec_tab.ACTIVE_START_DATE(i),
2193           l_account_rec_tab.ACTIVE_END_DATE(i),
2194           l_account_rec_tab.CONTEXT(i),
2195           l_account_rec_tab.ATTRIBUTE1(i),
2196           l_account_rec_tab.ATTRIBUTE2(i),
2197           l_account_rec_tab.ATTRIBUTE3(i),
2198           l_account_rec_tab.ATTRIBUTE4(i),
2199           l_account_rec_tab.ATTRIBUTE5(i),
2200           l_account_rec_tab.ATTRIBUTE6(i),
2201           l_account_rec_tab.ATTRIBUTE7(i),
2202           l_account_rec_tab.ATTRIBUTE8(i),
2203           l_account_rec_tab.ATTRIBUTE9(i),
2204           l_account_rec_tab.ATTRIBUTE10(i),
2205           l_account_rec_tab.ATTRIBUTE11(i),
2206           l_account_rec_tab.ATTRIBUTE12(i),
2207           l_account_rec_tab.ATTRIBUTE13(i),
2208           l_account_rec_tab.ATTRIBUTE14(i),
2209           l_account_rec_tab.ATTRIBUTE15(i),
2210           l_account_rec_tab.BILL_TO_ADDRESS(i),
2211           l_account_rec_tab.SHIP_TO_ADDRESS(i),
2212           'Y',
2213           l_user_id,
2214           sysdate,
2215           l_user_id,
2216           sysdate,
2217           -1,
2218           1);
2219     END IF;
2220     --
2221     IF l_org_units_tbl.count > 0 THEN
2222       log('Before Build_Org_Rec_of_Table');
2223       Build_Org_Rec_of_Table (
2224         p_org_tbl           => l_org_units_tbl,
2225         p_org_units_rec_tab => l_org_units_rec_tab,
2226         p_org_hist_tbl      => l_org_hist_tbl);
2227       --
2228       l_ctr := l_org_units_rec_tab.instance_ou_id.count;
2229       --
2230       -- Insert into History
2231       log('Before Inserting into Org Assignments history');
2232       FORALL i in 1 .. l_org_units_rec_tab.instance_ou_id.count
2233         INSERT INTO CSI_I_ORG_ASSIGNMENTS_H(
2234           INSTANCE_OU_HISTORY_ID,
2235           INSTANCE_OU_ID,
2236           TRANSACTION_ID,
2237           NEW_OPERATING_UNIT_ID,
2238           NEW_RELATIONSHIP_TYPE_CODE,
2239           NEW_ACTIVE_START_DATE,
2240           NEW_ACTIVE_END_DATE,
2241           NEW_CONTEXT,
2242           NEW_ATTRIBUTE1,
2243           NEW_ATTRIBUTE2,
2244           NEW_ATTRIBUTE3,
2245           NEW_ATTRIBUTE4,
2246           NEW_ATTRIBUTE5,
2247           NEW_ATTRIBUTE6,
2248           NEW_ATTRIBUTE7,
2249           NEW_ATTRIBUTE8,
2250           NEW_ATTRIBUTE9,
2251           NEW_ATTRIBUTE10,
2252           NEW_ATTRIBUTE11,
2253           NEW_ATTRIBUTE12,
2254           NEW_ATTRIBUTE13,
2255           NEW_ATTRIBUTE14,
2256           NEW_ATTRIBUTE15,
2257           FULL_DUMP_FLAG,
2258           CREATED_BY,
2259           CREATION_DATE,
2260           LAST_UPDATED_BY,
2261           LAST_UPDATE_DATE,
2262           LAST_UPDATE_LOGIN,
2263           OBJECT_VERSION_NUMBER)
2264        VALUES(
2265           l_org_hist_tbl(i),
2266           l_org_units_rec_tab.INSTANCE_OU_ID(i),
2267           l_txn_id,
2268           l_org_units_rec_tab.OPERATING_UNIT_ID(i),
2269           l_org_units_rec_tab.RELATIONSHIP_TYPE_CODE(i),
2270           l_org_units_rec_tab.ACTIVE_START_DATE(i),
2271           l_org_units_rec_tab.ACTIVE_END_DATE(i),
2272           l_org_units_rec_tab.CONTEXT(i),
2273           l_org_units_rec_tab.ATTRIBUTE1(i),
2274           l_org_units_rec_tab.ATTRIBUTE2(i),
2275           l_org_units_rec_tab.ATTRIBUTE3(i),
2276           l_org_units_rec_tab.ATTRIBUTE4(i),
2277           l_org_units_rec_tab.ATTRIBUTE5(i),
2278           l_org_units_rec_tab.ATTRIBUTE6(i),
2279           l_org_units_rec_tab.ATTRIBUTE7(i),
2280           l_org_units_rec_tab.ATTRIBUTE8(i),
2281           l_org_units_rec_tab.ATTRIBUTE9(i),
2282           l_org_units_rec_tab.ATTRIBUTE10(i),
2283           l_org_units_rec_tab.ATTRIBUTE11(i),
2284           l_org_units_rec_tab.ATTRIBUTE12(i),
2285           l_org_units_rec_tab.ATTRIBUTE13(i),
2286           l_org_units_rec_tab.ATTRIBUTE14(i),
2287           l_org_units_rec_tab.ATTRIBUTE15(i),
2288           'Y',
2289           l_user_id,
2290           sysdate,
2291           l_user_id,
2292           sysdate,
2293           -1,
2294           1);
2295     END IF;
2296     --
2297     IF l_pricing_attribs_tbl.count > 0 THEN
2298       log('Before Build_pricing_Rec_of_Table');
2302         p_pricing_hist_tbl  => l_pricing_hist_tbl);
2299       build_pricing_rec_of_table (
2300         p_pricing_tbl       => l_pricing_attribs_tbl,
2301         p_pricing_rec_tab   => l_pricing_rec_tab,
2303       --
2304       l_ctr := l_pricing_rec_tab.pricing_attribute_id.count;
2305       --
2306       -- Insert into History
2307       log('Before Inserting into Pricing Attribs history');
2308       FORALL i in 1 .. l_pricing_rec_tab.pricing_attribute_id.count
2309         INSERT INTO CSI_I_PRICING_ATTRIBS_H(
2310           PRICE_ATTRIB_HISTORY_ID,
2311           PRICING_ATTRIBUTE_ID,
2312           TRANSACTION_ID,
2313           NEW_ACTIVE_START_DATE,
2314           NEW_ACTIVE_END_DATE,
2315           NEW_CONTEXT,
2316           NEW_ATTRIBUTE1,
2317           NEW_ATTRIBUTE2,
2318           NEW_ATTRIBUTE3,
2319           NEW_ATTRIBUTE4,
2320           NEW_ATTRIBUTE5,
2321           NEW_ATTRIBUTE6,
2322           NEW_ATTRIBUTE7,
2323           NEW_ATTRIBUTE8,
2324           NEW_ATTRIBUTE9,
2325           NEW_ATTRIBUTE10,
2326           NEW_ATTRIBUTE11,
2327           NEW_ATTRIBUTE12,
2328           NEW_ATTRIBUTE13,
2329           NEW_ATTRIBUTE14,
2330           NEW_ATTRIBUTE15,
2331           NEW_PRICING_CONTEXT,
2332           NEW_PRICING_ATTRIBUTE1,
2333           NEW_PRICING_ATTRIBUTE2,
2334           NEW_PRICING_ATTRIBUTE3,
2335           NEW_PRICING_ATTRIBUTE4,
2336           NEW_PRICING_ATTRIBUTE5,
2337           NEW_PRICING_ATTRIBUTE6,
2338           NEW_PRICING_ATTRIBUTE7,
2339           NEW_PRICING_ATTRIBUTE8,
2340           NEW_PRICING_ATTRIBUTE9,
2341           NEW_PRICING_ATTRIBUTE10,
2342           NEW_PRICING_ATTRIBUTE11,
2343           NEW_PRICING_ATTRIBUTE12,
2344           NEW_PRICING_ATTRIBUTE13,
2345           NEW_PRICING_ATTRIBUTE14,
2346           NEW_PRICING_ATTRIBUTE15,
2347           NEW_PRICING_ATTRIBUTE16,
2348           NEW_PRICING_ATTRIBUTE17,
2349           NEW_PRICING_ATTRIBUTE18,
2350           NEW_PRICING_ATTRIBUTE19,
2351           NEW_PRICING_ATTRIBUTE20,
2352           NEW_PRICING_ATTRIBUTE21,
2353           NEW_PRICING_ATTRIBUTE22,
2354           NEW_PRICING_ATTRIBUTE23,
2355           NEW_PRICING_ATTRIBUTE24,
2356           NEW_PRICING_ATTRIBUTE25,
2357           NEW_PRICING_ATTRIBUTE26,
2358           NEW_PRICING_ATTRIBUTE27,
2359           NEW_PRICING_ATTRIBUTE28,
2360           NEW_PRICING_ATTRIBUTE29,
2361           NEW_PRICING_ATTRIBUTE30,
2362           NEW_PRICING_ATTRIBUTE31,
2363           NEW_PRICING_ATTRIBUTE32,
2364           NEW_PRICING_ATTRIBUTE33,
2365           NEW_PRICING_ATTRIBUTE34,
2366           NEW_PRICING_ATTRIBUTE35,
2367           NEW_PRICING_ATTRIBUTE36,
2368           NEW_PRICING_ATTRIBUTE37,
2369           NEW_PRICING_ATTRIBUTE38,
2370           NEW_PRICING_ATTRIBUTE39,
2371           NEW_PRICING_ATTRIBUTE40,
2372           NEW_PRICING_ATTRIBUTE41,
2373           NEW_PRICING_ATTRIBUTE42,
2374           NEW_PRICING_ATTRIBUTE43,
2375           NEW_PRICING_ATTRIBUTE44,
2376           NEW_PRICING_ATTRIBUTE45,
2377           NEW_PRICING_ATTRIBUTE46,
2378           NEW_PRICING_ATTRIBUTE47,
2379           NEW_PRICING_ATTRIBUTE48,
2380           NEW_PRICING_ATTRIBUTE49,
2381           NEW_PRICING_ATTRIBUTE50,
2382           NEW_PRICING_ATTRIBUTE51,
2383           NEW_PRICING_ATTRIBUTE52,
2384           NEW_PRICING_ATTRIBUTE53,
2385           NEW_PRICING_ATTRIBUTE54,
2386           NEW_PRICING_ATTRIBUTE55,
2387           NEW_PRICING_ATTRIBUTE56,
2388           NEW_PRICING_ATTRIBUTE57,
2389           NEW_PRICING_ATTRIBUTE58,
2390           NEW_PRICING_ATTRIBUTE59,
2391           NEW_PRICING_ATTRIBUTE60,
2392           NEW_PRICING_ATTRIBUTE61,
2393           NEW_PRICING_ATTRIBUTE62,
2394           NEW_PRICING_ATTRIBUTE63,
2395           NEW_PRICING_ATTRIBUTE64,
2396           NEW_PRICING_ATTRIBUTE65,
2397           NEW_PRICING_ATTRIBUTE66,
2398           NEW_PRICING_ATTRIBUTE67,
2399           NEW_PRICING_ATTRIBUTE68,
2400           NEW_PRICING_ATTRIBUTE69,
2401           NEW_PRICING_ATTRIBUTE70,
2402           NEW_PRICING_ATTRIBUTE71,
2403           NEW_PRICING_ATTRIBUTE72,
2404           NEW_PRICING_ATTRIBUTE73,
2405           NEW_PRICING_ATTRIBUTE74,
2406           NEW_PRICING_ATTRIBUTE75,
2407           NEW_PRICING_ATTRIBUTE76,
2408           NEW_PRICING_ATTRIBUTE77,
2409           NEW_PRICING_ATTRIBUTE78,
2410           NEW_PRICING_ATTRIBUTE79,
2411           NEW_PRICING_ATTRIBUTE80,
2412           NEW_PRICING_ATTRIBUTE81,
2413           NEW_PRICING_ATTRIBUTE82,
2414           NEW_PRICING_ATTRIBUTE83,
2415           NEW_PRICING_ATTRIBUTE84,
2416           NEW_PRICING_ATTRIBUTE85,
2417           NEW_PRICING_ATTRIBUTE86,
2418           NEW_PRICING_ATTRIBUTE87,
2419           NEW_PRICING_ATTRIBUTE88,
2420           NEW_PRICING_ATTRIBUTE89,
2421           NEW_PRICING_ATTRIBUTE90,
2422           NEW_PRICING_ATTRIBUTE91,
2423           NEW_PRICING_ATTRIBUTE92,
2424           NEW_PRICING_ATTRIBUTE93,
2425           NEW_PRICING_ATTRIBUTE94,
2426           NEW_PRICING_ATTRIBUTE95,
2427           NEW_PRICING_ATTRIBUTE96,
2428           NEW_PRICING_ATTRIBUTE97,
2429           NEW_PRICING_ATTRIBUTE98,
2430           NEW_PRICING_ATTRIBUTE99,
2431           NEW_PRICING_ATTRIBUTE100,
2432           FULL_DUMP_FLAG,
2433           CREATED_BY,
2434           CREATION_DATE,
2435           LAST_UPDATED_BY,
2436           LAST_UPDATE_DATE,
2440           l_pricing_hist_tbl(i),
2437           LAST_UPDATE_LOGIN,
2438           OBJECT_VERSION_NUMBER)
2439        VALUES(
2441           l_pricing_rec_tab.PRICING_ATTRIBUTE_ID(i),
2442           l_txn_id,
2443           l_pricing_rec_tab.ACTIVE_START_DATE(i),
2444           l_pricing_rec_tab.ACTIVE_END_DATE(i),
2445           l_pricing_rec_tab.CONTEXT(i),
2446           l_pricing_rec_tab.ATTRIBUTE1(i),
2447           l_pricing_rec_tab.ATTRIBUTE2(i),
2448           l_pricing_rec_tab.ATTRIBUTE3(i),
2449           l_pricing_rec_tab.ATTRIBUTE4(i),
2450           l_pricing_rec_tab.ATTRIBUTE5(i),
2451           l_pricing_rec_tab.ATTRIBUTE6(i),
2452           l_pricing_rec_tab.ATTRIBUTE7(i),
2453           l_pricing_rec_tab.ATTRIBUTE8(i),
2454           l_pricing_rec_tab.ATTRIBUTE9(i),
2455           l_pricing_rec_tab.ATTRIBUTE10(i),
2456           l_pricing_rec_tab.ATTRIBUTE11(i),
2457           l_pricing_rec_tab.ATTRIBUTE12(i),
2458           l_pricing_rec_tab.ATTRIBUTE13(i),
2459           l_pricing_rec_tab.ATTRIBUTE14(i),
2460           l_pricing_rec_tab.ATTRIBUTE15(i),
2461           l_pricing_rec_tab.PRICING_CONTEXT(i),
2462           l_pricing_rec_tab.PRICING_ATTRIBUTE1(i),
2463           l_pricing_rec_tab.PRICING_ATTRIBUTE2(i),
2464           l_pricing_rec_tab.PRICING_ATTRIBUTE3(i),
2465           l_pricing_rec_tab.PRICING_ATTRIBUTE4(i),
2466           l_pricing_rec_tab.PRICING_ATTRIBUTE5(i),
2467           l_pricing_rec_tab.PRICING_ATTRIBUTE6(i),
2468           l_pricing_rec_tab.PRICING_ATTRIBUTE7(i),
2469           l_pricing_rec_tab.PRICING_ATTRIBUTE8(i),
2470           l_pricing_rec_tab.PRICING_ATTRIBUTE9(i),
2471           l_pricing_rec_tab.PRICING_ATTRIBUTE10(i),
2472           l_pricing_rec_tab.PRICING_ATTRIBUTE11(i),
2473           l_pricing_rec_tab.PRICING_ATTRIBUTE12(i),
2474           l_pricing_rec_tab.PRICING_ATTRIBUTE13(i),
2475           l_pricing_rec_tab.PRICING_ATTRIBUTE14(i),
2476           l_pricing_rec_tab.PRICING_ATTRIBUTE15(i),
2477           l_pricing_rec_tab.PRICING_ATTRIBUTE16(i),
2478           l_pricing_rec_tab.PRICING_ATTRIBUTE17(i),
2479           l_pricing_rec_tab.PRICING_ATTRIBUTE18(i),
2480           l_pricing_rec_tab.PRICING_ATTRIBUTE19(i),
2481           l_pricing_rec_tab.PRICING_ATTRIBUTE20(i),
2482           l_pricing_rec_tab.PRICING_ATTRIBUTE21(i),
2483           l_pricing_rec_tab.PRICING_ATTRIBUTE22(i),
2484           l_pricing_rec_tab.PRICING_ATTRIBUTE23(i),
2485           l_pricing_rec_tab.PRICING_ATTRIBUTE24(i),
2486           l_pricing_rec_tab.PRICING_ATTRIBUTE25(i),
2487           l_pricing_rec_tab.PRICING_ATTRIBUTE26(i),
2488           l_pricing_rec_tab.PRICING_ATTRIBUTE27(i),
2489           l_pricing_rec_tab.PRICING_ATTRIBUTE28(i),
2490           l_pricing_rec_tab.PRICING_ATTRIBUTE29(i),
2491           l_pricing_rec_tab.PRICING_ATTRIBUTE30(i),
2492           l_pricing_rec_tab.PRICING_ATTRIBUTE31(i),
2493           l_pricing_rec_tab.PRICING_ATTRIBUTE32(i),
2494           l_pricing_rec_tab.PRICING_ATTRIBUTE33(i),
2495           l_pricing_rec_tab.PRICING_ATTRIBUTE34(i),
2496           l_pricing_rec_tab.PRICING_ATTRIBUTE35(i),
2497           l_pricing_rec_tab.PRICING_ATTRIBUTE36(i),
2498           l_pricing_rec_tab.PRICING_ATTRIBUTE37(i),
2499           l_pricing_rec_tab.PRICING_ATTRIBUTE38(i),
2500           l_pricing_rec_tab.PRICING_ATTRIBUTE39(i),
2501           l_pricing_rec_tab.PRICING_ATTRIBUTE40(i),
2502           l_pricing_rec_tab.PRICING_ATTRIBUTE41(i),
2503           l_pricing_rec_tab.PRICING_ATTRIBUTE42(i),
2504           l_pricing_rec_tab.PRICING_ATTRIBUTE43(i),
2505           l_pricing_rec_tab.PRICING_ATTRIBUTE44(i),
2506           l_pricing_rec_tab.PRICING_ATTRIBUTE45(i),
2507           l_pricing_rec_tab.PRICING_ATTRIBUTE46(i),
2508           l_pricing_rec_tab.PRICING_ATTRIBUTE47(i),
2509           l_pricing_rec_tab.PRICING_ATTRIBUTE48(i),
2510           l_pricing_rec_tab.PRICING_ATTRIBUTE49(i),
2511           l_pricing_rec_tab.PRICING_ATTRIBUTE50(i),
2512           l_pricing_rec_tab.PRICING_ATTRIBUTE51(i),
2513           l_pricing_rec_tab.PRICING_ATTRIBUTE52(i),
2514           l_pricing_rec_tab.PRICING_ATTRIBUTE53(i),
2515           l_pricing_rec_tab.PRICING_ATTRIBUTE54(i),
2516           l_pricing_rec_tab.PRICING_ATTRIBUTE55(i),
2517           l_pricing_rec_tab.PRICING_ATTRIBUTE56(i),
2518           l_pricing_rec_tab.PRICING_ATTRIBUTE57(i),
2519           l_pricing_rec_tab.PRICING_ATTRIBUTE58(i),
2520           l_pricing_rec_tab.PRICING_ATTRIBUTE59(i),
2521           l_pricing_rec_tab.PRICING_ATTRIBUTE60(i),
2522           l_pricing_rec_tab.PRICING_ATTRIBUTE61(i),
2523           l_pricing_rec_tab.PRICING_ATTRIBUTE62(i),
2524           l_pricing_rec_tab.PRICING_ATTRIBUTE63(i),
2525           l_pricing_rec_tab.PRICING_ATTRIBUTE64(i),
2526           l_pricing_rec_tab.PRICING_ATTRIBUTE65(i),
2527           l_pricing_rec_tab.PRICING_ATTRIBUTE66(i),
2528           l_pricing_rec_tab.PRICING_ATTRIBUTE67(i),
2529           l_pricing_rec_tab.PRICING_ATTRIBUTE68(i),
2530           l_pricing_rec_tab.PRICING_ATTRIBUTE69(i),
2531           l_pricing_rec_tab.PRICING_ATTRIBUTE70(i),
2532           l_pricing_rec_tab.PRICING_ATTRIBUTE71(i),
2533           l_pricing_rec_tab.PRICING_ATTRIBUTE72(i),
2534           l_pricing_rec_tab.PRICING_ATTRIBUTE73(i),
2535           l_pricing_rec_tab.PRICING_ATTRIBUTE74(i),
2536           l_pricing_rec_tab.PRICING_ATTRIBUTE75(i),
2537           l_pricing_rec_tab.PRICING_ATTRIBUTE76(i),
2538           l_pricing_rec_tab.PRICING_ATTRIBUTE77(i),
2542           l_pricing_rec_tab.PRICING_ATTRIBUTE81(i),
2539           l_pricing_rec_tab.PRICING_ATTRIBUTE78(i),
2540           l_pricing_rec_tab.PRICING_ATTRIBUTE79(i),
2541           l_pricing_rec_tab.PRICING_ATTRIBUTE80(i),
2543           l_pricing_rec_tab.PRICING_ATTRIBUTE82(i),
2544           l_pricing_rec_tab.PRICING_ATTRIBUTE83(i),
2545           l_pricing_rec_tab.PRICING_ATTRIBUTE84(i),
2546           l_pricing_rec_tab.PRICING_ATTRIBUTE85(i),
2547           l_pricing_rec_tab.PRICING_ATTRIBUTE86(i),
2548           l_pricing_rec_tab.PRICING_ATTRIBUTE87(i),
2549           l_pricing_rec_tab.PRICING_ATTRIBUTE88(i),
2550           l_pricing_rec_tab.PRICING_ATTRIBUTE89(i),
2551           l_pricing_rec_tab.PRICING_ATTRIBUTE90(i),
2552           l_pricing_rec_tab.PRICING_ATTRIBUTE91(i),
2553           l_pricing_rec_tab.PRICING_ATTRIBUTE92(i),
2554           l_pricing_rec_tab.PRICING_ATTRIBUTE93(i),
2555           l_pricing_rec_tab.PRICING_ATTRIBUTE94(i),
2556           l_pricing_rec_tab.PRICING_ATTRIBUTE95(i),
2557           l_pricing_rec_tab.PRICING_ATTRIBUTE96(i),
2558           l_pricing_rec_tab.PRICING_ATTRIBUTE97(i),
2559           l_pricing_rec_tab.PRICING_ATTRIBUTE98(i),
2560           l_pricing_rec_tab.PRICING_ATTRIBUTE99(i),
2561           l_pricing_rec_tab.PRICING_ATTRIBUTE100(i),
2562           'Y',
2563           l_user_id,
2564           sysdate,
2565           l_user_id,
2566           sysdate,
2567           -1,
2568           1);
2569     END IF;
2570     --
2571     IF l_ext_attrib_values_tbl.count > 0 THEN
2572       log('Before Build_Ext_Attr_Rec_Table');
2573       Build_Ext_Attr_Rec_Table (
2574        p_ext_attr_tbl     => l_ext_attrib_values_tbl,
2575        p_ext_attr_rec_tab => l_ext_attr_rec_tab,
2576        p_ext_hist_tbl     => l_ext_hist_tbl);
2577       --
2578       l_ctr := l_ext_attr_rec_tab.attribute_value_id.count;
2579       --
2580       -- Insert into History
2581       log('Before Inserting into Ext Attribs history');
2582       FORALL i in 1 .. l_ext_attr_rec_tab.attribute_value_id.count
2583         INSERT INTO CSI_IEA_VALUES_H(
2584           ATTRIBUTE_VALUE_HISTORY_ID,
2585           ATTRIBUTE_VALUE_ID,
2586           TRANSACTION_ID,
2587           NEW_ATTRIBUTE_VALUE,
2588           NEW_ACTIVE_START_DATE,
2589           NEW_ACTIVE_END_DATE,
2590           NEW_CONTEXT,
2591           NEW_ATTRIBUTE1,
2592           NEW_ATTRIBUTE2,
2593           NEW_ATTRIBUTE3,
2594           NEW_ATTRIBUTE4,
2595           NEW_ATTRIBUTE5,
2596           NEW_ATTRIBUTE6,
2597           NEW_ATTRIBUTE7,
2598           NEW_ATTRIBUTE8,
2599           NEW_ATTRIBUTE9,
2600           NEW_ATTRIBUTE10,
2601           NEW_ATTRIBUTE11,
2602           NEW_ATTRIBUTE12,
2603           NEW_ATTRIBUTE13,
2604           NEW_ATTRIBUTE14,
2605           NEW_ATTRIBUTE15,
2606           FULL_DUMP_FLAG,
2607           CREATED_BY,
2608           CREATION_DATE,
2609           LAST_UPDATED_BY,
2610           LAST_UPDATE_DATE,
2611           LAST_UPDATE_LOGIN,
2612           OBJECT_VERSION_NUMBER)
2613        VALUES(
2614           l_ext_hist_tbl(i),
2615           l_ext_attr_rec_tab.ATTRIBUTE_VALUE_ID(i),
2616           l_txn_id,
2617           l_ext_attr_rec_tab.ATTRIBUTE_VALUE(i),
2618           l_ext_attr_rec_tab.ACTIVE_START_DATE(i),
2619           l_ext_attr_rec_tab.ACTIVE_END_DATE(i),
2620           l_ext_attr_rec_tab.CONTEXT(i),
2621           l_ext_attr_rec_tab.ATTRIBUTE1(i),
2622           l_ext_attr_rec_tab.ATTRIBUTE2(i),
2623           l_ext_attr_rec_tab.ATTRIBUTE3(i),
2624           l_ext_attr_rec_tab.ATTRIBUTE4(i),
2625           l_ext_attr_rec_tab.ATTRIBUTE5(i),
2626           l_ext_attr_rec_tab.ATTRIBUTE6(i),
2627           l_ext_attr_rec_tab.ATTRIBUTE7(i),
2628           l_ext_attr_rec_tab.ATTRIBUTE8(i),
2629           l_ext_attr_rec_tab.ATTRIBUTE9(i),
2630           l_ext_attr_rec_tab.ATTRIBUTE10(i),
2631           l_ext_attr_rec_tab.ATTRIBUTE11(i),
2632           l_ext_attr_rec_tab.ATTRIBUTE12(i),
2633           l_ext_attr_rec_tab.ATTRIBUTE13(i),
2634           l_ext_attr_rec_tab.ATTRIBUTE14(i),
2635           l_ext_attr_rec_tab.ATTRIBUTE15(i),
2636           'Y',
2637           l_user_id,
2638           sysdate,
2639           l_user_id,
2640           sysdate,
2641           -1,
2642           1);
2643     END IF;
2644     --
2645     IF l_instance_asset_tbl.count > 0 THEN
2646       log('Before Build_Asset_Rec_Table');
2647       Build_Asset_Rec_Table (
2648         p_asset_tbl     => l_instance_asset_tbl,
2649         p_asset_rec_tab => l_asset_rec_tab,
2650         p_asset_hist_tbl => l_asset_hist_tbl);
2651       --
2652       l_ctr := l_asset_rec_tab.instance_asset_id.count;
2653       --
2654       -- Insert into History
2655       log('Before Inserting into Assets history');
2656       FORALL i in 1 .. l_asset_rec_tab.instance_asset_id.count
2657         INSERT INTO CSI_I_ASSETS_H(
2658           INSTANCE_ASSET_HISTORY_ID,
2659           INSTANCE_ASSET_ID,
2660           TRANSACTION_ID,
2661           NEW_INSTANCE_ID,
2662           NEW_FA_ASSET_ID,
2663           NEW_ASSET_QUANTITY,
2664           NEW_FA_BOOK_TYPE_CODE,
2665           NEW_FA_LOCATION_ID,
2666           NEW_UPDATE_STATUS,
2667           NEW_ACTIVE_START_DATE,
2668           NEW_ACTIVE_END_DATE,
2669           FULL_DUMP_FLAG,
2670           CREATED_BY,
2671           CREATION_DATE,
2675           OBJECT_VERSION_NUMBER)
2672           LAST_UPDATED_BY,
2673           LAST_UPDATE_DATE,
2674           LAST_UPDATE_LOGIN,
2676        VALUES(
2677           l_asset_hist_tbl(i),
2678           l_asset_rec_tab.INSTANCE_ASSET_ID(i),
2679           l_txn_id,
2680           l_asset_rec_tab.INSTANCE_ID(i),
2681           l_asset_rec_tab.FA_ASSET_ID(i),
2682           l_asset_rec_tab.ASSET_QUANTITY(i),
2683           l_asset_rec_tab.FA_BOOK_TYPE_CODE(i),
2684           l_asset_rec_tab.FA_LOCATION_ID(i),
2685           l_asset_rec_tab.UPDATE_STATUS(i),
2686           l_asset_rec_tab.ACTIVE_START_DATE(i),
2687           l_asset_rec_tab.ACTIVE_END_DATE(i),
2688           'Y',
2689           l_user_id,
2690           sysdate,
2691           l_user_id,
2692           sysdate,
2693           -1,
2694           1);
2695     END IF;
2696     --
2697     IF l_ii_relationship_tbl.count > 0 THEN
2698       log('Before Build_Rel_Rec_of_Table');
2699       Build_Rel_Rec_of_Table (
2700         p_ii_relationship_tbl     => l_ii_relationship_tbl,
2701         p_ii_relationship_rec_tab => l_ii_relationship_rec_tab,
2702         p_rel_hist_tbl            => l_rel_hist_tbl);
2703       --
2704       l_ctr := l_ii_relationship_rec_tab.relationship_id.count;
2705       --
2706       -- Insert into History
2707       log('Before inserting into Relationships history');
2708       FORALL i in 1 .. l_ii_relationship_rec_tab.relationship_id.count
2709         INSERT INTO CSI_II_RELATIONSHIPS_H(
2710           RELATIONSHIP_HISTORY_ID
2711          ,RELATIONSHIP_ID
2712          ,TRANSACTION_ID
2713          ,NEW_SUBJECT_ID
2714          ,NEW_POSITION_REFERENCE
2715          ,NEW_ACTIVE_START_DATE
2716          ,NEW_ACTIVE_END_DATE
2717          ,NEW_MANDATORY_FLAG
2718          ,NEW_CONTEXT
2719          ,NEW_ATTRIBUTE1
2720          ,NEW_ATTRIBUTE2
2721          ,NEW_ATTRIBUTE3
2722          ,NEW_ATTRIBUTE4
2723          ,NEW_ATTRIBUTE5
2724          ,NEW_ATTRIBUTE6
2725          ,NEW_ATTRIBUTE7
2726          ,NEW_ATTRIBUTE8
2727          ,NEW_ATTRIBUTE9
2728          ,NEW_ATTRIBUTE10
2729          ,NEW_ATTRIBUTE11
2730          ,NEW_ATTRIBUTE12
2731          ,NEW_ATTRIBUTE13
2732          ,NEW_ATTRIBUTE14
2733          ,NEW_ATTRIBUTE15
2734          ,FULL_DUMP_FLAG
2735          ,CREATED_BY
2736          ,CREATION_DATE
2737          ,LAST_UPDATED_BY
2738          ,LAST_UPDATE_DATE
2739          ,LAST_UPDATE_LOGIN
2740          ,OBJECT_VERSION_NUMBER)
2741        VALUES(
2742           l_rel_hist_tbl(i)
2743          ,l_ii_relationship_rec_tab.RELATIONSHIP_ID(i)
2744          ,l_txn_id
2745          ,l_ii_relationship_rec_tab.SUBJECT_ID(i)
2746          ,l_ii_relationship_rec_tab.POSITION_REFERENCE(i)
2747          ,l_ii_relationship_rec_tab.ACTIVE_START_DATE(i)
2748          ,l_ii_relationship_rec_tab.ACTIVE_END_DATE(i)
2749          ,l_ii_relationship_rec_tab.MANDATORY_FLAG(i)
2750          ,l_ii_relationship_rec_tab.CONTEXT(i)
2751          ,l_ii_relationship_rec_tab.ATTRIBUTE1(i)
2752          ,l_ii_relationship_rec_tab.ATTRIBUTE2(i)
2753          ,l_ii_relationship_rec_tab.ATTRIBUTE3(i)
2754          ,l_ii_relationship_rec_tab.ATTRIBUTE4(i)
2755          ,l_ii_relationship_rec_tab.ATTRIBUTE5(i)
2756          ,l_ii_relationship_rec_tab.ATTRIBUTE6(i)
2757          ,l_ii_relationship_rec_tab.ATTRIBUTE7(i)
2758          ,l_ii_relationship_rec_tab.ATTRIBUTE8(i)
2759          ,l_ii_relationship_rec_tab.ATTRIBUTE9(i)
2760          ,l_ii_relationship_rec_tab.ATTRIBUTE10(i)
2761          ,l_ii_relationship_rec_tab.ATTRIBUTE11(i)
2762          ,l_ii_relationship_rec_tab.ATTRIBUTE12(i)
2763          ,l_ii_relationship_rec_tab.ATTRIBUTE13(i)
2764          ,l_ii_relationship_rec_tab.ATTRIBUTE14(i)
2765          ,l_ii_relationship_rec_tab.ATTRIBUTE15(i)
2766          ,'Y'
2767          ,l_user_id
2768          ,sysdate
2769          ,l_user_id
2770          ,sysdate
2771          ,-1
2772          ,1);
2773     END IF;
2774     --
2775     IF l_instance_tbl.count > 0 THEN
2776       INSERT INTO CSI_TRANSACTIONS(
2777         TRANSACTION_ID
2778        ,TRANSACTION_DATE
2779        ,SOURCE_TRANSACTION_DATE
2780        ,SOURCE_HEADER_REF
2781        ,TRANSACTION_TYPE_ID
2782        ,CREATED_BY
2783        ,CREATION_DATE
2784        ,LAST_UPDATED_BY
2785        ,LAST_UPDATE_DATE
2786        ,LAST_UPDATE_LOGIN
2787        ,OBJECT_VERSION_NUMBER)
2788       VALUES(
2789         l_txn_id             -- TRANSACTION_ID
2790        ,SYSDATE              -- TRANSACTION_DATE
2791        ,SYSDATE              -- SOURCE_TRANSACTION_DATE
2792        ,'Full Dump'          -- SOURCE_HEADER_REF
2793        ,v_txn_type_id        -- TRANSACTION_TYPE_ID
2794        ,l_user_id
2795        ,sysdate
2796        ,l_user_id
2797        ,sysdate
2798        ,-1
2799        ,1);
2800        --
2801     END IF;
2802     commit;
2803     log('Insert_Full_Dump Successfully completed...');
2804   EXCEPTION
2805     when comp_error then
2806       log('Comp error in Insert_Full_Dump..');
2807       ROLLBACK TO Insert_Full_Dump;
2808     when others then
2809       log(sqlerrm);
2810       ROLLBACK TO Insert_Full_Dump;
2811   END Insert_Full_Dump;
2812 
2813   FUNCTION is_sfm_active RETURN boolean
2814   IS
2815 
2816     l_applid      number;
2820     l_activep     number;
2817     l_managerid   number;
2818 
2819     l_targetp     number;
2821     l_pmon_method varchar2(30);
2822     l_callstat    number;
2823 
2824   BEGIN
2825 
2826     SELECT application_id, concurrent_queue_id
2827     INTO   l_applid, l_managerid
2828     FROM   fnd_concurrent_queues
2829     WHERE concurrent_queue_name = 'XDP_Q_EVENT_SVC';
2830 
2831     fnd_concurrent.get_manager_status(
2832       applid      => l_applid,
2833       managerid   => l_managerid,
2834       targetp     => l_targetp,
2835       activep     => l_activep,
2836       pmon_method => l_pmon_method,
2837       callstat    => l_callstat);
2838 
2839     IF (l_targetp > 0) or (l_activep > 0) THEN
2840       RETURN (TRUE);
2841     ELSE
2842       RETURN (FALSE);
2843     END IF;
2844 
2845   END is_sfm_active;
2846 
2847   PROCEDURE get_schema_name(
2848     p_product_short_name  IN  varchar2,
2849     x_schema_name         OUT nocopy varchar2,
2850     x_return_status       OUT nocopy varchar2)
2851   IS
2852     l_status        varchar2(1);
2853     l_industry      varchar2(1);
2854     l_oracle_schema varchar2(30);
2855     l_return        boolean;
2856   BEGIN
2857 
2858     x_return_status := fnd_api.g_ret_sts_success;
2859 
2860     l_return := fnd_installation.get_app_info(
2861                   application_short_name => p_product_short_name,
2862                   status                 => l_status,
2863                   industry               => l_industry,
2864                   oracle_schema          => l_oracle_schema);
2865 
2866     IF NOT l_return THEN
2867       fnd_message.set_name('CSI', 'CSI_FND_INVALID_SCHEMA_ERROR');
2868       fnd_msg_pub.add;
2869       RAISE fnd_api.g_exc_error;
2870     END IF;
2871 
2872     x_schema_name := l_oracle_schema;
2873 
2874   EXCEPTION
2875     WHEN fnd_api.g_exc_error THEN
2876       x_return_status := fnd_api.g_ret_sts_error;
2877   END get_schema_name;
2878 
2879   PROCEDURE truncate_table(
2880     p_table_name    in varchar2)
2881   IS
2882     l_num_of_rows      number;
2883     l_truncate_handle  pls_integer := dbms_sql.open_cursor;
2884     l_statement        varchar2(200);
2885   BEGIN
2886     l_statement := 'truncate table '||p_table_name;
2887     dbms_sql.parse(l_truncate_handle, l_statement, dbms_sql.native);
2888     l_num_of_rows := dbms_sql.execute(l_truncate_handle);
2889     dbms_sql.close_cursor(l_truncate_handle);
2890   EXCEPTION
2891     WHEN others THEN
2892       null;
2893   END truncate_table;
2894 
2895   PROCEDURE get_source_type(
2896     p_mtl_txn_id         IN number,
2897     p_mtl_type_id        IN number,
2898     p_mtl_action_id      IN number,
2899     p_mtl_source_type_id IN number,
2900     p_mtl_type_class     IN number,
2901     p_mtl_txn_qty        IN number,
2902     p_release            IN varchar2,
2903     x_source_type        OUT nocopy varchar2,
2904     x_csi_txn_type_id    OUT nocopy number)
2905   IS
2906   BEGIN
2907 
2908     -- Move order issue to project
2909     IF p_mtl_action_id = 1 AND p_mtl_source_type_id = 4 AND p_mtl_type_class = 1 THEN
2910       x_source_type := 'CSIISUPT';
2911       x_csi_txn_type_id := 113;
2912       return;
2913     END IF;
2914 
2915     -- Miscellaneous issue to project
2916     IF p_mtl_action_id = 1 AND p_mtl_source_type_id in (3,6,13) AND p_mtl_type_class = 1 THEN
2917       x_source_type := 'CSIMSIPT';
2918       x_csi_txn_type_id := 121;
2919       return;
2920     END IF;
2921 
2922     -- Miscellaneous Receipt from project
2923     IF p_mtl_action_id = 27 AND p_mtl_source_type_id in (3,6,13) AND p_mtl_type_class = 1 THEN
2924       x_source_type := 'CSIMSRPT';
2925       x_csi_txn_type_id := 120;
2926       return;
2927     END IF;
2928 
2929     -- project contract issue
2930     IF p_mtl_action_id = 1 AND p_mtl_source_type_id = 16 THEN
2931       x_source_type     := 'CSIOKSHP';
2932       x_csi_txn_type_id := 326;
2933       return;
2934     END IF;
2935 
2936     -- Sales Order Shipment
2937     IF p_mtl_action_id = 1 AND p_mtl_source_type_id = 2 THEN
2938       x_source_type     := 'CSISOSHP';
2939       x_csi_txn_type_id := 51;
2940       return;
2941     END IF;
2942 
2943     -- RMA receipt
2944     IF p_mtl_action_id = 27 AND p_mtl_source_type_id = 12 THEN
2945       x_source_type     := 'CSIRMARC';
2946       x_csi_txn_type_id := 53;
2947       return;
2948     END IF;
2949 
2950     -- Subinventory Transfers
2951     IF(p_mtl_txn_qty > 0 AND   p_mtl_action_id = 2)
2952         OR
2953        (p_mtl_action_id = 28 AND p_mtl_source_type_id = 2 AND p_mtl_txn_qty > 0)
2954         OR
2955        (p_mtl_action_id = 28 AND p_mtl_source_type_id = 8 AND p_mtl_txn_qty > 0)
2956     THEN
2957       x_source_type := 'CSISUBTR';
2958       x_csi_txn_type_id := 114;
2959       return;
2960     END IF;
2961 
2962     --Interorg transit receipt
2963     IF p_mtl_action_id = 12 AND p_mtl_source_type_id = 13 THEN
2964       x_source_type := 'CSIORGTR';
2965       x_csi_txn_type_id := 144;
2966       return;
2967     END IF;
2968 
2969     --Interorg transit shipment
2970     IF p_mtl_action_id = 21 AND p_mtl_source_type_id = 13 THEN
2971       x_source_type := 'CSIORGTS';
2972       x_csi_txn_type_id := 145;
2976     --Interorg Direct Shipment
2973       return;
2974     END IF;
2975 
2977     IF p_mtl_action_id = 3 AND  p_mtl_source_type_id = 13 AND p_mtl_txn_qty > 0 THEN
2978       x_source_type := 'CSIORGDS';
2979       x_csi_txn_type_id := 143;
2980       return;
2981     END IF;
2982 
2983     -- ISO requisition receipt
2984     IF p_mtl_action_id = 12 AND p_mtl_source_type_id = 7 THEN
2985       x_source_type := 'CSIINTSR';
2986       x_csi_txn_type_id := 131;
2987       return;
2988     END IF;
2989 
2990     -- ISO shipment
2991     IF p_mtl_action_id = 21 AND p_mtl_source_type_id = 8 THEN
2992       x_source_type := 'CSIINTSS';
2993       x_csi_txn_type_id := 130;
2994       return;
2995     END IF;
2996 
2997     -- ISO direct shipment
2998     IF p_mtl_action_id = 3 AND p_mtl_source_type_id = 7 AND p_mtl_txn_qty > 0 THEN
2999       x_source_type := 'CSIINTDS';
3000       x_csi_txn_type_id := 142;
3001       return;
3002     END IF;
3003 
3004     -- PO receipt
3005     IF p_mtl_action_id = 27 AND p_mtl_source_type_id = 1 THEN
3006       x_source_type := 'CSIPOINV';
3007       x_csi_txn_type_id := 112;
3008       return;
3009     END IF;
3010 
3011     -- cycle count
3012     IF p_mtl_action_id = 4 THEN
3013       x_source_type := 'CSICYCNT';
3014       x_csi_txn_type_id := 119;
3015       return;
3016     END IF;
3017 
3018     --physical inventory
3019     IF p_mtl_action_id = 8 THEN
3020       x_source_type := 'CSIPHYIN';
3021       x_csi_txn_type_id := 118;
3022       return;
3023     END IF;
3024 
3025     -- miscellaneous receipt
3026     --
3027     IF(p_mtl_action_id = 27 AND p_mtl_type_id NOT IN (15,123,43,94) AND
3028          (p_mtl_type_class is null OR p_mtl_type_class <> 1))
3029         OR
3030        (p_mtl_action_id = 29 AND p_mtl_txn_qty > 0 AND p_mtl_source_type_id = 1)
3031         OR
3032        (p_mtl_action_id = 29 AND p_mtl_txn_qty > 0 AND p_mtl_source_type_id = 13)
3033         OR
3034        (p_mtl_action_id = 29 AND p_mtl_txn_qty > 0 AND p_mtl_source_type_id = 7)
3035     THEN
3036       x_source_type := 'CSIMSRCV';
3037       x_csi_txn_type_id := 117;
3038       return;
3039     END IF;
3040 
3041     -- miscellaneous issue
3042     IF (p_mtl_action_id = 1 AND p_mtl_source_type_id in (4,13,6,3,8)
3043        AND
3044        p_mtl_type_id NOT IN (33,122,35,37,93)
3045        AND
3046        (p_mtl_type_class is null OR p_mtl_type_class <> 1))
3047       OR
3048       (p_mtl_action_id = 29 AND p_mtl_txn_qty < 0 AND p_mtl_source_type_id = 1)
3049       OR
3050       (p_mtl_action_id = 1 AND p_mtl_txn_qty < 0 AND p_mtl_source_type_id = 1)
3051         OR
3052        (p_mtl_action_id = 29 AND p_mtl_txn_qty < 0 AND p_mtl_source_type_id = 13)
3053         OR
3054        (p_mtl_action_id = 29 AND p_mtl_txn_qty < 0 AND p_mtl_source_type_id = 7)
3055     THEN
3056       x_source_type := 'CSIMSISU';
3057       x_csi_txn_type_id := 116;
3058       return;
3059     END IF;
3060 
3061     --wip assy return
3062     IF p_mtl_action_id = 32 AND p_mtl_source_type_id = 5 THEN
3063       x_source_type := 'CSIWIPAR';
3064       x_csi_txn_type_id := 71;
3065       return;
3066     END IF;
3067 
3068     -- wip component issue
3069     IF p_mtl_action_id = 1 AND p_mtl_source_type_id = 5 THEN
3070       x_source_type := 'CSIWIPCI';
3071       x_csi_txn_type_id := 71;
3072       return;
3073     END IF;
3074 
3075     -- wip negative comp issue
3076     IF p_mtl_action_id = 33 AND p_mtl_source_type_id = 5 THEN
3077       x_source_type := 'CSIWIPNI';
3078       x_csi_txn_type_id := 72;
3079       return;
3080     END IF;
3081 
3082     -- wip component return
3083     IF p_mtl_action_id = 27 AND p_mtl_source_type_id = 5 THEN
3084       x_source_type := 'CSIWIPCR';
3085       x_csi_txn_type_id := 72;
3086       return;
3087     END IF;
3088 
3089     -- wip assembly completion
3090     IF p_mtl_action_id = 31 AND p_mtl_source_type_id = 5 THEN
3091       x_source_type := 'CSIWIPAC';
3092       x_csi_txn_type_id := 73;
3093       return;
3094     END IF;
3095 
3096     -- wip negative comp return
3097     IF p_mtl_action_id = 34 AND p_mtl_source_type_id = 5 THEN
3098       x_source_type := 'CSIWIPNR';
3099       x_csi_txn_type_id := 71;
3100       return;
3101     END IF;
3102 
3103     x_source_type     := 'NONE';
3104     x_csi_txn_type_id := -1;
3105 
3106   END get_source_type;
3107 
3108   PROCEDURE pump_txn_error(
3109     p_mtl_txn_id         IN number,
3110     p_mtl_type_id        IN number,
3111     p_mtl_action_id      IN number,
3112     p_mtl_source_type_id IN number,
3113     p_mtl_type_class     IN number,
3114     p_mtl_txn_qty        IN number,
3115     p_dequeue_flag       IN varchar2 default 'N',
3116     p_release            IN varchar2)
3117   IS
3118 
3119     l_error_rec          csi_datastructures_pub.transaction_error_rec;
3120     l_error_id           number;
3121     l_return_status      varchar2(1) := fnd_api.g_ret_sts_success;
3122     l_msg_count          number;
3123     l_msg_data           varchar2(2000);
3124     l_source_type        varchar2(20);
3125     l_csi_txn_type_id    number;
3126     l_message_string     varchar2(2000);
3127 
3131      savepoint pump_txn_error;
3128     l_error_message      varchar2(2000);
3129   BEGIN
3130 
3132 
3133      IF p_dequeue_flag = 'Y' THEN
3134        l_error_rec.processed_flag            := 'R';
3135      ELSE
3136        l_error_rec.processed_flag            := 'E';
3137      END IF;
3138 
3139      l_error_rec.error_text                  := 'Missing transaction in Install Base.';
3140      l_error_rec.error_stage                 := 'IB_UPDATE';
3141      l_error_rec.inv_material_transaction_id := p_mtl_txn_id;
3142      l_error_rec.source_id                   := p_mtl_txn_id;
3143      cse_util_pkg.build_error_string(l_message_string,'MTL_TRANSACTION_ID',p_mtl_txn_id);
3144      l_error_rec.message_string              := l_message_string;
3145 
3146      get_source_type(
3147        p_mtl_txn_id         => p_mtl_txn_id,
3148        p_mtl_type_id        => p_mtl_type_id,
3149        p_mtl_action_id      => p_mtl_action_id,
3150        p_mtl_source_type_id => p_mtl_source_type_id,
3151        p_mtl_type_class     => p_mtl_type_class,
3152        p_mtl_txn_qty        => p_mtl_txn_qty,
3153        p_release            => p_release,
3154        x_source_type        => l_source_type,
3155        x_csi_txn_type_id    => l_csi_txn_type_id);
3156 
3157      l_error_rec.source_type                 := l_source_type;
3158      l_error_rec.transaction_type_id         := l_csi_txn_type_id;
3159 
3160      log('  '||l_error_rec.inv_material_transaction_id||' '||l_error_rec.source_type||' '||
3161            l_error_rec.transaction_type_id||' '||p_mtl_type_id||' '||p_mtl_action_id||' '||
3162            p_mtl_source_type_id);
3163 
3164      csi_transactions_pvt.create_txn_error (
3165        p_api_version          => 1.0,
3166        p_init_msg_list        => fnd_api.g_true,
3167        p_commit               => fnd_api.g_false,
3168        p_validation_level     => fnd_api.g_valid_level_full,
3169        p_txn_error_rec        => l_error_rec,
3170        x_transaction_error_id => l_error_id,
3171        x_return_status        => l_return_status,
3172        x_msg_count            => l_msg_count,
3173        x_msg_data             => l_msg_data);
3174 
3175      IF l_return_status <> fnd_api.g_ret_sts_success THEN
3176        RAISE fnd_api.g_exc_error;
3177      END IF;
3178 
3179      commit;
3180 
3181   EXCEPTION
3182     WHEN fnd_api.g_exc_error THEN
3183       rollback to pump_txn_error;
3184       l_error_message := csi_t_gen_utility_pvt.dump_error_stack;
3185       log('  Error: '||l_error_message);
3186   END pump_txn_error;
3187 
3188   PROCEDURE decode_queue is
3189     CURSOR msg_cur(p_freeze_date IN date) IS
3190       SELECT msg_id,
3191              msg_code,
3192              msg_status,
3193              body_text,
3194              creation_date,
3195              description
3196       FROM   xnp_msgs
3197       WHERE  (msg_code like 'CSI%' OR msg_code like 'CSE%')
3198       AND    recipient_name is null
3199       AND    msg_status IN ('READY', 'FAILED', 'REJECTED')
3200       AND    msg_creation_date > p_freeze_date;
3201 
3202     l_amount        integer;
3203     l_msg_text      varchar2(32767);
3204     l_source_id     varchar2(200);
3205     l_source_type   varchar2(30);
3206 
3207     l_schema_name   varchar2(30);
3208     l_object_name   varchar2(80);
3209     l_freeze_date   date;
3210     l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
3211 
3212   BEGIN
3213 
3214     log(date_time_stamp||'  begin decode_queue');
3215 
3216     get_schema_name(
3217       p_product_short_name  => 'CSI',
3218       x_schema_name         => l_schema_name,
3219       x_return_status       => l_return_status);
3220 
3221     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3222       RAISE fnd_api.g_exc_error;
3223     END IF;
3224 
3225     l_object_name := l_schema_name||'.csi_xnp_msgs_temp';
3226 
3227     truncate_table(l_object_name);
3228 
3229     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
3230       csi_gen_utility_pvt.populate_install_param_rec;
3231     END IF;
3232 
3233     l_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
3234 
3235     FOR msg_rec in msg_cur(l_freeze_date)
3236     LOOP
3237 
3238       l_amount := null;
3239       l_amount := dbms_lob.getlength(msg_rec.body_text);
3240       l_msg_text := null;
3241 
3242       dbms_lob.read(
3243         lob_loc => msg_rec.body_text,
3244         amount  => l_amount,
3245         offset  => 1,
3246         buffer  => l_msg_text );
3247 
3248       l_source_id := null;
3249 
3250       IF msg_rec.msg_code in ('CSISOFUL', 'CSIRMAFL') THEN
3251         xnp_xml_utils.decode(l_msg_text, 'ORDER_LINE_ID', l_source_id);
3252         l_source_type := 'ORDER_LINE_ID';
3253       ELSE
3254         xnp_xml_utils.decode(l_msg_text, 'MTL_TRANSACTION_ID', l_source_id);
3255         l_source_type := 'MTL_TRANSACTION_ID';
3256       END IF;
3257 
3258       INSERT INTO csi_xnp_msgs_temp(
3259         msg_id,
3260         msg_code,
3261         msg_text,
3262         msg_status,
3263         source_id,
3264         source_type,
3265         creation_date,
3266         description,
3267         process_flag)
3268       VALUES(
3269         msg_rec.msg_id,
3270         msg_rec.msg_code,
3271         l_msg_text,
3275         msg_rec.creation_date,
3272         msg_rec.msg_status,
3273         l_source_id,
3274         l_source_type,
3276         msg_rec.description,
3277         'Y');
3278       IF mod(msg_cur%rowcount, 100) = 0 THEN
3279         commit;
3280       END IF;
3281     END LOOP;
3282 
3283     log(date_time_stamp||'  end decode_queue');
3284   END decode_queue;
3285 
3286   PROCEDURE dequeue_messages_as_errors
3287   IS
3288 
3289     CURSOR q_cur IS
3290       SELECT msg_id,
3291              msg_code,
3292              msg_text,
3293              msg_status,
3294              source_id,
3295              source_type,
3296              creation_date,
3297              description,
3298              process_flag
3299       FROM   csi_xnp_msgs_temp
3300       WHERE  source_type = 'MTL_TRANSACTION_ID'
3301       AND    source_id   is not null;
3302 
3303       l_release             number;
3304       l_mtl_txn_id          number;
3305       l_mtl_type_id         number;
3306       l_mtl_action_id       number;
3307       l_mtl_source_type_id  number;
3308       l_mtl_type_class      number;
3309       l_mtl_txn_qty         number;
3310 
3311       skip_message          exception;
3312 
3313   BEGIN
3314 
3315     SELECT fnd_Profile.value('csi_upgrading_from_release')
3316     INTO   l_release
3317     FROM   sys.dual;
3318 
3319     decode_queue;
3320 
3321     FOR q_rec IN q_cur
3322     LOOP
3323 
3324       BEGIN
3325 
3326         BEGIN
3327 
3328           SELECT mmt.transaction_id,
3329                  mmt.transaction_type_id ,
3330                  mmt.transaction_action_id,
3331                  mmt.transaction_source_type_id,
3332                  mtt.type_class,
3333                  mmt.transaction_quantity
3334           INTO   l_mtl_txn_id,
3335                  l_mtl_type_id,
3336                  l_mtl_action_id,
3337                  l_mtl_source_type_id,
3338                  l_mtl_type_class,
3339                  l_mtl_txn_qty
3340           FROM   mtl_material_transactions mmt,
3341                  mtl_transaction_types     mtt
3342           WHERE  mmt.transaction_id      = q_rec.source_id
3343           AND    mtt.transaction_type_id = mmt.transaction_type_id;
3344 
3345         EXCEPTION
3346           WHEN no_data_found THEN
3347             RAISE skip_message;
3348           WHEN too_many_rows THEN
3349             RAISE skip_message;
3350         END;
3351 
3352         pump_txn_error(
3353           p_mtl_txn_id         => l_mtl_txn_id,
3354           p_mtl_type_id        => l_mtl_type_id,
3355           p_mtl_action_id      => l_mtl_action_id,
3356           p_mtl_source_type_id => l_mtl_source_type_id,
3357           p_mtl_type_class     => l_mtl_type_class,
3358           p_mtl_txn_qty        => l_mtl_txn_qty,
3359           p_dequeue_flag       => 'Y',
3360           p_release            => l_release);
3361 
3362         -- this code needs to be changed to appropriate call in xnp
3363         UPDATE xnp_msgs
3364         SET    msg_status = 'PROCESSED'
3365         WHERE  msg_id     = q_rec.msg_id;
3366 
3367       EXCEPTION
3368         WHEN skip_message THEN
3369           log('  bad mtl_txn_id for message in sfm queue message_id :'||q_rec.msg_id);
3370       END;
3371     END LOOP;
3372 
3373   END dequeue_messages_as_errors;
3374 
3375   PROCEDURE pump_prior_wip_missing_txns(
3376     p_mtl_creation_date IN date,
3377     p_mtl_txn_id        IN number,
3378     p_wip_job_id        IN number)
3379   IS
3380     CURSOR prior_cur(pc_mtl_creation_date IN date, pc_wip_job_id IN number, p_freeze_date in date) IS
3381       SELECT transaction_id                  mtl_txn_id,
3382              mmt.transaction_action_id       mtl_action_id,
3383              mmt.transaction_source_type_id  mtl_source_type_id,
3384              mmt.transaction_source_id       mtl_source_id,
3385              mmt.transaction_type_id         mtl_type_id,
3386              mtt.type_class                  mtl_type_class,
3387              mmt.transaction_quantity        mtl_txn_qty
3388       FROM   mtl_system_items          msi,
3389              mtl_transaction_types     mtt,
3390              mtl_material_transactions mmt
3391       WHERE  mmt.transaction_source_type_id = 5
3392       AND    mmt.transaction_action_id IN (1, 27, 31, 32, 33, 34)
3393       AND    mmt.transaction_date        > p_freeze_date
3394       AND    mmt.transaction_source_id   = pc_wip_job_id
3395       AND    mmt.creation_date           < pc_mtl_creation_date
3396       AND    mtt.transaction_type_id     = mmt.transaction_type_id
3397       AND    msi.organization_id         = mmt.organization_id
3398       AND    msi.inventory_item_id       = mmt.inventory_item_id
3399       AND    nvl(msi.comms_nl_trackable_flag, 'N') = 'Y';
3400 
3401     l_release             varchar2(80);
3402     l_in_error            boolean;
3403     l_txn_error_flag      varchar2(1);
3404 
3405     l_in_queue            boolean;
3406     l_pending_msg_found   varchar2(1);
3407 
3408     l_processed           boolean;
3409     l_processed_flag      varchar2(1);
3410 
3411     TYPE missing_txn_rec is RECORD(
3412       mtl_txn_id          number,
3413       mtl_type_id         number,
3414       mtl_action_id       number,
3415       mtl_source_type_id  number,
3419     TYPE missing_txn_tbl is TABLE OF missing_txn_rec INDEX BY BINARY_INTEGER;
3416       mtl_type_class      number,
3417       mtl_txn_qty         number);
3418 
3420 
3421     l_missing_tbl         missing_txn_tbl;
3422     l_m_ind               binary_integer := 0;
3423 
3424     l_freeze_date         date;
3425 
3426   BEGIN
3427 
3428     l_missing_tbl.delete;
3429 
3430     SELECT fnd_Profile.value('CSI_UPGRADING_FROM_RELEASE')
3431     INTO   l_release
3432     FROM   sys.dual;
3433     --
3434     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
3435        csi_gen_utility_pvt.populate_install_param_rec;
3436      END IF;
3437      --
3438     l_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
3439     --
3440     FOR wip_txn_rec IN prior_cur(p_mtl_creation_date, p_wip_job_id, l_freeze_date)
3441     LOOP
3442 
3443       -- check if processed
3444       BEGIN
3445         SELECT 'Y' INTO l_processed_flag
3446         FROM   sys.dual
3447         WHERE  exists(
3448           SELECT '1' FROM  csi_transactions
3449           WHERE  inv_material_transaction_id = wip_txn_rec.mtl_txn_id);
3450         l_processed := true;
3451       EXCEPTION
3452         WHEN no_data_found THEN
3453           l_processed := false;
3454       END;
3455 
3456       IF NOT(l_processed) THEN
3457         -- check if errors
3458         l_in_error := false;
3459         BEGIN
3460           SELECT 'Y' INTO l_txn_error_flag
3461           FROM   sys.dual
3462           WHERE  EXISTS (
3463             SELECT '1' FROM csi_txn_errors
3464             WHERE  inv_material_transaction_id = wip_txn_rec.mtl_txn_id
3465             AND    processed_flag in ('E', 'R'));
3466           l_in_error := true;
3467         EXCEPTION
3468           WHEN no_data_found THEN
3469             l_in_error := false;
3470         END;
3471 
3472         -- check if pending in queue
3473         IF NOT(l_in_error) THEN
3474           BEGIN
3475             SELECT 'Y' INTO l_pending_msg_found
3476             FROM   sys.dual
3477             WHERE  exists (
3478               SELECT '1'
3479               FROM   csi_xnp_msgs_temp
3480               WHERE  source_type = 'MTL_TRANSACTION_ID'
3481               AND    source_id   = wip_txn_rec.mtl_txn_id
3482               AND    nvl(msg_status, 'READY') <> 'PROCESSED');
3483             l_in_queue := true;
3484           EXCEPTION
3485             WHEN no_data_found THEN
3486               l_in_queue := false;
3487           END;
3488         END IF;
3489 
3490         IF NOT(l_in_error) and NOT(l_in_queue) THEN
3491 
3492           l_m_ind := l_m_ind + 1;
3493 
3494           l_missing_tbl(l_m_ind).mtl_txn_id         := wip_txn_rec.mtl_txn_id;
3495           l_missing_tbl(l_m_ind).mtl_type_id        := wip_txn_rec.mtl_type_id;
3496           l_missing_tbl(l_m_ind).mtl_action_id      := wip_txn_rec.mtl_action_id;
3497           l_missing_tbl(l_m_ind).mtl_source_type_id := wip_txn_rec.mtl_source_type_id;
3498           l_missing_tbl(l_m_ind).mtl_type_class     := wip_txn_rec.mtl_type_class;
3499           l_missing_tbl(l_m_ind).mtl_txn_qty        := wip_txn_rec.mtl_txn_qty;
3500 
3501         END IF;
3502 
3503       END IF; -- not processed
3504     END LOOP;
3505 
3506     IF l_missing_tbl.COUNT > 0 THEN
3507       FOR l_ind IN l_missing_tbl.FIRST .. l_missing_tbl.LAST
3508       LOOP
3509         pump_txn_error(
3510           p_mtl_txn_id         => l_missing_tbl(l_ind).mtl_txn_id,
3511           p_mtl_type_id        => l_missing_tbl(l_ind).mtl_type_id,
3512           p_mtl_action_id      => l_missing_tbl(l_ind).mtl_action_id,
3513           p_mtl_source_type_id => l_missing_tbl(l_ind).mtl_source_type_id,
3514           p_mtl_type_class     => l_missing_tbl(l_ind).mtl_type_class,
3515           p_mtl_txn_qty        => l_missing_tbl(l_ind).mtl_txn_qty,
3516           p_dequeue_flag       => 'N',
3517           p_release            => l_release);
3518       END LOOP;
3519     END IF;
3520 
3521     commit;
3522 
3523   END pump_prior_wip_missing_txns;
3524 
3525   PROCEDURE pump_srl_missing_txns(
3526     p_serial_number       IN varchar2,
3527     p_item_id             IN number,
3528     p_serial_code         IN number,
3529     p_lot_code            IN number,
3530     p_freeze_date         IN date)
3531   IS
3532 
3533     l_release             varchar2(80);
3534 
3535     l_serial_code         number;
3536     l_lot_code            number;
3537 
3538     l_in_error            boolean;
3539     l_txn_error_flag      varchar2(1);
3540 
3541     l_in_queue            boolean;
3542     l_pending_msg_found   varchar2(1);
3543 
3544     l_processed           boolean;
3545     l_processed_flag      varchar2(1);
3546 
3547     TYPE missing_txn_rec is RECORD(
3548       mtl_txn_id          number,
3549       mtl_type_id         number,
3550       mtl_action_id       number,
3551       mtl_source_type_id  number,
3552       mtl_type_class      number,
3553       mtl_txn_qty         number);
3554 
3555     TYPE missing_txn_tbl is TABLE OF missing_txn_rec INDEX BY BINARY_INTEGER;
3556 
3557     l_missing_tbl         missing_txn_tbl;
3558     l_m_ind               binary_integer := 0;
3559 
3560   BEGIN
3561 
3562 
3566     INTO   l_release
3563     l_missing_tbl.delete;
3564 
3565     SELECT fnd_Profile.value('csi_upgrading_from_release')
3567     FROM   sys.dual;
3568 
3569     FOR all_txn_rec in all_txn_cur(
3570       p_serial_number => p_serial_number,
3571       p_item_id       => p_item_id)
3572     LOOP
3573 
3574       IF all_txn_rec.mtl_txn_date > p_freeze_date THEN
3575 
3576         IF  csi_inv_trxs_pkg.valid_ib_txn(all_txn_rec.mtl_txn_id) THEN
3577 
3578           -- check if processed
3579           BEGIN
3580             IF all_txn_rec.mtl_action_id in (2,3,28) THEN
3581               SELECT 'Y' INTO l_processed_flag
3582               FROM   sys.dual
3583               WHERE  exists(
3584                 SELECT '1' FROM  csi_transactions
3585                 WHERE  (inv_material_transaction_id = all_txn_rec.mtl_txn_id
3586                        OR
3587                        inv_material_transaction_id = all_txn_rec.mtl_xfer_txn_id));
3588             ELSE
3589               SELECT 'Y' INTO l_processed_flag
3590               FROM   sys.dual
3591               WHERE  exists(
3592                 SELECT '1' FROM  csi_transactions
3593                 WHERE  inv_material_transaction_id = all_txn_rec.mtl_txn_id);
3594             END IF;
3595             l_processed := true;
3596           EXCEPTION
3597             WHEN no_data_found THEN
3598               l_processed := false;
3599           END;
3600 
3601           IF l_processed THEN
3602             EXIT;
3603           END IF;
3604 
3605           -- check if errors
3606           l_in_error := false;
3607           BEGIN
3608             IF all_txn_rec.mtl_action_id in (2,3,28) THEN
3609               SELECT 'Y' INTO l_txn_error_flag
3610               FROM   sys.dual
3611               WHERE  EXISTS (
3612                 SELECT '1' FROM csi_txn_errors
3613                 WHERE  (inv_material_transaction_id = all_txn_rec.mtl_txn_id
3614                         OR
3615                         inv_material_transaction_id = all_txn_rec.mtl_xfer_txn_id)
3616                 AND    processed_flag in ('E', 'R'));
3617             ELSE
3618               SELECT 'Y' INTO l_txn_error_flag
3619               FROM   sys.dual
3620               WHERE  EXISTS (
3621                 SELECT '1' FROM csi_txn_errors
3622                 WHERE  inv_material_transaction_id = all_txn_rec.mtl_txn_id
3623                 AND    processed_flag in ('E', 'R'));
3624             END IF;
3625             l_in_error := true;
3626           EXCEPTION
3627             WHEN no_data_found THEN
3628               l_in_error := false;
3629           END;
3630 
3631           -- check if pending in queue
3632           IF NOT(l_in_error) THEN
3633             BEGIN
3634               SELECT 'Y' INTO l_pending_msg_found
3635               FROM   sys.dual
3636               WHERE  exists (
3637                 SELECT '1'
3638                 FROM   csi_xnp_msgs_temp
3639                 WHERE  source_type = 'MTL_TRANSACTION_ID'
3640                 AND    source_id   = all_txn_rec.mtl_txn_id
3641                 AND    nvl(msg_status, 'READY') <> 'PROCESSED');
3642               l_in_queue := true;
3643             EXCEPTION
3644               WHEN no_data_found THEN
3645                 l_in_queue := false;
3646             END;
3647           END IF;
3648 
3649           IF NOT(l_in_error) and NOT(l_in_queue) THEN
3650 
3651             l_m_ind := l_m_ind + 1;
3652 
3653             l_missing_tbl(l_m_ind).mtl_txn_id         := all_txn_rec.mtl_txn_id;
3654             l_missing_tbl(l_m_ind).mtl_type_id        := all_txn_rec.mtl_type_id;
3655             l_missing_tbl(l_m_ind).mtl_action_id      := all_txn_rec.mtl_action_id;
3656             l_missing_tbl(l_m_ind).mtl_source_type_id := all_txn_rec.mtl_source_type_id;
3657             l_missing_tbl(l_m_ind).mtl_type_class     := all_txn_rec.mtl_type_class;
3658             l_missing_tbl(l_m_ind).mtl_txn_qty        := all_txn_rec.mtl_txn_qty;
3659 
3660           END IF;
3661 
3662         END IF; -- valid ib transaction
3663 
3664       END IF;
3665     END LOOP;
3666 
3667     IF l_missing_tbl.COUNT > 0 THEN
3668       FOR l_ind IN l_missing_tbl.FIRST .. l_missing_tbl.LAST
3669       LOOP
3670         pump_txn_error(
3671           p_mtl_txn_id         => l_missing_tbl(l_ind).mtl_txn_id,
3672           p_mtl_type_id        => l_missing_tbl(l_ind).mtl_type_id,
3673           p_mtl_action_id      => l_missing_tbl(l_ind).mtl_action_id,
3674           p_mtl_source_type_id => l_missing_tbl(l_ind).mtl_source_type_id,
3675           p_mtl_type_class     => l_missing_tbl(l_ind).mtl_type_class,
3676           p_mtl_txn_qty        => l_missing_tbl(l_ind).mtl_txn_qty,
3677           p_dequeue_flag       => 'N',
3678           p_release            => l_release);
3679       END LOOP;
3680     END IF;
3681 
3682     commit;
3683 
3684   END pump_srl_missing_txns;
3685 
3686   PROCEDURE pump_all_missing_txns
3687   IS
3688 
3689     TYPE NumTabType is    varray(10000) of number;
3690     TYPE VarTabType is    varray(10000) of varchar2(80);
3691 
3692     l_serial_number_tab   VarTabType;
3693     l_item_id_tab         NumTabType;
3694     l_organization_id_tab NumTabType;
3695 
3696     MAX_BUFFER_SIZE       number := 1000;
3697 
3698     CURSOR all_srl_cur  IS
3702       FROM   mtl_serial_numbers msn
3699       SELECT msn.serial_number              serial_number,
3700              msn.inventory_item_id          item_id,
3701              msn.current_organization_id    organization_id
3703       WHERE  exists (
3704         SELECT '1'
3705         FROM   mtl_system_items msi,
3706                mtl_parameters   mp
3707         WHERE  mp.organization_id    = msn.current_organization_id
3708         AND    msi.organization_id   = mp.master_organization_id
3709         AND    msi.inventory_item_id = msn.inventory_item_id
3710         AND    nvl(msi.comms_nl_trackable_flag, 'N') = 'Y');
3711 
3712     l_freeze_date         date;
3713     l_serial_code         number;
3714     l_lot_code            number;
3715 
3716   BEGIN
3717 
3718     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
3719        csi_gen_utility_pvt.populate_install_param_rec;
3720     END IF;
3721     --
3722     l_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
3723     --
3724     OPEN all_srl_cur;
3725     LOOP
3726 
3727       FETCH all_srl_cur BULK COLLECT
3728       INTO  l_serial_number_tab,
3729             l_item_id_tab,
3730             l_organization_id_tab
3731       LIMIT MAX_BUFFER_SIZE;
3732 
3733       FOR ind IN 1 .. l_serial_number_tab.COUNT
3734       LOOP
3735 
3736         log(' Serial Number : '||l_serial_number_tab(ind));
3737 
3738         SELECT serial_number_control_code,
3739                lot_control_code
3740         INTO   l_serial_code,
3741                l_lot_code
3742         FROM   mtl_system_items
3743         WHERE  inventory_item_id = l_item_id_tab(ind)
3744         AND    organization_id   = l_organization_id_tab(ind);
3745 
3746         pump_srl_missing_txns(
3747           p_serial_number       => l_serial_number_tab(ind),
3748           p_item_id             => l_item_id_tab(ind),
3749           p_serial_code         => l_serial_code,
3750           p_lot_code            => l_lot_code,
3751           p_freeze_date         => l_freeze_date);
3752 
3753       END LOOP;
3754 
3755       EXIT when all_srl_cur%NOTFOUND;
3756 
3757     END LOOP;
3758 
3759     IF all_srl_cur%ISOPEN THEN
3760       CLOSE all_srl_cur;
3761     END IF;
3762 
3763   END pump_all_missing_txns;
3764 
3765   PROCEDURE pump_err_missing_txns
3766   IS
3767 
3768     CURSOR tld_inst_cur(p_order_line_id in number) IS
3769       SELECT tld.instance_id,
3770              tld.serial_number,
3771              tld.inventory_item_id,
3772              tld.inv_organization_id
3773       FROM   csi_t_txn_line_details tld,
3774              csi_t_transaction_lines tl
3775       WHERE  tl.source_transaction_table = 'OE_ORDER_LINES_ALL'
3776       AND    tl.source_transaction_id    = p_order_line_id
3777       AND    tld.transaction_line_id     = tl.transaction_line_id
3778       AND    tld.instance_id is not null;
3779 
3780     l_mtl_source_type_id  number;
3781     l_mtl_action_id       number;
3782     l_wip_job_id          number;
3783 
3784     TYPE NumTabType is    varray(10000) of number;
3785     l_mtl_txn_id_tab      NumTabType;
3786     l_txn_error_id_tab    NumTabType;
3787     max_buffer_size       number := 1000;
3788 
3789     l_freeze_date         date;
3790     l_inv_item_id         number;
3791     l_inv_org_id          number;
3792     l_serial_code         number;
3793     l_lot_code            number;
3794 
3795     skip_error            exception;
3796 
3797     l_err_txn_date        date;
3798     l_order_line_id       number;
3799     l_inst_serial_number  varchar2(80);
3800     l_inst_item_id        number;
3801     l_inst_vld_org_id     number;
3802     l_mtl_creation_date   date;
3803 
3804   BEGIN
3805 
3806     log(date_time_stamp||'  begin pump_err_missing_txn');
3807 
3808     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
3809        csi_gen_utility_pvt.populate_install_param_rec;
3810     END IF;
3811     --
3812     l_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
3813     --
3814     OPEN error_cur;
3815     LOOP
3816 
3817       FETCH error_cur BULK COLLECT
3818       INTO  l_mtl_txn_id_tab,
3819             l_txn_error_id_tab
3820       LIMIT max_buffer_size;
3821 
3822       FOR ind IN 1 .. l_mtl_txn_id_tab.COUNT
3823       LOOP
3824 
3825         BEGIN
3826           BEGIN
3827             SELECT inventory_item_id,
3828                    organization_id,
3829                    transaction_source_type_id,
3830                    transaction_action_id,
3831                    transaction_source_id,
3832                    trx_source_line_id,
3833                    transaction_date,
3834                    creation_date
3835             INTO   l_inv_item_id,
3836                    l_inv_org_id,
3837                    l_mtl_source_type_id,
3838                    l_mtl_action_id,
3839                    l_wip_job_id,
3840                    l_order_line_id,
3841                    l_err_txn_date,
3842                    l_mtl_creation_date
3843             FROM   mtl_material_transactions
3844             WHERE  transaction_id = l_mtl_txn_id_tab(ind);
3845           EXCEPTION
3846             WHEN no_data_found THEN
3847               RAISE skip_error;
3851 
3848             WHEN too_many_rows THEN
3849               RAISE skip_error;
3850           END;
3852           IF l_err_txn_date < l_freeze_date THEN
3853             RAISE skip_error;
3854           END IF;
3855 
3856           SELECT serial_number_control_code,
3857                  lot_control_code
3858           INTO   l_serial_code,
3859                  l_lot_code
3860           FROM   mtl_system_items
3861           WHERE  inventory_item_id = l_inv_item_id
3862           AND    organization_id   = l_inv_org_id;
3863 
3864           FOR srl_rec in srl_cur(l_mtl_txn_id_tab(ind))
3865           LOOP
3866 
3867             pump_srl_missing_txns(
3868               p_serial_number       => srl_rec.serial_number,
3869               p_item_id             => srl_rec.item_id,
3870               p_serial_code         => l_serial_code,
3871               p_lot_code            => l_lot_code,
3872               p_freeze_date         => l_freeze_date);
3873 
3874           END LOOP;
3875 
3876           IF l_mtl_action_id = 31 AND l_mtl_source_type_id = 5 THEN
3877 
3878             /* this routine pumps the prior wip transactions even if a txn is
3879                successfully processed later than the prior transaction
3880                forced pump for prior WIP transaction
3881             */
3882             pump_prior_wip_missing_txns(
3883               p_mtl_creation_date => l_mtl_creation_date,
3884               p_mtl_txn_id        => l_mtl_txn_id_tab(ind),
3885               p_wip_job_id        => l_wip_job_id);
3886 
3887           END IF;
3888 
3889           IF (l_mtl_action_id = 1 AND l_mtl_source_type_id = 2) OR -- sales order issue
3890              (l_mtl_action_id = 1 AND l_mtl_source_type_id = 8) OR -- int order issue
3891              (l_mtl_action_id = 27 AND l_mtl_source_type_id = 12)  -- rma receipt
3892           THEN
3893 
3894             FOR tld_inst_rec IN tld_inst_cur(l_order_line_id)
3895             LOOP
3896 
3897               l_inst_serial_number := tld_inst_rec.serial_number;
3898               l_inst_item_id       := tld_inst_rec.inventory_item_id;
3899               l_inst_vld_org_id    := tld_inst_rec.inv_organization_id;
3900 
3901               IF l_inst_serial_number is null THEN
3902                 SELECT serial_number,
3903                        inventory_item_id,
3904                        last_vld_organization_id
3905                 INTO   l_inst_serial_number,
3906                        l_inst_item_id,
3907                        l_inst_vld_org_id
3908                 FROM   csi_item_instances
3909                 WHERE  instance_id = tld_inst_rec.instance_id;
3910               END IF;
3911 
3912               IF l_inst_serial_number is not null THEN
3913 
3914                 SELECT serial_number_control_code,
3915                        lot_control_code
3916                 INTO   l_serial_code,
3917                        l_lot_code
3918                 FROM   mtl_system_items
3919                 WHERE  inventory_item_id = l_inst_item_id
3920                 AND    organization_id   = l_inst_vld_org_id;
3921 
3922                 pump_srl_missing_txns(
3923                   p_serial_number       => l_inst_serial_number,
3924                   p_item_id             => l_inst_item_id,
3925                   p_serial_code         => l_serial_code,
3926                   p_lot_code            => l_lot_code,
3927                   p_freeze_date         => l_freeze_date);
3928 
3929               END IF;
3930 
3931             END LOOP;
3932           END IF;
3933 
3934 
3935         EXCEPTION
3936           WHEN skip_error THEN
3937             log('  bad csi_txn_errors.mtl_txn_id : '||l_mtl_txn_id_tab(ind));
3938         END;
3939       END LOOP;
3940 
3941       EXIT when error_cur%NOTFOUND;
3942 
3943     END LOOP;
3944 
3945     IF error_cur%ISOPEN THEN
3946       CLOSE error_cur;
3947     END IF;
3948 
3949     log(date_time_stamp||'  end pump_err_missing_txn');
3950 
3951   END pump_err_missing_txns;
3952 
3953   /* main routine for populating the error stage of the serial transaction */
3954   PROCEDURE get_srldata(
3955     p_single_error_flag  IN  varchar2,
3956     p_mtl_txn_id         IN  number)
3957   IS
3958 
3959     CURSOR single_error_cur(pc_mtl_txn_id IN number) is
3960       SELECT cte.inv_material_transaction_id mtl_txn_id,
3961              cte.transaction_error_id        txn_error_id
3962       FROM   csi_txn_errors cte
3963       WHERE  cte.inv_material_transaction_id = pc_mtl_txn_id
3964       AND    cte.processed_flag in ('E', 'R');
3965 
3966     TYPE NumTabType is       varray(10000) of number;
3967     l_mtl_txn_id_tab         NumTabType;
3968     l_txn_error_id_tab       NumTabType;
3969     max_buffer_size          number := 1000;
3970 
3971     l_release                varchar2(80);
3972 
3973     l_diag_seq_id            number := 1000;
3974     l_freeze_date            date;
3975     l_inv_item_id            number;
3976     l_inv_org_id             number;
3977 
3978     l_unit_txn_found         boolean;
3979     l_knock_err_txn          boolean;
3980     l_err_txn_serial_code    number;
3981     l_err_txn_lot_code       number;
3982     l_err_txn_source_type_id number;
3983     l_err_txn_action_id      number;
3984     l_err_txn_date           date;
3985 
3986     l_serial_code            number;
3990     l_inst_id                number;
3987     l_lot_code               number;
3988     l_revision_code          number;
3989 
3991     l_inst_vld_org_id        number;
3992     l_inst_location          varchar2(80);
3993     l_inst_usage_code        varchar2(30);
3994     l_owner_ip_id            number;
3995     l_owner_ipa_id           number;
3996     l_inst_owner_pty_id      number;
3997     l_inst_owner_acct_id     number;
3998     l_inst_end_date          date;
3999     l_inst_org_id            number;
4000     l_inst_subinv_name       varchar2(30);
4001     l_inst_rev_num           varchar2(10);
4002 
4003     l_csi_txn_id             number;
4004     l_csi_txn_type_id        number;
4005     l_order_line_id          number;
4006     l_rma_line_id            number;
4007     l_wip_job_id             number;
4008     l_create_flag            varchar2(1) := 'N';
4009     l_error_flag             varchar2(1);
4010     l_last_txn               boolean;
4011     l_last_txn_flag          varchar2(1);
4012 
4013     l_error                  varchar2(2000);
4014 
4015     l_already_inserted       varchar2(1);
4016     l_inst_mig_flag          varchar2(1);
4017     l_internal_party_id      number;
4018     l_process_flag           varchar2(1);
4019     l_temp_message           varchar2(540);
4020     l_source_type            varchar2(30);
4021 
4022     l_txn_rec                csi_datastructures_pub.transaction_rec;
4023     l_return_status          varchar2(1) := fnd_api.g_ret_sts_success;
4024     l_msg_count              number;
4025     l_msg_data               varchar2(2000);
4026 
4027     skip_insert              exception;
4028     skip_error               exception;
4029 
4030     l_schema_name            varchar2(30);
4031     l_object_name            varchar2(80);
4032 
4033   BEGIN
4034 
4035     -- dumps the xnp_msgs in to csi_xnp_msgs_tmp with the decoded value
4036     decode_queue;
4037 
4038     -- pump missing transaction for the serial numbers that are in error condition
4039     pump_err_missing_txns;
4040 
4041     get_schema_name(
4042       p_product_short_name  => 'CSI',
4043       x_schema_name         => l_schema_name,
4044       x_return_status       => l_return_status);
4045 
4046     IF l_return_status <> fnd_api.g_ret_sts_success THEN
4047       RAISE fnd_api.g_exc_error;
4048     END IF;
4049 
4050     l_object_name := l_schema_name||'.csi_diagnostics_temp';
4051 
4052     -- cleans up the temporary process table
4053     truncate_table(l_object_name);
4054 
4055     log(date_time_stamp||'  begin get_srldata');
4056 
4057     SELECT fnd_Profile.value('csi_upgrading_from_release')
4058     INTO   l_release
4059     FROM   sys.dual;
4060     --
4061     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
4062       csi_gen_utility_pvt.populate_install_param_rec;
4063     END IF;
4064     --
4065     l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
4066     l_freeze_date       := csi_datastructures_pub.g_install_param_rec.freeze_date;
4067     --
4068     /* bulk fetch all the txn errors, 1000 records at a time */
4069     IF p_single_error_flag = 'Y' THEN
4070       OPEN single_error_cur(p_mtl_txn_id);
4071     ELSE
4072       /* bulk fetch all the txn errors, 1000 records at a time */
4073       OPEN error_cur;
4074     END IF;
4075     LOOP
4076 
4077       IF p_single_error_flag = 'Y' THEN
4078         FETCH single_error_cur BULK COLLECT
4079         INTO  l_mtl_txn_id_tab,
4080               l_txn_error_id_tab
4081         LIMIT max_buffer_size;
4082       ELSE
4083         FETCH error_cur BULK COLLECT
4084         INTO  l_mtl_txn_id_tab,
4085               l_txn_error_id_tab
4086         LIMIT max_buffer_size;
4087       END IF;
4088 
4089       FOR ind IN 1 .. l_mtl_txn_id_tab.COUNT
4090       LOOP
4091 
4092         BEGIN
4093 
4094           BEGIN
4095             SELECT inventory_item_id,
4096                    organization_id,
4097                    transaction_source_type_id,
4098                    transaction_action_id,
4099                    transaction_date
4100             INTO   l_inv_item_id,
4101                    l_inv_org_id,
4102                    l_err_txn_source_type_id,
4103                    l_err_txn_action_id,
4104                    l_err_txn_date
4105             FROM   mtl_material_transactions
4106             WHERE  transaction_id = l_mtl_txn_id_tab(ind);
4107           EXCEPTION
4108             WHEN no_data_found THEN
4109               RAISE skip_error;
4110             WHEN too_many_rows THEN
4111               RAISE skip_error;
4112           END;
4113 
4114           IF l_err_txn_date < l_freeze_date THEN
4115 
4116             UPDATE csi_txn_errors
4117             SET    processed_flag    = 'D',
4118                    error_text        = 'Transaction prior to freeze_date in install parameter',
4119                    last_update_login = fnd_global.login_id,
4120                    last_update_date  = sysdate,
4121                    last_updated_by   = fnd_global.user_id
4122             WHERE  transaction_error_id = l_txn_error_id_tab(ind);
4123 
4124             RAISE skip_error;
4125           END IF;
4126 
4127           SELECT serial_number_control_code,
4128                  lot_control_code
4132           WHERE  inventory_item_id = l_inv_item_id
4129           INTO   l_err_txn_serial_code,
4130                  l_err_txn_lot_code
4131           FROM   mtl_system_items
4133           AND    organization_id   = l_inv_org_id;
4134 
4135           l_unit_txn_found := FALSE;
4136 
4137           FOR srl_rec in srl_cur(
4138             p_mtl_txn_id  => l_mtl_txn_id_tab(ind))
4139           LOOP
4140 
4141             l_unit_txn_found      := TRUE;
4142 
4143             l_inst_id             := null;
4144             l_inst_vld_org_id     := null;
4145             l_inst_location       := null;
4146             l_inst_usage_code     := null;
4147             l_owner_ip_id         := null;
4148             l_owner_ipa_id        := null;
4149             l_inst_owner_pty_id   := null;
4150             l_inst_owner_acct_id  := null;
4151             l_inst_end_date       := null;
4152             l_inst_org_id         := null;
4153             l_inst_subinv_name    := null;
4154             l_inst_mig_flag       := null;
4155             l_process_flag        := 'N';
4156             l_temp_message        := null;
4157             l_create_flag         := 'N';
4158 
4159             BEGIN
4160               SELECT instance_id ,
4161                      last_vld_organization_id,
4162                      owner_party_id,
4163                      owner_party_account_id,
4164                      location_type_code,
4165                      instance_usage_code,
4166                      active_end_date,
4167                      inv_organization_id,
4168                      inv_subinventory_name,
4169                      inventory_revision,
4170                      nvl(migrated_flag, 'N')
4171               INTO   l_inst_id,
4172                      l_inst_vld_org_id,
4173                      l_inst_owner_pty_id,
4174                      l_inst_owner_acct_id,
4175                      l_inst_location,
4176                      l_inst_usage_code,
4177                      l_inst_end_date,
4178                      l_inst_org_id,
4179                      l_inst_subinv_name,
4180                      l_inst_rev_num,
4181                      l_inst_mig_flag
4182               FROM   csi_item_instances
4183               WHERE  inventory_item_id = srl_rec.item_id
4184               AND    serial_number     = srl_rec.serial_number;
4185 
4186               l_create_flag := 'N';
4187 
4188               BEGIN
4189                 SELECT instance_party_id
4190                 INTO   l_owner_ip_id
4191                 FROM   csi_i_parties
4192                 WHERE  instance_id            = l_inst_id
4193                 AND    relationship_type_code = 'OWNER'
4194                 AND    rownum                 = 1;
4195 
4196                 BEGIN
4197                   SELECT ip_account_id
4198                   INTO   l_owner_ipa_id
4199                   FROM   csi_ip_accounts
4200                   WHERE  instance_party_id      = l_owner_ip_id
4201                   AND    relationship_type_code = 'OWNER';
4202                 EXCEPTION
4203                   WHEN no_data_found THEN
4204                     l_owner_ipa_id := null;
4205                 END;
4206 
4207               EXCEPTION
4208                 WHEN no_data_found THEN
4209                   l_owner_ip_id := null;
4210               END;
4211 
4212             EXCEPTION
4213               WHEN no_data_found THEN
4214                 l_create_flag := 'Y';
4215                 null;
4216               WHEN too_many_rows THEN
4217                 l_create_flag  := 'N';
4218                 l_process_flag := 'E';
4219                 l_temp_message := 'Multiple serialized instances found';
4220             END;
4221 
4222             l_last_txn := TRUE;
4223 
4224             FOR txn_rec in all_txn_cur (
4225               p_serial_number => srl_rec.serial_number,
4226               p_item_id       => srl_rec.item_id)
4227             LOOP
4228 
4229               IF txn_rec.mtl_txn_date > l_freeze_date THEN
4230 
4231                 BEGIN
4232 
4233                   IF not csi_inv_trxs_pkg.valid_ib_txn(txn_rec.mtl_txn_id) THEN
4234                     raise skip_insert;
4235                   END IF;
4236 
4237                   IF l_last_txn THEN
4238                     l_last_txn_flag := 'Y';
4239                   ELSE
4240                     l_last_txn_flag := 'N';
4241                   END IF;
4242 
4243                   l_last_txn := FALSE;
4244 
4245                   l_order_line_id := null;
4246                   l_rma_line_id   := null;
4247                   l_wip_job_id    := null;
4248 
4249                   -- sales order shipment -- pick release
4250                   IF txn_rec.mtl_type_id in (33,52)  THEN
4251                     l_order_line_id := txn_rec.mtl_source_line_id;
4252                   END IF;
4253 
4254                   -- rma receipt
4255                   IF txn_rec.mtl_type_id = 15 THEN
4256                     l_rma_line_id := txn_rec.mtl_source_line_id;
4257                   END IF;
4258 
4259                   -- wip transactions
4260                   IF txn_rec.mtl_source_type_id = 5 THEN
4261                     l_wip_job_id  := txn_rec.mtl_source_id;
4262                   END IF;
4263 
4267                   BEGIN
4264                   l_csi_txn_id      := null;
4265                   l_csi_txn_type_id := null;
4266 
4268                     IF txn_rec.mtl_action_id in (2,3,28) THEN
4269                       SELECT cte.transaction_type_id,
4270                              cte.error_text
4271                       INTO   l_csi_txn_type_id,
4272                              l_error
4273                       FROM   csi_txn_errors cte
4274                       WHERE  (cte.inv_material_transaction_id = txn_rec.mtl_txn_id
4275                               OR
4276                               cte.inv_material_transaction_id = txn_rec.mtl_xfer_txn_id)
4277                       AND    cte.processed_flag  in ('E', 'R')
4278                       AND    rownum = 1;
4279                     ELSE
4280                       SELECT cte.transaction_type_id,
4281                              cte.error_text
4282                       INTO   l_csi_txn_type_id,
4283                              l_error
4284                       FROM   csi_txn_errors cte
4285                       WHERE  cte.inv_material_transaction_id = txn_rec.mtl_txn_id
4286                       AND    cte.processed_flag  in ('E', 'R')
4287                       AND    rownum = 1;
4288                     END IF;
4289 
4290                     l_error_flag := 'E';
4291                   EXCEPTION
4292                     WHEN no_data_found THEN
4293                       l_error_flag := 'M';
4294                       l_error := null;
4295                   END;
4296 
4297                   BEGIN
4298                     IF txn_rec.mtl_action_id in (2,3,28) THEN
4299                       SELECT transaction_id,
4300                              transaction_type_id
4301                       INTO   l_csi_txn_id,
4302                              l_csi_txn_type_id
4303                       FROM   csi_transactions
4304                       WHERE (inv_material_transaction_id = txn_rec.mtl_txn_id
4305                              OR
4306                              inv_material_transaction_id = txn_rec.mtl_xfer_txn_id)
4307                       AND    rownum = 1;
4308                     ELSE
4309                       SELECT transaction_id,
4310                              transaction_type_id
4311                       INTO   l_csi_txn_id,
4312                              l_csi_txn_type_id
4313                       FROM   csi_transactions
4314                       WHERE  inv_material_transaction_id = txn_rec.mtl_txn_id
4315                       AND    rownum = 1;
4316                     END IF;
4317                   EXCEPTION
4318                     WHEN no_data_found THEN
4319                       l_csi_txn_id := null;
4320                   END;
4321 
4322                   IF nvl(l_error_flag,'P') = 'E' THEN
4323                     l_error_flag := 'E';
4324                   ELSE
4325                     IF l_csi_txn_id is not null THEN
4326                       l_error_flag := 'P';
4327                     END IF;
4328                   END IF;
4329 
4330                   BEGIN
4331                     SELECT 'Y' INTO l_already_inserted
4332                     FROM   csi_diagnostics_temp
4333                     WHERE  serial_number      = srl_rec.serial_number
4334                     AND    inventory_item_id  = srl_rec.item_id
4335                     AND    mtl_txn_id         = txn_rec.mtl_txn_id;
4336                   EXCEPTION
4337                     WHEN no_data_found THEN
4338 
4339                       SELECT serial_number_control_code,
4340                              lot_control_code ,
4341                              revision_qty_control_code
4342                       INTO   l_serial_code,
4343                              l_lot_code,
4344                              l_revision_code
4345                       FROM   mtl_system_items
4346                       WHERE  inventory_item_id = txn_rec.item_id
4347                       AND    organization_id   = txn_rec.organization_id;
4348 
4349                       get_source_type(
4350                         p_mtl_txn_id         => txn_rec.mtl_txn_id,
4351                         p_mtl_type_id        => txn_rec.mtl_type_id,
4352                         p_mtl_action_id      => txn_rec.mtl_action_id,
4353                         p_mtl_source_type_id => txn_rec.mtl_source_type_id,
4354                         p_mtl_type_class     => txn_rec.mtl_type_class,
4355                         p_mtl_txn_qty        => txn_rec.mtl_txn_qty,
4356                         p_release            => l_release,
4357                         x_source_type        => l_source_type,
4358                         x_csi_txn_type_id    => l_csi_txn_type_id);
4359 
4360                       l_diag_seq_id := l_diag_seq_id + 1;
4361 
4362                       INSERT INTO csi_diagnostics_temp(
4363                         diag_seq_id,
4364                         serial_number,
4365                         lot_number,
4366                         serial_control_code,
4367                         lot_control_code,
4368                         revision_control_code,
4369                         mtl_creation_date,
4370                         mtl_txn_date,
4371                         mtl_txn_id,
4372                         mtl_txn_name,
4373                         mtl_txn_qty,
4374                         mtl_xfer_txn_id,
4375                         mtl_item_revision,
4376                         inventory_item_id,
4377                         organization_id,
4381                         mtl_action_id,
4378                         error_flag,
4379                         error_text,
4380                         mtl_type_id,
4382                         mtl_src_type_id,
4383                         mtl_type_class,
4384                         source_type,
4385                         csi_txn_type_id,
4386                         csi_txn_id,
4387                         oe_order_line_id,
4388                         wip_job_id,
4389                         oe_rma_line_id,
4390                         instance_id,
4391                         instance_vld_organization_id,
4392                         instance_location,
4393                         instance_usage_code,
4394                         instance_organization_id,
4395                         instance_subinv_name,
4396                         instance_revision,
4397                         instance_end_date,
4398                         instance_owner_party_id,
4399                         instance_owner_account_id,
4400                         instance_mig_flag,
4401                         internal_party_id,
4402                         last_transaction_flag,
4403                         create_flag,
4404                         process_flag,
4405                         temporary_message)
4406                       VALUES(
4407                         l_diag_seq_id,
4408                         srl_rec.serial_number,
4409                         txn_rec.lot_number,
4410                         l_serial_code,
4411                         l_lot_code,
4412                         l_revision_code,
4413                         txn_rec.mtl_creation_date,
4414                         txn_rec.mtl_txn_date,
4415                         txn_rec.mtl_txn_id,
4416                         txn_rec.mtl_txn_name,
4417                         txn_rec.mtl_txn_qty,
4418                         txn_rec.mtl_xfer_txn_id,
4419                         txn_rec.mtl_revision,
4420                         srl_rec.item_id,
4421                         txn_rec.organization_id,
4422                         l_error_flag,
4423                         l_error,
4424                         txn_rec.mtl_type_id,
4425                         txn_rec.mtl_action_id,
4426                         txn_rec.mtl_source_type_id,
4427                         txn_rec.mtl_type_class,
4428                         l_source_type,
4429                         l_csi_txn_type_id,
4430                         l_csi_txn_id,
4431                         l_order_line_id,
4432                         l_wip_job_id,
4433                         l_rma_line_id,
4434                         l_inst_id,
4435                         l_inst_vld_org_id,
4436                         l_inst_location,
4437                         l_inst_usage_code,
4438                         l_inst_org_id,
4439                         l_inst_subinv_name,
4440                         l_inst_rev_num,
4441                         l_inst_end_date,
4442                         l_inst_owner_pty_id,
4443                         l_inst_owner_acct_id,
4444                         l_inst_mig_flag,
4445                         l_internal_party_id,
4446                         l_last_txn_flag,
4447                         l_create_flag,
4448                         l_process_flag,
4449                         l_temp_message);
4450 
4451                       commit;
4452 
4453                   END;
4454 
4455                 EXCEPTION
4456                   WHEN skip_insert THEN
4457                     null;
4458                 END;
4459               END IF;
4460             END LOOP;
4461           END LOOP;
4462 
4463           l_knock_err_txn  := FALSE;
4464 
4465           -- serialized and no unit txn
4466           IF l_err_txn_serial_code IN (2, 5) AND NOT(l_unit_txn_found) THEN
4467             l_knock_err_txn := TRUE;
4468           END IF;
4469 
4470           -- non serial and having unit txn
4471           IF l_err_txn_serial_code = 1 AND l_unit_txn_found THEN
4472             l_knock_err_txn := TRUE;
4473           END IF;
4474 
4475           IF l_err_txn_serial_code = 6 THEN
4476             -- exclude rma and shipments from knocking
4477             IF (l_err_txn_action_id = 27 AND l_err_txn_source_type_id = 12) -- RMA
4478                 OR
4479                (l_err_txn_action_id = 1  AND l_err_txn_source_type_id = 2)  -- Ship
4480             THEN
4481               IF NOT(l_unit_txn_found)  THEN
4482                 l_knock_err_txn := TRUE;
4483               ELSE
4484                 l_knock_err_txn := FALSE;
4485               END IF;
4486             ELSE
4487               IF l_unit_txn_found  THEN
4488                 IF (l_err_txn_action_id = 3  AND l_err_txn_source_type_id = 8) -- ISO Direct Ship
4489                     OR
4490                    (l_err_txn_action_id = 12 AND l_err_txn_source_type_id = 7) -- ISO Intr Receipt
4491                     OR
4492                    (l_err_txn_action_id = 21 AND l_err_txn_source_type_id = 8) -- ISO Intr Ship
4493                     OR
4494                    (l_err_txn_action_id = 1 AND l_err_txn_source_type_id = 8)  -- Internal Order Issue
4495                     OR
4496                    (l_err_txn_action_id = 1 AND l_err_txn_source_type_id = 16) -- Proj Contract Issue
4497                 THEN
4498                   l_knock_err_txn := FALSE;
4502               ELSE
4499                 ELSE
4500                   l_knock_err_txn := TRUE;
4501                 END IF;
4503                 l_knock_err_txn := FALSE;
4504               END IF;
4505             END IF;
4506           END IF;
4507 
4508           IF l_knock_err_txn THEN
4509             UPDATE csi_txn_errors
4510             SET    processed_flag = 'D',
4511                    error_text     = 'Serial control is now inappropriate for this txn. Knocking this',
4512                    last_update_date  = sysdate,
4513                    last_update_login = fnd_global.login_id,
4514                    last_updated_by   = fnd_global.user_id
4515             WHERE  inv_material_transaction_id = l_mtl_txn_id_tab(ind)
4516             AND    processed_flag in ('E', 'R');
4517 
4518             DELETE FROM csi_diagnostics_temp
4519             WHERE  mtl_txn_id = l_mtl_txn_id_tab(ind)
4520             AND    error_flag = 'E';
4521 
4522             -- for wip errors that are knocked we write a csi transaction '
4523             -- to make the completion goes thru
4524             IF l_err_txn_source_type_id = 5 OR l_unit_txn_found THEN
4525 
4526               l_txn_rec.transaction_id                := fnd_api.g_miss_num;
4527               l_txn_rec.transaction_type_id           := correction_txn_type_id;
4528               l_txn_rec.source_header_ref             := 'DATAFIX';
4529               l_txn_rec.source_line_ref               := 'SRLCONTROL TXN MISMATCH';
4530               l_txn_rec.source_transaction_date       := l_err_txn_date;
4531               l_txn_rec.transaction_date              := sysdate;
4532               l_txn_rec.inv_material_transaction_id   := l_mtl_txn_id_tab(ind);
4533 
4534               csi_transactions_pvt.create_transaction (
4535                 p_api_version             => 1.0,
4536                 p_commit                  => fnd_api.g_false,
4537                 p_init_msg_list           => fnd_api.g_true,
4538                 p_validation_level        => fnd_api.g_valid_level_full,
4539                 p_success_if_exists_flag  => 'Y',
4540                 p_transaction_rec         => l_txn_rec,
4541                 x_return_status           => l_return_status,
4542                 x_msg_count               => l_msg_count,
4543                 x_msg_data                => l_msg_data  );
4544 
4545             END IF;
4546           END IF;
4547 
4548         EXCEPTION
4549           WHEN skip_error THEN
4550             log('  bad csi_txn_errors.mtl_txn_id : '||l_mtl_txn_id_tab(ind));
4551         END;
4552       END LOOP; -- error txn loop
4553 
4554       IF p_single_error_flag = 'Y' THEN
4555         EXIT when single_error_cur%NOTFOUND;
4556       ELSE
4557         EXIT when error_cur%NOTFOUND;
4558       END IF;
4559 
4560     END LOOP;
4561 
4562     IF p_single_error_flag = 'Y' THEN
4563       IF single_error_cur%ISOPEN THEN
4564         CLOSE single_error_cur;
4565       END IF;
4566     ELSE
4567       IF error_cur%ISOPEN THEN
4568         CLOSE error_cur;
4569       END IF;
4570     END IF;
4571 
4572     log(date_time_stamp||'  end get_srldata');
4573 
4574   END get_srldata;
4575 
4576   PROCEDURE preprocess_shipment(
4577     p_diag_txn_rec      IN diag_txn_rec)
4578   IS
4579     l_expire_flag       varchar2(1) := 'N';
4580     l_change_owner_flag varchar2(1) := 'Y';
4581 
4582     l_owner_party_id    number;
4583     l_owner_account_id  number;
4584 
4585   BEGIN
4586 
4587     IF  p_diag_txn_rec.serial_code = 6 THEN
4588       l_expire_flag := 'N';
4589       IF p_diag_txn_rec.create_flag = 'N' THEN
4590 
4591         get_rma_owner(
4592           p_serial_number     => p_diag_txn_rec.serial_number,
4593           p_inventory_item_id => p_diag_txn_rec.item_id,
4594           p_organization_id   => p_diag_txn_rec.organization_id,
4595           x_change_owner_flag => l_change_owner_flag,
4596           x_owner_party_id    => l_owner_party_id,
4597           x_owner_account_id  => l_owner_account_id);
4598 
4599         IF l_change_owner_flag = 'Y' THEN
4600           l_expire_flag := 'Y';
4601         ELSE
4602           l_expire_flag := 'N';
4603         END IF;
4604 
4605         UPDATE csi_diagnostics_temp
4606         SET    process_flag  = 'M',
4607                process_code  = 'SOISHIP',
4608                expire_flag   = l_expire_flag,
4609                temporary_message  = 'Updating the srlsoi instance with returned RMA info.'
4610         WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4611 
4612       ELSE
4613 
4614         UPDATE csi_diagnostics_temp
4615         SET    process_flag  = 'M',
4616                process_code  = 'SOISHIP',
4617                temporary_message  = 'Creating/Updating a non serial instance with staging info'
4618         WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4619 
4620       END IF;
4621 
4622     ELSE
4623 
4624       UPDATE csi_diagnostics_temp
4625       SET    process_flag  = 'M',
4626              process_code  = 'SHIP',
4627              temporary_message  = 'Creating/Updating the instance with staging info'
4628       WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4629 
4630     END IF;
4631 
4632   END preprocess_shipment;
4636   IS
4633 
4634   PROCEDURE preprocess_rma(
4635     p_diag_txn_rec      IN diag_txn_rec)
4637   BEGIN
4638 
4639     UPDATE csi_diagnostics_temp
4640     SET    process_flag  = 'M',
4641            process_code  = 'RMA',
4642            temporary_message  = 'Just mark error transaction to be re-processed'
4643     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4644 
4645   END preprocess_rma;
4646 
4647   PROCEDURE preprocess_wipissue(
4648     p_diag_txn_rec      IN diag_txn_rec)
4649   IS
4650   BEGIN
4651     UPDATE csi_diagnostics_temp
4652     SET    process_flag  = 'M',
4653            process_code  = 'WIPISSUE',
4654            temporary_message  = 'Stamp the inv location from serial and mark it FOR processing'
4655     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4656   END preprocess_wipissue;
4657 
4658   PROCEDURE preprocess_wipreturn(
4659     p_diag_txn_rec      IN diag_txn_rec)
4660   IS
4661   BEGIN
4662 
4663     UPDATE csi_diagnostics_temp
4664     SET    process_flag  = 'M',
4665            process_code  = 'WIPRETURN',
4666            temporary_message  = 'Make it a WIP instance and allow re-processing'
4667     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4668 
4669   END preprocess_wipreturn;
4670 
4671   PROCEDURE preprocess_wipcompletion(
4672     p_diag_txn_rec      IN diag_txn_rec)
4673   IS
4674   BEGIN
4675 
4676     UPDATE csi_diagnostics_temp
4677     SET    process_flag  = 'M',
4678            process_code  = 'WIPCOMPL',
4679            temporary_message  = 'Mark the error FOR re-processing.'
4680     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4681 
4682   END preprocess_wipcompletion;
4683 
4684   PROCEDURE preprocess_miscreceipt(
4685     p_diag_txn_rec      IN diag_txn_rec)
4686   IS
4687   BEGIN
4688 
4689     UPDATE csi_diagnostics_temp
4690     SET    process_flag  = 'M',
4691            process_code  = 'MISCRCPT',
4692            temporary_message  = 'Stamp the INV location from serial'
4693     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4694 
4695   END preprocess_miscreceipt;
4696 
4697   PROCEDURE preprocess_miscissue(
4698     p_diag_txn_rec      IN diag_txn_rec)
4699   IS
4700   BEGIN
4701 
4702     UPDATE csi_diagnostics_temp
4703     SET    process_flag  = 'M',
4704            process_code  = 'MISCISSUE',
4705            temporary_message  = 'Stamp the INV location from serial'
4706     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4707 
4708   END preprocess_miscissue;
4709 
4710   PROCEDURE preprocess_sixfer(
4711     p_diag_txn_rec      IN diag_txn_rec)
4712   IS
4713   BEGIN
4714 
4715     UPDATE csi_diagnostics_temp
4716     SET    process_flag  = 'M',
4717            process_code  = 'SIXFER',
4718            temporary_message  = 'Stamp the inv location from serial and mark it FOR processing'
4719     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4720 
4721   END preprocess_sixfer;
4722 
4723 
4724   PROCEDURE preprocess_projreceipt(
4725     p_diag_txn_rec      IN diag_txn_rec)
4726   IS
4727   BEGIN
4728     UPDATE csi_diagnostics_temp
4729     SET    process_flag  = 'M',
4730            process_code  = 'PROJRCPT',
4731            temporary_message  = 'Stamp the project location from serial and mark it for processing'
4732     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4733   END preprocess_projreceipt;
4734 
4735   PROCEDURE preprocess_interorgreceipt(
4736     p_diag_txn_rec      IN diag_txn_rec)
4737   IS
4738   BEGIN
4739     UPDATE csi_diagnostics_temp
4740     SET    process_flag  = 'M',
4741            process_code  = 'IORGRCPT',
4742            temporary_message  = 'Stamp the intransit location from serial and mark it for processing'
4743     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4744   END preprocess_interorgreceipt;
4745 
4746   PROCEDURE preprocess_isoreceipt(
4747     p_diag_txn_rec      IN diag_txn_rec)
4748   IS
4749   BEGIN
4750     UPDATE csi_diagnostics_temp
4751     SET    process_flag  = 'M',
4752            process_code  = 'ISORCPT',
4753            temporary_message  = 'Stamp the intransit location from serial and mark it for processing'
4754     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4755   END preprocess_isoreceipt;
4756 
4757   PROCEDURE preprocess_intransitship(
4758     p_diag_txn_rec      IN diag_txn_rec)
4759   IS
4760   BEGIN
4761     UPDATE csi_diagnostics_temp
4762     SET    process_flag  = 'M',
4763            process_code  = 'INTRSHIP',
4764            temporary_message  = 'Stamp the inv location from serial and mark it for processing'
4765     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4766   END preprocess_intransitship;
4767 
4768   PROCEDURE preprocess_unidentified(
4769     p_diag_txn_rec      IN diag_txn_rec)
4770   IS
4771   BEGIN
4772     UPDATE csi_diagnostics_temp
4773     SET    process_flag   = 'R',
4774            temporary_message   = 'Marking this for re-process.'
4775     WHERE  diag_seq_id   = p_diag_txn_rec.diag_seq_id;
4776   END preprocess_unidentified;
4777 
4778   PROCEDURE preprocess_all(
4779     p_diag_txn_tbl        IN diag_txn_tbl)
4780   IS
4781 
4782     l_diag_txn_rec        diag_txn_rec;
4786     l_preprocessed        boolean := false;
4783     l_error_found         boolean := FALSE;
4784     l_error_ind           binary_integer := 0;
4785     l_diag_txn_r_tbl      diag_txn_tbl;
4787 
4788   BEGIN
4789 
4790     IF p_diag_txn_tbl.COUNT > 0 THEN
4791 
4792       l_preprocessed  := FALSE;
4793       l_error_found   := FALSE;
4794 
4795       FOR l_rev_ind IN reverse p_diag_txn_tbl.FIRST .. p_diag_txn_tbl.LAST
4796       LOOP
4797 
4798         l_diag_txn_rec := p_diag_txn_tbl(l_rev_ind);
4799 
4800         IF nvl(p_diag_txn_tbl(l_rev_ind).error_flag,'P') = 'E' THEN
4801           l_error_found := TRUE;
4802           l_error_ind   := l_rev_ind;
4803           exit;
4804         END IF;
4805 
4806       END LOOP;
4807 
4808       IF l_error_found THEN
4809 
4810         log('    '||l_diag_txn_rec.source_type||'  '||l_diag_txn_rec.mtl_txn_id||
4811             '  '||l_diag_txn_rec.process_code);
4812 
4813         IF l_diag_txn_rec.source_type = 'CSISOSHP' THEN -- shipping
4814           preprocess_shipment(
4815             p_diag_txn_rec => l_diag_txn_rec);
4816           l_preprocessed := TRUE;
4817         END IF;
4818 
4819         IF l_diag_txn_rec.source_type = 'CSIOKSHP' THEN -- project contract shipment
4820           preprocess_shipment(
4821             p_diag_txn_rec => l_diag_txn_rec);
4822           l_preprocessed := TRUE;
4823         END IF;
4824 
4825         IF l_diag_txn_rec.source_type = 'CSIRMARC' THEN -- rma
4826           preprocess_rma(
4827             p_diag_txn_rec => l_diag_txn_rec);
4828           l_preprocessed := TRUE;
4829         END IF;
4830 
4831         IF l_diag_txn_rec.source_type IN (
4832                  'CSIWIPCI', -- wip component issue
4833                  'CSIWIPNR', -- wip negative component return
4834                  'CSIWIPAR') -- wip assembly return
4835         THEN
4836           preprocess_wipissue(
4837             p_diag_txn_rec => l_diag_txn_rec);
4838           l_preprocessed := TRUE;
4839         END IF;
4840 
4841         IF l_diag_txn_rec.source_type IN (
4842                  'CSIWIPCR', -- wip component return
4843                  'CSIWIPNI') -- wip negative component issue
4844         THEN  -- wip returns
4845           preprocess_wipreturn(
4846             p_diag_txn_rec => l_diag_txn_rec);
4847           l_preprocessed := TRUE;
4848         END IF;
4849 
4850         IF l_diag_txn_rec.source_type = 'CSIWIPAC' THEN -- wip completion
4851           preprocess_wipcompletion(
4852             p_diag_txn_rec => l_diag_txn_rec);
4853           l_preprocessed := TRUE;
4854         END IF;
4855 
4856         IF (l_diag_txn_rec.source_type = 'CSIMSRCV') -- misc receipt
4857             OR
4858            (l_diag_txn_rec.source_type = 'CSICYCNT' AND l_diag_txn_rec.mtl_txn_qty > 0)
4859             OR
4860            (l_diag_txn_rec.source_type = 'CSIPHYIN' AND l_diag_txn_rec.mtl_txn_qty > 0)
4861             OR
4862            (l_diag_txn_rec.source_type = 'CSIPOINV')
4863         THEN
4864           preprocess_miscreceipt(
4865             p_diag_txn_rec => l_diag_txn_rec);
4866           l_preprocessed := TRUE;
4867         END IF;
4868 
4869         IF (l_diag_txn_rec.source_type IN (
4870                  'CSIMSISU', -- misc issue
4871                  'CSIISUPT', -- move order issue to project
4872                  'CSIMSIPT') -- misc issue to project
4873             OR
4874            (l_diag_txn_rec.source_type = 'CSICYCNT' AND l_diag_txn_rec.mtl_txn_qty < 0)
4875             OR
4876            (l_diag_txn_rec.source_type = 'CSIPHYIN' AND l_diag_txn_rec.mtl_txn_qty < 0))
4877         THEN
4878           preprocess_miscissue(
4879             p_diag_txn_rec => l_diag_txn_rec);
4880           l_preprocessed := TRUE;
4881         END IF;
4882 
4883         IF l_diag_txn_rec.source_type IN (
4884              'CSISUBTR', -- subinventory transfer
4885              'CSIORGDS', -- interorg direct shipment
4886              'CSIINTDS') -- iso direct shipment
4887         THEN
4888           preprocess_sixfer(
4889             p_diag_txn_rec => l_diag_txn_rec);
4890           l_preprocessed := TRUE;
4891         END IF;
4892 
4893         -- receipt from project
4894         IF l_diag_txn_rec.source_type = 'CSIMSRPT' THEN
4895           preprocess_projreceipt(
4896             p_diag_txn_rec => l_diag_txn_rec);
4897           l_preprocessed := TRUE;
4898         END IF;
4899 
4900         -- interorg intransit receipt
4901         IF l_diag_txn_rec.source_type = 'CSIORGTR' THEN
4902           preprocess_interorgreceipt(
4903             p_diag_txn_rec => l_diag_txn_rec);
4904           l_preprocessed := TRUE;
4905         END IF;
4906 
4907         -- Internal sales order requisition receipt
4908         IF l_diag_txn_rec.source_type = 'CSIINTSR' THEN
4909           preprocess_isoreceipt(
4910             p_diag_txn_rec => l_diag_txn_rec);
4911           l_preprocessed := TRUE;
4912         END IF;
4913 
4914         IF l_diag_txn_rec.source_type IN (
4915           'CSIORGTS', -- interorg intransit shipment
4916           'CSIINTSS') -- internal sales order intransit shipment
4917         THEN
4918           preprocess_intransitship(
4919             p_diag_txn_rec => l_diag_txn_rec);
4920           l_preprocessed := TRUE;
4921         END IF;
4922 
4926 
4923         IF l_diag_txn_rec.source_type = 'NONE' THEN
4924           l_preprocessed := FALSE;
4925         END IF;
4927         IF l_preprocessed THEN
4928           FOR l_ind IN 1 .. l_error_ind-1
4929           LOOP
4930             IF nvl(p_diag_txn_tbl(l_ind).error_flag,'P') = 'E' THEN
4931               UPDATE csi_diagnostics_temp
4932               SET    process_flag = 'R',
4933                      temporary_message = 'Marking it for re-process'
4934               WHERE  diag_seq_id = p_diag_txn_tbl(l_ind).diag_seq_id;
4935             END IF;
4936           END LOOP;
4937         END IF;
4938 
4939       END IF;
4940     END IF;
4941 
4942   END preprocess_all;
4943 
4944   PROCEDURE knock_all(
4945     p_diag_txn_tbl IN diag_txn_tbl)
4946   IS
4947   BEGIN
4948     IF p_diag_txn_tbl.COUNT > 0 THEN
4949       FOR l_ind IN  p_diag_txn_tbl.FIRST .. p_diag_txn_tbl.LAST
4950       LOOP
4951 
4952         IF nvl(p_diag_txn_tbl(l_ind).error_flag,'P') = 'E' THEN
4953 
4954           UPDATE csi_diagnostics_temp
4955           SET    process_flag = 'X',
4956                  temporary_message = 'Succeeding txn processed in IB for this serial'
4957           WHERE  diag_seq_id = p_diag_txn_tbl(l_ind).diag_seq_id;
4958 
4959         END IF;
4960 
4961       END LOOP;
4962     END IF;
4963   END knock_all;
4964 
4965   PROCEDURE init_diag_temp
4966   IS
4967     CURSOR diag_cur IS
4968       SELECT rowid row_id
4969       FROM   csi_diagnostics_temp;
4970 
4971   BEGIN
4972 
4973     FOR diag_rec IN diag_cur
4974     LOOP
4975 
4976       UPDATE csi_diagnostics_temp
4977       SET    process_flag   = 'N',
4978              process_code   = null,
4979              entangled_flag = null,
4980              expire_flag    = null,
4981              temporary_message   = null
4982       WHERE  rowid = diag_rec.row_id;
4983 
4984       IF mod(diag_cur%rowcount, 100) = 0 THEN
4985         commit;
4986       END IF;
4987 
4988     END LOOP;
4989     commit;
4990 
4991   END init_diag_temp;
4992 
4993   FUNCTION check_contracts(
4994     p_instance_id IN number)
4995   RETURN BOOLEAN
4996   IS
4997     l_return_status  varchar2(1) := fnd_api.g_ret_sts_success;
4998     l_msg_count      number;
4999     l_msg_data       varchar2(2000);
5000     l_contracts_tbl  oks_entitlements_pub.output_tbl_ib;
5001     l_inp_rec        oks_entitlements_pub.input_rec_ib;
5002   BEGIN
5003 
5004     l_inp_rec.validate_flag      := 'Y'; -- show all contracts
5005     l_inp_rec.product_id         := p_instance_id;
5006     l_inp_rec.calc_resptime_flag := 'N';
5007 
5008     oks_entitlements_pub.get_contracts(
5009       p_api_version     => 1.0,
5010       p_init_msg_list   => 'T',
5011       p_inp_rec         => l_inp_rec,
5012       x_ent_contracts   => l_contracts_tbl,
5013       x_return_status   => l_return_status,
5014       x_msg_count       => l_msg_count,
5015       x_msg_data        => l_msg_data);
5016     --
5017     IF l_contracts_tbl.count > 0 THEN
5018       RETURN (TRUE);
5019     ELSE
5020       RETURN (FALSE);
5021     END IF;
5022 
5023   END check_contracts;
5024 
5025   PROCEDURE identify_progressed(
5026     x_progressed OUT nocopy boolean)
5027   IS
5028 
5029     l_progressed          boolean := FALSE;
5030     l_process_code        varchar2(20);
5031     l_p_diag_seq_id       number;
5032     l_p_mtl_txn_id        number;
5033     l_p_mtl_creation_date date;
5034     l_p_csi_txn_id        number;
5035     l_contracts_flag      varchar2(1);
5036     l_earlier_txn_marked  boolean := FALSE;
5037 
5038     l_process_flag        varchar2(1);
5039     l_current_date        date;
5040 
5041     CURSOR m_cur IS
5042       SELECT distinct mtl_creation_date, mtl_txn_id
5043       FROM   csi_diagnostics_temp
5044       WHERE  nvl(process_flag, 'N') = 'M'
5045       ORDER BY mtl_creation_date asc, mtl_txn_id asc;
5046 
5047     CURSOR m_srl_cur(p_mtl_txn_id IN number) IS
5048       SELECT diag_seq_id,
5049              serial_number,
5050              inventory_item_id,
5051              instance_id,
5052              lot_control_code,
5053              process_flag
5054       FROM   csi_diagnostics_temp
5055       WHERE  mtl_txn_id = p_mtl_txn_id
5056       AND    nvl(process_flag, 'N') <> 'M';
5057 
5058     -- already marked earlier transactions
5059     CURSOR p_et_cur(
5060       p_serial_number     IN varchar2,
5061       p_item_id           IN number,
5062       p_mtl_creation_date IN date)
5063     IS
5064       SELECT diag_seq_id
5065       FROM   csi_diagnostics_temp
5066       WHERE  serial_number         = p_serial_number
5067       AND    inventory_item_id     = p_item_id
5068       AND    mtl_creation_date     < p_mtl_creation_date
5069       AND    nvl(process_flag,'N') = 'M';
5070 
5071     -- progressed marked transactions
5072     CURSOR p_lt_cur(
5073       p_serial_number     IN varchar2,
5074       p_item_id           IN number,
5075       p_mtl_creation_date IN date)
5076     IS
5077       SELECT diag_seq_id
5078       FROM   csi_diagnostics_temp
5082       AND    nvl(process_flag,'N') = 'M'
5079       WHERE  serial_number         = p_serial_number
5080       AND    inventory_item_id     = p_item_id
5081       AND    mtl_creation_date     > p_mtl_creation_date
5083       ORDER by mtl_creation_date asc, mtl_txn_id asc;
5084 
5085     CURSOR missing_csi_cur(
5086       p_serial_number     IN varchar2,
5087       p_item_id           IN number,
5088       p_mtl_creation_date IN date)
5089     IS
5090       SELECT diag_seq_id,
5091              mtl_txn_id,
5092              csi_txn_id,
5093              mtl_txn_date
5094       FROM   csi_diagnostics_temp
5095       WHERE  serial_number     = p_serial_number
5096       AND    inventory_item_id = p_item_id
5097       AND    mtl_creation_date < p_mtl_creation_date
5098       ORDER BY mtl_creation_date desc, mtl_txn_id desc;
5099 
5100     skip_txn           exception;
5101     l_return_status    varchar2(1) := fnd_api.g_ret_sts_success;
5102     l_msg_data         varchar2(2000);
5103     l_msg_count        number;
5104     l_txn_rec          csi_datastructures_pub.transaction_rec;
5105 
5106   BEGIN
5107 
5108     FOR m_rec IN m_cur -- read all the distinct inv txn records that are marked for update
5109     LOOP
5110 
5111       BEGIN
5112 
5113         -- check if this txn is still there to be processed in the loop
5114         BEGIN
5115           SELECT process_code
5116           INTO   l_process_code
5117           FROM   csi_diagnostics_temp
5118           WHERE  mtl_txn_id            = m_rec.mtl_txn_id
5119           AND    nvl(process_flag,'N') = 'M' -- marked for update
5120           AND    rownum                = 1;
5121         EXCEPTION
5122           WHEN no_data_found THEN
5123             RAISE skip_txn;
5124         END;
5125 
5126         l_earlier_txn_marked := FALSE;
5127 
5128         -- get all the serials that are in the txn that are not marked as 'M'
5129         FOR m_srl_rec IN m_srl_cur(m_rec.mtl_txn_id)
5130         LOOP
5131 
5132           -- check if the earlier txn is marked for re-processing
5133           FOR p_et_rec in p_et_cur(
5134             p_serial_number     => m_srl_rec.serial_number,
5135             p_item_id           => m_srl_rec.inventory_item_id,
5136             p_mtl_creation_date => m_rec.mtl_creation_date)
5137           LOOP
5138             l_earlier_txn_marked := TRUE;
5139             exit;
5140           END LOOP;
5141         END LOOP;
5142 
5143         IF l_earlier_txn_marked THEN
5144           --skip it for marking this batch
5145           FOR m_srl_rec IN m_srl_cur(m_rec.mtl_txn_id)
5146           LOOP
5147             IF nvl(m_srl_rec.process_flag, 'N') = 'X' THEN
5148               UPDATE csi_diagnostics_temp
5149               SET    process_flag      = 'N',
5150                      temporary_message = 'updating for entanglement processing'
5151               WHERE  diag_seq_id       = m_srl_rec.diag_seq_id;
5152             END IF;
5153           END LOOP;
5154           RAISE skip_txn;
5155         END IF;
5156 
5157         -- get all the other serials in this transaction to be marked for processing
5158         -- the same way as the current serial
5159         FOR m_srl_rec IN m_srl_cur(m_rec.mtl_txn_id)
5160         LOOP
5161 
5162           UPDATE csi_diagnostics_temp
5163           SET    process_code = l_process_code,
5164                  process_flag = 'M',
5165                  temporary_message = 'updating for entanglement processing'
5166           WHERE  diag_seq_id  = m_srl_rec.diag_seq_id;
5167 
5168           -- for this serial check if there is any progressed transaction
5169           --
5170 
5171           IF m_srl_rec.instance_id is not null THEN
5172 
5173             -- get the max processed material transaction id
5174             SELECT nvl(min(diag_seq_id), -999999)
5175             INTO   l_p_diag_seq_id
5176             FROM   csi_diagnostics_temp
5177             WHERE  serial_number       = m_srl_rec.serial_number
5178             AND    inventory_item_id   = m_srl_rec.inventory_item_id
5179             AND    mtl_creation_date   > m_rec.mtl_creation_date
5180             AND    csi_txn_id          is not null;
5181 
5182             IF l_p_diag_seq_id <> -999999 THEN
5183 
5184               SELECT mtl_txn_id,
5185                      mtl_creation_date
5186               INTO   l_p_mtl_txn_id,
5187                      l_p_mtl_creation_date
5188               FROM   csi_diagnostics_temp
5189               WHERE  diag_seq_id = l_p_diag_seq_id;
5190 
5191               IF check_contracts(m_srl_rec.instance_id) THEN
5192                 l_contracts_flag := 'Y';
5193               ELSE
5194                 l_contracts_flag := 'N';
5195               END IF;
5196 
5197               SELECT csi_txn_id
5198               INTO   l_p_csi_txn_id
5199               FROM   csi_diagnostics_temp
5200               WHERE  serial_number     = m_srl_rec.serial_number
5201               AND    inventory_item_id = m_srl_rec.inventory_item_id
5202               AND    mtl_txn_id        = l_p_mtl_txn_id;
5203 
5204               l_progressed := TRUE;
5205 
5206               BEGIN
5207 
5208                 SELECT process_flag,
5209                        date_time_stamp
5210                 INTO   l_process_flag,
5211                        l_current_date
5215                 IF l_process_flag = 'P' THEN
5212                 FROM   csi_ii_forward_sync_temp
5213                 WHERE  instance_id = m_srl_rec.instance_id;
5214 
5216                   Insert_Full_Dump(p_instance_id => m_srl_rec.instance_id);
5217                   l_current_date := sysdate;
5218                 ELSE
5219                   l_current_date := l_current_date;
5220                 END IF;
5221 
5222                 UPDATE csi_ii_forward_sync_temp
5223                 SET    date_time_stamp       = l_current_date,
5224                        mtl_txn_id            = l_p_mtl_txn_id,
5225                        mtl_txn_creation_date = l_p_mtl_creation_date,
5226                        contracts_flag        = l_contracts_flag,
5227                        process_flag          = 'N'
5228                 WHERE  instance_id           =  m_srl_rec.instance_id;
5229 
5230               EXCEPTION
5231                 WHEN no_data_found THEN
5232                   Insert_Full_Dump(p_instance_id => m_srl_rec.instance_id);
5233                   --
5234                   INSERT INTO csi_ii_forward_sync_temp(
5235                     instance_id,
5236                     serial_number,
5237                     inventory_item_id,
5238                     lot_control_code,
5239                     date_time_stamp,
5240                     mtl_txn_id,
5241                     mtl_txn_creation_date,
5242                     csi_txn_id,
5243                     contracts_flag,
5244                     process_flag,
5245                     error_message)
5246                   VALUES(
5247                     m_srl_rec.instance_id,
5248                     m_srl_rec.serial_number,
5249                     m_srl_rec.inventory_item_id,
5250                     m_srl_rec.lot_control_code,
5251                     sysdate,
5252                     l_p_mtl_txn_id,
5253                     l_p_mtl_creation_date,
5254                     l_p_csi_txn_id,
5255                     l_contracts_flag,
5256                     'N',
5257                     null);
5258               END;
5259             END IF;
5260           END IF;
5261 
5262           -- get the progressed marked serial and unmark them
5263           FOR p_lt_rec IN p_lt_cur(
5264             p_serial_number     => m_srl_rec.serial_number,
5265             p_item_id           => m_srl_rec.inventory_item_id,
5266             p_mtl_creation_date => m_rec.mtl_creation_date)
5267           LOOP
5268 
5269             UPDATE csi_diagnostics_temp
5270             SET    process_flag = 'R',
5271                    temporary_message = 'unmarking the serial to be processed after entanglement.'
5272             WHERE  diag_seq_id  = p_lt_rec.diag_seq_id;
5273 
5274           END LOOP;
5275 
5276           -- put the code here to create csi_transaction
5277           FOR missing_csi_rec IN missing_csi_cur(
5278             p_serial_number     => m_srl_rec.serial_number,
5279             p_item_id           => m_srl_rec.inventory_item_id,
5280             p_mtl_creation_date => m_rec.mtl_creation_date)
5281           LOOP
5282 
5283             IF missing_csi_rec.csi_txn_id is not null THEN
5284               exit;
5285             END IF;
5286 
5287             BEGIN
5288               SELECT transaction_id INTO l_txn_rec.transaction_id
5289               FROM   csi_transactions
5290               WHERE  inv_material_transaction_id = missing_csi_rec.mtl_txn_id;
5291             EXCEPTION
5292               WHEN no_data_found THEN
5293 
5294                 l_txn_rec.transaction_id                := fnd_api.g_miss_num;
5295                 l_txn_rec.transaction_type_id           := correction_txn_type_id;
5296                 l_txn_rec.source_header_ref             := 'DATAFIX';
5297                 l_txn_rec.source_line_ref               := 'TXNPUMP FOR PROGRESSED';
5298                 l_txn_rec.source_transaction_date       := missing_csi_rec.mtl_txn_date;
5299                 l_txn_rec.transaction_date              := sysdate;
5300                 l_txn_rec.inv_material_transaction_id   := missing_csi_rec.mtl_txn_id;
5301 
5302                 csi_transactions_pvt.create_transaction (
5303                   p_api_version             => 1.0,
5304                   p_commit                  => fnd_api.g_false,
5305                   p_init_msg_list           => fnd_api.g_true,
5306                   p_validation_level        => fnd_api.g_valid_level_full,
5307                   p_success_if_exists_flag  => 'Y',
5308                   p_transaction_rec         => l_txn_rec,
5309                   x_return_status           => l_return_status,
5310                   x_msg_count               => l_msg_count,
5311                   x_msg_data                => l_msg_data  );
5312 
5313                 UPDATE csi_diagnostics_temp
5314                 SET    csi_txn_id  = l_txn_rec.transaction_id,
5315                        error_flag  = 'P'
5316                 WHERE  diag_seq_id = missing_csi_rec.diag_seq_id;
5317 
5318               WHEN too_many_rows THEN null;
5319             END;
5320 
5321           END LOOP;
5322 
5323         END LOOP;
5324 
5325       EXCEPTION
5326         WHEN skip_txn THEN
5327           null;
5328       END;
5329     END LOOP;
5330     x_progressed := l_progressed;
5331   END identify_progressed;
5332 
5333   PROCEDURE preprocess_srldata is
5334 
5335     TYPE NumTabType is    varray(10000) of number;
5339     l_item_id_tab         NumTabType;
5336     TYPE VarTabType is    varray(10000) of varchar2(80);
5337 
5338     l_serial_number_tab   VarTabType;
5340 
5341     MAX_BUFFER_SIZE       number := 1000;
5342 
5343     CURSOR diag_srl_cur IS
5344       SELECT serial_number,
5345              inventory_item_id
5346       FROM   csi_diagnostics_temp
5347       GROUP BY serial_number, inventory_item_id;
5348 
5349     CURSOR diag_txn_cur(p_serial_number IN varchar2, p_item_id IN number) IS
5350       SELECT diag_seq_id,
5351              serial_number,
5352              inventory_item_id,
5353              organization_id,
5354              mtl_txn_id,
5355              mtl_txn_qty,
5356              mtl_creation_date,
5357              serial_control_code,
5358              lot_control_code,
5359              revision_control_code,
5360              csi_txn_id,
5361              instance_id,
5362              create_flag,
5363              source_type,
5364              error_flag ,
5365              mtl_item_revision
5366       FROM   csi_diagnostics_temp
5367       WHERE  serial_number      = p_serial_number
5368       AND    inventory_item_id  = p_item_id
5369       ORDER by mtl_creation_date desc, mtl_txn_id desc;
5370 
5371     l_freeze_date         date;
5372 
5373     l_diag_txn_tbl        diag_txn_tbl;
5374     l_d_ind               binary_integer := 0;
5375 
5376     l_diag_txn_x_tbl      diag_txn_tbl;
5377     l_dx_ind              binary_integer := 0;
5378 
5379     l_txn_success         boolean;
5380     l_progressed          boolean := FALSE;
5381     l_seq_value           number;
5382 
5383   BEGIN
5384 
5385     init_diag_temp;
5386 
5387     log(date_time_stamp||'  begin preprocess_srldata');
5388 
5389     OPEN diag_srl_cur;
5390     LOOP
5391 
5392       FETCH diag_srl_cur BULK COLLECT
5393       INTO  l_serial_number_tab,
5394             l_item_id_tab
5395       LIMIT MAX_BUFFER_SIZE;
5396 
5397       FOR ind IN 1 .. l_serial_number_tab.COUNT
5398       LOOP
5399 
5400         l_diag_txn_tbl.delete;
5401         l_diag_txn_x_tbl.delete;
5402 
5403         l_d_ind  := 0;
5404         l_dx_ind := 0;
5405 
5406         l_txn_success := FALSE;
5407 
5408         FOR diag_txn_rec IN diag_txn_cur(
5409           p_serial_number => l_serial_number_tab(ind),
5410           p_item_id       => l_item_id_tab(ind))
5411         LOOP
5412 
5413           IF diag_txn_rec.csi_txn_id IS not null THEN
5414             l_txn_success := TRUE;
5415           END IF;
5416 
5417           IF NOT(l_txn_success) THEN
5418 
5419             l_d_ind := l_d_ind + 1;
5420 
5421             l_diag_txn_tbl(l_d_ind).diag_seq_id   := diag_txn_rec.diag_seq_id;
5422             l_diag_txn_tbl(l_d_ind).serial_number := diag_txn_rec.serial_number;
5423             l_diag_txn_tbl(l_d_ind).item_id       := diag_txn_rec.inventory_item_id;
5424             l_diag_txn_tbl(l_d_ind).organization_id := diag_txn_rec.organization_id;
5425             l_diag_txn_tbl(l_d_ind).mtl_txn_id    := diag_txn_rec.mtl_txn_id;
5426             l_diag_txn_tbl(l_d_ind).mtl_txn_qty   := diag_txn_rec.mtl_txn_qty;
5427             l_diag_txn_tbl(l_d_ind).mtl_creation_date := diag_txn_rec.mtl_creation_date;
5428             l_diag_txn_tbl(l_d_ind).serial_code   := diag_txn_rec.serial_control_code;
5429             l_diag_txn_tbl(l_d_ind).lot_code      := diag_txn_rec.lot_control_code;
5430             l_diag_txn_tbl(l_d_ind).revision_code := diag_txn_rec.revision_control_code;
5431             l_diag_txn_tbl(l_d_ind).inst_id       := diag_txn_rec.instance_id;
5432             l_diag_txn_tbl(l_d_ind).create_flag   := diag_txn_rec.create_flag;
5433             l_diag_txn_tbl(l_d_ind).source_type   := diag_txn_rec.source_type;
5434             l_diag_txn_tbl(l_d_ind).error_flag    := diag_txn_rec.error_flag;
5435             l_diag_txn_tbl(l_d_ind).marked_flag   := 'N';
5436             l_diag_txn_tbl(l_d_ind).process_flag  := 'N';
5437             l_diag_txn_tbl(l_d_ind).temp_message  := null;
5438 
5439           ELSE
5440 
5441             l_dx_ind := l_dx_ind + 1;
5442 
5443             l_diag_txn_x_tbl(l_dx_ind).diag_seq_id   := diag_txn_rec.diag_seq_id;
5444             l_diag_txn_x_tbl(l_dx_ind).serial_number := diag_txn_rec.serial_number;
5445             l_diag_txn_x_tbl(l_dx_ind).item_id       := diag_txn_rec.inventory_item_id;
5446             l_diag_txn_x_tbl(l_dx_ind).organization_id := diag_txn_rec.organization_id;
5447             l_diag_txn_x_tbl(l_dx_ind).mtl_txn_id    := diag_txn_rec.mtl_txn_id;
5448             l_diag_txn_x_tbl(l_dx_ind).mtl_txn_qty   := diag_txn_rec.mtl_txn_qty;
5449             l_diag_txn_x_tbl(l_dx_ind).mtl_creation_date := diag_txn_rec.mtl_creation_date;
5450             l_diag_txn_x_tbl(l_dx_ind).serial_code   := diag_txn_rec.serial_control_code;
5451             l_diag_txn_x_tbl(l_dx_ind).lot_code      := diag_txn_rec.lot_control_code;
5452             l_diag_txn_x_tbl(l_dx_ind).revision_code := diag_txn_rec.revision_control_code;
5453             l_diag_txn_x_tbl(l_dx_ind).inst_id       := diag_txn_rec.instance_id;
5454             l_diag_txn_x_tbl(l_dx_ind).create_flag   := diag_txn_rec.create_flag;
5455             l_diag_txn_x_tbl(l_dx_ind).source_type   := diag_txn_rec.source_type;
5456             l_diag_txn_x_tbl(l_dx_ind).error_flag    := diag_txn_rec.error_flag;
5457             l_diag_txn_x_tbl(l_dx_ind).marked_flag   := 'N';
5458             l_diag_txn_x_tbl(l_dx_ind).process_flag  := 'N';
5462         END LOOP;
5459             l_diag_txn_x_tbl(l_dx_ind).temp_message  := null;
5460 
5461           END IF;
5463 
5464         log('  '||l_serial_number_tab(ind)||
5465             ' P Count:'||l_diag_txn_tbl.COUNT||
5466             ' X Count:'||l_diag_txn_x_tbl.COUNT);
5467 
5468         IF l_diag_txn_tbl.COUNT > 0 THEN
5469           preprocess_all(
5470             p_diag_txn_tbl => l_diag_txn_tbl);
5471         END IF;
5472 
5473         IF l_diag_txn_x_tbl.COUNT > 0 THEN
5474           knock_all(
5475             p_diag_txn_tbl => l_diag_txn_x_tbl);
5476         END IF;
5477 
5478         IF mod(l_serial_number_tab.COUNT, 100) = 0 THEN
5479           commit;
5480         END IF;
5481 
5482       END LOOP;
5483 
5484       EXIT when diag_srl_cur%NOTFOUND;
5485 
5486     END LOOP;
5487 
5488     IF diag_srl_cur%ISOPEN THEN
5489       CLOSE diag_srl_cur;
5490     END IF;
5491 
5492     commit;
5493 
5494     identify_progressed(
5495       x_progressed => l_progressed);
5496 
5497     IF l_progressed THEN
5498       SELECT csi_ii_forward_sync_temp_s.nextval
5499       INTO   l_seq_value
5500       FROM   sys.dual;
5501     END IF;
5502 
5503     commit;
5504 
5505     log(date_time_stamp||'  end preprocess_srldata');
5506   END preprocess_srldata;
5507 
5508   FUNCTION fill(
5509     p_column in varchar2,
5510     p_width  in number,
5511     p_side   in varchar2 default 'R')
5512   RETURN varchar2 IS
5513     l_column varchar2(2000);
5514   BEGIN
5515     l_column := nvl(p_column, ' ');
5516     IF p_side = 'L' THEN
5517       return(lpad(l_column, p_width, ' '));
5518     ELSIF p_side = 'R' THEN
5519       return(rpad(l_column, p_width, ' '));
5520     END IF;
5521   END fill;
5522 
5523   --
5524   PROCEDURE report_header
5525   is
5526     l_header        varchar2(4000);
5527   BEGIN
5528     l_header := fill('SerialNumber', 15)||
5529                 fill('Item/Org(M/I/V)', 20)||
5530                 fill('InstID', 10)||
5531                 fill('InstLoc', 15)||
5532                 fill('Usage', 15)||
5533                 fill('ISubinv', 14)||
5534                 fill('Pty/Acct', 10)||
5535                 fill('M', 1);
5536 
5537     out(l_header);
5538 
5539     l_header := fill('------------', 15)||
5540                 fill('---------------', 20)||
5541                 fill('------', 10)||
5542                 fill('-------', 15)||
5543                 fill('-----', 15)||
5544                 fill('-------', 14)||
5545                 fill('--------', 10)||
5546                 fill('-', 1);
5547 
5548     out(l_header);
5549 
5550     l_header := fill(' ', 2)||
5551                 fill('TxnName', 22)||
5552                 fill('TxnID', 9)||
5553                 fill('TxnDate', 11)||
5554                 fill('CsiTxnID', 9)||
5555                 fill('Code', 8)||
5556                 fill('P', 2);
5557 
5558     out(l_header);
5559 
5560     l_header := fill(' ', 2)||
5561                 fill('-------', 22)||
5562                 fill('-----', 9)||
5563                 fill('-------', 13)||
5564                 fill('--------', 9)||
5565                 fill('----', 8)||
5566                 fill('-', 2);
5567 
5568     out(l_header);
5569 
5570   END report_header;
5571 
5572   PROCEDURE report_body(
5573     p_rec            in     csi_diagnostics_temp%rowtype,
5574     px_serial_number in out nocopy varchar2,
5575     px_item_id       in out nocopy number)
5576   is
5577     l_mtl_txn_date  date;
5578     l_srl_data      varchar2(4000);
5579     l_txn_data      varchar2(4000);
5580   BEGIN
5581 
5582     IF (p_rec.serial_number <> px_serial_number
5583         OR
5584         p_rec.inventory_item_id <> px_item_id)
5585     THEN
5586 
5587       out(' ');
5588 
5589       -- print header;
5590       l_srl_data := fill(p_rec.serial_number, 15)||
5591                     fill(to_char(p_rec.inventory_item_id)||'/'||
5592                          to_char(p_rec.organization_id)||'/'||
5593                          nvl(to_char(p_rec.instance_organization_id), ' ')||'/'||
5594                          nvl(to_char(p_rec.instance_vld_organization_id), ' '), 20)||
5595                     fill(p_rec.instance_id, 10)||
5596                     fill(p_rec.instance_location, 15)||
5597                     fill(p_rec.instance_usage_code, 15)||
5598                     fill(p_rec.instance_subinv_name, 14)||
5599                     fill(nvl(to_char(p_rec.instance_owner_party_id), ' ')||'/'||
5600                          nvl(to_char(p_rec.instance_owner_account_id), ' '), 10)||
5601                     fill(nvl(p_rec.instance_mig_flag,'N'), 1);
5602 
5603       out(l_srl_data);
5604 
5605     END IF;
5606 
5607     l_txn_data := fill(' ', 2)||
5608                   fill(p_rec.mtl_txn_name, 22)||
5609                   fill(p_rec.mtl_txn_id, 9)||
5610                   fill(to_char(p_rec.mtl_txn_date, 'ddmmyyhh24miss'), 13)||
5611                   fill(p_rec.csi_txn_id, 9)||
5612                   fill(p_rec.process_code, 8)||
5613                   fill(p_rec.process_flag, 2);
5614 
5615     out(l_txn_data);
5616 
5617     IF p_rec.error_flag = 'E' THEN
5621     IF p_rec.process_flag = 'E' THEN
5618       out('    '||rtrim(fill(p_rec.error_text, 96)));
5619     END IF;
5620 
5622       out('    '||rtrim(fill(p_rec.temporary_message, 96)));
5623     END IF;
5624 
5625     px_serial_number := p_rec.serial_number;
5626     px_item_id       := p_rec.inventory_item_id;
5627 
5628   END report_body;
5629 
5630   PROCEDURE spool_srldata(p_mode in varchar2 default 'ALL' ) is
5631 
5632     CURSOR dump_all_cur is
5633       SELECT *
5634       FROM csi_diagnostics_temp
5635       ORDER BY serial_number, inventory_item_id, mtl_creation_date desc, mtl_txn_id desc;
5636 
5637     CURSOR dump_fixable_cur is
5638       SELECT * FROM csi_diagnostics_temp A
5639       WHERE exists (
5640         SELECT 'X' FROM csi_diagnostics_temp B
5641         WHERE  B.serial_number = A.serial_number
5642         AND    B.inventory_item_id = A.inventory_item_id
5643         AND    B.process_flag in ('M', 'X', 'R'))
5644       ORDER BY A.serial_number, a.inventory_item_id, a.mtl_creation_date desc, a.mtl_txn_id desc;
5645 
5646     CURSOR dump_nonfixable_cur is
5647       SELECT * FROM csi_diagnostics_temp A
5648       WHERE not exists (
5649         SELECT 'X' FROM csi_diagnostics_temp B
5650         WHERE  B.serial_number = A.serial_number
5651         AND    B.inventory_item_id = A.inventory_item_id
5652         AND    B.process_flag in ('M', 'X', 'R'))
5653       ORDER BY A.serial_number, a.inventory_item_id, a.mtl_creation_date desc, a.mtl_txn_id desc;
5654 
5655     CURSOR dump_errors_cur is
5656       SELECT * FROM csi_diagnostics_temp A
5657       WHERE exists (
5658         SELECT 'X' FROM csi_diagnostics_temp B
5659         WHERE  B.serial_number = A.serial_number
5660         AND    B.inventory_item_id = A.inventory_item_id
5661         AND    B.process_flag = 'E')
5662       ORDER BY A.serial_number, a.inventory_item_id, a.mtl_creation_date desc, a.mtl_txn_id desc;
5663 
5664     l_old_serial    varchar2(80)  := '##**$$**##';
5665     l_old_item_id   number        := -.9999999999;
5666 
5667   BEGIN
5668 
5669     IF p_mode = 'ALL' THEN
5670 
5671       csi_t_gen_utility_pvt.build_file_name(
5672         p_file_segment1 => 'csisrl',
5673         p_file_segment2 => to_char(sysdate, 'hh24miss'));
5674 
5675       out(' *****************************************************************************');
5676       out('                Serialized error correction -  breakup report                 ');
5677       out(' *****************************************************************************');
5678 
5679       report_header;
5680 
5681       FOR dump_rec in dump_all_cur
5682       LOOP
5683         report_body (
5684           p_rec            => dump_rec,
5685           px_serial_number => l_old_serial,
5686           px_item_id       => l_old_item_id);
5687       END LOOP;
5688 
5689     ELSIF p_mode = 'FIXABLE' THEN
5690 
5691       csi_t_gen_utility_pvt.build_file_name(
5692         p_file_segment1 => 'csisrlfix',
5693         p_file_segment2 => to_char(sysdate, 'hh24miss'));
5694 
5695       report_header;
5696 
5697       FOR dump_rec in dump_fixable_cur
5698       LOOP
5699         report_body (
5700           p_rec            => dump_rec,
5701           px_serial_number => l_old_serial,
5702           px_item_id       => l_old_item_id);
5703       END LOOP;
5704 
5705     ELSIF p_mode = 'NONFIXABLE' THEN
5706 
5707       csi_t_gen_utility_pvt.build_file_name(
5708         p_file_segment1 => 'csisrlnofix',
5709         p_file_segment2 => to_char(sysdate, 'hh24miss'));
5710 
5711       report_header;
5712 
5713       FOR dump_rec in dump_nonfixable_cur
5714       LOOP
5715         report_body (
5716           p_rec            => dump_rec,
5717           px_serial_number => l_old_serial,
5718           px_item_id       => l_old_item_id);
5719       END LOOP;
5720 
5721     ELSIF p_mode = 'ERRORS' THEN
5722 
5723       csi_t_gen_utility_pvt.build_file_name(
5724         p_file_segment1 => 'csisrlerr',
5725         p_file_segment2 => to_char(sysdate, 'hh24miss'));
5726 
5727       out(' *****************************************************************************');
5728       out('               Errors reported in serialized error correction                 ');
5729       out(' *****************************************************************************');
5730 
5731       report_header;
5732 
5733       FOR dump_rec in dump_errors_cur
5734       LOOP
5735         report_body (
5736           p_rec            => dump_rec,
5737           px_serial_number => l_old_serial,
5738           px_item_id       => l_old_item_id);
5739       END LOOP;
5740 
5741 
5742     END IF;
5743 
5744   END spool_srldata;
5745 
5746   PROCEDURE dump_diff(
5747     p_instance_rec      in csi_datastructures_pub.instance_rec)
5748   IS
5749 
5750     l_vld_organization_id    number;
5751     l_inv_organization_id    number;
5752     l_inv_subinventory_name  varchar2(30);
5753     l_inventory_revision     varchar2(8);
5754     l_inv_locator_id         number;
5755     l_location_type_code     varchar(30);
5756     l_instance_usage_code    varchar(30);
5757     l_location_id            number;
5758 
5759   BEGIN
5760     SELECT last_vld_organization_id,
5764            inv_locator_id,
5761            inv_organization_id,
5762            inv_subinventory_name,
5763            inventory_revision,
5765            location_type_code,
5766            instance_usage_code,
5767            location_id
5768     INTO   l_vld_organization_id,
5769            l_inv_organization_id,
5770            l_inv_subinventory_name,
5771            l_inventory_revision,
5772            l_inv_locator_id,
5773            l_location_type_code,
5774            l_instance_usage_code,
5775            l_location_id
5776     FROM csi_item_instances
5777     WHERE instance_id = p_instance_rec.instance_id;
5778 
5779     out('  Instance: '||
5780         fill(l_location_type_code, 15)||
5781         fill(to_char(l_location_id), 6)||
5782         fill(l_instance_usage_code, 15)||
5783         fill(to_char(l_vld_organization_id),5)||
5784         fill(to_char(l_inv_organization_id),5)||
5785         fill(l_inv_subinventory_name,15)||
5786         fill(l_inventory_revision,5)||
5787         fill(to_char(l_inv_locator_id), 6));
5788 
5789     out('  Serial  : '||
5790         fill(p_instance_rec.location_type_code, 15)||
5791         fill(to_char(p_instance_rec.location_id), 6)||
5792         fill(p_instance_rec.instance_usage_code, 15)||
5793         fill(to_char(p_instance_rec.vld_organization_id),5)||
5794         fill(to_char(p_instance_rec.inv_organization_id),5)||
5795         fill(p_instance_rec.inv_subinventory_name,15)||
5796         fill(p_instance_rec.inventory_revision,5)||
5797         fill(to_char(p_instance_rec.inv_locator_id), 6));
5798 
5799   END dump_diff;
5800 
5801   FUNCTION not_the_same(
5802     p_instance_rec      in csi_datastructures_pub.instance_rec)
5803   RETURN boolean
5804   IS
5805 
5806     l_not_the_same    boolean := TRUE;
5807 
5808     l_vld_organization_id    number;
5809     l_inv_organization_id    number;
5810     l_inv_subinventory_name  varchar2(30);
5811     l_inventory_revision     varchar2(8);
5812     l_inv_locator_id         number;
5813     l_location_type_code     varchar(30);
5814     l_instance_usage_code    varchar(30);
5815     l_lot_number             varchar2(80);
5816     l_location_id            number;
5817 
5818     l_pa_project_id          number;
5819     l_pa_project_task_id     number;
5820     l_accounting_class_code  varchar2(30);
5821 
5822     l_wip_job_id             number;
5823 
5824     l_in_transit_order_line_id number;
5825 
5826   BEGIN
5827 
5828     SELECT last_vld_organization_id,
5829            inv_organization_id,
5830            inv_subinventory_name,
5831            inventory_revision,
5832            inv_locator_id,
5833            location_type_code,
5834            instance_usage_code,
5835            location_id,
5836            lot_number,
5837            pa_project_id,
5838            pa_project_task_id,
5839            accounting_class_code,
5840            wip_job_id,
5841            in_transit_order_line_id
5842     INTO   l_vld_organization_id,
5843            l_inv_organization_id,
5844            l_inv_subinventory_name,
5845            l_inventory_revision,
5846            l_inv_locator_id,
5847            l_location_type_code,
5848            l_instance_usage_code,
5849            l_location_id,
5850            l_lot_number,
5851            l_pa_project_id,
5852            l_pa_project_task_id,
5853            l_accounting_class_code,
5854            l_wip_job_id,
5855            l_in_transit_order_line_id
5856     FROM csi_item_instances
5857     WHERE instance_id = p_instance_rec.instance_id;
5858 
5859     IF p_instance_rec.location_type_code = 'INVENTORY' THEN
5860 
5861       IF (nvl(p_instance_rec.vld_organization_id, fnd_api.g_miss_num) =
5862           nvl(l_vld_organization_id, fnd_api.g_miss_num))
5863           AND
5864          (nvl(p_instance_rec.inv_organization_id,fnd_api.g_miss_num) =
5865           nvl(l_inv_organization_id, fnd_api.g_miss_num))
5866           AND
5867          (nvl(p_instance_rec.inv_subinventory_name, fnd_api.g_miss_char) =
5868           nvl(l_inv_subinventory_name, fnd_api.g_miss_char))
5869           AND
5870          (nvl(p_instance_rec.inventory_revision, fnd_api.g_miss_char) =
5871           nvl(l_inventory_revision, fnd_api.g_miss_char))
5872           AND
5873          (nvl(p_instance_rec.inv_locator_id, fnd_api.g_miss_num) =
5874           nvl(l_inv_locator_id, fnd_api.g_miss_num))
5875           AND
5876          (nvl(p_instance_rec.location_type_code, fnd_api.g_miss_char) =
5877           nvl(l_location_type_code, fnd_api.g_miss_char))
5878           AND
5879          (nvl(p_instance_rec.location_id, fnd_api.g_miss_num) =
5880           nvl(l_location_id, fnd_api.g_miss_num))
5881           AND
5882          (nvl(p_instance_rec.instance_usage_code, fnd_api.g_miss_char) =
5883           nvl(l_instance_usage_code, fnd_api.g_miss_char))
5884           AND
5885          (nvl(p_instance_rec.lot_number, fnd_api.g_miss_char) =
5886           nvl(l_lot_number, fnd_api.g_miss_char))
5887       THEN
5888         l_not_the_same := FALSE;
5889       END IF;
5890 
5891     ELSIF p_instance_rec.location_type_code = 'PROJECT' THEN
5892 
5893       IF (nvl(p_instance_rec.accounting_class_code, fnd_api.g_miss_char) =
5894           nvl(l_accounting_class_code, fnd_api.g_miss_char))
5898           AND
5895           AND
5896          (nvl(p_instance_rec.location_type_code, fnd_api.g_miss_char) =
5897           nvl(l_location_type_code, fnd_api.g_miss_char))
5899          (nvl(p_instance_rec.location_id, fnd_api.g_miss_num) =
5900           nvl(l_location_id, fnd_api.g_miss_num))
5901           AND
5902          (nvl(p_instance_rec.pa_project_id, fnd_api.g_miss_num) =
5903           nvl(l_pa_project_id, fnd_api.g_miss_num))
5904           AND
5905          (nvl(p_instance_rec.pa_project_task_id, fnd_api.g_miss_num) =
5906           nvl(l_pa_project_task_id, fnd_api.g_miss_num))
5907           AND
5908          (nvl(p_instance_rec.instance_usage_code, fnd_api.g_miss_char) =
5909           nvl(l_instance_usage_code, fnd_api.g_miss_char))
5910       THEN
5911         l_not_the_same := FALSE;
5912       END IF;
5913 
5914     ELSIF p_instance_rec.location_type_code = 'WIP' THEN
5915 
5916       IF (nvl(p_instance_rec.location_type_code, fnd_api.g_miss_char) =
5917           nvl(l_location_type_code, fnd_api.g_miss_char))
5918           AND
5919          (nvl(p_instance_rec.location_id, fnd_api.g_miss_num) =
5920           nvl(l_location_id, fnd_api.g_miss_num))
5921           AND
5922          (nvl(p_instance_rec.instance_usage_code, fnd_api.g_miss_char) =
5923           nvl(l_instance_usage_code, fnd_api.g_miss_char))
5924           AND
5925          (nvl(p_instance_rec.lot_number, fnd_api.g_miss_char) =
5926           nvl(l_lot_number, fnd_api.g_miss_char))
5927           AND
5928          (nvl(p_instance_rec.inv_organization_id, fnd_api.g_miss_num) =
5929           nvl(l_inv_organization_id, fnd_api.g_miss_num))
5930           AND
5931          (nvl(p_instance_rec.inv_subinventory_name, fnd_api.g_miss_char) =
5932           nvl(l_inv_subinventory_name, fnd_api.g_miss_char))
5933           AND
5934          (nvl(p_instance_rec.inventory_revision, fnd_api.g_miss_char) =
5935           nvl(l_inventory_revision, fnd_api.g_miss_char))
5936           AND
5937          (nvl(p_instance_rec.inv_locator_id, fnd_api.g_miss_num) =
5938           nvl(l_inv_locator_id, fnd_api.g_miss_num))
5939           AND
5940          (nvl(p_instance_rec.wip_job_id, fnd_api.g_miss_num) =
5941           nvl(l_wip_job_id, fnd_api.g_miss_num))
5942       THEN
5943         l_not_the_same := FALSE;
5944       END IF;
5945 
5946     ELSIF p_instance_rec.location_type_code = 'IN_TRANSIT' THEN
5947 
5948       IF (nvl(p_instance_rec.location_type_code, fnd_api.g_miss_char) =
5949           nvl(l_location_type_code, fnd_api.g_miss_char))
5950           AND
5951          (nvl(p_instance_rec.location_id, fnd_api.g_miss_num) =
5952           nvl(l_location_id, fnd_api.g_miss_num))
5953           AND
5954          (nvl(p_instance_rec.instance_usage_code, fnd_api.g_miss_char) =
5955           nvl(l_instance_usage_code, fnd_api.g_miss_char))
5956           AND
5957          (nvl(p_instance_rec.lot_number, fnd_api.g_miss_char) =
5958           nvl(l_lot_number, fnd_api.g_miss_char))
5959           AND
5960          (nvl(p_instance_rec.inv_organization_id, fnd_api.g_miss_num) =
5961           nvl(l_inv_organization_id, fnd_api.g_miss_num))
5962           AND
5963          (nvl(p_instance_rec.inv_subinventory_name, fnd_api.g_miss_char) =
5964           nvl(l_inv_subinventory_name, fnd_api.g_miss_char))
5965           AND
5966          (nvl(p_instance_rec.inventory_revision, fnd_api.g_miss_char) =
5967           nvl(l_inventory_revision, fnd_api.g_miss_char))
5968           AND
5969          (nvl(p_instance_rec.inv_locator_id, fnd_api.g_miss_num) =
5970           nvl(l_inv_locator_id, fnd_api.g_miss_num))
5971           AND
5972          (nvl(p_instance_rec.in_transit_order_line_id, fnd_api.g_miss_num) =
5973           nvl(l_in_transit_order_line_id, fnd_api.g_miss_num))
5974       THEN
5975         l_not_the_same := FALSE;
5976       END IF;
5977 
5978     END IF;
5979 
5980     return l_not_the_same;
5981 
5982   END not_the_same;
5983 
5984   PROCEDURE init_plsql_tables(
5985     px_instance_rec  in out nocopy csi_datastructures_pub.instance_rec,
5986     px_parties_tbl   in out nocopy csi_datastructures_pub.party_tbl,
5987     px_pty_accts_tbl in out nocopy csi_datastructures_pub.party_account_tbl,
5988     px_org_units_tbl in out nocopy csi_datastructures_pub.organization_units_tbl,
5989     px_ea_values_tbl in out nocopy csi_datastructures_pub.extend_attrib_values_tbl,
5990     px_pricing_tbl   in out nocopy csi_datastructures_pub.pricing_attribs_tbl,
5991     px_assets_tbl    in out nocopy csi_datastructures_pub.instance_asset_tbl)
5992   is
5993     l_instance_rec   csi_datastructures_pub.instance_rec;
5994 
5995   BEGIN
5996     px_instance_rec  := l_instance_rec;
5997     px_parties_tbl.delete;
5998     px_pty_accts_tbl.delete;
5999     px_org_units_tbl.delete;
6000     px_ea_values_tbl.delete;
6001     px_pricing_tbl.delete;
6002     px_assets_tbl.delete;
6003   END init_plsql_tables;
6004 
6005   PROCEDURE knock_the_rest IS
6006     CURSOR knock_cur is
6007       SELECT mtl_txn_id,
6008              mtl_src_type_id,
6009              mtl_txn_date
6010       FROM   csi_diagnostics_temp
6011       WHERE  process_flag = 'X';
6012 
6013     l_txn_rec         csi_datastructures_pub.transaction_rec;
6014     l_return_status   varchar2(1) := fnd_api.g_ret_sts_success;
6015     l_msg_count       number;
6016     l_msg_data        varchar2(2000);
6017 
6021       UPDATE csi_txn_errors
6018   BEGIN
6019     FOR knock_rec in knock_cur
6020     LOOP
6022       SET    processed_flag   = 'D',
6023              error_text       = 'A future transaction is processed. So not processing this.',
6024              last_update_date = sysdate,
6025              last_update_login = fnd_global.login_id,
6026              last_updated_by   = fnd_global.user_id
6027       WHERE  inv_material_transaction_id = knock_rec.mtl_txn_id
6028       AND    processed_flag in ('E', 'R');
6029 
6030       BEGIN
6031         SELECT transaction_id INTO l_txn_rec.transaction_id
6032         FROM   csi_transactions
6033         WHERE  inv_material_transaction_id = knock_rec.mtl_txn_id;
6034       EXCEPTION
6035         WHEN no_data_found THEN
6036 
6037           l_txn_rec.transaction_id              := fnd_api.g_miss_num;
6038           l_txn_rec.transaction_type_id         := correction_txn_type_id;
6039           l_txn_rec.source_header_ref           := 'DATAFIX';
6040           l_txn_rec.source_line_ref             := 'FUTURE TXN IS PROCESSED';
6041           l_txn_rec.source_transaction_date     := knock_rec.mtl_txn_date;
6042           l_txn_rec.transaction_date            := sysdate;
6043           l_txn_rec.inv_material_transaction_id := knock_rec.mtl_txn_id;
6044 
6045           csi_transactions_pvt.create_transaction (
6046             p_api_version             => 1.0,
6047             p_commit                  => fnd_api.g_false,
6048             p_init_msg_list           => fnd_api.g_true,
6049             p_validation_level        => fnd_api.g_valid_level_full,
6050             p_success_if_exists_flag  => 'Y',
6051             p_transaction_rec         => l_txn_rec,
6052             x_return_status           => l_return_status,
6053             x_msg_count               => l_msg_count,
6054             x_msg_data                => l_msg_data);
6055 
6056       WHEN too_many_rows THEN
6057         null;
6058       END;
6059 
6060     END LOOP;
6061   END knock_the_rest;
6062 
6063   PROCEDURE create_instance(
6064     p_txn_rec        IN  csi_datastructures_pub.transaction_rec,
6065     p_instance_rec   IN  csi_datastructures_pub.instance_rec,
6066     p_parties_tbl    IN  csi_datastructures_pub.party_tbl,
6067     p_pty_accts_tbl  IN  csi_datastructures_pub.party_account_tbl,
6068     x_return_status  OUT nocopy varchar2,
6069     x_error_message  OUT nocopy varchar2)
6070   IS
6071 
6072     l_instance_rec         csi_datastructures_pub.instance_rec;
6073     l_parties_tbl          csi_datastructures_pub.party_tbl;
6074     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
6075     l_org_units_tbl        csi_datastructures_pub.organization_units_tbl;
6076     l_ea_values_tbl        csi_datastructures_pub.extend_attrib_values_tbl;
6077     l_pricing_tbl          csi_datastructures_pub.pricing_attribs_tbl;
6078     l_assets_tbl           csi_datastructures_pub.instance_asset_tbl;
6079     l_instance_ids_list    csi_datastructures_pub.id_tbl;
6080     l_txn_rec              csi_datastructures_pub.transaction_rec;
6081 
6082     l_error_message        varchar2(2000);
6083     l_msg_data             varchar2(2000);
6084     l_msg_count            number;
6085     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
6086 
6087   BEGIN
6088 
6089     x_return_status := fnd_api.g_ret_sts_success;
6090 
6091     l_txn_rec       := p_txn_rec;
6092     l_instance_rec  := p_instance_rec;
6093     l_parties_tbl   := p_parties_tbl;
6094     l_pty_accts_tbl := p_pty_accts_tbl;
6095 
6096     savepoint create_instance;
6097 
6098     csi_transactions_pvt.create_transaction (
6099       p_api_version             => 1.0,
6100       p_commit                  => fnd_api.g_false,
6101       p_init_msg_list           => fnd_api.g_true,
6102       p_validation_level        => fnd_api.g_valid_level_full,
6103       p_success_if_exists_flag  => 'Y',
6104       p_transaction_rec         => l_txn_rec,
6105       x_return_status           => l_return_status,
6106       x_msg_count               => l_msg_count,
6107       x_msg_data                => l_msg_data  );
6108 
6109     IF l_return_status <> fnd_api.g_ret_sts_success THEN
6110       raise fnd_api.g_exc_error;
6111     END IF;
6112 
6113     l_instance_rec.mfg_serial_number_flag := 'Y';
6114 
6115     IF l_instance_rec.location_type_code = 'INVENTORY'
6116        AND
6117        l_instance_rec.instance_usage_code = 'IN_INVENTORY'
6118     THEN
6119       SELECT nvl(mssi.location_id, haou.location_id)
6120       INTO   l_instance_rec.location_id
6121       FROM   mtl_secondary_inventories mssi,
6122              hr_all_organization_units haou
6123       WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
6124       AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
6125       AND    haou.organization_id          = mssi.organization_id;
6126     ELSIF l_instance_rec.location_type_code = 'WIP' THEN
6127       IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
6128         csi_gen_utility_pvt.populate_install_param_rec;
6129       END IF;
6130       --
6131       l_instance_rec.location_id := csi_datastructures_pub.g_install_param_rec.wip_location_id;
6132     END IF;
6133 
6134     SELECT primary_uom_code
6135     INTO   l_instance_rec.unit_of_measure
6136     FROM   mtl_system_items
6137     WHERE  inventory_item_id = l_instance_rec.inventory_item_id
6141       p_api_version           => 1.0,
6138     AND    organization_id   = l_instance_rec.vld_organization_id;
6139 
6140     csi_item_instance_pub.create_item_instance(
6142       p_commit                => fnd_api.g_false,
6143       p_init_msg_list         => fnd_api.g_true,
6144       p_validation_level      => fnd_api.g_valid_level_full,
6145       p_instance_rec          => l_instance_rec,
6146       p_party_tbl             => l_parties_tbl,
6147       p_account_tbl           => l_pty_accts_tbl,
6148       p_org_assignments_tbl   => l_org_units_tbl,
6149       p_ext_attrib_values_tbl => l_ea_values_tbl,
6150       p_pricing_attrib_tbl    => l_pricing_tbl,
6151       p_asset_assignment_tbl  => l_assets_tbl,
6152       p_txn_rec               => l_txn_rec,
6153       x_return_status         => l_return_status,
6154       x_msg_count             => l_msg_count,
6155       x_msg_data              => l_msg_data );
6156 
6157     l_msg_data := csi_t_gen_utility_pvt.dump_error_stack;
6158     log('    create status :'||l_return_status||' '||l_msg_data);
6159 
6160     -- For Bug 4057183
6161     -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
6162     IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
6163       raise fnd_api.g_exc_error;
6164     END IF;
6165 
6166     IF nvl(l_txn_rec.transaction_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
6167       UPDATE csi_transactions
6168       SET    inv_material_transaction_id = null
6169       WHERE  transaction_id              = l_txn_rec.transaction_id;
6170     END IF;
6171 
6172     commit;
6173 
6174   EXCEPTION
6175     WHEN fnd_api.g_exc_error THEN
6176       rollback to create_instance;
6177       x_return_status := fnd_api.g_ret_sts_error;
6178       x_error_message := csi_t_gen_utility_pvt.dump_error_stack;
6179   END create_instance;
6180 
6181   PROCEDURE update_instance(
6182     p_txn_rec        IN  csi_datastructures_pub.transaction_rec,
6183     p_instance_rec   IN  csi_datastructures_pub.instance_rec,
6184     p_parties_tbl    IN  csi_datastructures_pub.party_tbl,
6185     p_pty_accts_tbl  IN  csi_datastructures_pub.party_account_tbl,
6186     x_return_status  OUT nocopy varchar2,
6187     x_error_message  OUT nocopy varchar2)
6188   IS
6189 
6190     l_not_the_same         boolean := TRUE;
6191 
6192     l_instance_rec         csi_datastructures_pub.instance_rec;
6193     l_parties_tbl          csi_datastructures_pub.party_tbl;
6194     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
6195     l_org_units_tbl        csi_datastructures_pub.organization_units_tbl;
6196     l_ea_values_tbl        csi_datastructures_pub.extend_attrib_values_tbl;
6197     l_pricing_tbl          csi_datastructures_pub.pricing_attribs_tbl;
6198     l_assets_tbl           csi_datastructures_pub.instance_asset_tbl;
6199     l_instance_ids_list    csi_datastructures_pub.id_tbl;
6200     l_txn_rec              csi_datastructures_pub.transaction_rec;
6201 
6202     l_error_message        varchar2(2000);
6203     l_msg_data             varchar2(2000);
6204     l_msg_count            number;
6205     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
6206 
6207   BEGIN
6208 
6209     x_return_status := fnd_api.g_ret_sts_success;
6210 
6211     l_txn_rec       := p_txn_rec;
6212     l_instance_rec  := p_instance_rec;
6213     l_parties_tbl   := p_parties_tbl;
6214     l_pty_accts_tbl := p_pty_accts_tbl;
6215 
6216     IF l_instance_rec.location_type_code = 'INVENTORY'
6217        AND
6218        l_instance_rec.instance_usage_code = 'IN_INVENTORY'
6219     THEN
6220 
6221       SELECT nvl(mssi.location_id, haou.location_id)
6222       INTO   l_instance_rec.location_id
6223       FROM   mtl_secondary_inventories mssi,
6224              hr_all_organization_units haou
6225       WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
6226       AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
6227       AND    haou.organization_id          = mssi.organization_id;
6228 
6229     END IF;
6230 
6231     IF l_instance_rec.location_type_code = 'WIP' THEN
6232       IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
6233         csi_gen_utility_pvt.populate_install_param_rec;
6234       END IF;
6235       --
6236       l_instance_rec.location_id := csi_datastructures_pub.g_install_param_rec.wip_location_id;
6237     END IF;
6238 
6239     savepoint update_instance;
6240 
6241     l_not_the_same := not_the_same(l_instance_rec);
6242 
6243     IF l_not_the_same THEN
6244 
6245       log('    not the same');
6246 
6247       csi_transactions_pvt.create_transaction (
6248         p_api_version             => 1.0,
6249         p_commit                  => fnd_api.g_false,
6250         p_init_msg_list           => fnd_api.g_true,
6251         p_validation_level        => fnd_api.g_valid_level_full,
6252         p_success_if_exists_flag  => 'Y',
6253         p_transaction_rec         => l_txn_rec,
6254         x_return_status           => l_return_status,
6255         x_msg_count               => l_msg_count,
6256         x_msg_data                => l_msg_data  );
6257 
6258       IF l_return_status <> fnd_api.g_ret_sts_success THEN
6259         raise fnd_api.g_exc_error;
6260       END IF;
6261 
6262       UPDATE csi_item_instances
6263       SET    last_vld_organization_id = l_instance_rec.vld_organization_id,
6267       csi_process_txn_pvt.check_and_break_relation(
6264              active_end_date          = null
6265       WHERE  instance_id = l_instance_rec.instance_id;
6266 
6268         p_instance_id   => l_instance_rec.instance_id,
6269         p_csi_txn_rec   => l_txn_rec,
6270         x_return_status => l_return_status);
6271 
6272       IF l_return_status <> fnd_api.g_ret_sts_success THEN
6273         raise fnd_api.g_exc_error;
6274       END IF;
6275 
6276       IF nvl(l_instance_rec.active_end_date, fnd_api.g_miss_date) <> fnd_api.g_miss_date THEN
6277         l_parties_tbl.delete;
6278         l_pty_accts_tbl.delete;
6279       END IF;
6280 
6281       IF l_parties_tbl.count > 0 THEN
6282         FOR lp_ind in l_parties_tbl.FIRST .. l_parties_tbl.LAST
6283         LOOP
6284           SELECT instance_party_id,
6285                  object_version_number
6286           INTO   l_parties_tbl(lp_ind).instance_party_id,
6287                  l_parties_tbl(lp_ind).object_version_number
6288           FROM   csi_i_parties
6289           WHERE  instance_id = l_instance_rec.instance_id
6290           AND    relationship_type_code = l_parties_tbl(lp_ind).relationship_type_code
6291           AND    rownum = 1;
6292         END LOOP;
6293       END IF;
6294 
6295       SELECT object_version_number
6296       INTO   l_instance_rec.object_version_number
6297       FROM   csi_item_instances
6298       WHERE  instance_id = l_instance_rec.instance_id;
6299 
6300       csi_item_instance_pub.update_item_instance(
6301         p_api_version           => 1.0,
6302         p_commit                => fnd_api.g_false,
6303         p_init_msg_list         => fnd_api.g_true,
6304         p_validation_level      => fnd_api.g_valid_level_full,
6305         p_instance_rec          => l_instance_rec,
6306         p_party_tbl             => l_parties_tbl,
6307         p_account_tbl           => l_pty_accts_tbl,
6308         p_org_assignments_tbl   => l_org_units_tbl,
6309         p_ext_attrib_values_tbl => l_ea_values_tbl,
6310         p_pricing_attrib_tbl    => l_pricing_tbl,
6311         p_asset_assignment_tbl  => l_assets_tbl,
6312         p_txn_rec               => l_txn_rec,
6313         x_instance_id_lst       => l_instance_ids_list,
6314         x_return_status         => l_return_status,
6315         x_msg_count             => l_msg_count,
6316         x_msg_data              => l_msg_data);
6317 
6318       l_msg_data := csi_t_gen_utility_pvt.dump_error_stack;
6319       log('    update status :'||l_return_status||' '||l_msg_data);
6320 
6321       -- For Bug 4057183
6322       -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
6323       IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
6324         raise fnd_api.g_exc_error;
6325       END IF;
6326 
6327       IF nvl(l_txn_rec.transaction_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
6328         UPDATE csi_transactions
6329         SET    inv_material_transaction_id = null
6330         WHERE  transaction_id              = l_txn_rec.transaction_id;
6331       END IF;
6332 
6333     ELSE
6334       log('    the same');
6335       IF nvl(l_instance_rec.active_end_date, fnd_api.g_miss_date) <> fnd_api.g_miss_date THEN
6336         UPDATE csi_item_instances
6337         SET    active_end_date = l_instance_rec.active_end_date
6338         WHERE  instance_id     = l_instance_rec.instance_id;
6339       END IF;
6340 
6341       IF nvl(l_instance_rec.active_end_date, fnd_api.g_miss_date) = fnd_api.g_miss_date THEN
6342         UPDATE csi_item_instances
6343         SET    active_end_date = null
6344         WHERE  instance_id     = l_instance_rec.instance_id;
6345       END IF;
6346     END IF;
6347 
6348     commit;
6349 
6350   EXCEPTION
6351     WHEN fnd_api.g_exc_error THEN
6352       rollback to update_instance;
6353       x_return_status := fnd_api.g_ret_sts_error;
6354       x_error_message := csi_t_gen_utility_pvt.dump_error_stack;
6355   END update_instance;
6356 
6357   PROCEDURE fix_soiship(
6358     p_diag_txn_rec  IN diag_txn_rec,
6359     p_txn_rec       IN csi_datastructures_pub.transaction_rec,
6360     x_return_status OUT nocopy varchar2,
6361     x_error_message OUT nocopy varchar2)
6362   IS
6363 
6364     l_txn_rec              csi_datastructures_pub.transaction_rec;
6365 
6366     l_instance_rec         csi_datastructures_pub.instance_rec;
6367     l_parties_tbl          csi_datastructures_pub.party_tbl;
6368     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
6369 
6370     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
6371     l_error_message        varchar2(2000);
6372 
6373   BEGIN
6374 
6375     x_return_status  := fnd_api.g_ret_sts_success;
6376 
6377     log('  '||p_diag_txn_rec.serial_number||
6378         '  '||p_diag_txn_rec.mtl_txn_id||
6379         '  '||p_diag_txn_rec.source_type||
6380         '  '||p_diag_txn_rec.process_code||
6381         '  '||p_diag_txn_rec.inst_id);
6382 
6383     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
6384     LOOP
6385 
6386       l_txn_rec := p_txn_rec;
6387 
6388       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
6389       l_instance_rec.location_type_code       := 'INVENTORY';
6390       l_instance_rec.instance_usage_code      := 'RETURNED';
6391       l_instance_rec.inventory_item_id        := inv_rec.item_id;
6395       l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
6392       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
6393       l_instance_rec.inv_organization_id      := inv_rec.organization_id;
6394       l_instance_rec.quantity                 := 1;
6396       l_instance_rec.inv_locator_id           := inv_rec.locator_id;
6397       get_lot_number(
6398         p_lot_code        => p_diag_txn_rec.lot_code,
6399         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
6400         p_serial_number   => p_diag_txn_rec.serial_number,
6401         x_lot_number      => l_instance_rec.lot_number);
6402       l_instance_rec.inventory_revision       := inv_rec.revision;
6403       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
6404       l_instance_rec.object_version_number    := 1.0;
6405 
6406       SELECT nvl(mssi.location_id, haou.location_id)
6407       INTO   l_instance_rec.location_id
6408       FROM   mtl_secondary_inventories mssi,
6409              hr_all_organization_units haou
6410       WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
6411       AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
6412       AND    haou.organization_id          = mssi.organization_id;
6413 
6414       IF p_diag_txn_rec.expire_flag = 'Y' THEN
6415         l_instance_rec.active_end_date        := sysdate;
6416       END IF;
6417 
6418     END LOOP;
6419 
6420     IF p_diag_txn_rec.inst_id is not null THEN
6421       l_txn_rec.inv_material_transaction_id   := p_diag_txn_rec.mtl_txn_id;
6422       update_instance(
6423         p_txn_rec        => l_txn_rec,
6424         p_instance_rec   => l_instance_rec,
6425         p_parties_tbl    => l_parties_tbl,
6426         p_pty_accts_tbl  => l_pty_accts_tbl,
6427         x_return_status  => l_return_status,
6428         x_error_message  => l_error_message);
6429 
6430     END IF;
6431 
6432     IF l_return_status <> fnd_api.g_ret_sts_success THEN
6433       x_return_status  := l_return_status;
6434       x_error_message  := l_error_message;
6435     END IF;
6436 
6437   END fix_soiship;
6438 
6439   PROCEDURE stage_soiship_instances
6440   IS
6441 
6442     CURSOR txn_cur is
6443       SELECT distinct mtl_txn_id ,
6444              inventory_item_id,
6445              organization_id
6446       FROM   csi_diagnostics_temp
6447       WHERE  process_flag = 'M'
6448       AND    process_code = 'SOISHIP';
6449 
6450     CURSOR returned_serial_cur(p_mtl_txn_id IN number) is
6451       SELECT cdt.diag_seq_id,
6452              cdt.process_code,
6453              cdt.mtl_txn_id,
6454              cdt.mtl_txn_date mtl_txn_date,
6455              cdt.serial_number,
6456              cdt.inventory_item_id,
6457              cdt.instance_id,
6458              cdt.csi_txn_id,
6459              cdt.csi_txn_type_id,
6460              cdt.wip_job_id,
6461              cdt.internal_party_id,
6462              nvl(cdt.create_flag, 'Y')  create_flag,
6463              nvl(cdt.expire_flag, 'N')  expire_flag,
6464              cdt.serial_control_code,
6465              cdt.lot_control_code
6466       FROM   csi_diagnostics_temp cdt
6467       WHERE  cdt.mtl_txn_id            = p_mtl_txn_id
6468       AND    cdt.process_flag          = 'M'
6469       AND    nvl(cdt.create_flag, 'Y') = 'N'; -- marked FOR processing
6470 
6471     CURSOR stage_cur(p_mtl_txn_id in number, p_lot_code in number) IS
6472       SELECT mmt.inventory_item_id      item_id,
6473              mmt.organization_id        organization_id,
6474              mmt.subinventory_code      subinv_code,
6475              mmt.locator_id             locator_id,
6476              mmt.revision               revision,
6477              to_char(null)              lot_number,
6478              abs(mmt.primary_quantity)  quantity,
6479              mmt.transaction_date       mtl_txn_date,
6480              mmt.transaction_id         mtl_txn_id,
6481              mmt.trx_source_line_id     trx_source_line_id
6482       FROM   mtl_material_transactions mmt
6483       WHERE  mmt.transaction_id = p_mtl_txn_id
6484       AND    p_lot_code = 1
6485       UNION
6486       SELECT mmt.inventory_item_id      item_id,
6487              mmt.organization_id        organization_id,
6488              mmt.subinventory_code      subinv_code,
6489              mmt.locator_id             locator_id,
6490              mmt.revision               revision,
6491              mtln.lot_number            lot_number,
6492              abs(mtln.primary_quantity) quantity,
6493              mmt.transaction_date       mtl_txn_date,
6494              mmt.transaction_id         mtl_txn_id,
6495              mmt.trx_source_line_id     trx_source_line_id
6496       FROM   mtl_material_transactions   mmt,
6497              mtl_transaction_lot_numbers mtln
6498       WHERE  mmt.transaction_id  = p_mtl_txn_id
6499       AND    mtln.transaction_id = mmt.transaction_id
6500       AND    p_lot_code <> 1;
6501 
6502     l_order_line_id         number;
6503     l_mtl_txn_date          date;
6504 
6505     l_serials_fixed         boolean;
6506     l_lot_code              number;
6507     l_uom_code              varchar2(10);
6508 
6509     l_instance_id           number;
6510     l_quantity              number;
6511     l_object_version_number number;
6512 
6513     l_internal_party_id    number;
6517     l_org_units_tbl        csi_datastructures_pub.organization_units_tbl;
6514     l_instance_rec         csi_datastructures_pub.instance_rec;
6515     l_parties_tbl          csi_datastructures_pub.party_tbl;
6516     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
6518     l_ea_values_tbl        csi_datastructures_pub.extend_attrib_values_tbl;
6519     l_pricing_tbl          csi_datastructures_pub.pricing_attribs_tbl;
6520     l_assets_tbl           csi_datastructures_pub.instance_asset_tbl;
6521     l_instance_ids_list    csi_datastructures_pub.id_tbl;
6522     l_txn_rec              csi_datastructures_pub.transaction_rec;
6523     l_diag_txn_rec         diag_txn_rec;
6524 
6525     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
6526     l_msg_count            number;
6527     l_msg_data             varchar2(2000);
6528 
6529     l_error_message        varchar2(2000);
6530     srl_upd_error          exception;
6531 
6532   BEGIN
6533 
6534     log(date_time_stamp||'  begin stage_soiship_instances');
6535 
6536     FOR txn_rec IN txn_cur
6537     LOOP
6538 
6539       SELECT transaction_date,
6540              trx_source_line_id
6541       INTO   l_mtl_txn_date,
6542              l_order_line_id
6543       FROM   mtl_material_transactions
6544       WHERE  transaction_id = txn_rec.mtl_txn_id;
6545 
6546       l_txn_rec.transaction_id              := fnd_api.g_miss_num;
6547       l_txn_rec.transaction_type_id         := correction_txn_type_id;
6548       l_txn_rec.source_header_ref           := 'DATAFIX';
6549       l_txn_rec.source_line_ref             := 'SOISHIP';
6550       l_txn_rec.source_line_ref_id          := l_order_line_id;
6551       l_txn_rec.source_transaction_date     := l_mtl_txn_date;
6552       l_txn_rec.transaction_date            := l_mtl_txn_date;
6553 
6554       l_serials_fixed := TRUE;
6555 
6556       -- first fix all the serial numbers as returned
6557       FOR returned_serial_rec IN returned_serial_cur(txn_rec.mtl_txn_id)
6558       LOOP
6559 
6560         l_internal_party_id := returned_serial_rec.internal_party_id;
6561 
6562         l_diag_txn_rec.diag_seq_id     := returned_serial_rec.diag_seq_id;
6563         l_diag_txn_rec.process_code    := returned_serial_rec.process_code;
6564         l_diag_txn_rec.mtl_txn_id      := returned_serial_rec.mtl_txn_id;
6565         l_diag_txn_rec.mtl_txn_date    := returned_serial_rec.mtl_txn_date;
6566         l_diag_txn_rec.serial_number   := returned_serial_rec.serial_number;
6567         l_diag_txn_rec.item_id         := returned_serial_rec.inventory_item_id;
6568         l_diag_txn_rec.inst_id         := returned_serial_rec.instance_id;
6569         l_diag_txn_rec.csi_txn_id      := returned_serial_rec.csi_txn_id;
6570         l_diag_txn_rec.csi_txn_type_id := returned_serial_rec.csi_txn_type_id;
6571         l_diag_txn_rec.wip_job_id      := returned_serial_rec.wip_job_id;
6572         l_diag_txn_rec.create_flag     := returned_serial_rec.create_flag;
6573         l_diag_txn_rec.expire_flag     := returned_serial_rec.expire_flag;
6574         l_diag_txn_rec.serial_code     := returned_serial_rec.serial_control_code;
6575         l_diag_txn_rec.lot_code        := returned_serial_rec.lot_control_code;
6576 
6577         savepoint soiship_srl_upd;
6578 
6579         fix_soiship(
6580           p_diag_txn_rec  => l_diag_txn_rec,
6581           p_txn_rec       => l_txn_rec,
6582           x_return_status => l_return_status,
6583           x_error_message => l_error_message);
6584 
6585         IF l_return_status <> fnd_api.g_ret_sts_success THEN
6586 
6587           l_serials_fixed := FALSE;
6588           rollback to soiship_srl_upd;
6589 
6590           UPDATE csi_diagnostics_temp
6591           SET    process_flag  = 'E',
6592                  temporary_message  = l_error_message
6593           WHERE  diag_seq_id   = returned_serial_rec.diag_seq_id;
6594 
6595         END IF;
6596 
6597         commit;
6598 
6599       END LOOP;
6600 
6601       IF l_serials_fixed THEN
6602 
6603         SELECT lot_control_code,
6604                primary_uom_code
6605         INTO   l_lot_code,
6606                l_uom_code
6607         FROM   mtl_system_items
6608         WHERE  inventory_item_id = txn_rec.inventory_item_id
6609         AND    organization_id   = txn_rec.organization_id;
6610 
6611         FOR stage_rec IN stage_cur (txn_rec.mtl_txn_id, l_lot_code)
6612         LOOP
6613 
6614           savepoint stage_soiship_instances;
6615 
6616           BEGIN
6617 
6618             init_plsql_tables(
6619               px_instance_rec  => l_instance_rec,
6620               px_parties_tbl   => l_parties_tbl,
6621               px_pty_accts_tbl => l_pty_accts_tbl,
6622               px_org_units_tbl => l_org_units_tbl,
6623               px_ea_values_tbl => l_ea_values_tbl,
6624               px_pricing_tbl   => l_pricing_tbl,
6625               px_assets_tbl    => l_assets_tbl);
6626 
6627             BEGIN
6628 
6629               SELECT instance_id,
6630                      quantity,
6631                      object_version_number
6632               INTO   l_instance_id,
6633                      l_quantity,
6634                      l_object_version_number
6635               FROM   csi_item_instances
6636               WHERE  location_type_code               = 'INVENTORY'
6640               AND    inv_subinventory_name            = stage_rec.subinv_code
6637               AND    instance_usage_code              = 'IN_INVENTORY'
6638               AND    inventory_item_id                = stage_rec.item_id
6639               AND    inv_organization_id              = stage_rec.organization_id
6641               AND    nvl(inv_locator_id,-9999)        = nvl(stage_rec.locator_id,-9999)
6642               AND    nvl(lot_number,'$$##$$')         = nvl(stage_rec.lot_number,'$$##$$')
6643               AND    nvl(inventory_revision,'$$##$$') = nvl(stage_rec.revision,'$$##$$')
6644               AND    serial_number is null;
6645 
6646             EXCEPTION
6647               WHEN no_data_found THEN
6648                 l_instance_id := fnd_api.g_miss_num;
6649               WHEN too_many_rows THEN
6650                 stack_message('Too many inventory instances for this non srl item.');
6651                 raise fnd_api.g_exc_error;
6652             END;
6653 
6654             IF nvl(l_instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
6655 
6656               l_instance_rec.instance_id           := l_instance_id;
6657               l_instance_rec.quantity              := l_quantity + stage_rec.quantity;
6658               l_instance_rec.object_version_number := l_object_version_number;
6659               l_instance_rec.active_end_date       := null;
6660               l_instance_rec.instance_status_id    := 3;
6661 
6662               csi_item_instance_pub.update_item_instance(
6663                 p_api_version           => 1.0,
6664                 p_commit                => fnd_api.g_false,
6665                 p_init_msg_list         => fnd_api.g_true,
6666                 p_validation_level      => fnd_api.g_valid_level_full,
6667                 p_instance_rec          => l_instance_rec,
6668                 p_party_tbl             => l_parties_tbl,
6669                 p_account_tbl           => l_pty_accts_tbl,
6670                 p_org_assignments_tbl   => l_org_units_tbl,
6671                 p_ext_attrib_values_tbl => l_ea_values_tbl,
6672                 p_pricing_attrib_tbl    => l_pricing_tbl,
6673                 p_asset_assignment_tbl  => l_assets_tbl,
6674                 p_txn_rec               => l_txn_rec,
6675                 x_instance_id_lst       => l_instance_ids_list,
6676                 x_return_status         => l_return_status,
6677                 x_msg_count             => l_msg_count,
6678                 x_msg_data              => l_msg_data);
6679 
6680               -- For Bug 4057183
6681               -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
6682               IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
6683                 raise fnd_api.g_exc_error;
6684               END IF;
6685 
6686             ELSE
6687 
6688               l_instance_rec.instance_id              := fnd_api.g_miss_num;
6689               l_instance_rec.location_type_code       := 'INVENTORY';
6690               l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
6691               l_instance_rec.inventory_item_id        := stage_rec.item_id;
6692               l_instance_rec.inv_organization_id      := stage_rec.organization_id;
6693               l_instance_rec.quantity                 := stage_rec.quantity;
6694               l_instance_rec.unit_of_measure          := l_uom_code;
6695               l_instance_rec.inv_subinventory_name    := stage_rec.subinv_code;
6696               l_instance_rec.inv_locator_id           := stage_rec.locator_id;
6697               l_instance_rec.lot_number               := stage_rec.lot_number;
6698               l_instance_rec.inventory_revision       := stage_rec.revision;
6699               l_instance_rec.vld_organization_id      := stage_rec.organization_id;
6700               l_instance_rec.object_version_number    := 1.0;
6701 
6702               SELECT nvl(mssi.location_id, haou.location_id)
6703               INTO   l_instance_rec.location_id
6704               FROM   mtl_secondary_inventories mssi,
6705                      hr_all_organization_units haou
6706               WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
6707               AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
6708               AND    haou.organization_id          = mssi.organization_id;
6709 
6710               l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
6711               l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
6712               l_parties_tbl(1).party_id               := l_internal_party_id;
6713               l_parties_tbl(1).relationship_type_code := 'OWNER';
6714               l_parties_tbl(1).contact_flag           := 'N';
6715               l_parties_tbl(1).object_version_number  := 1.0;
6716 
6717               csi_item_instance_pub.create_item_instance(
6718                 p_api_version           => 1.0,
6719                 p_commit                => fnd_api.g_false,
6720                 p_init_msg_list         => fnd_api.g_true,
6721                 p_validation_level      => fnd_api.g_valid_level_full,
6722                 p_instance_rec          => l_instance_rec,
6723                 p_party_tbl             => l_parties_tbl,
6724                 p_account_tbl           => l_pty_accts_tbl,
6725                 p_org_assignments_tbl   => l_org_units_tbl,
6726                 p_ext_attrib_values_tbl => l_ea_values_tbl,
6727                 p_pricing_attrib_tbl    => l_pricing_tbl,
6728                 p_asset_assignment_tbl  => l_assets_tbl,
6732                 x_msg_data              => l_msg_data );
6729                 p_txn_rec               => l_txn_rec,
6730                 x_return_status         => l_return_status,
6731                 x_msg_count             => l_msg_count,
6733 
6734               -- For Bug 4057183
6735               -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
6736               IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
6737                 raise fnd_api.g_exc_error;
6738               END IF;
6739 
6740             END IF;
6741 
6742             UPDATE csi_diagnostics_temp
6743             SET    process_flag = 'P',
6744                    temporary_message = 'Sales order issue instance staged.'
6745             WHERE  mtl_txn_id   = txn_rec.mtl_txn_id;
6746 
6747             UPDATE csi_txn_errors
6748             SET    processed_flag    = 'R',
6749                    last_update_date  = sysdate,
6750                    last_update_login = fnd_global.login_id,
6751                    last_updated_by   = fnd_global.user_id
6752             WHERE  inv_material_transaction_id = txn_rec.mtl_txn_id
6753             AND    processed_flag = 'E';
6754 
6755           EXCEPTION
6756             WHEN fnd_api.g_exc_error THEN
6757               rollback to stage_soiship_instances;
6758               l_error_message := csi_t_gen_utility_pvt.dump_error_stack;
6759               UPDATE csi_diagnostics_temp
6760               SET    process_flag = 'E',
6761                      temporary_message = l_error_message
6762               WHERE  mtl_txn_id   = txn_rec.mtl_txn_id;
6763           END;
6764           commit;
6765         END LOOP;
6766       END IF;
6767 
6768     END LOOP;
6769 
6770     log(date_time_stamp||'  end stage_soiship_instances');
6771 
6772   END stage_soiship_instances;
6773 
6774   PROCEDURE fix_shipment(
6775     p_diag_txn_rec  IN  diag_txn_rec,
6776     x_return_status OUT nocopy varchar2,
6777     x_error_message OUT nocopy varchar2)
6778   IS
6779 
6780     l_txn_rec              csi_datastructures_pub.transaction_rec;
6781 
6782     l_instance_rec         csi_datastructures_pub.instance_rec;
6783     l_parties_tbl          csi_datastructures_pub.party_tbl;
6784     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
6785 
6786     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
6787     l_error_message        varchar2(2000);
6788 
6789   BEGIN
6790 
6791     x_return_status := fnd_api.g_ret_sts_success;
6792 
6793     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
6794     LOOP
6795 
6796       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
6797       l_txn_rec.transaction_type_id           := correction_txn_type_id;
6798       l_txn_rec.source_header_ref             := 'DATAFIX';
6799       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
6800       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
6801       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
6802       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
6803 
6804       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
6805       l_instance_rec.location_type_code       := 'INVENTORY';
6806       l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
6807       l_instance_rec.inventory_item_id        := inv_rec.item_id;
6808       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
6809       l_instance_rec.inv_organization_id      := inv_rec.organization_id;
6810       l_instance_rec.quantity                 := 1;
6811       l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
6812       l_instance_rec.inv_locator_id           := inv_rec.locator_id;
6813       get_lot_number(
6814         p_lot_code        => p_diag_txn_rec.lot_code,
6815         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
6816         p_serial_number   => p_diag_txn_rec.serial_number,
6817         x_lot_number      => l_instance_rec.lot_number);
6818       l_instance_rec.inventory_revision       := inv_rec.revision;
6819       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
6820       l_instance_rec.object_version_number    := 1.0;
6821 
6822     END LOOP;
6823 
6824     l_txn_rec.inv_material_transaction_id   := p_diag_txn_rec.mtl_txn_id;
6825     IF p_diag_txn_rec.inst_id is not null THEN
6826       update_instance(
6827         p_txn_rec        => l_txn_rec,
6828         p_instance_rec   => l_instance_rec,
6829         p_parties_tbl    => l_parties_tbl,
6830         p_pty_accts_tbl  => l_pty_accts_tbl,
6831         x_return_status  => l_return_status,
6832         x_error_message  => l_error_message);
6833     ELSE
6834 
6835       l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
6836       l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
6837       l_parties_tbl(1).party_id               := p_diag_txn_rec.internal_party_id;
6838       l_parties_tbl(1).relationship_type_code := 'OWNER';
6839       l_parties_tbl(1).contact_flag           := 'N';
6840       l_parties_tbl(1).object_version_number  := 1.0;
6841 
6842       create_instance(
6843         p_txn_rec        => l_txn_rec,
6844         p_instance_rec   => l_instance_rec,
6845         p_parties_tbl    => l_parties_tbl,
6846         p_pty_accts_tbl  => l_pty_accts_tbl,
6847         x_return_status  => l_return_status,
6851     IF l_return_status <> fnd_api.g_ret_sts_success THEN
6848         x_error_message  => l_error_message);
6849     END IF;
6850 
6852       x_return_status  := l_return_status;
6853       x_error_message  := l_error_message;
6854     END IF;
6855 
6856   END fix_shipment;
6857 
6858   PROCEDURE fix_rma(
6859     p_diag_txn_rec  IN  diag_txn_rec,
6860     x_return_status OUT nocopy varchar2,
6861     x_error_message OUT nocopy varchar2)
6862   IS
6863 
6864     l_location_type_code     varchar2(30);
6865     l_intransit_location_id  number;
6866 
6867     l_txn_rec              csi_datastructures_pub.transaction_rec;
6868 
6869     l_instance_rec         csi_datastructures_pub.instance_rec;
6870     l_parties_tbl          csi_datastructures_pub.party_tbl;
6871     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
6872 
6873     CURSOR prev_txn_cur(
6874       p_item_id       IN number,
6875       p_serial_number IN varchar2,
6876       p_diag_seq_id   IN number)
6877     IS
6878       SELECT mtl_txn_id,
6879              mtl_action_id,
6880              mtl_src_type_id,
6881              mtl_type_id
6882       FROM   csi_diagnostics_temp
6883       WHERE  inventory_item_id = p_item_id
6884       AND    serial_number     = p_serial_number
6885       AND    diag_seq_id       > p_diag_seq_id
6886       ORDER  by diag_seq_id asc;
6887 
6888     l_prev_txn_rec         prev_txn_cur%rowtype;
6889     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
6890     l_error_message        varchar2(2000);
6891 
6892   BEGIN
6893 
6894     x_return_status := fnd_api.g_ret_sts_success;
6895 
6896     IF p_diag_txn_rec.inst_id is not null THEN
6897        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
6898           csi_gen_utility_pvt.populate_install_param_rec;
6899        END IF;
6900        --
6901        l_intransit_location_id := csi_datastructures_pub.g_install_param_rec.in_transit_location_id;
6902        --
6903 
6904       FOR prev_txn_rec IN prev_txn_cur(
6905         p_item_id       => p_diag_txn_rec.item_id,
6906         p_serial_number => p_diag_txn_rec.serial_number,
6907         p_diag_seq_id   => p_diag_txn_rec.diag_seq_id)
6908       LOOP
6909         l_prev_txn_rec := prev_txn_rec;
6910         exit;
6911       END LOOP;
6912 
6913       IF l_prev_txn_rec.mtl_action_id = 21 and l_prev_txn_rec.mtl_src_type_id = 8 THEN
6914         FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
6915         LOOP
6916 
6917           l_txn_rec.transaction_id                := fnd_api.g_miss_num;
6918           l_txn_rec.transaction_type_id           := correction_txn_type_id;
6919           l_txn_rec.source_header_ref             := 'DATAFIX';
6920           l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
6921           l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
6922           l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
6923           l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
6924 
6925           l_instance_rec.instance_id              := p_diag_txn_rec.inst_id;
6926           l_instance_rec.location_id              := l_intransit_location_id;
6927           l_instance_rec.location_type_code       := 'HZ_LOCATIONS';
6928           l_instance_rec.instance_usage_code      := 'OUT_OF_ENTERPRISE';
6929           l_instance_rec.inventory_item_id        := inv_rec.item_id;
6930           l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
6931           l_instance_rec.quantity                 := 1;
6932           l_instance_rec.inventory_revision       := inv_rec.revision;
6933           l_instance_rec.vld_organization_id      := inv_rec.organization_id;
6934           l_instance_rec.active_end_date          := sysdate;
6935 
6936         END LOOP;
6937 
6938         l_txn_rec.inv_material_transaction_id   := p_diag_txn_rec.mtl_txn_id;
6939         update_instance(
6940           p_txn_rec        => l_txn_rec,
6941           p_instance_rec   => l_instance_rec,
6942           p_parties_tbl    => l_parties_tbl,
6943           p_pty_accts_tbl  => l_pty_accts_tbl,
6944           x_return_status  => l_return_status,
6945           x_error_message  => l_error_message);
6946 
6947         IF l_return_status <> fnd_api.g_ret_sts_success THEN
6948           x_return_status  := l_return_status;
6949           x_error_message  := l_error_message;
6950         END IF;
6951       ELSE
6952 
6953         SELECT location_type_code
6954         INTO   l_location_type_code
6955         FROM   csi_item_instances
6956         WHERE  instance_id = p_diag_txn_rec.inst_id;
6957 
6958         IF l_location_type_code IN ('INVENTORY', 'WIP') THEN
6959 
6960           FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
6961           LOOP
6962 
6963             l_txn_rec.transaction_id                := fnd_api.g_miss_num;
6964             l_txn_rec.transaction_type_id           := correction_txn_type_id;
6965             l_txn_rec.source_header_ref             := 'DATAFIX';
6966             l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
6967             l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
6968             l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
6969             l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
6970 
6974             IF p_diag_txn_rec.serial_code = 6 THEN
6971             l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
6972             l_instance_rec.location_type_code       := 'INVENTORY';
6973 
6975               l_instance_rec.instance_usage_code    := 'RETURNED';
6976             ELSE
6977               l_instance_rec.instance_usage_code    := 'IN_INVENTORY';
6978             END IF;
6979 
6980             l_instance_rec.inventory_item_id        := inv_rec.item_id;
6981             l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
6982             l_instance_rec.inv_organization_id      := inv_rec.organization_id;
6983             l_instance_rec.quantity                 := 1;
6984             l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
6985             l_instance_rec.inv_locator_id           := inv_rec.locator_id;
6986             get_lot_number(
6987               p_lot_code        => p_diag_txn_rec.lot_code,
6988               p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
6989               p_serial_number   => p_diag_txn_rec.serial_number,
6990               x_lot_number      => l_instance_rec.lot_number);
6991             l_instance_rec.inventory_revision       := inv_rec.revision;
6992             l_instance_rec.vld_organization_id      := inv_rec.organization_id;
6993             l_instance_rec.active_end_date          := sysdate;
6994             l_instance_rec.object_version_number    := 1.0;
6995 
6996           END LOOP;
6997 
6998           l_txn_rec.inv_material_transaction_id   := p_diag_txn_rec.mtl_txn_id;
6999 
7000           update_instance(
7001             p_txn_rec        => l_txn_rec,
7002             p_instance_rec   => l_instance_rec,
7003             p_parties_tbl    => l_parties_tbl,
7004             p_pty_accts_tbl  => l_pty_accts_tbl,
7005             x_return_status  => l_return_status,
7006             x_error_message  => l_error_message);
7007 
7008           IF l_return_status <> fnd_api.g_ret_sts_success THEN
7009             x_return_status  := l_return_status;
7010             x_error_message  := l_error_message;
7011           END IF;
7012 
7013         END IF;
7014       END IF;
7015     END IF;
7016   END fix_rma;
7017 
7018   PROCEDURE fix_wipissue(
7019     p_diag_txn_rec  IN  diag_txn_rec,
7020     x_return_status OUT nocopy varchar2,
7021     x_error_message OUT nocopy varchar2)
7022   IS
7023 
7024     l_txn_rec              csi_datastructures_pub.transaction_rec;
7025 
7026     l_instance_rec         csi_datastructures_pub.instance_rec;
7027     l_parties_tbl          csi_datastructures_pub.party_tbl;
7028     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7029 
7030     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7031     l_error_message        varchar2(2000);
7032 
7033   BEGIN
7034 
7035     x_return_status := fnd_api.g_ret_sts_success;
7036 
7037     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7038     LOOP
7039 
7040       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7041       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7042       l_txn_rec.source_header_ref             := 'DATAFIX';
7043       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7044       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
7045       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7046       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7047 
7048       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7049       l_instance_rec.location_type_code       := 'INVENTORY';
7050       l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
7051       l_instance_rec.inventory_item_id        := inv_rec.item_id;
7052       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7053       l_instance_rec.inv_organization_id      := inv_rec.organization_id;
7054       l_instance_rec.quantity                 := 1;
7055       l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
7056       l_instance_rec.inv_locator_id           := inv_rec.locator_id;
7057       get_lot_number(
7058         p_lot_code        => p_diag_txn_rec.lot_code,
7059         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7060         p_serial_number   => p_diag_txn_rec.serial_number,
7061         x_lot_number      => l_instance_rec.lot_number);
7062       l_instance_rec.inventory_revision       := inv_rec.revision;
7063       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7064       l_instance_rec.object_version_number    := 1.0;
7065 
7066     END LOOP;
7067 
7068     l_txn_rec.inv_material_transaction_id   := p_diag_txn_rec.mtl_txn_id;
7069     IF p_diag_txn_rec.inst_id is not null THEN
7070       update_instance(
7071         p_txn_rec        => l_txn_rec,
7072         p_instance_rec   => l_instance_rec,
7073         p_parties_tbl    => l_parties_tbl,
7074         p_pty_accts_tbl  => l_pty_accts_tbl,
7075         x_return_status  => l_return_status,
7076         x_error_message  => l_error_message);
7077     ELSE
7078 
7079       l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
7080       l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
7081       l_parties_tbl(1).party_id               := p_diag_txn_rec.internal_party_id;
7082       l_parties_tbl(1).relationship_type_code := 'OWNER';
7083       l_parties_tbl(1).contact_flag           := 'N';
7084       l_parties_tbl(1).object_version_number  := 1.0;
7085 
7089         p_parties_tbl    => l_parties_tbl,
7086       create_instance(
7087         p_txn_rec        => l_txn_rec,
7088         p_instance_rec   => l_instance_rec,
7090         p_pty_accts_tbl  => l_pty_accts_tbl,
7091         x_return_status  => l_return_status,
7092         x_error_message  => l_error_message);
7093     END IF;
7094 
7095     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7096       x_return_status  := l_return_status;
7097       x_error_message  := l_error_message;
7098     END IF;
7099 
7100   END fix_wipissue;
7101 
7102   PROCEDURE fix_wipreturn(
7103     p_diag_txn_rec  IN  diag_txn_rec,
7104     x_return_status OUT nocopy varchar2,
7105     x_error_message OUT nocopy varchar2)
7106   IS
7107 
7108     l_txn_rec              csi_datastructures_pub.transaction_rec;
7109 
7110     l_instance_rec         csi_datastructures_pub.instance_rec;
7111     l_parties_tbl          csi_datastructures_pub.party_tbl;
7112     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7113 
7114     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7115     l_error_message        varchar2(2000);
7116 
7117   BEGIN
7118 
7119     x_return_status := fnd_api.g_ret_sts_success;
7120 
7121     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7122     LOOP
7123 
7124       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7125       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7126       l_txn_rec.source_header_ref             := 'DATAFIX';
7127       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7128       l_txn_rec.source_line_ref_id            := inv_rec.mtl_source_id;
7129       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7130       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7131 
7132       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7133       l_instance_rec.location_type_code       := 'WIP';
7134       l_instance_rec.instance_usage_code      := 'IN_WIP';
7135       l_instance_rec.inventory_item_id        := inv_rec.item_id;
7136       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7137       l_instance_rec.inv_organization_id      := null;
7138       l_instance_rec.quantity                 := 1;
7139       l_instance_rec.inv_subinventory_name    := null;
7140       l_instance_rec.inv_locator_id           := null;
7141       get_lot_number(
7142         p_lot_code        => p_diag_txn_rec.lot_code,
7143         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7144         p_serial_number   => p_diag_txn_rec.serial_number,
7145         x_lot_number      => l_instance_rec.lot_number);
7146       l_instance_rec.inventory_revision       := inv_rec.revision;
7147       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7148       l_instance_rec.wip_job_id               := inv_rec.mtl_source_id;
7149       l_instance_rec.object_version_number    := 1.0;
7150 
7151     END LOOP;
7152 
7153     IF p_diag_txn_rec.inst_id is not null THEN
7154       l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7155       update_instance(
7156         p_txn_rec        => l_txn_rec,
7157         p_instance_rec   => l_instance_rec,
7158         p_parties_tbl    => l_parties_tbl,
7159         p_pty_accts_tbl  => l_pty_accts_tbl,
7160         x_return_status  => l_return_status,
7161         x_error_message  => l_error_message);
7162     END IF;
7163 
7164     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7165       x_return_status  := l_return_status;
7166       x_error_message  := l_error_message;
7167     END IF;
7168 
7169   END fix_wipreturn;
7170 
7171   PROCEDURE fix_wipcompletion(
7172     p_diag_txn_rec  IN  diag_txn_rec,
7173     x_return_status OUT nocopy varchar2,
7174     x_error_message OUT nocopy varchar2)
7175   IS
7176 
7177     l_txn_rec              csi_datastructures_pub.transaction_rec;
7178 
7179     l_instance_rec         csi_datastructures_pub.instance_rec;
7180     l_parties_tbl          csi_datastructures_pub.party_tbl;
7181     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7182 
7183     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7184     l_error_message        varchar2(2000);
7185 
7186   BEGIN
7187 
7188     x_return_status := fnd_api.g_ret_sts_success;
7189 
7190     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7191     LOOP
7192 
7193       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7194       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7195       l_txn_rec.source_header_ref             := 'DATAFIX';
7196       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7197       l_txn_rec.source_line_ref_id            := inv_rec.mtl_source_id;
7198       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7199       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7200 
7201       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7202       l_instance_rec.location_type_code       := 'WIP';
7203       l_instance_rec.instance_usage_code      := 'IN_WIP';
7204       l_instance_rec.inventory_item_id        := inv_rec.item_id;
7205       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7206       l_instance_rec.inv_organization_id      := null;
7207       l_instance_rec.quantity                 := 1;
7211         p_lot_code        => p_diag_txn_rec.lot_code,
7208       l_instance_rec.inv_subinventory_name    := null;
7209       l_instance_rec.inv_locator_id           := null;
7210       get_lot_number(
7212         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7213         p_serial_number   => p_diag_txn_rec.serial_number,
7214         x_lot_number      => l_instance_rec.lot_number);
7215       l_instance_rec.inventory_revision       := inv_rec.revision;
7216       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7217       l_instance_rec.wip_job_id               := inv_rec.mtl_source_id;
7218       l_instance_rec.object_version_number    := 1.0;
7219 
7220     END LOOP;
7221 
7222     IF p_diag_txn_rec.inst_id is not null THEN
7223       l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7224       update_instance(
7225         p_txn_rec        => l_txn_rec,
7226         p_instance_rec   => l_instance_rec,
7227         p_parties_tbl    => l_parties_tbl,
7228         p_pty_accts_tbl  => l_pty_accts_tbl,
7229         x_return_status  => l_return_status,
7230         x_error_message  => l_error_message);
7231     END IF;
7232 
7233     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7234       x_return_status  := l_return_status;
7235       x_error_message  := l_error_message;
7236     END IF;
7237 
7238   END fix_wipcompletion;
7239 
7240   PROCEDURE fix_miscissue(
7241     p_diag_txn_rec  IN  diag_txn_rec,
7242     x_return_status OUT nocopy varchar2,
7243     x_error_message OUT nocopy varchar2)
7244   IS
7245 
7246     l_txn_rec              csi_datastructures_pub.transaction_rec;
7247 
7248     l_instance_rec         csi_datastructures_pub.instance_rec;
7249     l_parties_tbl          csi_datastructures_pub.party_tbl;
7250     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7251 
7252     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7253     l_error_message        varchar2(2000);
7254 
7255   BEGIN
7256 
7257     x_return_status := fnd_api.g_ret_sts_success;
7258 
7259     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7260     LOOP
7261 
7262       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7263       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7264       l_txn_rec.source_header_ref             := 'DATAFIX';
7265       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7266       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
7267       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7268       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7269 
7270       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7271       l_instance_rec.location_type_code       := 'INVENTORY';
7272       l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
7273       l_instance_rec.inventory_item_id        := inv_rec.item_id;
7274       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7275       l_instance_rec.inv_organization_id      := inv_rec.organization_id;
7276       l_instance_rec.quantity                 := 1;
7277       l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
7278       l_instance_rec.inv_locator_id           := inv_rec.locator_id;
7279       get_lot_number(
7280         p_lot_code        => p_diag_txn_rec.lot_code,
7281         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7282         p_serial_number   => p_diag_txn_rec.serial_number,
7283         x_lot_number      => l_instance_rec.lot_number);
7284       l_instance_rec.inventory_revision       := inv_rec.revision;
7285       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7286       l_instance_rec.object_version_number    := 1.0;
7287 
7288     END LOOP;
7289 
7290     l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7291     IF p_diag_txn_rec.inst_id is not null THEN
7292       update_instance(
7293         p_txn_rec        => l_txn_rec,
7294         p_instance_rec   => l_instance_rec,
7295         p_parties_tbl    => l_parties_tbl,
7296         p_pty_accts_tbl  => l_pty_accts_tbl,
7297         x_return_status  => l_return_status,
7298         x_error_message  => l_error_message);
7299     ELSE
7300 
7301       l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
7302       l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
7303       l_parties_tbl(1).party_id               := p_diag_txn_rec.internal_party_id;
7304       l_parties_tbl(1).relationship_type_code := 'OWNER';
7305       l_parties_tbl(1).contact_flag           := 'N';
7306       l_parties_tbl(1).object_version_number  := 1.0;
7307 
7308       create_instance(
7309         p_txn_rec        => l_txn_rec,
7310         p_instance_rec   => l_instance_rec,
7311         p_parties_tbl    => l_parties_tbl,
7312         p_pty_accts_tbl  => l_pty_accts_tbl,
7313         x_return_status  => l_return_status,
7314         x_error_message  => l_error_message);
7315     END IF;
7316 
7317     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7318       x_return_status  := l_return_status;
7319       x_error_message  := l_error_message;
7320     END IF;
7321 
7322   END fix_miscissue;
7323 
7324   PROCEDURE fix_miscreceipt(
7325     p_diag_txn_rec  in  diag_txn_rec,
7326     x_return_status OUT nocopy varchar2,
7327     x_error_message OUT nocopy varchar2)
7328   IS
7332     l_instance_rec         csi_datastructures_pub.instance_rec;
7329 
7330     l_txn_rec              csi_datastructures_pub.transaction_rec;
7331 
7333     l_parties_tbl          csi_datastructures_pub.party_tbl;
7334     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7335 
7336     l_location_type_code   varchar2(30);
7337 
7338     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7339     l_error_message        varchar2(2000);
7340 
7341   BEGIN
7342 
7343     x_return_status := fnd_api.g_ret_sts_success;
7344 
7345     IF p_diag_txn_rec.inst_id is not null THEN
7346 
7347       SELECT location_type_code
7348       INTO   l_location_type_code
7349       FROM   csi_item_instances
7350       WHERE  instance_id = p_diag_txn_rec.inst_id;
7351 
7352       FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7353       LOOP
7354 
7355         l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7356         l_txn_rec.transaction_type_id           := correction_txn_type_id;
7357         l_txn_rec.source_header_ref             := 'DATAFIX';
7358         l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7359         l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
7360         l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7361         l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7362 
7363         l_instance_rec.instance_id              := p_diag_txn_rec.inst_id;
7364         l_instance_rec.location_type_code       := 'INVENTORY';
7365         l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
7366         l_instance_rec.inventory_item_id        := inv_rec.item_id;
7367         l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7368         l_instance_rec.inv_organization_id      := inv_rec.organization_id;
7369         l_instance_rec.quantity                 := 1;
7370         l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
7371         l_instance_rec.inv_locator_id           := inv_rec.locator_id;
7372       get_lot_number(
7373         p_lot_code        => p_diag_txn_rec.lot_code,
7374         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7375         p_serial_number   => p_diag_txn_rec.serial_number,
7376         x_lot_number      => l_instance_rec.lot_number);
7377         l_instance_rec.inventory_revision       := inv_rec.revision;
7378         l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7379         l_instance_rec.active_end_date          := sysdate;
7380         l_instance_rec.object_version_number    := 1.0;
7381 
7382       END LOOP;
7383 
7384       l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7385       update_instance(
7386         p_txn_rec        => l_txn_rec,
7387         p_instance_rec   => l_instance_rec,
7388         p_parties_tbl    => l_parties_tbl,
7389         p_pty_accts_tbl  => l_pty_accts_tbl,
7390         x_return_status  => l_return_status,
7391         x_error_message  => l_error_message);
7392 
7393       IF l_return_status <> fnd_api.g_ret_sts_success THEN
7394         x_return_status  := l_return_status;
7395         x_error_message  := l_error_message;
7396       END IF;
7397 
7398     END IF;
7399 
7400   END fix_miscreceipt;
7401 
7402   PROCEDURE fix_sixfer(
7403     p_diag_txn_rec    IN  diag_txn_rec,
7404     x_return_status   OUT nocopy varchar2,
7405     x_error_message   OUT nocopy varchar2)
7406   IS
7407 
7408     l_mtl_xfer_txn_id      number;
7409     l_txn_rec              csi_datastructures_pub.transaction_rec;
7410 
7411     l_instance_rec         csi_datastructures_pub.instance_rec;
7412     l_parties_tbl          csi_datastructures_pub.party_tbl;
7413     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7414 
7415     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7416     l_error_message        varchar2(2000);
7417 
7418   BEGIN
7419 
7420     x_return_status := fnd_api.g_ret_sts_success;
7421 
7422     SELECT transfer_transaction_id
7423     INTO   l_mtl_xfer_txn_id
7424     FROM   mtl_material_transactions
7425     WHERE  transaction_id = p_diag_txn_rec.mtl_txn_id;
7426 
7427     FOR inv_rec IN from_sixfer_cur(
7428       p_diag_txn_rec.mtl_txn_id,
7429       l_mtl_xfer_txn_id)
7430     LOOP
7431 
7432       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7433       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7434       l_txn_rec.source_header_ref             := 'DATAFIX';
7435       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7436       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
7437       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7438       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7439 
7440       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7441       l_instance_rec.location_type_code       := 'INVENTORY';
7442       l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
7443       l_instance_rec.inventory_item_id        := inv_rec.item_id;
7444       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7445       l_instance_rec.inv_organization_id      := inv_rec.organization_id;
7446       l_instance_rec.quantity                 := 1;
7447       l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
7451         p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7448       l_instance_rec.inv_locator_id           := inv_rec.locator_id;
7449       get_lot_number(
7450         p_lot_code        => p_diag_txn_rec.lot_code,
7452         p_serial_number   => p_diag_txn_rec.serial_number,
7453         x_lot_number      => l_instance_rec.lot_number);
7454       l_instance_rec.inventory_revision       := inv_rec.revision;
7455       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7456       l_instance_rec.object_version_number    := 1.0;
7457 
7458     END LOOP;
7459 
7460     l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7461     IF p_diag_txn_rec.inst_id is not null THEN
7462       update_instance(
7463         p_txn_rec        => l_txn_rec,
7464         p_instance_rec   => l_instance_rec,
7465         p_parties_tbl    => l_parties_tbl,
7466         p_pty_accts_tbl  => l_pty_accts_tbl,
7467         x_return_status  => l_return_status,
7468         x_error_message  => l_error_message);
7469     ELSE
7470 
7471       l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
7472       l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
7473       l_parties_tbl(1).party_id               := p_diag_txn_rec.internal_party_id;
7474       l_parties_tbl(1).relationship_type_code := 'OWNER';
7475       l_parties_tbl(1).contact_flag           := 'N';
7476       l_parties_tbl(1).object_version_number  := 1.0;
7477 
7478       create_instance(
7479         p_txn_rec        => l_txn_rec,
7480         p_instance_rec   => l_instance_rec,
7481         p_parties_tbl    => l_parties_tbl,
7482         p_pty_accts_tbl  => l_pty_accts_tbl,
7483         x_return_status  => l_return_status,
7484         x_error_message  => l_error_message);
7485     END IF;
7486 
7487     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7488       x_return_status  := l_return_status;
7489       x_error_message  := l_error_message;
7490     END IF;
7491 
7492   END fix_sixfer;
7493 
7494   PROCEDURE fix_projreceipt(
7495     p_diag_txn_rec  IN  diag_txn_rec,
7496     x_return_status OUT nocopy varchar2,
7497     x_error_message OUT nocopy varchar2)
7498   IS
7499 
7500     l_txn_rec              csi_datastructures_pub.transaction_rec;
7501 
7502     l_instance_rec         csi_datastructures_pub.instance_rec;
7503     l_parties_tbl          csi_datastructures_pub.party_tbl;
7504     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7505 
7506     l_project_location_id  number;
7507 
7508     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7509     l_error_message        varchar2(2000);
7510 
7511   BEGIN
7512 
7513     x_return_status := fnd_api.g_ret_sts_success;
7514 
7515     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
7516       csi_gen_utility_pvt.populate_install_param_rec;
7517     END IF;
7518     --
7519     l_project_location_id := csi_datastructures_pub.g_install_param_rec.project_location_id;
7520     --
7521 
7522     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7523     LOOP
7524 
7525       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7526       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7527       l_txn_rec.source_header_ref             := 'DATAFIX';
7528       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7529       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
7530       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7531       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7532 
7533 
7534       l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7535       l_instance_rec.accounting_class_code    := 'PROJECT';
7536       l_instance_rec.location_type_code       := 'PROJECT';
7537       l_instance_rec.location_id              := l_project_location_id;
7538       l_instance_rec.pa_project_id            := inv_rec.source_project_id;
7539       l_instance_rec.pa_project_task_id       := inv_rec.source_task_id;
7540       l_instance_rec.instance_usage_code      := 'IN_PROCESS';
7541       l_instance_rec.inventory_item_id        := inv_rec.item_id;
7542       l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7543       l_instance_rec.quantity                 := 1;
7544       l_instance_rec.inv_organization_id      := null;
7545       l_instance_rec.inv_subinventory_name    := null;
7546       l_instance_rec.inv_locator_id           := null;
7547       l_instance_rec.lot_number               := null;
7548       l_instance_rec.inventory_revision       := inv_rec.revision;
7549       l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7550       l_instance_rec.object_version_number    := 1.0;
7551 
7552     END LOOP;
7553 
7554     l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7555     IF p_diag_txn_rec.inst_id is not null THEN
7556       update_instance(
7557         p_txn_rec        => l_txn_rec,
7558         p_instance_rec   => l_instance_rec,
7559         p_parties_tbl    => l_parties_tbl,
7560         p_pty_accts_tbl  => l_pty_accts_tbl,
7561         x_return_status  => l_return_status,
7562         x_error_message  => l_error_message);
7563     ELSE
7564 
7565       l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
7569       l_parties_tbl(1).contact_flag           := 'N';
7566       l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
7567       l_parties_tbl(1).party_id               := p_diag_txn_rec.internal_party_id;
7568       l_parties_tbl(1).relationship_type_code := 'OWNER';
7570       l_parties_tbl(1).object_version_number  := 1.0;
7571 
7572       create_instance(
7573         p_txn_rec        => l_txn_rec,
7574         p_instance_rec   => l_instance_rec,
7575         p_parties_tbl    => l_parties_tbl,
7576         p_pty_accts_tbl  => l_pty_accts_tbl,
7577         x_return_status  => l_return_status,
7578         x_error_message  => l_error_message);
7579     END IF;
7580 
7581     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7582       x_return_status  := l_return_status;
7583       x_error_message  := l_error_message;
7584     END IF;
7585 
7586   END fix_projreceipt;
7587 
7588   PROCEDURE fix_interorgreceipt(
7589     p_diag_txn_rec  IN  diag_txn_rec,
7590     x_return_status OUT nocopy varchar2,
7591     x_error_message OUT nocopy varchar2)
7592   IS
7593 
7594     l_txn_rec              csi_datastructures_pub.transaction_rec;
7595 
7596     l_internal_party_id    number;
7597     l_src_serial_code      number;
7598     l_lot_number           varchar2(80);
7599     l_inv_location_id      number;
7600 
7601     l_instance_quantity    number;
7602     l_instance_rec_tmp     csi_datastructures_pub.instance_rec;
7603     l_instance_rec         csi_datastructures_pub.instance_rec;
7604     l_parties_tbl          csi_datastructures_pub.party_tbl;
7605     l_pty_accts_tbl        csi_datastructures_pub.party_account_tbl;
7606     l_org_units_tbl         csi_datastructures_pub.organization_units_tbl;
7607     l_ea_values_tbl         csi_datastructures_pub.extend_attrib_values_tbl;
7608     l_pricing_tbl           csi_datastructures_pub.pricing_attribs_tbl;
7609     l_assets_tbl            csi_datastructures_pub.instance_asset_tbl;
7610     l_instance_ids_list     csi_datastructures_pub.id_tbl;
7611 
7612     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
7613     l_msg_data             varchar2(2000);
7614     l_msg_count            number;
7615     l_error_message        varchar2(2000);
7616 
7617     user_error             exception;
7618 
7619   BEGIN
7620 
7621     x_return_status := fnd_api.g_ret_sts_success;
7622 
7623     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
7624        csi_gen_utility_pvt.populate_install_param_rec;
7625     END IF;
7626     --
7627     l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
7628     --
7629     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7630     LOOP
7631 
7632       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7633       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7634       l_txn_rec.source_header_ref             := 'DATAFIX';
7635       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7636       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
7637       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7638       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7639 
7640       SELECT serial_number_control_code
7641       INTO   l_src_serial_code
7642       FROM   mtl_system_items_b
7643       WHERE  inventory_item_id = inv_rec.item_id
7644       AND    organization_id   = inv_rec.xfer_organization_id;
7645 
7646       SELECT nvl(mssi.location_id, haou.location_id)
7647       INTO   l_inv_location_id
7648       FROM   mtl_secondary_inventories mssi,
7649              hr_all_organization_units haou
7650       WHERE  mssi.organization_id          = inv_rec.organization_id
7651       AND    mssi.secondary_inventory_name = inv_rec.subinv_code
7652       AND    haou.organization_id          = mssi.organization_id;
7653 
7654       IF l_src_serial_code in (2, 5) THEN
7655 
7656         l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7657         l_instance_rec.location_type_code       := 'INVENTORY';
7658         l_instance_rec.location_id              := l_inv_location_id;
7659         l_instance_rec.instance_usage_code      := 'IN_TRANSIT';
7660         l_instance_rec.inventory_item_id        := inv_rec.item_id;
7661         l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7662         l_instance_rec.inv_organization_id      := inv_rec.xfer_organization_id;
7663         l_instance_rec.quantity                 := 1;
7664         l_instance_rec.inv_subinventory_name    := null;
7665         l_instance_rec.inv_locator_id           := null;
7666         l_instance_rec.lot_number               := null;
7667         l_instance_rec.inventory_revision       := inv_rec.revision;
7668         l_instance_rec.vld_organization_id      := inv_rec.xfer_organization_id;
7669         l_instance_rec.object_version_number    := 1.0;
7670 
7671         l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7672         IF p_diag_txn_rec.inst_id is not null THEN
7673           update_instance(
7674             p_txn_rec        => l_txn_rec,
7675             p_instance_rec   => l_instance_rec,
7676             p_parties_tbl    => l_parties_tbl,
7677             p_pty_accts_tbl  => l_pty_accts_tbl,
7678             x_return_status  => l_return_status,
7679             x_error_message  => l_error_message);
7680         ELSE
7681 
7685           l_parties_tbl(1).relationship_type_code := 'OWNER';
7682           l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
7683           l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
7684           l_parties_tbl(1).party_id               := l_internal_party_id;
7686           l_parties_tbl(1).contact_flag           := 'N';
7687           l_parties_tbl(1).object_version_number  := 1.0;
7688 
7689           create_instance(
7690             p_txn_rec        => l_txn_rec,
7691             p_instance_rec   => l_instance_rec,
7692             p_parties_tbl    => l_parties_tbl,
7693             p_pty_accts_tbl  => l_pty_accts_tbl,
7694             x_return_status  => l_return_status,
7695             x_error_message  => l_error_message);
7696         END IF;
7697 
7698         IF l_return_status <> fnd_api.g_ret_sts_success THEN
7699           x_return_status  := l_return_status;
7700           x_error_message  := l_error_message;
7701         END IF;
7702       ELSIF l_src_serial_code in (1,6) THEN
7703 
7704         l_instance_rec := l_instance_rec_tmp;
7705         l_parties_tbl.delete;
7706 
7707         -- create/update a non serial intransit instance
7708         get_lot_number(
7709           p_lot_code        => p_diag_txn_rec.lot_code,
7710           p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7711           p_serial_number   => p_diag_txn_rec.serial_number,
7712           x_lot_number      => l_lot_number);
7713 
7714         BEGIN
7715           SELECT instance_id,
7716                  object_version_number,
7717                  quantity
7718           INTO   l_instance_rec.instance_id,
7719                  l_instance_rec.object_version_number,
7720                  l_instance_quantity
7721           FROM   csi_item_instances
7722           WHERE  inventory_item_id                = inv_rec.item_id
7723           AND    nvl(inventory_revision,'$$##$$') = nvl(inv_rec.revision, '$$##$$')
7724           AND    nvl(lot_number,'$$##$$')         = nvl(l_lot_number, '$$##$$')
7725           AND    location_type_code               = 'INVENTORY'
7726           AND    instance_usage_code              = 'IN_TRANSIT'
7727           AND    serial_number                    is null;
7728 
7729           l_instance_rec.quantity := l_instance_quantity + 1;
7730 
7731         EXCEPTION
7732           WHEN no_data_found THEN
7733             l_instance_rec.instance_id := fnd_api.g_miss_num;
7734             l_instance_rec.quantity    := 1;
7735           WHEN too_many_rows THEN
7736             x_return_status := fnd_api.g_ret_sts_error;
7737             x_error_message := 'Multiple non serial in_transit instances found.';
7738             RAISE user_error;
7739         END;
7740 
7741         IF nvl(l_instance_rec.instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
7742 
7743           l_instance_rec.active_end_date       := null;
7744           l_instance_rec.instance_status_id    := 3;
7745 
7746           csi_item_instance_pub.update_item_instance(
7747             p_api_version           => 1.0,
7748             p_commit                => fnd_api.g_false,
7749             p_init_msg_list         => fnd_api.g_true,
7750             p_validation_level      => fnd_api.g_valid_level_full,
7751             p_instance_rec          => l_instance_rec,
7752             p_party_tbl             => l_parties_tbl,
7753             p_account_tbl           => l_pty_accts_tbl,
7754             p_org_assignments_tbl   => l_org_units_tbl,
7755             p_ext_attrib_values_tbl => l_ea_values_tbl,
7756             p_pricing_attrib_tbl    => l_pricing_tbl,
7757             p_asset_assignment_tbl  => l_assets_tbl,
7758             p_txn_rec               => l_txn_rec,
7759             x_instance_id_lst       => l_instance_ids_list,
7760             x_return_status         => l_return_status,
7761             x_msg_count             => l_msg_count,
7762             x_msg_data              => l_msg_data);
7763 
7764           -- For Bug 4057183
7765           -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
7766           IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
7767             x_return_status  := l_return_status;
7768             x_error_message  := csi_t_gen_utility_pvt.dump_error_stack;
7769             RAISE user_error;
7770           END IF;
7771 
7772         ELSE
7773 
7774           l_instance_rec.inventory_item_id        := inv_rec.item_id;
7775           l_instance_rec.inventory_revision       := inv_rec.revision;
7776           l_instance_rec.vld_organization_id      := inv_rec.xfer_organization_id;
7777           l_instance_rec.instance_usage_code      := 'IN_TRANSIT';
7778           l_instance_rec.location_type_code       := 'INVENTORY';
7779           l_instance_rec.location_id              := l_inv_location_id;
7780           l_instance_rec.active_end_date          := null;
7781           l_instance_rec.inv_organization_id      := null;
7782           l_instance_rec.inv_subinventory_name    := null;
7783           l_instance_rec.inv_locator_id           := null;
7784           l_instance_rec.lot_number               := l_lot_number;
7785 
7786           l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
7787           l_parties_tbl(1).instance_id            := fnd_api.g_miss_num;
7788           l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
7789           l_parties_tbl(1).party_id               := l_internal_party_id;
7790           l_parties_tbl(1).relationship_type_code := 'OWNER';
7791           l_parties_tbl(1).contact_flag           := 'N';
7795             p_txn_rec        => l_txn_rec,
7792           l_parties_tbl(1).object_version_number  := 1.0;
7793 
7794           create_instance(
7796             p_instance_rec   => l_instance_rec,
7797             p_parties_tbl    => l_parties_tbl,
7798             p_pty_accts_tbl  => l_pty_accts_tbl,
7799             x_return_status  => l_return_status,
7800             x_error_message  => l_error_message);
7801 
7802           IF l_return_status <> fnd_api.g_ret_sts_success THEN
7803             x_return_status  := l_return_status;
7804             x_error_message  := l_error_message;
7805             RAISE user_error;
7806           END IF;
7807         END IF;
7808 
7809         -- update the destination in the returned status for 6
7810         IF l_src_serial_code = 6 and p_diag_txn_rec.inst_id is not null THEN
7811 
7812           l_instance_rec := l_instance_rec_tmp;
7813           l_parties_tbl.delete;
7814 
7815           l_instance_rec.instance_id          := p_diag_txn_rec.inst_id;
7816           l_instance_rec.location_type_code   := 'INVENTORY';
7817           l_instance_rec.inv_organization_id  := inv_rec.organization_id;
7818           l_instance_rec.inv_subinventory_name:= inv_rec.subinv_code;
7819 
7820           SELECT nvl(mssi.location_id, haou.location_id)
7821           INTO   l_instance_rec.location_id
7822           FROM   mtl_secondary_inventories mssi,
7823                  hr_all_organization_units haou
7824           WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
7825           AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
7826           AND    haou.organization_id          = mssi.organization_id;
7827 
7828           l_instance_rec.instance_usage_code    := 'RETURNED';
7829           l_instance_rec.inventory_item_id      := inv_rec.item_id;
7830           l_instance_rec.serial_number          := p_diag_txn_rec.serial_number;
7831           l_instance_rec.mfg_serial_number_flag := 'Y';
7832           l_instance_rec.quantity               := 1;
7833           l_instance_rec.inv_locator_id         := inv_rec.locator_id;
7834           l_instance_rec.creation_complete_flag := 'N';
7835 
7836           get_lot_number(
7837             p_lot_code        => p_diag_txn_rec.lot_code,
7838             p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
7839             p_serial_number   => p_diag_txn_rec.serial_number,
7840             x_lot_number      => l_instance_rec.lot_number);
7841 
7842           l_instance_rec.inventory_revision       := inv_rec.revision;
7843           l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7844 
7845           l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7846 
7847           update_instance(
7848             p_txn_rec        => l_txn_rec,
7849             p_instance_rec   => l_instance_rec,
7850             p_parties_tbl    => l_parties_tbl,
7851             p_pty_accts_tbl  => l_pty_accts_tbl,
7852             x_return_status  => l_return_status,
7853             x_error_message  => l_error_message);
7854 
7855           IF l_return_status <> fnd_api.g_ret_sts_success THEN
7856             x_return_status := l_return_status;
7857             x_error_message := l_error_message;
7858           END IF;
7859         END IF;
7860       END IF;
7861 
7862     END LOOP;
7863 
7864   EXCEPTION
7865     WHEN user_error THEN
7866       -- just to bring the control to the end of the routine
7867       null;
7868   END fix_interorgreceipt;
7869 
7870   PROCEDURE fix_isoreceipt(
7871     p_diag_txn_rec  IN  diag_txn_rec,
7872     x_return_status OUT nocopy varchar2,
7873     x_error_message OUT nocopy varchar2)
7874   IS
7875 
7876     l_txn_rec               csi_datastructures_pub.transaction_rec;
7877 
7878     l_instance_rec          csi_datastructures_pub.instance_rec;
7879     l_parties_tbl           csi_datastructures_pub.party_tbl;
7880     l_pty_accts_tbl         csi_datastructures_pub.party_account_tbl;
7881     l_org_units_tbl         csi_datastructures_pub.organization_units_tbl;
7882     l_ea_values_tbl         csi_datastructures_pub.extend_attrib_values_tbl;
7883     l_pricing_tbl           csi_datastructures_pub.pricing_attribs_tbl;
7884     l_assets_tbl            csi_datastructures_pub.instance_asset_tbl;
7885     l_instance_ids_list     csi_datastructures_pub.id_tbl;
7886 
7887     l_src_serial_code       number;
7888     l_dest_serial_code      number;
7889 
7890     l_instance_quantity     number;
7891     l_internal_party_id     number;
7892     l_intransit_location_id number;
7893     l_lot_number            varchar2(80);
7894 
7895     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
7896     l_msg_count             number;
7897     l_msg_data              varchar2(2000);
7898 
7899     l_error_message         varchar2(2000);
7900 
7901   BEGIN
7902 
7903     x_return_status := fnd_api.g_ret_sts_success;
7904 
7905     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
7906        csi_gen_utility_pvt.populate_install_param_rec;
7907     END IF;
7908     --
7909     l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
7910     l_intransit_location_id := csi_datastructures_pub.g_install_param_rec.in_transit_location_id;
7911     --
7912     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
7913     LOOP
7914 
7915       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
7916       l_txn_rec.transaction_type_id           := correction_txn_type_id;
7920       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
7917       l_txn_rec.source_header_ref             := 'DATAFIX';
7918       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
7919       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
7921       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
7922 
7923       SELECT serial_number_control_code
7924       INTO   l_src_serial_code
7925       FROM   mtl_system_items_b
7926       WHERE  inventory_item_id = inv_rec.item_id
7927       AND    organization_id   = inv_rec.xfer_organization_id;
7928 
7929       SELECT serial_number_control_code
7930       INTO   l_dest_serial_code
7931       FROM   mtl_system_items_b
7932       WHERE  inventory_item_id = inv_rec.item_id
7933       AND    organization_id   = inv_rec.organization_id;
7934 
7935       IF l_src_serial_code in (2, 5, 6) THEN
7936         l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
7937 
7938         IF l_dest_serial_code = 1 THEN
7939           l_instance_rec.location_type_code     := 'HZ_LOCATIONS';
7940           l_instance_rec.location_type_code     := 'OUT_OF_ENTERPRISE';
7941         ELSE
7942           l_instance_rec.location_type_code     := 'IN_TRANSIT';
7943           l_instance_rec.instance_usage_code    := 'IN_TRANSIT';
7944         END IF;
7945 
7946         l_instance_rec.location_id              := l_intransit_location_id;
7947         l_instance_rec.inventory_item_id        := inv_rec.item_id;
7948         l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
7949         l_instance_rec.quantity                 := 1;
7950         l_instance_rec.inv_organization_id      := null;
7951         l_instance_rec.inv_subinventory_name    := null;
7952         l_instance_rec.inv_locator_id           := null;
7953         l_instance_rec.lot_number               := null;
7954         l_instance_rec.inventory_revision       := inv_rec.revision;
7955 
7956         -- read the order line id from the shipment transaction prior to the ISO receipt
7957         -- and stamp it in in_transit_order_line_id
7958         BEGIN
7959           SELECT trx_source_line_id
7960           INTO   l_instance_rec.in_transit_order_line_id
7961           FROM   mtl_material_transactions
7962           WHERE  transaction_action_id      = 21
7963           AND    transaction_source_type_id = 8
7964           AND   (shipment_number, inventory_item_id) IN (
7965                  SELECT shipment_number, inventory_item_id
7966                  FROM   mtl_material_transactions
7967                  WHERE  transaction_id = inv_rec.mtl_txn_id)
7968           AND rownum = 1;
7969         EXCEPTION
7970           WHEN no_data_found THEN
7971             l_instance_rec.in_transit_order_line_id := inv_rec.trx_source_line_id;
7972         END;
7973 
7974         l_instance_rec.vld_organization_id      := inv_rec.organization_id;
7975         l_instance_rec.object_version_number    := 1.0;
7976 
7977         l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
7978         IF p_diag_txn_rec.inst_id is not null THEN
7979           update_instance(
7980             p_txn_rec        => l_txn_rec,
7981             p_instance_rec   => l_instance_rec,
7982             p_parties_tbl    => l_parties_tbl,
7983             p_pty_accts_tbl  => l_pty_accts_tbl,
7984             x_return_status  => l_return_status,
7985             x_error_message  => l_error_message);
7986         ELSE
7987 
7988           l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
7989           l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
7990           l_parties_tbl(1).party_id               := l_internal_party_id;
7991           l_parties_tbl(1).relationship_type_code := 'OWNER';
7992           l_parties_tbl(1).contact_flag           := 'N';
7993           l_parties_tbl(1).object_version_number  := 1.0;
7994 
7995           create_instance(
7996             p_txn_rec        => l_txn_rec,
7997             p_instance_rec   => l_instance_rec,
7998             p_parties_tbl    => l_parties_tbl,
7999             p_pty_accts_tbl  => l_pty_accts_tbl,
8000             x_return_status  => l_return_status,
8001             x_error_message  => l_error_message);
8002         END IF;
8003 
8004         IF l_return_status <> fnd_api.g_ret_sts_success THEN
8005           x_return_status  := l_return_status;
8006           x_error_message  := l_error_message;
8007         END IF;
8008 
8009       ELSIF l_src_serial_code = 1 THEN
8010         BEGIN
8011 
8012           get_lot_number(
8013             p_lot_code        => p_diag_txn_rec.lot_code,
8014             p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
8015             p_serial_number   => p_diag_txn_rec.serial_number,
8016             x_lot_number      => l_lot_number);
8017 
8018           SELECT instance_id,
8019                  object_version_number,
8020                  quantity
8021           INTO   l_instance_rec.instance_id,
8022                  l_instance_rec.object_version_number,
8023                  l_instance_quantity
8024           FROM   csi_item_instances
8025           WHERE  inventory_item_id                = inv_rec.item_id
8026           AND    nvl(inventory_revision,'$$##$$') = nvl(inv_rec.revision, '$$##$$')
8027           AND    nvl(lot_number,'$$##$$')         = nvl(l_lot_number, '$$##$$')
8028           AND    location_type_code               = 'IN_TRANSIT'
8029           AND    instance_usage_code              = 'IN_TRANSIT'
8033 
8030           AND    serial_number                    is null;
8031 
8032           l_instance_rec.quantity := l_instance_quantity + inv_rec.quantity;
8034         EXCEPTION
8035           WHEN no_data_found THEN
8036             l_instance_rec.instance_id           := fnd_api.g_miss_num;
8037             l_instance_rec.object_version_number := 1;
8038             l_instance_rec.quantity              := inv_rec.quantity;
8039         END;
8040 
8041         BEGIN
8042           SELECT trx_source_line_id
8043           INTO   l_instance_rec.in_transit_order_line_id
8044           FROM   mtl_material_transactions
8045           WHERE  transaction_action_id      = 21
8046           AND    transaction_source_type_id = 8
8047           AND   (shipment_number, inventory_item_id) IN (
8048                  SELECT shipment_number, inventory_item_id
8049                  FROM   mtl_material_transactions
8050                  WHERE  transaction_id = inv_rec.mtl_txn_id)
8051           AND rownum = 1;
8052         EXCEPTION
8053           WHEN no_data_found THEN
8054             l_instance_rec.in_transit_order_line_id := inv_rec.trx_source_line_id;
8055         END;
8056 
8057         IF nvl(l_instance_rec.instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
8058 
8059           l_instance_rec.active_end_date       := null;
8060           l_instance_rec.instance_status_id    := 3;
8061 
8062           csi_item_instance_pub.update_item_instance(
8063             p_api_version           => 1.0,
8064             p_commit                => fnd_api.g_false,
8065             p_init_msg_list         => fnd_api.g_true,
8066             p_validation_level      => fnd_api.g_valid_level_full,
8067             p_instance_rec          => l_instance_rec,
8068             p_party_tbl             => l_parties_tbl,
8069             p_account_tbl           => l_pty_accts_tbl,
8070             p_org_assignments_tbl   => l_org_units_tbl,
8071             p_ext_attrib_values_tbl => l_ea_values_tbl,
8072             p_pricing_attrib_tbl    => l_pricing_tbl,
8073             p_asset_assignment_tbl  => l_assets_tbl,
8074             p_txn_rec               => l_txn_rec,
8075             x_instance_id_lst       => l_instance_ids_list,
8076             x_return_status         => l_return_status,
8077             x_msg_count             => l_msg_count,
8078             x_msg_data              => l_msg_data);
8079 
8080           -- For Bug 4057183
8081           -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
8082           IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
8083             x_return_status  := l_return_status;
8084             x_error_message  := csi_t_gen_utility_pvt.dump_error_stack;
8085           END IF;
8086 
8087         ELSE
8088 
8089           l_instance_rec.inventory_item_id        := inv_rec.item_id;
8090           l_instance_rec.inventory_revision       := inv_rec.revision;
8091           l_instance_rec.vld_organization_id      := inv_rec.xfer_organization_id;
8092           l_instance_rec.instance_usage_code      := 'IN_TRANSIT';
8093           l_instance_rec.location_type_code       := 'IN_TRANSIT';
8094           l_instance_rec.location_id              := l_intransit_location_id;
8095           l_instance_rec.active_end_date          := null;
8096           l_instance_rec.inv_organization_id      := null;
8097           l_instance_rec.inv_subinventory_name    := null;
8098           l_instance_rec.inv_locator_id           := null;
8099           l_instance_rec.lot_number               := null;
8100 
8101           l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
8102           l_parties_tbl(1).instance_id            := fnd_api.g_miss_num;
8103           l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
8104           l_parties_tbl(1).party_id               := l_internal_party_id;
8105           l_parties_tbl(1).relationship_type_code := 'OWNER';
8106           l_parties_tbl(1).contact_flag           := 'N';
8107           l_parties_tbl(1).object_version_number  := 1.0;
8108 
8109           create_instance(
8110             p_txn_rec        => l_txn_rec,
8111             p_instance_rec   => l_instance_rec,
8112             p_parties_tbl    => l_parties_tbl,
8113             p_pty_accts_tbl  => l_pty_accts_tbl,
8114             x_return_status  => l_return_status,
8115             x_error_message  => l_error_message);
8116         END IF;
8117 
8118         IF l_return_status <> fnd_api.g_ret_sts_success THEN
8119           x_return_status  := l_return_status;
8120           x_error_message  := l_error_message;
8121         END IF;
8122 
8123       END IF;
8124 
8125     END LOOP;
8126 
8127   END fix_isoreceipt;
8128 
8129   PROCEDURE fix_intransitship(
8130     p_diag_txn_rec  IN  diag_txn_rec,
8131     x_return_status OUT nocopy varchar2,
8132     x_error_message OUT nocopy varchar2)
8133   IS
8134 
8135     CURSOR stage_cur(p_mtl_txn_id in number, p_lot_code in number) IS
8136       SELECT mmt.inventory_item_id      item_id,
8137              mmt.organization_id        organization_id,
8138              mmt.subinventory_code      subinv_code,
8139              mmt.locator_id             locator_id,
8140              mmt.revision               revision,
8141              to_char(null)              lot_number,
8142              abs(mmt.primary_quantity)  quantity,
8143              mmt.transaction_date       mtl_txn_date,
8144              mmt.transaction_id         mtl_txn_id,
8145              mmt.trx_source_line_id     trx_source_line_id
8149       UNION
8146       FROM   mtl_material_transactions mmt
8147       WHERE  mmt.transaction_id = p_mtl_txn_id
8148       AND    p_lot_code = 1
8150       SELECT mmt.inventory_item_id      item_id,
8151              mmt.organization_id        organization_id,
8152              mmt.subinventory_code      subinv_code,
8153              mmt.locator_id             locator_id,
8154              mmt.revision               revision,
8155              mtln.lot_number            lot_number,
8156              abs(mtln.primary_quantity) quantity,
8157              mmt.transaction_date       mtl_txn_date,
8158              mmt.transaction_id         mtl_txn_id,
8159              mmt.trx_source_line_id     trx_source_line_id
8160       FROM   mtl_material_transactions   mmt,
8161              mtl_transaction_lot_numbers mtln
8162       WHERE  mmt.transaction_id  = p_mtl_txn_id
8163       AND    mtln.transaction_id = mmt.transaction_id
8164       AND    p_lot_code <> 1;
8165 
8166     l_txn_rec                csi_datastructures_pub.transaction_rec;
8167 
8168     l_instance_rec           csi_datastructures_pub.instance_rec;
8169     l_parties_tbl            csi_datastructures_pub.party_tbl;
8170     l_pty_accts_tbl          csi_datastructures_pub.party_account_tbl;
8171     l_org_units_tbl          csi_datastructures_pub.organization_units_tbl;
8172     l_ea_values_tbl          csi_datastructures_pub.extend_attrib_values_tbl;
8173     l_pricing_tbl            csi_datastructures_pub.pricing_attribs_tbl;
8174     l_assets_tbl             csi_datastructures_pub.instance_asset_tbl;
8175     l_instance_ids_list      csi_datastructures_pub.id_tbl;
8176 
8177     l_internal_party_id      number;
8178     l_intransit_location_id  number;
8179 
8180     l_src_serial_code        number;
8181     l_src_lot_code           number;
8182     l_primary_uom_code       varchar2(8);
8183 
8184     l_dest_serial_code       number;
8185     l_dest_lot_code          number;
8186 
8187     l_instance_id            number;
8188     l_quantity               number;
8189     l_object_version_number  number;
8190 
8191     l_return_status          varchar2(1) := fnd_api.g_ret_sts_success;
8192     l_error_message          varchar2(2000);
8193     l_msg_data               varchar2(2000);
8194     l_msg_count              number;
8195 
8196   BEGIN
8197 
8198     x_return_status := fnd_api.g_ret_sts_success;
8199 
8200     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
8201        csi_gen_utility_pvt.populate_install_param_rec;
8202     END IF;
8203     --
8204     l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
8205     l_intransit_location_id := csi_datastructures_pub.g_install_param_rec.in_transit_location_id;
8206     --
8207     FOR inv_rec IN inv_cur (p_diag_txn_rec.mtl_txn_id)
8208     LOOP
8209 
8210       SELECT serial_number_control_code,
8211              lot_control_code,
8212              primary_uom_code
8213       INTO   l_src_serial_code,
8214              l_src_lot_code,
8215              l_primary_uom_code
8216       FROM   mtl_system_items
8217       WHERE  inventory_item_id = inv_rec.item_id
8218       AND    organization_id   = inv_rec.organization_id;
8219 
8220       SELECT serial_number_control_code,
8221              lot_control_code
8222       INTO   l_dest_serial_code,
8223              l_dest_lot_code
8224       FROM   mtl_system_items
8225       WHERE  inventory_item_id = inv_rec.item_id
8226       AND    organization_id   = inv_rec.xfer_organization_id;
8227 
8228       l_txn_rec.transaction_id                := fnd_api.g_miss_num;
8229       l_txn_rec.transaction_type_id           := correction_txn_type_id;
8230       l_txn_rec.source_header_ref             := 'DATAFIX';
8231       l_txn_rec.source_line_ref               := p_diag_txn_rec.process_code;
8232       l_txn_rec.source_line_ref_id            := inv_rec.trx_source_line_id;
8233       l_txn_rec.source_transaction_date       := inv_rec.mtl_txn_date;
8234       l_txn_rec.transaction_date              := inv_rec.mtl_txn_date;
8235 
8236       IF l_src_serial_code in (2, 5) THEN
8237 
8238         l_instance_rec.instance_id              := nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num);
8239         l_instance_rec.location_type_code       := 'INVENTORY';
8240         l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
8241         l_instance_rec.inventory_item_id        := inv_rec.item_id;
8242         l_instance_rec.serial_number            := p_diag_txn_rec.serial_number;
8243         l_instance_rec.inv_organization_id      := inv_rec.organization_id;
8244         l_instance_rec.quantity                 := 1;
8245         l_instance_rec.inv_subinventory_name    := inv_rec.subinv_code;
8246         l_instance_rec.inv_locator_id           := inv_rec.locator_id;
8247 
8248         get_lot_number(
8249           p_lot_code        => p_diag_txn_rec.lot_code,
8250           p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
8251           p_serial_number   => p_diag_txn_rec.serial_number,
8252           x_lot_number      => l_instance_rec.lot_number);
8253 
8254         l_instance_rec.inventory_revision       := inv_rec.revision;
8255         l_instance_rec.vld_organization_id      := inv_rec.organization_id;
8256         l_instance_rec.object_version_number    := 1.0;
8257 
8258         l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
8259         IF p_diag_txn_rec.inst_id is not null THEN
8260           update_instance(
8261             p_txn_rec        => l_txn_rec,
8265             x_return_status  => l_return_status,
8262             p_instance_rec   => l_instance_rec,
8263             p_parties_tbl    => l_parties_tbl,
8264             p_pty_accts_tbl  => l_pty_accts_tbl,
8266             x_error_message  => l_error_message);
8267         ELSE
8268 
8269           l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
8270           l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
8271           l_parties_tbl(1).party_id               := l_internal_party_id;
8272           l_parties_tbl(1).relationship_type_code := 'OWNER';
8273           l_parties_tbl(1).contact_flag           := 'N';
8274           l_parties_tbl(1).object_version_number  := 1.0;
8275 
8276           create_instance(
8277             p_txn_rec        => l_txn_rec,
8278             p_instance_rec   => l_instance_rec,
8279             p_parties_tbl    => l_parties_tbl,
8280             p_pty_accts_tbl  => l_pty_accts_tbl,
8281             x_return_status  => l_return_status,
8282             x_error_message  => l_error_message);
8283         END IF;
8284 
8285         IF l_return_status <> fnd_api.g_ret_sts_success THEN
8286           x_return_status  := l_return_status;
8287           x_error_message  := l_error_message;
8288         END IF;
8289       ELSE
8290 
8291         -- handle source
8292         FOR stage_rec IN stage_cur (inv_rec.mtl_txn_id, l_src_lot_code)
8293         LOOP
8294 
8295           BEGIN
8296 
8297             init_plsql_tables(
8298               px_instance_rec  => l_instance_rec,
8299               px_parties_tbl   => l_parties_tbl,
8300               px_pty_accts_tbl => l_pty_accts_tbl,
8301               px_org_units_tbl => l_org_units_tbl,
8302               px_ea_values_tbl => l_ea_values_tbl,
8303               px_pricing_tbl   => l_pricing_tbl,
8304               px_assets_tbl    => l_assets_tbl);
8305 
8306             BEGIN
8307 
8308               SELECT instance_id,
8309                      quantity,
8310                      object_version_number
8311               INTO   l_instance_id,
8312                      l_quantity,
8313                      l_object_version_number
8314               FROM   csi_item_instances
8315               WHERE  location_type_code               = 'INVENTORY'
8316               AND    instance_usage_code              = 'IN_INVENTORY'
8317               AND    inventory_item_id                = stage_rec.item_id
8318               AND    inv_organization_id              = stage_rec.organization_id
8319               AND    inv_subinventory_name            = stage_rec.subinv_code
8320               AND    nvl(inv_locator_id,-9999)        = nvl(stage_rec.locator_id,-9999)
8321               AND    nvl(lot_number,'$$##$$')         = nvl(stage_rec.lot_number,'$$##$$')
8322               AND    nvl(inventory_revision,'$$##$$') = nvl(stage_rec.revision,'$$##$$')
8323               AND    serial_number is null;
8324 
8325             EXCEPTION
8326               WHEN no_data_found THEN
8327                 l_instance_id := fnd_api.g_miss_num;
8328               WHEN too_many_rows THEN
8329                 stack_message('Too many inventory instances for this non srl item.');
8330                 raise fnd_api.g_exc_error;
8331             END;
8332 
8333             IF nvl(l_instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
8334 
8335               l_instance_rec.instance_id           := l_instance_id;
8336               l_instance_rec.quantity              := l_quantity + stage_rec.quantity;
8337               l_instance_rec.object_version_number := l_object_version_number;
8338               l_instance_rec.active_end_date       := null;
8339               l_instance_rec.instance_status_id    := 3;
8340 
8341               csi_item_instance_pub.update_item_instance(
8342                 p_api_version           => 1.0,
8343                 p_commit                => fnd_api.g_false,
8344                 p_init_msg_list         => fnd_api.g_true,
8345                 p_validation_level      => fnd_api.g_valid_level_full,
8346                 p_instance_rec          => l_instance_rec,
8347                 p_party_tbl             => l_parties_tbl,
8348                 p_account_tbl           => l_pty_accts_tbl,
8349                 p_org_assignments_tbl   => l_org_units_tbl,
8350                 p_ext_attrib_values_tbl => l_ea_values_tbl,
8351                 p_pricing_attrib_tbl    => l_pricing_tbl,
8352                 p_asset_assignment_tbl  => l_assets_tbl,
8353                 p_txn_rec               => l_txn_rec,
8354                 x_instance_id_lst       => l_instance_ids_list,
8355                 x_return_status         => l_return_status,
8356                 x_msg_count             => l_msg_count,
8357                 x_msg_data              => l_msg_data);
8358 
8359               log('  update_item_instance:nsrl: '||l_return_status);
8360 
8361               -- For Bug 4057183
8362               -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
8363               IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
8364                 raise fnd_api.g_exc_error;
8365               END IF;
8366 
8367             ELSE
8368 
8369               l_instance_rec.instance_id              := fnd_api.g_miss_num;
8370               l_instance_rec.location_type_code       := 'INVENTORY';
8371               l_instance_rec.instance_usage_code      := 'IN_INVENTORY';
8372               l_instance_rec.inventory_item_id        := stage_rec.item_id;
8373               l_instance_rec.inv_organization_id      := stage_rec.organization_id;
8377               l_instance_rec.inv_locator_id           := stage_rec.locator_id;
8374               l_instance_rec.quantity                 := stage_rec.quantity;
8375               l_instance_rec.unit_of_measure          := l_primary_uom_code;
8376               l_instance_rec.inv_subinventory_name    := stage_rec.subinv_code;
8378               l_instance_rec.lot_number               := stage_rec.lot_number;
8379               l_instance_rec.inventory_revision       := stage_rec.revision;
8380               l_instance_rec.vld_organization_id      := stage_rec.organization_id;
8381               l_instance_rec.object_version_number    := 1.0;
8382 
8383               SELECT nvl(mssi.location_id, haou.location_id)
8384               INTO   l_instance_rec.location_id
8385               FROM   mtl_secondary_inventories mssi,
8386                      hr_all_organization_units haou
8387               WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
8388               AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
8389               AND    haou.organization_id          = mssi.organization_id;
8390 
8391               l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
8392               l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
8393               l_parties_tbl(1).party_id               := l_internal_party_id;
8394               l_parties_tbl(1).relationship_type_code := 'OWNER';
8395               l_parties_tbl(1).contact_flag           := 'N';
8396               l_parties_tbl(1).object_version_number  := 1.0;
8397 
8398               csi_item_instance_pub.create_item_instance(
8399                 p_api_version           => 1.0,
8400                 p_commit                => fnd_api.g_false,
8401                 p_init_msg_list         => fnd_api.g_true,
8402                 p_validation_level      => fnd_api.g_valid_level_full,
8403                 p_instance_rec          => l_instance_rec,
8404                 p_party_tbl             => l_parties_tbl,
8405                 p_account_tbl           => l_pty_accts_tbl,
8406                 p_org_assignments_tbl   => l_org_units_tbl,
8407                 p_ext_attrib_values_tbl => l_ea_values_tbl,
8408                 p_pricing_attrib_tbl    => l_pricing_tbl,
8409                 p_asset_assignment_tbl  => l_assets_tbl,
8410                 p_txn_rec               => l_txn_rec,
8411                 x_return_status         => l_return_status,
8412                 x_msg_count             => l_msg_count,
8413                 x_msg_data              => l_msg_data );
8414 
8415               log('  create_item_instance:nsrl: '||l_return_status);
8416 
8417               -- For Bug 4057183
8418               -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
8419               IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
8420                 raise fnd_api.g_exc_error;
8421               END IF;
8422 
8423             END IF;
8424           EXCEPTION
8425             WHEN fnd_api.g_exc_error THEN
8426               x_return_status := fnd_api.g_ret_sts_error;
8427               x_error_message := csi_t_gen_utility_pvt.dump_error_stack;
8428               log('  error: '||x_error_message);
8429           END;
8430         END LOOP;
8431 
8432         -- handle soi destination instance
8433         IF nvl(p_diag_txn_rec.inst_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
8434           IF l_src_serial_code = 6 THEN
8435 
8436             init_plsql_tables(
8437               px_instance_rec  => l_instance_rec,
8438               px_parties_tbl   => l_parties_tbl,
8439               px_pty_accts_tbl => l_pty_accts_tbl,
8440               px_org_units_tbl => l_org_units_tbl,
8441               px_ea_values_tbl => l_ea_values_tbl,
8442               px_pricing_tbl   => l_pricing_tbl,
8443               px_assets_tbl    => l_assets_tbl);
8444 
8445             l_instance_rec.instance_id          := p_diag_txn_rec.inst_id;
8446             l_instance_rec.location_type_code   := 'INVENTORY';
8447             l_instance_rec.inv_organization_id  := inv_rec.organization_id;
8448             l_instance_rec.inv_subinventory_name:= inv_rec.subinv_code;
8449 
8450             SELECT nvl(mssi.location_id, haou.location_id)
8451             INTO   l_instance_rec.location_id
8452             FROM   mtl_secondary_inventories mssi,
8453                    hr_all_organization_units haou
8454             WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
8455             AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
8456             AND    haou.organization_id          = mssi.organization_id;
8457 
8458             l_instance_rec.instance_usage_code  := 'RETURNED';
8459             l_instance_rec.inventory_item_id    := inv_rec.item_id;
8460             l_instance_rec.serial_number        := p_diag_txn_rec.serial_number;
8461             l_instance_rec.mfg_serial_number_flag := 'Y';
8462             l_instance_rec.quantity             := 1;
8463             l_instance_rec.inv_locator_id       := inv_rec.locator_id;
8464             l_instance_rec.creation_complete_flag := 'N';
8465 
8466             get_lot_number(
8467               p_lot_code        => p_diag_txn_rec.lot_code,
8468               p_mtl_txn_id      => p_diag_txn_rec.mtl_txn_id,
8469               p_serial_number   => p_diag_txn_rec.serial_number,
8470               x_lot_number      => l_instance_rec.lot_number);
8471 
8472             l_instance_rec.inventory_revision   := inv_rec.revision;
8473             l_instance_rec.vld_organization_id  := inv_rec.organization_id;
8474 
8475             l_txn_rec.inv_material_transaction_id  := p_diag_txn_rec.mtl_txn_id;
8479               p_instance_rec   => l_instance_rec,
8476 
8477             update_instance(
8478               p_txn_rec        => l_txn_rec,
8480               p_parties_tbl    => l_parties_tbl,
8481               p_pty_accts_tbl  => l_pty_accts_tbl,
8482               x_return_status  => l_return_status,
8483               x_error_message  => l_error_message);
8484 
8485             IF l_return_status <> fnd_api.g_ret_sts_success THEN
8486               x_return_status := l_return_status;
8487               x_error_message := l_error_message;
8488             END IF;
8489 
8490           END IF;
8491         END IF;
8492 
8493       END IF;
8494     END LOOP;
8495 
8496   END fix_intransitship;
8497 
8498   PROCEDURE fix_all(
8499     p_diag_txn_rec IN diag_txn_rec)
8500   IS
8501     l_return_status    varchar2(1) := fnd_api.g_ret_sts_success;
8502     l_error_message    varchar2(2000);
8503     l_fixed            boolean := FALSE;
8504   BEGIN
8505 
8506     log('  '||p_diag_txn_rec.serial_number||
8507         '  '||p_diag_txn_rec.mtl_txn_id||
8508         '  '||p_diag_txn_rec.source_type||
8509         '  '||p_diag_txn_rec.process_code||
8510         '  '||p_diag_txn_rec.inst_id);
8511 
8512     IF p_diag_txn_rec.process_code = 'SHIP' THEN
8513 
8514       fix_shipment(
8515         p_diag_txn_rec  => p_diag_txn_rec,
8516         x_return_status => l_return_status,
8517         x_error_message => l_error_message);
8518 
8519     END IF;
8520 
8521     IF p_diag_txn_rec.process_code = 'RMA' THEN
8522       fix_rma(
8523         p_diag_txn_rec  => p_diag_txn_rec,
8524         x_return_status => l_return_status,
8525         x_error_message => l_error_message);
8526     END IF;
8527 
8528     IF p_diag_txn_rec.process_code = 'WIPISSUE' THEN
8529       fix_wipissue(
8530         p_diag_txn_rec  => p_diag_txn_rec,
8531         x_return_status => l_return_status,
8532         x_error_message => l_error_message);
8533     END IF;
8534 
8535     IF p_diag_txn_rec.process_code = 'WIPRETURN' THEN
8536       fix_wipreturn(
8537         p_diag_txn_rec  => p_diag_txn_rec,
8538         x_return_status => l_return_status,
8539         x_error_message => l_error_message);
8540     END IF;
8541 
8542     IF p_diag_txn_rec.process_code = 'WIPCOMPL' THEN
8543       fix_wipcompletion(
8544         p_diag_txn_rec  => p_diag_txn_rec,
8545         x_return_status => l_return_status,
8546         x_error_message => l_error_message);
8547     END IF;
8548 
8549     IF p_diag_txn_rec.process_code = 'MISCISSUE' THEN
8550       fix_miscissue(
8551         p_diag_txn_rec  => p_diag_txn_rec,
8552         x_return_status => l_return_status,
8553         x_error_message => l_error_message);
8554     END IF;
8555 
8556     IF p_diag_txn_rec.process_code = 'MISCRCPT' THEN
8557       fix_miscreceipt(
8558         p_diag_txn_rec  => p_diag_txn_rec,
8559         x_return_status => l_return_status,
8560         x_error_message => l_error_message);
8561     END IF;
8562 
8563     IF p_diag_txn_rec.process_code = 'SIXFER' THEN
8564       fix_sixfer(
8565         p_diag_txn_rec  => p_diag_txn_rec,
8566         x_return_status => l_return_status,
8567         x_error_message => l_error_message);
8568     END IF;
8569 
8570     IF p_diag_txn_rec.process_code = 'PROJRCPT' THEN
8571       fix_projreceipt(
8572         p_diag_txn_rec  => p_diag_txn_rec,
8573         x_return_status => l_return_status,
8574         x_error_message => l_error_message);
8575     END IF;
8576 
8577     IF p_diag_txn_rec.process_code = 'IORGRCPT' THEN
8578       fix_interorgreceipt(
8579         p_diag_txn_rec  => p_diag_txn_rec,
8580         x_return_status => l_return_status,
8581         x_error_message => l_error_message);
8582     END IF;
8583 
8584     IF p_diag_txn_rec.process_code = 'ISORCPT' THEN
8585       fix_isoreceipt(
8586         p_diag_txn_rec  => p_diag_txn_rec,
8587         x_return_status => l_return_status,
8588         x_error_message => l_error_message);
8589     END IF;
8590 
8591     IF p_diag_txn_rec.process_code = 'INTRSHIP' THEN
8592       fix_intransitship(
8593         p_diag_txn_rec  => p_diag_txn_rec,
8594         x_return_status => l_return_status,
8595         x_error_message => l_error_message);
8596     END IF;
8597 
8598     IF l_return_status = fnd_api.g_ret_sts_success THEN
8599       UPDATE csi_diagnostics_temp
8600       SET    process_flag = 'P'
8601       WHERE  diag_seq_id  = p_diag_txn_rec.diag_seq_id;
8602 
8603       UPDATE csi_txn_errors
8604       SET    processed_flag    = 'R',
8605              last_update_date  = sysdate,
8606              last_update_login = fnd_global.login_id,
8607              last_updated_by   = fnd_global.user_id
8608       WHERE  inv_material_transaction_id = p_diag_txn_rec.mtl_txn_id
8609       AND    processed_flag              = 'E';
8610     ELSE
8611       UPDATE csi_diagnostics_temp
8612       SET    process_flag = 'E',
8613              temporary_message = l_error_message
8614       WHERE  diag_seq_id  = p_diag_txn_rec.diag_seq_id;
8615     END IF;
8616 
8617   END fix_all;
8618 
8619   PROCEDURE fix_srldata is
8620 
8621     CURSOR process_cur is
8622       SELECT cdt.diag_seq_id,
8623              nvl(cdt.process_code,'NONE') process_code,
8624              cdt.mtl_txn_id,
8625              cdt.mtl_txn_date mtl_txn_date,
8629              cdt.csi_txn_id,
8626              cdt.serial_number,
8627              cdt.inventory_item_id,
8628              cdt.instance_id,
8630              cdt.csi_txn_type_id,
8631              cdt.wip_job_id,
8632              nvl(cdt.create_flag, 'N')  create_flag,
8633              nvl(cdt.expire_flag, 'N')  expire_flag,
8634              cdt.serial_control_code,
8635              cdt.lot_control_code,
8636              cdt.source_type,
8637              cdt.internal_party_id
8638       FROM   csi_diagnostics_temp cdt
8639       WHERE  nvl(cdt.process_flag ,'N') = 'M'; -- marked FOR processing
8640 
8641     CURSOR reprocess_cur IS
8642       SELECT distinct mtl_txn_id
8643       FROM   csi_diagnostics_temp
8644       WHERE  process_flag = 'R';
8645 
8646     l_diag_txn_rec         diag_txn_rec;
8647 
8648   BEGIN
8649 
8650     -- stage the non serial instance quantity and update the returned serial instance
8651     stage_soiship_instances;
8652 
8653     log(date_time_stamp||'  begin fix_srldata');
8654 
8655     FOR process_rec in process_cur
8656     LOOP
8657 
8658       IF process_rec.process_code <> 'SOISHIP' THEN
8659 
8660         l_diag_txn_rec.diag_seq_id       := process_rec.diag_seq_id;
8661         l_diag_txn_rec.process_code      := process_rec.process_code;
8662         l_diag_txn_rec.mtl_txn_id        := process_rec.mtl_txn_id;
8663         l_diag_txn_rec.mtl_txn_date      := process_rec.mtl_txn_date;
8664         l_diag_txn_rec.serial_number     := process_rec.serial_number;
8665         l_diag_txn_rec.item_id           := process_rec.inventory_item_id;
8666         l_diag_txn_rec.inst_id           := process_rec.instance_id;
8667         l_diag_txn_rec.csi_txn_id        := process_rec.csi_txn_id;
8668         l_diag_txn_rec.csi_txn_type_id   := process_rec.csi_txn_type_id;
8669         l_diag_txn_rec.wip_job_id        := process_rec.wip_job_id;
8670         l_diag_txn_rec.create_flag       := process_rec.create_flag;
8671         l_diag_txn_rec.expire_flag       := process_rec.expire_flag;
8672         l_diag_txn_rec.serial_code       := process_rec.serial_control_code;
8673         l_diag_txn_rec.lot_code          := process_rec.lot_control_code;
8674         l_diag_txn_rec.source_type       := process_rec.source_type;
8675         l_diag_txn_rec.internal_party_id := process_rec.internal_party_id;
8676 
8677         fix_all(
8678           p_diag_txn_rec => l_diag_txn_rec);
8679 
8680       END IF;
8681 
8682     END LOOP;
8683 
8684     FOR reprocess_rec in reprocess_cur
8685     LOOP
8686       update csi_txn_errors
8687       SET    processed_flag              = 'R',
8688              last_update_date            = sysdate,
8689              last_update_login           = fnd_global.login_id,
8690              last_updated_by             = fnd_global.user_id
8691       WHERE  inv_material_transaction_id = reprocess_rec.mtl_txn_id
8692       AND    processed_flag              = 'E';
8693     END LOOP;
8694 
8695     knock_the_rest;
8696 
8697     log(date_time_stamp||'  end fix_srldata');
8698 
8699   END fix_srldata;
8700 
8701   PROCEDURE get_rma_owner(
8702     p_serial_number     in  varchar2,
8703     p_inventory_item_id in  number,
8704     p_organization_id   in  number,
8705     x_change_owner_flag out nocopy varchar2,
8706     x_owner_party_id    out nocopy number,
8707     x_owner_account_id  out nocopy number)
8708   IS
8709 
8710     CURSOR rma_txn_cur(
8711       p_serial      in varchar2,
8712       p_item_id     in number,
8713       p_freeze_date in date)
8714     IS
8715       SELECT mmt.creation_date         mtl_creation_date,
8716              mut.transaction_id        mtl_txn_id,
8717              mut.transaction_date      mtl_txn_date,
8718              mmt.trx_source_line_id    rma_line_id
8719       FROM   mtl_unit_transactions     mut,
8720              mtl_material_transactions mmt
8721       WHERE  mut.serial_number         = p_serial
8722       AND    mut.inventory_item_id     = p_item_id
8723       AND    mut.transaction_date      > p_freeze_date
8724       AND    mmt.transaction_id        = mut.transaction_id
8725       AND    mmt.transaction_type_id   = 15
8726       UNION
8727       SELECT mmt.creation_date         mtl_creation_date,
8728              mtln.transaction_id       mtl_txn_id,
8729              mtln.transaction_date     mtl_txn_date,
8730              mmt.trx_source_line_id    rma_line_id
8731       FROM   mtl_unit_transactions       mut,
8732              mtl_transaction_lot_numbers mtln,
8733              mtl_material_transactions   mmt
8734       WHERE  mut.serial_number          = p_serial
8735       AND    mut.inventory_item_id      = p_item_id
8736       AND    mtln.serial_transaction_id = mut.transaction_id
8737       AND    mtln.transaction_date      > p_freeze_date
8738       AND    mmt.transaction_id         = mtln.transaction_id
8739       AND    mmt.transaction_type_id    = 15
8740       ORDER by 1 desc, 2 desc;
8741 
8742    CURSOR tld_cur(p_rma_line_id in number) is
8743      SELECT ctld.sub_type_id
8744      FROM   csi_t_transaction_lines ctl,
8745             csi_t_txn_line_details ctld
8746      WHERE  ctl.source_transaction_table = 'OE_ORDER_LINES_ALL'
8747      AND    ctl.source_transaction_type_id  = 53
8748      AND    ctl.source_transaction_id    = p_rma_line_id
8749      AND    ctld.transaction_line_id     = ctl.transaction_line_id
8750      AND    ctld.source_transaction_flag = 'Y';
8751 
8755     l_owner_party_id     number;
8752     l_dflt_sub_type_id   number;
8753     l_rma_line_id        number;
8754     l_sub_type_id        number;
8756     l_owner_account_id   number;
8757     l_change_owner_flag  varchar2(1) := 'Y';
8758 
8759     l_freeze_date        date;
8760 
8761   BEGIN
8762 
8763     SELECT sub_type_id
8764     INTO   l_dflt_sub_type_id
8765     FROM   csi_txn_sub_types
8766     WHERE  transaction_type_id = 53
8767     AND    default_flag = 'Y';
8768     --
8769     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
8770        csi_gen_utility_pvt.populate_install_param_rec;
8771     END IF;
8772     --
8773     l_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
8774 
8775     l_change_owner_flag := 'Y';
8776     l_rma_line_id       := null;
8777     l_sub_type_id       := null;
8778     l_owner_party_id    := null;
8779     l_owner_account_id  := null;
8780 
8781     FOR rma_txn_rec in rma_txn_cur (
8782       p_serial      => p_serial_number,
8783       p_item_id     => p_inventory_item_id,
8784       p_freeze_date => l_freeze_date)
8785     LOOP
8786       l_rma_line_id  := rma_txn_rec.rma_line_id;
8787       exit;
8788     END LOOP;
8789 
8790     IF l_rma_line_id is not null THEN
8791 
8792       FOR tld_rec in tld_cur(l_rma_line_id)
8793       LOOP
8794         l_sub_type_id := tld_rec.sub_type_id;
8795         exit;
8796       END LOOP;
8797 
8798       IF l_sub_type_id is not null THEN
8799         null;
8800       ELSE
8801         l_sub_type_id := l_dflt_sub_type_id;
8802       END IF;
8803 
8804       SELECT nvl(src_change_owner, 'N')
8805       INTO   l_change_owner_flag
8806       FROM   csi_txn_sub_types
8807       WHERE  transaction_type_id = 53
8808       AND    sub_type_id         = l_sub_type_id;
8809 
8810 
8811       IF l_change_owner_flag = 'N' THEN
8812 
8813         SELECT nvl(oel.sold_to_org_id, oeh.sold_to_org_id)
8814         INTO   l_owner_account_id
8815         FROM   oe_order_lines_all oel,
8816                oe_order_headers_all oeh
8817         WHERE  oel.line_id = l_rma_line_id
8818         AND    oeh.header_id = oel.header_id;
8819 
8820         SELECT party_id
8821         INTO   l_owner_party_id
8822         FROM   hz_cust_accounts
8823         WHERE  cust_account_id = l_owner_account_id;
8824 
8825       END IF;
8826 
8827     END IF;
8828 
8829     x_change_owner_flag := l_change_owner_flag;
8830     x_owner_party_id    := l_owner_party_id;
8831     x_owner_account_id  := l_owner_account_id;
8832 
8833   END get_rma_owner;
8834 
8835 
8836   /* routine to sync inventory and instances */
8837   PROCEDURE sync_inv_serials IS
8838 
8839     CURSOR inv_srl_cur IS
8840       SELECT msn.serial_number              serial_number,
8841              msn.inventory_item_id          inventory_item_id,
8842              msn.current_organization_id    organization_id,
8843              msn.revision                   revision,
8844              msn.current_subinventory_code  subinventory_code,
8845              msn.current_locator_id         locator_id,
8846              msn.lot_number                 lot_number,
8847              msi.primary_uom_code           uom_code,
8848              msi.serial_number_control_code serial_code,
8849              msi.lot_control_code           lot_code
8850       FROM   mtl_system_items   msi,
8851              mtl_serial_numbers msn
8852       WHERE  msi.inventory_item_id = msn.inventory_item_id
8853       AND    msi.organization_id   = msn.current_organization_id
8854       AND    msi.serial_number_control_code in (2,5)
8855       AND    msn.current_status    = 3
8856       AND    EXISTS (
8857                SELECT '1'
8858                FROM  mtl_parameters   mp,
8859                      mtl_system_items msi_mast
8860                WHERE mp.organization_id         = msi.organization_id
8861                AND   msi_mast.inventory_item_id = msi.inventory_item_id
8862                AND   msi_mast.organization_id   = mp.master_organization_id
8863                AND   nvl(msi_mast.comms_nl_trackable_flag,'N') = 'Y')
8864       AND    EXISTS (
8865                SELECT '1'
8866                FROM  mtl_onhand_quantities moq
8867                WHERE moq.inventory_item_id     = msn.inventory_item_id
8868                AND   moq.organization_id       = msn.current_organization_id
8869                AND   moq.subinventory_code     = msn.current_subinventory_code
8870                AND   nvl(moq.locator_id,-999)  = nvl(msn.current_locator_id,-999)
8871                AND   nvl(moq.lot_number,'$#$') = nvl(msn.lot_number,'$#$')
8872                AND   nvl(moq.revision,'$#$')   = nvl(msn.revision,'$#$') );
8873 
8874     l_release            varchar2(80);
8875 
8876     l_internal_party_id  number;
8877     l_instance           varchar2(30);
8878     l_instance_found     boolean := TRUE;
8879     l_not_the_same       boolean := TRUE;
8880 
8881     l_instance_rec       csi_datastructures_pub.instance_rec;
8882     l_parties_tbl        csi_datastructures_pub.party_tbl;
8883     l_pty_accts_tbl      csi_datastructures_pub.party_account_tbl;
8884     l_org_units_tbl      csi_datastructures_pub.organization_units_tbl;
8885     l_ea_values_tbl      csi_datastructures_pub.extend_attrib_values_tbl;
8886     l_pricing_tbl        csi_datastructures_pub.pricing_attribs_tbl;
8890     l_freeze_date        date;
8887     l_assets_tbl         csi_datastructures_pub.instance_asset_tbl;
8888     l_instance_ids_list  csi_datastructures_pub.id_tbl;
8889     l_txn_rec            csi_datastructures_pub.transaction_rec;
8891     l_latest_txn         boolean := TRUE;
8892     l_pending_msg_found  varchar2(1);
8893     l_pending_err_found  varchar2(1);
8894 
8895     l_owner_party_id     number;
8896     l_owner_account_id   number;
8897     l_change_owner_flag  varchar2(1);
8898     l_txn_is_in_csi      varchar2(1);
8899     l_fs_found           varchar2(1);
8900 
8901     skip_serial          exception;
8902 
8903     l_error_message      varchar2(2000);
8904     l_msg_data           varchar2(2000);
8905     l_msg_count          number;
8906     l_return_status      varchar2(1);
8907 
8908     l_skip_error         varchar2(2000);
8909 
8910   BEGIN
8911 
8912     decode_queue;
8913 
8914     SELECT fnd_Profile.value('csi_upgrading_from_release')
8915     INTO   l_release
8916     FROM   sys.dual;
8917     --
8918     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
8919        csi_gen_utility_pvt.populate_install_param_rec;
8920     END IF;
8921     --
8922     l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
8923     l_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
8924 
8925     FOR srl_rec IN inv_srl_cur
8926     LOOP
8927 
8928       BEGIN
8929 
8930         init_plsql_tables(
8931           px_instance_rec  => l_instance_rec,
8932           px_parties_tbl   => l_parties_tbl,
8933           px_pty_accts_tbl => l_pty_accts_tbl,
8934           px_org_units_tbl => l_org_units_tbl,
8935           px_ea_values_tbl => l_ea_values_tbl,
8936           px_pricing_tbl   => l_pricing_tbl,
8937           px_assets_tbl    => l_assets_tbl);
8938 
8939         BEGIN
8940 
8941           SELECT 'Y'
8942           INTO   l_fs_found
8943           FROM   csi_ii_forward_sync_temp
8944           WHERE  inventory_item_id = srl_rec.inventory_item_id
8945           AND    serial_number     = srl_rec.serial_number
8946           AND    process_flag     <> 'P';
8947 
8948           l_skip_error := 'serial awaiting to be forward synched';
8949           RAISE skip_serial;
8950 
8951         EXCEPTION
8952           WHEN no_data_found THEN
8953             null;
8954         END;
8955 
8956         l_instance_rec.instance_id            := fnd_api.g_miss_num;
8957         l_instance_rec.inventory_item_id      := srl_rec.inventory_item_id;
8958         l_instance_rec.serial_number          := srl_rec.serial_number;
8959         l_instance_rec.lot_number             := srl_rec.lot_number;
8960         l_instance_rec.mfg_serial_number_flag := 'Y';
8961         l_instance_rec.quantity               := 1;
8962         l_instance_rec.unit_of_measure        := srl_rec.uom_code;
8963 
8964         l_instance_rec.vld_organization_id    := srl_rec.organization_id;
8965         l_instance_rec.inv_organization_id    := srl_rec.organization_id;
8966         l_instance_rec.inv_subinventory_name  := srl_rec.subinventory_code;
8967         l_instance_rec.inv_locator_id         := srl_rec.locator_id;
8968         l_instance_rec.inventory_revision     := srl_rec.revision;
8969 
8970         l_instance_rec.location_type_code     := 'INVENTORY';
8971         l_instance_rec.instance_usage_code    := 'IN_INVENTORY';
8972 
8973         -- get inv location id from the subinv/org definition
8974         BEGIN
8975           SELECT location_id
8976           INTO   l_instance_rec.location_id
8977           FROM   mtl_secondary_inventories
8978           WHERE  secondary_inventory_name = l_instance_rec.inv_subinventory_name
8979           AND    organization_id          = l_instance_rec.vld_organization_id;
8980 
8981           IF l_instance_rec.location_id is null THEN
8982             SELECT location_id
8983             INTO   l_instance_rec.location_id
8984             FROM   hr_all_organization_units
8985             WHERE  organization_id = l_instance_rec.vld_organization_id;
8986           END IF;
8987         END;
8988 
8989         BEGIN
8990           SELECT instance_id ,
8991                  object_version_number
8992           INTO   l_instance_rec.instance_id,
8993                  l_instance_rec.object_version_number
8994           FROM   csi_item_instances
8995           WHERE  inventory_item_id = srl_rec.inventory_item_id
8996           AND    serial_number     = srl_rec.serial_number;
8997 
8998           l_instance := to_char(l_instance_rec.instance_id);
8999           l_instance_found := TRUE;
9000         EXCEPTION
9001           WHEN no_data_found THEN
9002             l_instance := 'NONE';
9003             l_instance_found := FALSE;
9004           WHEN too_many_rows THEN
9005             l_instance_found := TRUE;
9006             l_skip_error := '  Too Many Instances for this serial number';
9007             raise skip_serial;
9008         END;
9009 
9010         IF l_instance_found THEN
9011           -- check if the instance inv location attributes are the same as the serial attribute
9012           l_not_the_same := not_the_same(l_instance_rec);
9013         END IF;
9014 
9015         -- fixable candidates  (no serial found or not the same)
9016         IF l_not_the_same OR NOT(l_instance_found) THEN
9017 
9018           log(fill(srl_rec.serial_number, 15)||
9022             fill(to_char(srl_rec.lot_code), 2)||
9019             fill(to_char(srl_rec.inventory_item_id), 9)||
9020             fill(to_char(srl_rec.organization_id), 9)||
9021             fill(to_char(srl_rec.serial_code), 2)||
9023             fill(l_instance,9));
9024 
9025           IF l_not_the_same AND l_instance_found THEN
9026             dump_diff(l_instance_rec);
9027           END IF;
9028 
9029           /* loop thru all the material transactions after freeze date and check if
9030              there is any pending in xnp_msgs.
9031 
9032              also check if there is any  errors in csi_txn_errors. if found then skip
9033              the serial.
9034           */
9035 
9036           l_latest_txn := TRUE;
9037 
9038           l_txn_rec.transaction_id              := fnd_api.g_miss_num;
9039           l_txn_rec.transaction_type_id         := correction_txn_type_id;
9040           l_txn_rec.source_header_ref           := 'DATAFIX';
9041           l_txn_rec.source_line_ref             := 'SRLSYNC';
9042           l_txn_rec.source_transaction_date     := sysdate;
9043           l_txn_rec.transaction_date            := sysdate;
9044 
9045           FOR all_txn_rec in all_txn_cur (
9046             p_serial_number => srl_rec.serial_number,
9047             p_item_id       => srl_rec.inventory_item_id)
9048           LOOP
9049 
9050             IF all_txn_rec.mtl_txn_date > l_freeze_date THEN
9051 
9052             IF csi_inv_trxs_pkg.valid_ib_txn(all_txn_rec.mtl_txn_id) THEN
9053 
9054               IF l_latest_txn THEN
9055 
9056                 log('  latest mtl_txn_id : '||all_txn_rec.mtl_txn_id);
9057 
9058                 l_txn_rec.source_transaction_date     := all_txn_rec.mtl_txn_date;
9059                 l_txn_rec.transaction_date            := all_txn_rec.mtl_txn_date;
9060 
9061                 BEGIN
9062                   SELECT 'X' INTO l_txn_is_in_csi
9063                   FROM   sys.dual
9064                   WHERE  exists (
9065                     SELECT 'Y' FROM csi_transactions
9066                     WHERE  inv_material_transaction_id = all_txn_rec.mtl_txn_id);
9067                   l_txn_rec.inv_material_transaction_id := null;
9068                 EXCEPTION
9069                   WHEN no_data_found THEN
9070                     l_txn_rec.inv_material_transaction_id := all_txn_rec.mtl_txn_id;
9071                 END;
9072 
9073                 l_latest_txn := FALSE;
9074 
9075               END IF;
9076 
9077               BEGIN
9078                 SELECT 'Y' INTO l_pending_msg_found
9079                 FROM   sys.dual
9080                 WHERE  exists (
9081                   SELECT '1'
9082                   FROM   csi_xnp_msgs_temp
9083                   WHERE  source_type = 'MTL_TRANSACTION_ID'
9084                   AND    source_id   = all_txn_rec.mtl_txn_id
9085                   AND    nvl(msg_status, 'READY') <> 'PROCESSED');
9086 
9087                 l_skip_error := '  Unprocessed Message in XNP_MSGS for MTL_TXN_ID: '||
9088                                  all_txn_rec.mtl_txn_id;
9089                 RAISE skip_serial;
9090 
9091               EXCEPTION
9092                 WHEN no_data_found THEN
9093                   null;
9094               END;
9095 
9096               BEGIN
9097                 IF all_txn_rec.mtl_action_id in (2,3,28) THEN
9098 
9099                   SELECT 'Y' INTO l_pending_err_found
9100                   FROM   sys.dual
9101                   WHERE  exists (
9102                     SELECT '1'
9103                     FROM   csi_txn_errors
9104                     WHERE  (inv_material_transaction_id = all_txn_rec.mtl_txn_id
9105                             OR
9106                             inv_material_transaction_id = all_txn_rec.mtl_txn_id)
9107                     AND    processed_flag in ('E', 'R'));
9108 
9109                 ELSE
9110 
9111                   SELECT 'Y' INTO l_pending_err_found
9112                   FROM sys.dual
9113                   WHERE exists (
9114                     SELECT '1'
9115                     FROM   csi_txn_errors
9116                     WHERE  inv_material_transaction_id = all_txn_rec.mtl_txn_id
9117                     AND    processed_flag in ('E', 'R'));
9118 
9119                 END IF;
9120                 l_skip_error := '  Pending Error in CSI_TXN_ERRORS for MTL_TXN_ID: '||
9121                                  all_txn_rec.mtl_txn_id;
9122                 RAISE skip_serial;
9123 
9124               EXCEPTION
9125                 WHEN no_data_found THEN
9126                   null;
9127               END;
9128 
9129             END IF; -- valid ib txb
9130             END IF; -- > freeze_date
9131 
9132           END LOOP;
9133 
9134           l_change_owner_flag := 'Y';
9135           l_owner_party_id    := null;
9136           l_owner_account_id  := null;
9137 
9138           get_rma_owner(
9139             p_serial_number     => srl_rec.serial_number,
9140             p_inventory_item_id => srl_rec.inventory_item_id,
9141             p_organization_id   => srl_rec.organization_id,
9142             x_change_owner_flag => l_change_owner_flag,
9143             x_owner_party_id    => l_owner_party_id,
9144             x_owner_account_id  => l_owner_account_id);
9145 
9146           IF l_change_owner_flag = 'Y' THEN
9147             l_owner_party_id := l_internal_party_id;
9148           END IF;
9149 
9153 
9150           log('  Change Owner    : '||l_change_owner_flag);
9151           log('  Owner Party ID  : '||l_owner_party_id);
9152           log('  Owner Account ID: '||l_owner_account_id);
9154           IF l_change_owner_flag = 'Y' THEN
9155             l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
9156             l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
9157             l_parties_tbl(1).party_id               := l_internal_party_id;
9158             l_parties_tbl(1).relationship_type_code := 'OWNER';
9159             l_parties_tbl(1).contact_flag           := 'N';
9160             l_parties_tbl(1).object_version_number  := 1.0;
9161           ELSE
9162             l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
9163             l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
9164             l_parties_tbl(1).party_id               := l_owner_party_id;
9165             l_parties_tbl(1).relationship_type_code := 'OWNER';
9166             l_parties_tbl(1).contact_flag           := 'N';
9167             l_parties_tbl(1).object_version_number  := 1.0;
9168 
9169             l_pty_accts_tbl(1).ip_account_id          := fnd_api.g_miss_num;
9170             l_pty_accts_tbl(1).party_account_id       := l_owner_account_id;
9171             l_pty_accts_tbl(1).relationship_type_code := 'OWNER';
9172             l_pty_accts_tbl(1).bill_to_address        := fnd_api.g_miss_num;
9173             l_pty_accts_tbl(1).ship_to_address        := fnd_api.g_miss_num;
9174             l_pty_accts_tbl(1).instance_party_id      := fnd_api.g_miss_num;
9175             l_pty_accts_tbl(1).parent_tbl_index       := 1;
9176 
9177           END IF;
9178 
9179           IF l_instance_found THEN
9180 
9181             SELECT instance_party_id,
9182                    object_version_number
9183             INTO   l_parties_tbl(1).instance_party_id,
9184                    l_parties_tbl(1).object_version_number
9185             FROM   csi_i_parties
9186             WHERE  instance_id = l_instance_rec.instance_id
9187             AND    relationship_type_code = 'OWNER';
9188 
9189             log('  csi_process_txn_pvt.check_and_break_relation');
9190 
9191             -- qualifieis for update
9192             csi_process_txn_pvt.check_and_break_relation(
9193               p_instance_id   => l_instance_rec.instance_id,
9194               p_csi_txn_rec   => l_txn_rec,
9195               x_return_status => l_return_status);
9196 
9197             SELECT object_version_number
9198             INTO   l_instance_rec.object_version_number
9199             FROM   csi_item_instances
9200             WHERE  instance_id = l_instance_rec.instance_id;
9201 
9202             log('  csi_item_instance_pub.update_item_instance');
9203 
9204             csi_item_instance_pub.update_item_instance(
9205               p_api_version           => 1.0,
9206               p_commit                => fnd_api.g_false,
9207               p_init_msg_list         => fnd_api.g_true,
9208               p_validation_level      => fnd_api.g_valid_level_full,
9209               p_instance_rec          => l_instance_rec,
9210               p_party_tbl             => l_parties_tbl,
9211               p_account_tbl           => l_pty_accts_tbl,
9212               p_org_assignments_tbl   => l_org_units_tbl,
9213               p_ext_attrib_values_tbl => l_ea_values_tbl,
9214               p_pricing_attrib_tbl    => l_pricing_tbl,
9215               p_asset_assignment_tbl  => l_assets_tbl,
9216               p_txn_rec               => l_txn_rec,
9217               x_instance_id_lst       => l_instance_ids_list,
9218               x_return_status         => l_return_status,
9219               x_msg_count             => l_msg_count,
9220               x_msg_data              => l_msg_data);
9221 
9222             -- For Bug 4057183
9223             -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
9224             IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
9225               raise fnd_api.g_exc_error;
9226             END IF;
9227 
9228           ELSE -- instance not found
9229 
9230             log('  csi_item_instance_pub.create_item_instance');
9231 
9232             csi_item_instance_pub.create_item_instance(
9233               p_api_version           => 1.0,
9234               p_commit                => fnd_api.g_false,
9235               p_init_msg_list         => fnd_api.g_true,
9236               p_validation_level      => fnd_api.g_valid_level_full,
9237               p_instance_rec          => l_instance_rec,
9238               p_party_tbl             => l_parties_tbl,
9239               p_account_tbl           => l_pty_accts_tbl,
9240               p_org_assignments_tbl   => l_org_units_tbl,
9241               p_ext_attrib_values_tbl => l_ea_values_tbl,
9242               p_pricing_attrib_tbl    => l_pricing_tbl,
9243               p_asset_assignment_tbl  => l_assets_tbl,
9244               p_txn_rec               => l_txn_rec,
9245               x_return_status         => l_return_status,
9246               x_msg_count             => l_msg_count,
9247               x_msg_data              => l_msg_data );
9248 
9249             -- For Bug 4057183
9250             -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
9251             IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
9252               raise fnd_api.g_exc_error;
9253             END IF;
9254 
9255           END IF;
9256 
9257         END IF;
9258       EXCEPTION
9259         WHEN skip_serial THEN
9260           log(fill(srl_rec.serial_number, 15)||
9264               fill(to_char(srl_rec.lot_code), 2));
9261               fill(to_char(srl_rec.inventory_item_id), 9)||
9262               fill(to_char(srl_rec.organization_id), 9)||
9263               fill(to_char(srl_rec.serial_code), 2)||
9265           log(l_skip_error);
9266         WHEN fnd_api.g_exc_error THEN
9267           l_error_message :=  csi_t_gen_utility_pvt.dump_error_stack;
9268           log(fill(srl_rec.serial_number, 15)||
9269               fill(to_char(srl_rec.inventory_item_id), 9)||
9270               fill(to_char(srl_rec.organization_id), 9)||
9271               fill(to_char(srl_rec.serial_code), 2)||
9272               fill(to_char(srl_rec.lot_code), 2));
9273           log('  Error : '||l_error_message);
9274       END;
9275 
9276       IF mod(inv_srl_cur%rowcount,100) = 0 THEN
9277         commit;
9278       END IF;
9279 
9280     END LOOP;
9281 
9282   END sync_inv_serials;
9283   --
9284   PROCEDURE Get_Next_Level
9285     (p_object_id                 IN  NUMBER,
9286      p_rel_tbl                   OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl
9287     ) IS
9288     --
9289     l_rel_type_code          VARCHAR2(30) := 'COMPONENT-OF';
9290     --
9291      CURSOR REL_CUR IS
9292      select relationship_id,relationship_type_code,object_id,subject_id,position_reference,
9293             active_start_date,active_end_date,display_order,mandatory_flag,context,
9294             attribute1,attribute2,attribute3,attribute4,attribute5,attribute6,attribute7,attribute8,
9295             attribute9,attribute10,attribute11,attribute12,attribute13,attribute14,attribute15,
9296             object_version_number
9297      from CSI_II_RELATIONSHIPS cir
9298      where cir.object_id = p_object_id
9299      and   cir.relationship_type_code = l_rel_type_code
9300      and   ((cir.active_end_date is null) or (cir.active_end_date > sysdate))
9301      and   EXISTS (select 'x'
9302                    from CSI_ITEM_INSTANCES cii
9303                    where cii.instance_id = cir.subject_id
9304                    and  ((active_end_date is null) or (active_end_date > sysdate)));
9305      --
9306      l_ctr      NUMBER := 0;
9307   BEGIN
9308      FOR rel in REL_CUR LOOP
9309 	l_ctr := l_ctr + 1;
9310 	p_rel_tbl(l_ctr).relationship_id := rel.relationship_id;
9311 	p_rel_tbl(l_ctr).relationship_type_code := rel.relationship_type_code;
9312 	p_rel_tbl(l_ctr).object_id := rel.object_id;
9313 	p_rel_tbl(l_ctr).subject_id := rel.subject_id;
9314 	p_rel_tbl(l_ctr).position_reference := rel.position_reference;
9315 	p_rel_tbl(l_ctr).active_start_date := rel.active_start_date;
9316 	p_rel_tbl(l_ctr).active_end_date := rel.active_end_date;
9317 	p_rel_tbl(l_ctr).display_order := rel.display_order;
9318 	p_rel_tbl(l_ctr).mandatory_flag := rel.mandatory_flag;
9319 	p_rel_tbl(l_ctr).context := rel.context;
9320 	p_rel_tbl(l_ctr).attribute1 := rel.attribute1;
9321 	p_rel_tbl(l_ctr).attribute2 := rel.attribute2;
9322 	p_rel_tbl(l_ctr).attribute3 := rel.attribute3;
9323 	p_rel_tbl(l_ctr).attribute4 := rel.attribute4;
9324 	p_rel_tbl(l_ctr).attribute5 := rel.attribute5;
9325 	p_rel_tbl(l_ctr).attribute6 := rel.attribute6;
9326 	p_rel_tbl(l_ctr).attribute7 := rel.attribute7;
9327 	p_rel_tbl(l_ctr).attribute8 := rel.attribute8;
9328 	p_rel_tbl(l_ctr).attribute9 := rel.attribute9;
9329 	p_rel_tbl(l_ctr).attribute10 := rel.attribute10;
9330 	p_rel_tbl(l_ctr).attribute11 := rel.attribute11;
9331 	p_rel_tbl(l_ctr).attribute12 := rel.attribute12;
9332 	p_rel_tbl(l_ctr).attribute13 := rel.attribute13;
9333 	p_rel_tbl(l_ctr).attribute14 := rel.attribute14;
9334 	p_rel_tbl(l_ctr).attribute15 := rel.attribute15;
9335 	p_rel_tbl(l_ctr).object_version_number := rel.object_version_number;
9336      END LOOP;
9337   END Get_Next_Level;
9338   --
9339   PROCEDURE missing_mtl_txn_id_in_csi IS
9340 
9341     TYPE NumTabType is  varray(10000) of number;
9342 
9343     l_csi_txn_id_tab     NumTabType;
9344     l_rma_line_id_tab    NumTabType;
9345     l_mtl_txn_id_tab     NumTabType;
9346 
9347     MAX_BUFFER_SIZE      number := 1000;
9348 
9349     CURSOR rma_txn_cur IS
9350       SELECT transaction_id,
9351              source_line_ref_id,
9352              inv_material_transaction_id
9353       FROM   csi_transactions
9354       WHERE  transaction_type_id = 53
9355       AND    inv_material_transaction_id is null;
9356 
9357     l_inventory_item_id  number;
9358     l_organization_id    number;
9359     l_mtl_txn_id         number;
9360 
9361     CURSOR mmt_cur(p_line_id in number, p_item_id in number, p_organization_id in number) IS
9362       SELECT transaction_id
9363       FROM   mtl_material_transactions
9364       WHERE  transaction_type_id = 15 -- RMA Transaction
9365       AND    inventory_item_id   = p_item_id
9366       AND    organization_id     = p_organization_id
9367       AND    trx_source_line_id  = p_line_id
9368       order by creation_date desc, transaction_id desc;
9369 
9370   BEGIN
9371 
9372     OPEN rma_txn_cur;
9373     LOOP
9374 
9375       FETCH rma_txn_cur BULK COLLECT
9376       INTO  l_csi_txn_id_tab,
9377             l_rma_line_id_tab,
9378             l_mtl_txn_id_tab
9379       LIMIT MAX_BUFFER_SIZE;
9380 
9381       FOR ind IN 1 .. l_csi_txn_id_tab.COUNT
9382       LOOP
9383 
9384         IF l_rma_line_id_tab(ind) is not null THEN
9385 
9386           SELECT inventory_item_id,
9387                  ship_from_org_id
9388           INTO   l_inventory_item_id,
9389                  l_organization_id
9393           l_mtl_txn_id  := null;
9390           FROM   oe_order_lines_all
9391           WHERE  line_id = l_rma_line_id_tab(ind);
9392 
9394 
9395           FOR mmt_rec IN mmt_cur(l_rma_line_id_tab(ind), l_inventory_item_id, l_organization_id)
9396           LOOP
9397             l_mtl_txn_id := mmt_rec.transaction_id;
9398             exit;
9399           END LOOP;
9400 
9401           IF l_mtl_txn_id is not null THEN
9402             l_mtl_txn_id_tab(ind) := l_mtl_txn_id;
9403           END IF;
9404 
9405         END IF;
9406       END LOOP;
9407 
9408       FORALL u_ind in 1 .. l_csi_txn_id_tab.count
9409         UPDATE csi_transactions
9410         SET    inv_material_transaction_id = l_mtl_txn_id_tab(u_ind)
9411         WHERE  transaction_id              = l_csi_txn_id_tab(u_ind);
9412 
9413       commit;
9414 
9415       EXIT when rma_txn_cur%NOTFOUND;
9416 
9417     END LOOP;
9418 
9419     commit;
9420 
9421     IF rma_txn_cur%ISOPEN THEN
9422       CLOSE rma_txn_cur;
9423     END IF;
9424 
9425   END  missing_mtl_txn_id_in_csi;
9426 
9427   --
9428   --
9429   PROCEDURE Delete_Dup_Srl_Inv_Instance IS
9430      CURSOR CHECK_CUR IS
9431      select count(*)
9432      from CSI_ITEM_INSTANCES
9433      where location_type_code = 'INVENTORY'
9434      and   instance_usage_code = 'IN_INVENTORY'
9435      and   creation_date = last_update_date
9436      and   serial_number is not null
9437      and   lot_number is null
9438      group by inventory_item_id,serial_number
9439      having count(*) > 1 ;
9440      --
9441      CURSOR CSI_CUR(p_min IN NUMBER,p_max IN NUMBER) IS
9442      select instance_id,
9443 	    inventory_item_id,
9444 	    inv_organization_id,
9445 	    inventory_revision,
9446 	    inv_subinventory_name,
9447 	    inv_locator_id,
9448 	    serial_number,
9449 	    last_update_date
9450      from csi_item_instances
9451      where instance_id between p_min and p_max
9452      and   serial_number is not null
9453      and   lot_number is null
9454      and   location_type_code = 'INVENTORY'
9455      and   instance_usage_code = 'IN_INVENTORY'
9456      and   migrated_flag = 'Y'
9457      and   mfg_serial_number_flag = 'Y'
9458      and   last_update_date = creation_date;
9459      --
9460      CURSOR MIN_CSI IS
9461      select min(instance_id)
9462      from csi_item_instances
9463      where serial_number is not null
9464      and   lot_number is null
9465      and   location_type_code = 'INVENTORY'
9466      and   instance_usage_code = 'IN_INVENTORY'
9467      and   migrated_flag = 'Y'
9468      and   mfg_serial_number_flag = 'Y'
9469      and   last_update_date = creation_date;
9470      --
9471      CURSOR MAX_CSI IS
9472      select max(instance_id)
9473      from csi_item_instances
9474      where serial_number is not null
9475      and   lot_number is null
9476      and   location_type_code = 'INVENTORY'
9477      and   instance_usage_code = 'IN_INVENTORY'
9478      and   migrated_flag = 'Y'
9479      and   mfg_serial_number_flag = 'Y'
9480      and   last_update_date = creation_date;
9481      --
9482      CURSOR TXN_CUR(p_instance_id IN NUMBER) IS
9483      SELECT transaction_id
9484      from CSI_INST_TRANSACTIONS_V
9485      where instance_id = p_instance_id;
9486      --
9487      TYPE NUMLIST is TABLE of NUMBER INDEX BY BINARY_INTEGER;
9488      l_instance_tbl         NUMLIST;
9489      l_txn_tbl              NUMLIST;
9490      --
9491      v_min                  NUMBER;
9492      v_max                  NUMBER;
9493      v_low                  NUMBER;
9494      v_high                 NUMBER;
9495      v_batch                NUMBER := nvl(FND_PROFILE.VALUE('CS_UPG_BATCHSIZE'),100);
9496      v_start                NUMBER;
9497      v_end                  NUMBER;
9498      v_diff                 NUMBER;
9499      v_batch_counter        NUMBER := 0;
9500      v_ins_count            NUMBER := 0;
9501      v_txn_count            NUMBER := 0;
9502      v_commit_counter       NUMBER := 0;
9503      v_subinv               VARCHAR2(10);
9504      v_locator_id           NUMBER;
9505      v_revision             VARCHAR2(3);
9506      v_org_id               NUMBER;
9507      v_recount              NUMBER;
9508      --
9509      Process_next           EXCEPTION;
9510      comp_error             EXCEPTION;
9511   BEGIN
9512      v_recount := 0;
9513      OPEN CHECK_CUR;
9514      FETCH CHECK_CUR INTO v_recount;
9515      CLOSE CHECK_CUR;
9516      --
9517      IF nvl(v_recount,0) = 0 THEN
9518 	Raise comp_error;
9519      END IF;
9520      --
9521      OPEN MIN_CSI;
9522      FETCH MIN_CSI into v_low;
9523      CLOSE MIN_CSI;
9524      --
9525      OPEN MAX_CSI;
9526      FETCH MAX_CSI into v_high;
9527      CLOSE MAX_CSI;
9528      --
9529      v_diff  := ceil((v_high - v_low)/v_batch);
9530      v_start := v_low;
9531      v_end   := v_low + v_diff;
9532      v_batch_counter := 1;
9533      --
9534      l_instance_tbl.DELETE;
9535      l_txn_tbl.DELETE;
9536      LOOP
9537 	For csi_rec in CSI_CUR(v_start,v_end)
9538 	Loop
9539 	   Begin
9540 	      Begin
9541 		 select mmt.subinventory_code,mmt.locator_id,mmt.organization_id,mmt.revision
9542 		 into v_subinv,v_locator_id,v_org_id,v_revision
9543 		 from MTL_MATERIAL_TRANSACTIONS mmt
9547 					     and   inventory_item_id = csi_rec.inventory_item_id
9544 		 where mmt.transaction_id = (select max(transaction_id)
9545 					     from MTL_UNIT_TRANSACTIONS
9546 					     where serial_number = csi_rec.serial_number
9548 					     and   last_update_date <= csi_rec.last_update_date);
9549 	      Exception
9550 		 when others then
9551 		    Raise Process_next;
9552 	      End;
9553 	      --
9554 	      if ((v_subinv <> csi_rec.inv_subinventory_name) OR
9555 		  (nvl(v_locator_id,-999) <> nvl(csi_rec.inv_locator_id,-999)) OR
9556 		  (nvl(v_revision,'$#$') <> nvl(csi_rec.inventory_revision,'$#$')) OR
9557 		  (v_org_id <> csi_rec.inv_organization_id)) then
9558 		 v_ins_count := v_ins_count + 1;
9559 		 l_instance_tbl(v_ins_count) := csi_rec.instance_id;
9560 		 For txn in TXN_CUR(csi_rec.instance_id) Loop
9561 		    v_txn_count := v_txn_count + 1;
9562 		    l_txn_tbl(v_txn_count) := txn.transaction_id;
9563 		 End Loop;
9564 	      end if;
9565 	      --
9566 	   Exception
9567 	      when Process_next then
9568 		 null;
9569 	   End;
9570 	End Loop;
9571 	--
9572 	v_batch_counter := v_batch_counter + 1;
9573 	EXIT WHEN v_min = v_max;
9574 	EXIT WHEN v_end = v_max;
9575 	EXIT WHEN v_batch_counter > v_batch;
9576 	v_start := v_end + 1;
9577 	--
9578 	if v_batch_counter <> v_batch then
9579 	   v_end := v_end + v_diff;
9580 	else
9581 	   v_end := v_high;
9582 	end if;
9583 	--
9584 	if v_start > v_max then
9585 	   v_start := v_max;
9586 	end if;
9587 	--
9588 	if v_end > v_max then
9589 	   v_end := v_max;
9590 	end if;
9591 	--
9592 	commit;
9593      END LOOP;
9594      commit;
9595      --
9596      IF l_instance_tbl.count > 0 THEN
9597        BEGIN
9598 	  FORALL j in l_instance_tbl.FIRST .. l_instance_tbl.LAST
9599 	     DELETE FROM CSI_ITEM_INSTANCES WHERE instance_id = l_instance_tbl(j);
9600 	  FORALL j in l_instance_tbl.FIRST .. l_instance_tbl.LAST
9601 	     DELETE FROM CSI_I_PARTIES WHERE instance_id = l_instance_tbl(j);
9602 	  FORALL j in l_instance_tbl.FIRST .. l_instance_tbl.LAST
9603 	     DELETE FROM CSI_I_VERSION_LABELS WHERE instance_id = l_instance_tbl(j);
9604 	  FORALL j in l_txn_tbl.FIRST .. l_txn_tbl.LAST
9605 	     DELETE FROM CSI_ITEM_INSTANCES_H WHERE transaction_id = l_txn_tbl(j);
9606 	  FORALL j in l_txn_tbl.FIRST .. l_txn_tbl.LAST
9607 	     DELETE FROM CSI_I_PARTIES_H WHERE transaction_id = l_txn_tbl(j);
9608 	  FORALL j in l_txn_tbl.FIRST .. l_txn_tbl.LAST
9609 	     DELETE FROM CSI_I_VERSION_LABELS_H WHERE transaction_id = l_txn_tbl(j);
9610 	  FORALL j in l_txn_tbl.FIRST .. l_txn_tbl.LAST
9611 	     DELETE FROM CSI_TRANSACTIONS WHERE transaction_id = l_txn_tbl(j);
9612        END;
9613      END IF;
9614      commit;
9615      --
9616   EXCEPTION
9617      when comp_error then
9618 	null;
9619   END Delete_Dup_Srl_Inv_Instance;
9620   --
9621   PROCEDURE Update_Instance_Usage IS
9622     CURSOR CSI_CUR IS
9623     Select instance_id,location_type_code
9624 	  ,serial_number_control_code,serial_number,null usage_code
9625     from CSI_ITEM_INSTANCES cii
9626 	,MTL_SYSTEM_ITEMS_B msi
9627     Where cii.instance_usage_code is NULL
9628     and   msi.inventory_item_id = cii.inventory_item_id
9629     and   msi.organization_id = cii.last_vld_organization_id;
9630     --
9631     l_exists                 VARCHAR2(1);
9632     l_rel_type_code          VARCHAR2(30) := 'COMPONENT-OF';
9633     --
9634     Type NumTabType is VARRAY(10000) of NUMBER;
9635     instance_id_mig          NumTabType;
9636     serial_code_mig          NumTabType;
9637     --
9638     Type V30TabType is VARRAY(10000) of VARCHAR2(30);
9639     location_type_mig        V30TabType;
9640     serial_number_mig        V30TabType;
9641     usage_code_mig           V30TabType;
9642     --
9643     MAX_BUFFER_SIZE          NUMBER := 1000;
9644  BEGIN
9645     OPEN CSI_CUR;
9646     LOOP
9647        FETCH CSI_CUR BULK COLLECT INTO
9648        instance_id_mig,
9649        location_type_mig,
9650        serial_code_mig,
9651        serial_number_mig,
9652        usage_code_mig
9653        LIMIT MAX_BUFFER_SIZE;
9654        --
9655        FOR i in 1 .. instance_id_mig.count LOOP
9656 	  If serial_code_mig(i) = 6 and
9657 	     serial_number_mig(i) is not NULL and
9658 	     location_type_mig(i) = 'INVENTORY' Then
9659 	     usage_code_mig(i) := 'RETURNED';
9660 	  Else
9661 	     if location_type_mig(i) = 'INVENTORY' then
9662 		usage_code_mig(i) := 'IN_INVENTORY';
9663              elsif location_type_mig(i) = 'WIP' then
9664                 usage_code_mig(i) := 'IN_WIP';
9665 	     else
9666 		usage_code_mig(i) := 'OUT_OF_ENTERPRISE';
9667 	     end if;
9668 	  End if;
9669 	  Begin
9670 	     select 'x'
9671 	     into l_exists
9672 	     from CSI_II_RELATIONSHIPS
9673 	     where subject_id = instance_id_mig(i)
9674 	     and   relationship_type_code = l_rel_type_code
9675              and   ((active_end_date is null) or (active_end_date > sysdate));
9676 	     usage_code_mig(i) := 'IN_RELATIONSHIP';
9677 	  Exception
9678 	     when no_data_found then
9679 		null;
9680 	  End;
9681        --
9682        END LOOP;
9683        FORALL j in 1 .. instance_id_mig.count
9684 	  UPDATE CSI_ITEM_INSTANCES
9685 	  set instance_usage_code = usage_code_mig(j)
9686 	     ,last_update_date = sysdate
9687 	  where instance_id = instance_id_mig(j);
9688        commit;
9692     CLOSE CSI_CUR;
9689        EXIT WHEN CSI_CUR%NOTFOUND;
9690     END LOOP;
9691     commit;
9693   END Update_Instance_Usage;
9694   --
9695   PROCEDURE Update_Full_dump_flag IS
9696     CURSOR CSI_REL_CUR IS
9697     SELECT relationship_history_id
9698     FROM CSI_II_RELATIONSHIPS_H
9699     WHERE nvl(MIGRATED_FLAG,'N') = 'Y'
9700     AND   full_dump_flag <> 'Y';
9701     --
9702     CURSOR CSI_SYS_CUR IS
9703     SELECT system_id,min(system_history_id) system_history_id
9704     FROM CSI_SYSTEMS_H
9705     WHERE nvl(MIGRATED_FLAG,'N') = 'Y'
9706     AND   full_dump_flag <> 'Y'
9707     group by system_id;
9708     --
9709     Type NumTabType is VARRAY(10000) of NUMBER;
9710     rel_history_id_mig     NumTabType;
9711     system_id_mig          NumTabType;
9712     system_history_id_mig  NumTabType;
9713     --
9714     MAX_BUFFER_SIZE        NUMBER := 1000;
9715  BEGIN
9716     OPEN CSI_REL_CUR;
9717     LOOP
9718        FETCH CSI_REL_CUR BULK COLLECT INTO
9719        rel_history_id_mig
9720        LIMIT MAX_BUFFER_SIZE;
9721        FORALL j in 1 .. rel_history_id_mig.count
9722 	  update CSI_II_RELATIONSHIPS_H
9723 	  set full_dump_flag = 'Y'
9724 	  where relationship_history_id = rel_history_id_mig(j);
9725        commit;
9726        --
9727        EXIT WHEN CSI_REL_CUR%NOTFOUND;
9728     END LOOP;
9729     commit;
9730     CLOSE CSI_REL_CUR;
9731     --
9732     OPEN CSI_SYS_CUR;
9733     LOOP
9734        FETCH CSI_SYS_CUR BULK COLLECT INTO
9735        system_id_mig,
9736        system_history_id_mig
9737        LIMIT MAX_BUFFER_SIZE;
9738        FORALL j in 1 .. system_id_mig.count
9739 	  UPDATE CSI_SYSTEMS_H
9740 	  set full_dump_flag = 'Y'
9741 	  where system_history_id = system_history_id_mig(j);
9742        commit;
9743        --
9744        EXIT WHEN CSI_SYS_CUR%NOTFOUND;
9745     END LOOP;
9746     commit;
9747     CLOSE CSI_SYS_CUR;
9748  END Update_Full_dump_flag;
9749  --
9750  PROCEDURE Del_API_Dup_Srl_Instance IS
9751     cursor check_count is
9752     select count(*)
9753     from   csi_item_instances
9754     where  serial_number is not null
9755     group  by serial_number, inventory_item_id
9756     having count(*) > 1;
9757     --
9758     cursor c1 is
9759     select count(*), serial_number, inventory_item_id
9760     from   csi_item_instances
9761     where  serial_number is not null
9762     group  by serial_number, inventory_item_id
9763     having count(*) > 1;
9764     --
9765     cursor c4(p_serial_number varchar, p_inventory_item_id number) is
9766     select instance_id,instance_status_id
9767     from   csi_item_instances
9768     where  serial_number = p_serial_number
9769     and    inventory_item_id = p_inventory_item_id
9770     order  by instance_id desc;
9771     --
9772     v_commit_count       NUMBER := 0;
9773     v_recount            NUMBER;
9774     v_instance_status_id NUMBER;
9775     v_duplicate_count    NUMBER;
9776     v_instance_id        NUMBER;
9777     v_status_id          NUMBER;
9778     --
9779     comp_error           EXCEPTION;
9780  BEGIN
9781     v_recount := 0;
9782     OPEN check_count;
9783     FETCH check_count into v_recount;
9784     CLOSE check_count;
9785     --
9786     IF nvl(v_recount,0) = 0 THEN
9787        Raise comp_error;
9788     END IF;
9789     --
9790     begin
9791        select instance_status_id
9792        into   v_instance_status_id
9793        from   CSI_INSTANCE_STATUSES
9794        where  name = 'EXPIRED';
9795     exception
9796        when no_data_found then
9797 	  raise_application_error(-20000,'You need to setup an Expired Instance Status');
9798 	  return;
9799        when too_many_rows then
9800 	  raise_application_error(-20000,'Too many definition for Expired Instance Status');
9801 	  return;
9802     end;
9803 
9804     for i in c1
9805     loop
9806        v_instance_id := null;
9807        v_commit_count := v_commit_count + 1;
9808        --
9809        v_duplicate_count := 0;
9810        --
9811        Begin
9812 	  select max(instance_id)
9813 	  into v_instance_id
9814 	  from csi_item_instances
9815 	  where inventory_item_id = i.inventory_item_id
9816 	  and   serial_number = i.serial_number;
9817        End;
9818        --
9819        for j in c4(i.serial_number, i.inventory_item_id)
9820        loop
9821 	  if v_instance_id <> j.instance_id then
9822 	     v_duplicate_count := v_duplicate_count + 1;
9823 
9824 	     update csi_item_instances_h
9825 	     set    old_serial_number = i.serial_number
9826 		    ,new_serial_number = new_serial_number||'-DUP'||to_char(v_duplicate_count)
9827 		    ,last_updated_by = fnd_global.user_id
9828 		    ,last_update_date = sysdate
9829 		    ,old_instance_status_id = j.instance_status_id
9830 		    ,new_instance_status_id = v_instance_status_id
9831 	     where  instance_history_id = (select max(instance_history_id)
9832 					   from csi_item_instances_h
9833 					   where instance_id = j.instance_id);
9834 	     --
9835 	     update csi_item_instances
9836 	     set    serial_number = serial_number||'-DUP'||to_char(v_duplicate_count)
9837 		    ,active_end_date = sysdate
9838 		    ,instance_status_id = v_instance_status_id
9839 		    ,last_updated_by = fnd_global.user_id
9840 		    ,last_update_date = sysdate
9844        --
9841 	     where  instance_id = j.instance_id;
9842 	  end if;
9843        end loop;
9845        if v_commit_count >= 500 then
9846 	  commit;
9847 	  v_commit_count := 0;
9848        end if;
9849        --
9850     end loop;
9851     commit;
9852  EXCEPTION
9853     when comp_error then
9854        null;
9855  END Del_API_Dup_Srl_Instance;
9856  --
9857  PROCEDURE Update_Vld_Organization IS
9858    CURSOR CSI_INS_CUR IS
9859    SELECT instance_id,inventory_item_id,inv_organization_id,last_vld_organization_id
9860          ,serial_number,lot_number
9861          ,mfg_serial_number_flag,creation_complete_flag
9862          ,inventory_revision
9863          ,instance_usage_code
9864    FROM CSI_ITEM_INSTANCES
9865    WHERE location_type_code = 'INVENTORY'
9866    AND   inv_organization_id is not null
9867    AND   nvl(last_vld_organization_id,-999) <> inv_organization_id;
9868    --
9869    l_instance_rec      csi_datastructures_pub.instance_rec;
9870    l_temp_instance_rec csi_datastructures_pub.instance_rec;
9871    l_txn_rec           csi_datastructures_pub.transaction_rec;
9872    l_return_value      BOOLEAN;
9873    --
9874    Type NumTabType is VARRAY(10000) of NUMBER;
9875    instance_id_mig          NumTabType;
9876    item_id_mig              NumTabType;
9877    inv_org_id_mig           NumTabType;
9878    vld_org_id_mig           NumTabType;
9879    --
9880    Type V30Type is VARRAY(10000) of VARCHAR2(30);
9881    serial_number_mig        V30Type;
9882    usage_mig                V30Type;
9883 
9884    Type V80Type is VARRAY(10000) of VARCHAR2(80);
9885    lot_number_mig           V80Type;
9886    --
9887    Type V3Type is VARRAY(10000) of VARCHAR2(3);
9888    revision_mig             V3Type;
9889    --
9890    Type V1Type is VARRAY(10000) of VARCHAR2(1);
9891    mfg_srl_flag_mig         V1Type;
9892    complete_flag_mig        V1Type;
9893    --
9894    MAX_BUFFER_SIZE          NUMBER := 1000;
9895    --
9896    Process_Next             EXCEPTION;
9897 BEGIN
9898    OPEN CSI_INS_CUR;
9899    LOOP
9900       FETCH CSI_INS_CUR BULK COLLECT INTO
9901       instance_id_mig,
9902       item_id_mig,
9903       inv_org_id_mig,
9904       vld_org_id_mig,
9905       serial_number_mig,
9906       lot_number_mig,
9907       mfg_srl_flag_mig,
9908       complete_flag_mig,
9909       revision_mig,
9910       usage_mig
9911       LIMIT MAX_BUFFER_SIZE;
9912       --
9913       FOR i in 1 .. instance_id_mig.count LOOP
9914          l_instance_rec := l_temp_instance_rec;
9915          --
9916          -- Need to validate against inv_organization_id since we update the instance with this org.
9917          --
9918          l_instance_rec.instance_id := instance_id_mig(i);
9919          l_instance_rec.inventory_item_id := item_id_mig(i);
9920          l_instance_rec.vld_organization_id := inv_org_id_mig(i);
9921          l_instance_rec.serial_number := serial_number_mig(i);
9922          l_instance_rec.lot_number := lot_number_mig(i);
9923          l_instance_rec.location_type_code := 'INVENTORY';
9924          l_instance_rec.mfg_serial_number_flag := mfg_srl_flag_mig(i);
9925          l_instance_rec.creation_complete_flag := complete_flag_mig(i);
9926          l_instance_rec.inventory_revision := revision_mig(i);
9927          l_instance_rec.instance_usage_code := usage_mig(i);
9928          --
9929          csi_Item_Instance_Vld_pvt.Validate_org_dependent_params
9930             ( p_instance_rec   => l_instance_rec
9931              ,p_txn_rec        => l_txn_rec
9932              ,l_return_value   => l_return_value
9933             );
9934          --
9935          IF l_return_value = TRUE THEN
9936             vld_org_id_mig(i) := inv_org_id_mig(i);
9937          END IF;
9938          --
9939       END LOOP;
9940       FORALL j in 1 .. instance_id_mig.count
9941          Update CSI_ITEM_INSTANCES
9942          set last_vld_organization_id = vld_org_id_mig(j)
9943          where instance_id = instance_id_mig(j);
9944       --
9945       commit;
9946       --
9947       FORALL j in 1 .. instance_id_mig.count
9948          Update CSI_ITEM_INSTANCES_H
9949          set new_last_vld_organization_id = vld_org_id_mig(j)
9950          where instance_history_id = (select max(instance_history_id) from CSI_ITEM_INSTANCES_H
9951                                       where instance_id = instance_id_mig(j));
9952       --
9953       commit;
9954       --
9955       EXIT WHEN CSI_INS_CUR%NOTFOUND;
9956    END LOOP;
9957    commit;
9958    CLOSE CSI_INS_CUR;
9959  END Update_Vld_Organization;
9960  --
9961  PROCEDURE Update_Revision IS
9962     CURSOR c1 IS
9963     SELECT a.instance_id
9964 	  ,a.inventory_item_id
9965 	  ,a.last_vld_organization_id
9966 	  ,a.last_oe_order_line_id
9967 	  ,a.serial_number
9968 	  ,a.inventory_revision
9969     FROM  csi_item_instances a
9970 	 ,mtl_system_items_b b
9971     WHERE a.inventory_item_id = b.inventory_item_id
9972     AND   a.last_vld_organization_id = b.organization_id
9973     AND   a.creation_complete_flag = 'Y'
9974     AND   a.inventory_revision IS NULL
9975     AND   a.migrated_flag = 'Y'
9976     AND   b.revision_qty_control_code = 2;
9977 
9978     Type NumTabType is VARRAY(10000) of NUMBER;
9979     instance_id_mig           NumTabType;
9980     item_id_mig               NumTabType;
9981     vld_org_id_mig            NumTabType;
9985     l_return_status           varchar2(1) := fnd_api.g_ret_sts_success;
9982     order_line_id_mig         NumTabType;
9983     l_schema_name             varchar2(30);
9984     l_object_name             varchar2(80);
9986     l_sql_stmt                varchar2(2000);
9987     --
9988     Type V30Type is VARRAY(10000) of VARCHAR2(30);
9989     serial_number_mig        V30Type;
9990     --
9991     Type V3Type is VARRAY(10000) of VARCHAR2(3);
9992     revision_mig             V3Type;
9993     --
9994     MAX_BUFFER_SIZE          NUMBER := 1000;
9995  BEGIN
9996     get_schema_name(
9997       p_product_short_name  => 'CS',
9998       x_schema_name         => l_schema_name,
9999       x_return_status       => l_return_status);
10000 
10001     IF l_return_status <> fnd_api.g_ret_sts_success THEN
10002        RETURN;
10003     END IF;
10004     --
10005     l_object_name := l_schema_name||'.CS_CUSTOMER_PRODUCTS_ALL_OLD cp';
10006     --
10007     l_sql_stmt := 'select cr.revision from CS_CP_REVISIONS cr, '||l_object_name || ' where cp.customer_product_id = :inst_id and cr.cp_revision_id = cp.current_cp_revision_id';
10008     --
10009     OPEN c1;
10010     LOOP
10011        FETCH c1 BULK COLLECT INTO
10012        instance_id_mig,
10013        item_id_mig,
10014        vld_org_id_mig,
10015        order_line_id_mig,
10016        serial_number_mig,
10017        revision_mig
10018        LIMIT MAX_BUFFER_SIZE;
10019        --
10020        FOR i in 1 .. instance_id_mig.count LOOP
10021 	  Begin
10022              EXECUTE IMMEDIATE l_sql_stmt INTO revision_mig(i) USING instance_id_mig(i);
10023 	  Exception
10024 	     when others then
10025 		revision_mig(i) := null;
10026 	  End;
10027 	  --
10028 	  IF revision_mig(i) is null and order_line_id_mig(i) is not null THEN
10029 	     Begin
10030 		select revision
10031 		into revision_mig(i)
10032 		from MTL_MATERIAL_TRANSACTIONS
10033 		where transaction_type_id = 33
10034 		and   transaction_action_id = 1
10035 		and   trx_source_line_id = order_line_id_mig(i)
10036 		and   rownum < 2;
10037 	     Exception
10038 		when no_data_found then
10039 		   Begin
10040 		      select item_revision
10041 		      into revision_mig(i)
10042 		      from OE_ORDER_LINES_ALL
10043 		      where line_id = order_line_id_mig(i);
10044 		   Exception
10045 		      when no_data_found then
10046 			 revision_mig(i) := null;
10047 		   End;
10048 	     End;
10049 	  END IF;
10050 	  --
10051 	  IF revision_mig(i) is null AND serial_number_mig(i) is not null THEN
10052 	     Begin
10053 		select revision
10054 		into revision_mig(i)
10055 		from MTL_SERIAL_NUMBERS
10056 		where inventory_item_id = item_id_mig(i)
10057 		and   serial_number = serial_number_mig(i);
10058 	     Exception
10059 		when no_data_found then
10060 		   revision_mig(i) := null;
10061 	     End;
10062 	  END IF;
10063        END LOOP;
10064        --
10065        FORALL j in 1 .. instance_id_mig.count
10066 	  UPDATE csi_item_instances
10067 	  SET    inventory_revision = revision_mig(j)
10068 	  WHERE  instance_id = instance_id_mig(j);
10069        commit;
10070        --
10071        FORALL j in 1 .. instance_id_mig.count
10072 	  Update CSI_ITEM_INSTANCES_H
10073 	  set new_inventory_revision = revision_mig(j)
10074 	  where instance_history_id = (select max(instance_history_id) from CSI_ITEM_INSTANCES_H
10075 				       where instance_id = instance_id_mig(j));
10076        --
10077        commit;
10078        --
10079        EXIT WHEN c1%NOTFOUND;
10080     END LOOP;
10081     commit;
10082     CLOSE c1;
10083  END Update_Revision;
10084  --
10085  PROCEDURE Update_Dup_Srl_Instance IS
10086     CURSOR CSI_CUR IS -- Cursor to delete the Inv instances emerged from wrong WHERE clause in Mig
10087     select cii.instance_id
10088     from CSI_ITEM_INSTANCES cii
10089     where cii.location_type_code = 'INVENTORY'
10090     and   cii.instance_usage_code = 'IN_INVENTORY'
10091     and   mfg_serial_number_flag = 'Y'
10092     and   cii.serial_number is not null
10093     and   cii.lot_number is not null
10094     and   cii.migrated_flag = 'Y'
10095     and   cii.creation_date = cii.last_update_date
10096     and   not exists (select 'X' from mtl_serial_numbers msn
10097 		      where msn.inventory_item_id = cii.inventory_item_id
10098 		      and   msn.serial_number = cii.serial_number
10099 		      and   msn.lot_number = cii.lot_number);
10100     --
10101     CURSOR TXN_CUR(p_instance_id IN NUMBER) IS
10102     SELECT transaction_id
10103     from CSI_INST_TRANSACTIONS_V
10104     where instance_id = p_instance_id;
10105     --
10106     l_ins_count        NUMBER := 0;
10107     l_txn_count        NUMBER := 0;
10108     --
10109     Type NumTabType is VARRAY(10000) of NUMBER;
10110     instance_id_mig     NumTabType;
10111     --
10112     MAX_BUFFER_SIZE     NUMBER := 1000;
10113     TYPE NUMLIST IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
10114     l_del_inst_tbl      NUMLIST;
10115     l_del_txn_tbl       NUMLIST;
10116     --
10117     cursor c1 is
10118     select count(*), serial_number, inventory_item_id
10119     from   csi_item_instances
10120     where  migrated_flag = 'Y'
10121     and    serial_number is not null
10122     group  by serial_number, inventory_item_id
10123     having count(*) > 1;
10124 
10128     where  serial_number = p_serial_number
10125     cursor c2(p_serial_number varchar, p_inventory_item_id number) is
10126     select max(instance_id)
10127     from   csi_item_instances
10129     and    inventory_item_id = p_inventory_item_id
10130     and    location_type_code = 'INVENTORY'
10131     and    instance_usage_code = 'IN_INVENTORY'
10132     and    inv_subinventory_name IS NOT NULL
10133     and    inv_organization_id IS NOT NULL;
10134 
10135     cursor c3(p_serial_number varchar, p_inventory_item_id number) is
10136     select max(instance_id)
10137     from   csi_item_instances
10138     where  serial_number = p_serial_number
10139     and    inventory_item_id = p_inventory_item_id;
10140 
10141     cursor c5(p_serial_number varchar, p_inventory_item_id number) is
10142     select max(instance_id)
10143     from   csi_item_instances
10144     where  serial_number = p_serial_number
10145     and    inventory_item_id = p_inventory_item_id
10146     and    last_oe_rma_line_id is not null
10147     and    migrated_flag = 'Y';
10148 
10149     cursor c4(p_serial_number varchar, p_inventory_item_id number) is
10150     select instance_id,instance_status_id
10151     from   csi_item_instances
10152     where  serial_number = p_serial_number
10153     and    inventory_item_id = p_inventory_item_id
10154     order  by instance_id desc;
10155     --
10156     cursor c6(p_inst_id1 number,p_inst_id2 number) is
10157     select transaction_id
10158     from csi_item_instances_h
10159     where instance_id = p_inst_id1
10160     intersect
10161     select transaction_id
10162     from csi_item_instances_h
10163     where instance_id = p_inst_id2;
10164 
10165     v_commit_count       NUMBER := 0;
10166     v_instance_status_id NUMBER;
10167     v_duplicate_count    NUMBER;
10168     v_instance_id        NUMBER;
10169     v_inv_instance_id    NUMBER;
10170     v_cp_instance_id     NUMBER;
10171     v_inv_exists         VARCHAR2(1) := 'N';
10172     v_terminated_flag    VARCHAR2(1);
10173     v_ret_instance_id    NUMBER;
10174     v_srl_control        NUMBER;
10175     v_inst_usage_code    VARCHAR2(30);
10176     v_org_id             NUMBER;
10177     v_subinv             VARCHAR2(10);
10178     v_locator            NUMBER;
10179     v_loc_id             NUMBER;
10180     v_status_id          NUMBER;
10181     v_status             VARCHAR2(50);
10182     v_txn_id             NUMBER;
10183     v_freeze_date        DATE;
10184     v_rev                VARCHAR2(3);
10185     l_schema_name        varchar2(30);
10186     l_object_name        varchar2(80);
10187     l_return_status      varchar2(1) := fnd_api.g_ret_sts_success;
10188     l_sql_stmt           varchar2(2000);
10189     --
10190  BEGIN
10191     get_schema_name(
10192       p_product_short_name  => 'CS',
10193       x_schema_name         => l_schema_name,
10194       x_return_status       => l_return_status);
10195     --
10196     IF l_return_status <> fnd_api.g_ret_sts_success THEN
10197        RETURN;
10198     END IF;
10199     --
10200     l_object_name := l_schema_name||'.CS_CUSTOMER_PRODUCTS_ALL_OLD cp';
10201     --
10202     l_sql_stmt := 'select terminated_flag,cp.customer_product_status_id from CSI_INSTANCE_STATUSES cis, '||l_object_name||' where cp.customer_product_id = :inst_id and cis.instance_status_id = cp.customer_product_status_id';
10203     --
10204     BEGIN -- First
10205        OPEN CSI_CUR;
10206        LOOP
10207 	  FETCH CSI_CUR BULK COLLECT INTO
10208 	  instance_id_mig
10209 	  LIMIT MAX_BUFFER_SIZE;
10210 	  --
10211 	  FOR i in 1 .. instance_id_mig.count LOOP
10212 	     l_ins_count := l_ins_count + 1;
10213 	     l_del_inst_tbl(l_ins_count) := instance_id_mig(i);
10214 	     FOR txn_rec in TXN_CUR(instance_id_mig(i)) LOOP
10215 		l_txn_count := l_txn_count + 1;
10216 		l_del_txn_tbl(l_txn_count) := txn_rec.transaction_id;
10217 	     END LOOP;
10218 	  END LOOP;
10219 	  EXIT WHEN CSI_CUR%NOTFOUND;
10220        END LOOP;
10221        CLOSE CSI_CUR;
10222        --
10223        IF l_del_inst_tbl.count > 0 THEN
10224 	 BEGIN
10225 	    FORALL j in l_del_inst_tbl.FIRST .. l_del_inst_tbl.LAST
10226 	       DELETE FROM CSI_ITEM_INSTANCES WHERE instance_id = l_del_inst_tbl(j);
10227 	    FORALL j in l_del_inst_tbl.FIRST .. l_del_inst_tbl.LAST
10228 	       DELETE FROM CSI_I_PARTIES WHERE instance_id = l_del_inst_tbl(j);
10229 	    FORALL j in l_del_inst_tbl.FIRST .. l_del_inst_tbl.LAST
10230 	       DELETE FROM CSI_I_VERSION_LABELS WHERE instance_id = l_del_inst_tbl(j);
10231 	    FORALL j in l_del_txn_tbl.FIRST .. l_del_txn_tbl.LAST
10232 	       DELETE FROM CSI_ITEM_INSTANCES_H WHERE transaction_id = l_del_txn_tbl(j);
10233 	    FORALL j in l_del_txn_tbl.FIRST .. l_del_txn_tbl.LAST
10234 	       DELETE FROM CSI_I_PARTIES_H WHERE transaction_id = l_del_txn_tbl(j);
10235 	    FORALL j in l_del_txn_tbl.FIRST .. l_del_txn_tbl.LAST
10236 	       DELETE FROM CSI_I_VERSION_LABELS_H WHERE transaction_id = l_del_txn_tbl(j);
10237 	    FORALL j in l_del_txn_tbl.FIRST .. l_del_txn_tbl.LAST
10238 	       DELETE FROM CSI_TRANSACTIONS WHERE transaction_id = l_del_txn_tbl(j);
10239 	 END;
10240        END IF;
10241        commit;
10242     END; -- First
10243     commit;
10244     --
10245     BEGIN -- Second Update
10246        begin
10247 	  select instance_status_id
10248 	  into   v_instance_status_id
10249 	  from   CSI_INSTANCE_STATUSES
10250 	  where  name = 'EXPIRED';
10251        exception
10255 	  when too_many_rows then
10252 	  when no_data_found then
10253 	     raise_application_error(-20000,'You need to setup an Expired Instance Status');
10254 	     return;
10256 	     raise_application_error(-20000,'Too many definition for Expired Instance Status');
10257 	     return;
10258        end;
10259        --
10260        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
10261          csi_gen_utility_pvt.populate_install_param_rec;
10262        END IF;
10263        --
10264        v_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
10265        --
10266        for i in c1
10267        loop
10268 	  v_inv_instance_id := null;
10269 	  v_cp_instance_id := null;
10270 	  v_instance_id := null;
10271 	  v_ret_instance_id := null;
10272 	  v_terminated_flag := 'X';
10273 	  v_org_id := null;
10274 	  v_subinv := null;
10275 	  v_locator := null;
10276 	  v_loc_id := null;
10277 	  v_status_id := null;
10278           v_status := null;
10279 	  v_commit_count := v_commit_count + 1;
10280 
10281 	  open c2(i.serial_number, i.inventory_item_id);
10282 	  fetch c2 into v_inv_instance_id;
10283 	  close c2;
10284 	  --
10285 	  if v_inv_instance_id is null then
10286 	     open c3(i.serial_number, i.inventory_item_id);
10287 	     fetch c3 into v_cp_instance_id;
10288 	     close c3;
10289 	     --
10290 	     v_instance_id := v_cp_instance_id;
10291 	  else -- INV instance found
10292 	     -- Try to get the last RMA instance
10293 	     open c5(i.serial_number, i.inventory_item_id);
10294 	     fetch c5 into v_ret_instance_id;
10295 	     close c5;
10296 	     --
10297 	     if v_ret_instance_id is not null then -- RMA instance found
10298 		Begin
10299                    EXECUTE IMMEDIATE l_sql_stmt INTO v_terminated_flag,v_status_id USING v_ret_instance_id;
10300 		Exception
10301 		   when others then
10302 		      null;
10303 		End;
10304 		--
10305 		if v_terminated_flag = 'Y' then -- Instance will be owned by Internal
10306 		   v_instance_id := v_inv_instance_id;
10307 		else
10308 		   v_instance_id := v_ret_instance_id;
10309 		   Begin
10310 		      select location_id,inv_organization_id
10311 			    ,inv_subinventory_name,inv_locator_id,inventory_revision
10312 		      into v_loc_id,v_org_id,v_subinv,v_locator,v_rev
10313 		      from CSI_ITEM_INSTANCES
10314 		      where instance_id = v_inv_instance_id;
10315 		      --
10316 		   Exception
10317 		      when no_data_found then
10318 			 null;
10319 		   End;
10320 		   --
10321 		   Begin
10322 		      select serial_number_control_code
10323 		      into v_srl_control
10324 		      from MTL_SYSTEM_ITEMS_B
10325 		      where inventory_item_id = i.inventory_item_id
10326 		      and   organization_id = v_org_id;
10327 		   Exception
10328 		      when others then
10329 			 null;
10330 		   End;
10331 		   --
10332 		   if v_srl_control = 6 then
10333 		      v_inst_usage_code := 'RETURNED';
10334 		   else
10335 		      v_inst_usage_code := 'IN_INVENTORY';
10336 		   end if;
10337 		   --
10338 		  -- Added a check for the case of status id being null. shegde
10339 		   if v_status_id is NULL then
10340 		      v_status := nvl(FND_PROFILE.VALUE('CSI_DEFAULT_INSTANCE_STATUS'), 'Latest');
10341                       select instance_status_id
10342                       into v_status_id
10343                       from CSI_INSTANCE_STATUSES
10344                       where name = v_status;
10345 		   end if;
10346 
10347 		   update CSI_ITEM_INSTANCES
10348 		   set location_type_code = 'INVENTORY'
10349 		      ,location_id = v_loc_id
10350 		      ,accounting_class_code = 'CUST_PROD'
10351 		      ,instance_usage_code = v_inst_usage_code
10352 		      ,last_vld_organization_id = v_org_id
10353 		      ,inv_organization_id = v_org_id
10354 		      ,inv_subinventory_name = v_subinv
10355 		      ,inv_locator_id = v_locator
10356 		      ,instance_status_id = v_status_id
10357 		      ,inventory_revision = v_rev
10358 		   where instance_id = v_ret_instance_id;
10359 		end if; -- Terminated_flag check
10360 	     else
10361 		-- There is no RMA instance
10362 		v_instance_id := v_inv_instance_id;
10363 	     end if;
10364 	  end if; -- check for Inv Instance
10365 	  --
10366 	  v_duplicate_count := 0;
10367 
10368 	  for j in c4(i.serial_number, i.inventory_item_id)
10369 	  loop
10370 	     if v_instance_id <> j.instance_id then
10371 		v_duplicate_count := v_duplicate_count + 1;
10372 		v_txn_id := null;
10373 		open c6(v_instance_id,j.instance_id);
10374 		fetch c6 into v_txn_id;
10375 		close c6;
10376 		--
10377                 -- While suffixing with DUP, we use the instance_id in serial_number column to avoid serial #
10378                 -- becoming more than 30 chars. The old serial_number is stored in the external_reference column.
10379 		update csi_item_instances
10380 		set     external_reference = serial_number
10381                        , serial_number = to_char(j.instance_id)||'-DUP'||to_char(v_duplicate_count)
10382 		       ,active_end_date = sysdate
10383 		       ,instance_status_id = v_instance_status_id
10384 		       ,last_updated_by = fnd_global.user_id
10385 		       ,last_update_date = sysdate
10386 		where  instance_id = j.instance_id;
10387 		--
10388 		if v_txn_id is null then
10389 		   update csi_item_instances_h
10390 		   set    instance_id = v_instance_id
10394 			  ,last_updated_by = fnd_global.user_id
10391                           ,new_external_reference = i.serial_number
10392 			  ,old_serial_number = nvl(new_serial_number,i.serial_number)
10393 			  ,new_serial_number = to_char(j.instance_id)||'-DUP'||to_char(v_duplicate_count)
10395 			  ,last_update_date = sysdate
10396 		   where  instance_id = j.instance_id;
10397 		else -- common txn found
10398 		   update csi_item_instances_h
10399 		   set  new_external_reference = i.serial_number
10400 		       ,old_serial_number = nvl(new_serial_number,i.serial_number)
10401 		       ,new_serial_number = to_char(j.instance_id)||'-DUP'||to_char(v_duplicate_count)
10402 		       ,last_updated_by = fnd_global.user_id
10403 		       ,last_update_date = sysdate
10404 		   where  instance_history_id = (select max(instance_history_id)
10405 						 from csi_item_instances_h
10406 						 where instance_id = j.instance_id
10407 						 and   creation_date < v_freeze_date);
10408 		end if;
10409 	     end if;
10410 	  end loop;
10411 
10412 	  v_duplicate_count := 0;
10413 	  v_instance_id := null;
10414 
10415 	  if v_commit_count >= 500 then
10416 	     commit;
10417 	     v_commit_count := 0;
10418 	  end if;
10419 
10420        end loop;
10421        commit;
10422     END; -- Second Update
10423     commit;
10424  END Update_Dup_Srl_Instance;
10425  --
10426   PROCEDURE Delete_Dup_Account IS
10427      CURSOR IP_CUR IS
10428      select cia.instance_party_id
10429      from csi_ip_accounts cia
10430      where cia.relationship_type_code = 'OWNER'
10431      group by cia.instance_party_id
10432      having count(*) > 1;
10433      --
10434      CURSOR ACCT_CUR(p_inst_party_id IN NUMBER,p_ip_acct_id IN NUMBER) IS
10435      select ip_account_id
10436      from csi_ip_accounts
10437      where instance_party_id = p_inst_party_id
10438      and   relationship_type_code = 'OWNER'
10439      and   ip_account_id <> p_ip_acct_id
10440      order by ip_account_id asc;
10441      --
10442      v_max_ip_acct_id      NUMBER;
10443      v_min_ret_id          NUMBER;
10444      v_old_account_id      NUMBER;
10445      v_commit_counter      NUMBER := 0;
10446      v_min_history_id      NUMBER;
10447      --
10448      Process_next          EXCEPTION;
10449   BEGIN
10450      FOR party in IP_CUR LOOP
10451 	Begin
10452 	   v_max_ip_acct_id := NULL;
10453 	   v_min_ret_id := null;
10454 	   --
10455 	   select max(ip_account_id)
10456 	   into v_max_ip_acct_id
10457 	   from csi_ip_accounts
10458 	   where instance_party_id = party.instance_party_id
10459 	   and   relationship_type_code = 'OWNER'
10460 	   and   ((active_end_date is null) or (active_end_date > sysdate));
10461 	   --
10462 	   IF v_max_ip_acct_id IS NULL THEN
10463 	      Raise Process_next;
10464 	   END IF;
10465 	   --
10466 	   select min(ip_account_history_id)
10467 	   into v_min_ret_id
10468 	   from CSI_IP_ACCOUNTS_H
10469 	   where ip_account_id = v_max_ip_acct_id;
10470 	   --
10471 	   v_old_account_id := NULL;
10472 	   --
10473 	   FOR acct in ACCT_CUR(party.instance_party_id,v_max_ip_acct_id) LOOP
10474 	      v_min_history_id := NULL;
10475 	      select min(ip_account_history_id)
10476 	      into v_min_history_id
10477 	      from CSI_IP_ACCOUNTS_H
10478 	      where ip_account_id = acct.ip_account_id;
10479 	      --
10480 	      IF v_min_history_id IS NULL THEN
10481 		 Raise Process_next;
10482 	      END IF;
10483 	      --
10484 	      IF ACCT_CUR%ROWCOUNT > 1 THEN
10485 		 Update CSI_IP_ACCOUNTS_H
10486 		 set old_party_account_id = v_old_account_id
10487 		 where ip_account_history_id = v_min_history_id;
10488 	      END IF;
10489 	      --
10490 	      DELETE from CSI_IP_ACCOUNTS_H
10491 	      where ip_account_id = acct.ip_account_id
10492 	      and   ip_account_history_id <> v_min_history_id;
10493 	      --
10494 	      v_old_account_id := NULL;
10495 	      Begin
10496 		 select new_party_account_id
10497 		 into v_old_account_id
10498 		 from CSI_IP_ACCOUNTS_H
10499 		 where ip_account_history_id = v_min_history_id;
10500 	      Exception
10501 		 when no_data_found then
10502 		    v_old_account_id := NULL;
10503 	      End;
10504 	      --
10505 	      Update CSI_IP_ACCOUNTS_H
10506 	      set ip_account_id = v_max_ip_acct_id
10507 	      where ip_account_history_id = v_min_history_id;
10508 	      --
10509 	      Delete from CSI_IP_ACCOUNTS
10510 	      where ip_account_id = acct.ip_account_id;
10511 	      --
10512 	      v_commit_counter := v_commit_counter + 1;
10513 	      IF v_commit_counter = 100 THEN
10514 		 v_commit_counter := 0;
10515 		 commit;
10516 	      END IF;
10517 	   END LOOP;
10518 	   Update CSI_IP_ACCOUNTS_H
10519 	   set old_party_account_id = v_old_account_id
10520 	   where ip_account_history_id = v_min_ret_id;
10521 	Exception
10522 	   when Process_next Then
10523 	      null;
10524 	End;
10525      END LOOP;
10526      commit;
10527   END Delete_Dup_Account;
10528   --
10529   PROCEDURE Update_Instance_Party_Source IS
10530      CURSOR CSI_INS_CUR IS
10531      SELECT instance_id,null
10532      FROM   csi_item_instances
10533      WHERE  (owner_party_source_table is null
10534      OR      owner_party_source_table  not in ('HZ_PARTIES','PO_VENDORS','EMPLOYEE','TEAM','GROUP'));
10535      --
10536      Type NumTabType is VARRAY(10000) of NUMBER;
10540      party_src_table_mig     V30TabType;
10537      instance_id_mig         NumTabType;
10538      --
10539      Type V30TabType is VARRAY(10000) of VARCHAR2(30);
10541      --
10542      MAX_BUFFER_SIZE         NUMBER := 1000;
10543 
10544   BEGIN
10545      OPEN CSI_INS_CUR;
10546      LOOP
10547 	FETCH CSI_INS_CUR BULK COLLECT INTO
10548 	instance_id_mig,
10549 	party_src_table_mig
10550 	LIMIT MAX_BUFFER_SIZE;
10551 	--
10552 	FOR i IN 1 .. instance_id_mig.count LOOP
10553 	   BEGIN
10554 	      SELECT party_source_table
10555 	      INTO   party_src_table_mig(i)
10556 	      FROM   csi_i_parties
10557 	      WHERE  relationship_type_code = 'OWNER'
10558 	      AND    instance_id = instance_id_mig(i);
10559 	   EXCEPTION
10560 	      WHEN no_data_found THEN
10561 		 party_src_table_mig(i) := null;
10562 	      WHEN OTHERS THEN
10563 		 party_src_table_mig(i) := NULL;
10564 	   END;
10565 	   --
10566 	END LOOP;
10567 	--
10568 	FORALL j in 1 .. instance_id_mig.count
10569 	   UPDATE CSI_ITEM_INSTANCES
10570 	   SET OWNER_PARTY_SOURCE_TABLE = party_src_table_mig(j)
10571 	   WHERE instance_id = instance_id_mig(j);
10572 	commit;
10573 	EXIT WHEN CSI_INS_CUR%NOTFOUND;
10574      END LOOP;
10575      CLOSE CSI_INS_CUR;
10576      COMMIT;
10577   END Update_Instance_Party_Source;
10578   --
10579   PROCEDURE Update_Contact_Party_Record IS
10580      CURSOR CSI_PARTY_CUR IS
10581      select instance_id,instance_party_id,contact_ip_id,
10582      contact_flag,relationship_type_code
10583      from CSI_I_PARTIES
10584      where contact_ip_id IS NOT NULL;
10585      --
10586      l_ins_party_id       NUMBER;
10587      TYPE NUMLIST IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
10588      l_upd_pty_tbl        NUMLIST;
10589      l_ctr                NUMBER := 0;
10590      l_exp_pty_tbl        NUMLIST;
10591      l_exp                NUMBER := 0;
10592      l_exists             VARCHAR2(1);
10593      --
10594      Type NumTabType is VARRAY(10000) of NUMBER;
10595      instance_id_mig         NumTabType;
10596      instance_party_id_mig   NumTabType;
10597      contact_ip_id_mig       NumTabType;
10598      --
10599      Type v1TabType is VARRAY(10000) of VARCHAR2(1);
10600      contact_flag_mig        v1TabType;
10601      --
10602      Type v30TabType is VARRAY(10000) of VARCHAR2(30);
10603      rel_type_code_mig       v30TabType;
10604      --
10605      MAX_BUFFER_SIZE         NUMBER := 1000;
10606   BEGIN
10607      OPEN CSI_PARTY_CUR;
10608      LOOP
10609 	FETCH CSI_PARTY_CUR BULK COLLECT INTO
10610 	instance_id_mig,
10611 	instance_party_id_mig,
10612 	contact_ip_id_mig,
10613 	contact_flag_mig,
10614 	rel_type_code_mig
10615 	LIMIT MAX_BUFFER_SIZE;
10616 	--
10617 	l_ctr := 0;
10618 	l_upd_pty_tbl.DELETE;
10619 	l_exp := 0;
10620 	l_exp_pty_tbl.DELETE;
10621 	--
10622 	FOR i in 1 .. instance_id_mig.count LOOP
10623 	   IF ((nvl(contact_flag_mig(i),'N') <> 'Y') OR
10624 	       (rel_type_code_mig(i) = 'OWNER')) THEN
10625 	      l_ctr := l_ctr + 1;
10626 	      l_upd_pty_tbl(l_ctr) := instance_party_id_mig(i);
10627 	   ELSE
10628 	      Begin
10629 		 select 'x'
10630 		 into l_exists
10631 		 from CSI_I_PARTIES
10632 		 where instance_party_id = contact_ip_id_mig(i)
10633 		 and   instance_id = instance_id_mig(i);
10634 	      Exception
10635 		 when no_data_found then
10636 		    l_exp := l_exp + 1;
10637 		    l_exp_pty_tbl(l_exp) := instance_party_id_mig(i);
10638 	      End;
10639 	   END IF;
10640 	END LOOP;
10641 	IF l_upd_pty_tbl.count > 0 THEN
10642 	   FORALL j in l_upd_pty_tbl.FIRST .. l_upd_pty_tbl.LAST
10643 	      UPDATE CSI_I_PARTIES
10644 	      set contact_ip_id = null
10645 	      where instance_party_id = l_upd_pty_tbl(j);
10646 	   --
10647 	   commit;
10648 	END IF;
10649 	--
10650 	IF l_exp_pty_tbl.count > 0 THEN
10651 	   FORALL j in l_exp_pty_tbl.FIRST .. l_exp_pty_tbl.LAST
10652 	      UPDATE CSI_I_PARTIES
10653 	      set contact_ip_id = null,
10654 		  active_end_date = sysdate
10655 	      where instance_party_id = l_exp_pty_tbl(j);
10656 	   --
10657 	   commit;
10658 	END IF;
10659 	EXIT WHEN CSI_PARTY_CUR%NOTFOUND;
10660      END LOOP;
10661      CLOSE CSI_PARTY_CUR;
10662      commit;
10663   END Update_Contact_Party_Record;
10664   --
10665   PROCEDURE Revert_Party_Rel_Type_Update IS
10666      CURSOR INS_CUR IS
10667      select instance_id,relationship_type_code,count(*)
10668      from CSI_I_PARTIES
10669      where relationship_type_code = 'OWNER'
10670      group by instance_id,relationship_type_code
10671      having count(*) > 1;
10672      --
10673      CURSOR PARTY_HIST_CUR IS
10674      select a.instance_party_history_id instance_party_history_id,a.instance_party_id instance_party_id,
10675 	    a.old_relationship_type_code old_rel_type,
10676 	    a.old_party_id old_party_id,a.new_party_id new_party_id
10677      from CSI_I_PARTIES_H a
10678      where a.old_relationship_type_code is not null
10679      and   a.old_relationship_type_code <> 'OWNER'
10680      and   a.new_relationship_type_code is not null
10681      and   a.new_relationship_type_code = 'OWNER'
10682      and   a.new_party_id is not null
10683      and   a.old_party_id is not null
10684      and   exists (select 'x' from CSI_I_PARTIES b
10688      and   a.instance_party_history_id = (select max(instance_party_history_id)
10685 		   where b.instance_id = (select c.instance_id from CSI_I_PARTIES c
10686 					  where c.instance_party_id = a.instance_party_id)
10687 		   and   b.relationship_type_code = 'OWNER')
10689 					  from CSI_I_PARTIES_H d
10690 					  where d.instance_party_id = a.instance_party_id);
10691      --
10692      TYPE NUMLIST IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
10693      l_inst_tbl        NUMLIST;
10694      l_ctr             NUMBER := 0;
10695      l_internal_party_id NUMBER;
10696      l_party_id        NUMBER;
10697      l_ip_id           NUMBER;
10698      l_ip_account_id   NUMBER;
10699      l_vld_org_id      NUMBER;
10700      x_msg_data        VARCHAR2(2000);
10701      x_msg_count       NUMBER;
10702      x_return_status   VARCHAR2(1);
10703      l_txn_id          NUMBER;
10704      l_user_id         NUMBER := FND_GLOBAL.user_id;
10705      l_ins_flag        VARCHAR2(1) := 'N';
10706      v_txn_type_id     NUMBER;
10707      px_oks_txn_inst_tbl oks_ibint_pub.txn_instance_tbl;
10708      --
10709      Process_next      EXCEPTION;
10710      comp_error        EXCEPTION;
10711    BEGIN
10712       savepoint DATA_FIX;
10713       --
10714       Begin
10715 	 select transaction_type_id
10716 	 into v_txn_type_id
10717 	 from CSI_TXN_TYPES
10718 	 where SOURCE_TRANSACTION_TYPE = 'DATA_CORRECTION';
10719       Exception
10720 	 when no_data_found then
10721 	    Raise comp_error;
10722 	 when others then
10723 	    Raise comp_error;
10724       End;
10725       --
10726       FOR ins in INS_CUR LOOP
10727 	 l_ctr := l_ctr + 1;
10728 	 l_inst_tbl(l_ctr) := ins.instance_id;
10729       END LOOP;
10730       --
10731       IF l_inst_tbl.count = 0 THEN
10732 	 RAISE Comp_error;
10733       END IF;
10734       --
10735       select CSI_TRANSACTIONS_S.nextval
10736       into l_txn_id from dual;
10737       --
10738       INSERT INTO CSI_TRANSACTIONS(
10739 	       TRANSACTION_ID
10740 	      ,TRANSACTION_DATE
10741 	      ,SOURCE_TRANSACTION_DATE
10742 	      ,SOURCE_HEADER_REF
10743 	      ,TRANSACTION_TYPE_ID
10744 	      ,CREATED_BY
10745 	      ,CREATION_DATE
10746 	      ,LAST_UPDATED_BY
10747 	      ,LAST_UPDATE_DATE
10748 	      ,LAST_UPDATE_LOGIN
10749 	      ,OBJECT_VERSION_NUMBER
10750 	      )
10751       VALUES(
10752 	     l_txn_id                             -- TRANSACTION_ID
10753 	    ,SYSDATE                              -- TRANSACTION_DATE
10754 	    ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
10755 	    ,'Update Dup Owner'                   -- SOURCE_HEADER_REF
10756 	    ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
10757 	    ,l_user_id
10758 	    ,sysdate
10759 	    ,l_user_id
10760 	    ,sysdate
10761 	    ,-1
10762 	    ,1
10763 	   );
10764       --
10765       IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
10766          csi_gen_utility_pvt.populate_install_param_rec;
10767       END IF;
10768       --
10769       l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
10770       --
10771       FOR party_rec in PARTY_HIST_CUR LOOP
10772 	 Update CSI_I_PARTIES
10773 	 set relationship_type_code = party_rec.old_rel_type,
10774 	     party_id = party_rec.old_party_id
10775 	 where instance_party_id = party_rec.instance_party_id;
10776 	 --
10777 	 Update CSI_I_PARTIES
10778 	 set party_id = party_rec.new_party_id
10779 	 where instance_id = (select instance_id from CSI_I_PARTIES
10780 			      where instance_party_id = party_rec.instance_party_id)
10781 	 and   relationship_type_code = 'OWNER';
10782 	 --
10783 	 Update CSI_I_PARTIES_H
10784 	 set new_relationship_type_code = party_rec.old_rel_type,
10785 	     new_party_id = party_rec.old_party_id
10786 	 where instance_party_history_id = party_rec.instance_party_history_id;
10787 	 --
10788       END LOOP;
10789       --
10790       IF l_inst_tbl.count > 0 THEN
10791 	 FOR j in l_inst_tbl.FIRST .. l_inst_tbl.LAST LOOP
10792 	    Begin
10793 	       Begin
10794 		  select instance_party_id
10795 		  into l_ip_id
10796 		  from CSI_I_PARTIES
10797 		  where instance_id = l_inst_tbl(j)
10798 		  and   relationship_type_code = 'OWNER'
10799 		  and   party_id = l_internal_party_id;
10800 	       Exception
10801 		  when no_data_found then
10802 		     Raise Process_next;
10803 	       End;
10804 	       --
10805 	       Update CSI_IP_ACCOUNTS
10806 	       set active_end_date = sysdate
10807 	       where instance_party_id = l_ip_id
10808 	       and   relationship_type_code = 'OWNER';
10809 	       --
10810 	       -- Insert into IP Accounts history
10811 	       select ip_account_id
10812 	       into l_ip_account_id
10813 	       from CSI_IP_ACCOUNTS
10814 	       where instance_party_id = l_ip_id
10815 	       and   relationship_type_code = 'OWNER';
10816 	       --
10817 	       INSERT INTO CSI_IP_ACCOUNTS_H
10818 		  ( IP_ACCOUNT_HISTORY_ID
10819 		   ,IP_ACCOUNT_ID
10820 		   ,TRANSACTION_ID
10821 		   ,OLD_ACTIVE_END_DATE
10822 		   ,NEW_ACTIVE_END_DATE
10823 		   ,CREATED_BY
10824 		   ,CREATION_DATE
10825 		   ,LAST_UPDATED_BY
10826 		   ,LAST_UPDATE_DATE
10827 		   ,LAST_UPDATE_LOGIN
10831 		  ( CSI_IP_ACCOUNTS_H_S.nextval
10828 		   ,OBJECT_VERSION_NUMBER
10829 		  )
10830 	       VALUES
10832 		   ,l_ip_account_id
10833 		   ,l_txn_id
10834 		   ,NULL
10835 		   ,SYSDATE
10836 		   ,l_user_id
10837 		   ,sysdate
10838 		   ,l_user_id
10839 		   ,sysdate
10840 		   ,-1
10841 		   ,1
10842 		  );
10843 	       --
10844 	       Update CSI_ITEM_INSTANCES
10845 	       set owner_party_id = l_internal_party_id,
10846 		   owner_party_account_id = null
10847 	       where instance_id = l_inst_tbl(j);
10848 	       --
10849 	       select last_vld_organization_id
10850 	       into l_vld_org_id
10851 	       from CSI_ITEM_INSTANCES
10852 	       where instance_id = l_inst_tbl(j);
10853 	       --
10854 	       CSI_Item_Instance_Pvt.Call_to_Contracts
10855 		  ( p_transaction_type    => 'TRM'
10856 		   ,p_instance_id         => l_inst_tbl(j)
10857 		   ,p_new_instance_id     => NULL
10858 		   ,p_vld_org_id          => l_vld_org_id
10859 		   ,p_quantity            => NULL
10860 		   ,p_party_account_id1   => NULL
10861 		   ,p_party_account_id2   => NULL
10862                    ,p_oks_txn_inst_tbl    => px_oks_txn_inst_tbl
10863 		   ,x_return_status       => x_return_status
10864 		   ,x_msg_count           => x_msg_count
10865 		   ,x_msg_data            => x_msg_data
10866 		 );
10867 	       --
10868 	       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10869 		  Raise Comp_error;
10870 	       END IF;
10871 	    Exception
10872 	       when Process_next then
10873 		  null;
10874 	    End;
10875 	 END LOOP;
10876       END IF;
10877       --
10878       IF px_oks_txn_inst_tbl.count > 0 THEN
10879          UPDATE CSI_TRANSACTIONS
10880          set contracts_invoked = 'Y'
10881          where transaction_id = l_txn_id;
10882          --
10883 	 OKS_IBINT_PUB.IB_interface
10884 	    (
10885 	      P_Api_Version           =>  1.0,
10886 	      P_init_msg_list         =>  fnd_api.g_true,
10887 	      P_single_txn_date_flag  =>  'Y',
10888 	      P_Batch_type            =>  NULL,
10889 	      P_Batch_ID              =>  NULL,
10890 	      P_OKS_Txn_Inst_tbl      =>  px_oks_txn_inst_tbl,
10891 	      x_return_status         =>  x_return_status,
10892 	      x_msg_count             =>  x_msg_count,
10893 	      x_msg_data              =>  x_msg_data
10894 	   );
10895 	 --
10896 	 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
10897             Raise Comp_error;
10898 	 END IF;
10899       END IF;
10900       commit;
10901   EXCEPTION
10902      when comp_error then
10903         Rollback to DATA_FIX;
10904      when others then
10905         Rollback to DATA_FIX;
10906   END Revert_Party_Rel_Type_Update;
10907   --
10908   PROCEDURE Update_Master_Organization_ID IS
10909      CURSOR CSI_CUR IS
10910      select cii.instance_id,cii.inv_master_organization_id,
10911             cii.last_vld_organization_id
10912      from CSI_ITEM_INSTANCES cii
10913      where not exists (select 'x'
10914                        from MTL_PARAMETERS msi
10915                        where organization_id = inv_master_organization_id
10916                        and   master_organization_id = inv_master_organization_id);
10917      --
10918      Type NumTabType is VARRAY(10000) of NUMBER;
10919      instance_id_mig       NumTabType;
10920      inv_master_org_id_mig NumTabType;
10921      last_vld_org_id_mig   NumTabType;
10922      --
10923      MAX_BUFFER_SIZE NUMBER := 1000;
10924   BEGIN
10925      OPEN CSI_CUR;
10926      LOOP
10927         FETCH CSI_CUR BULK COLLECT INTO
10928         instance_id_mig,
10929         inv_master_org_id_mig,
10930         last_vld_org_id_mig
10931         LIMIT MAX_BUFFER_SIZE;
10932         --
10933         FOR j in 1..instance_id_mig.count LOOP
10934            Begin
10935               select master_organization_id
10936               into inv_master_org_id_mig(j)
10937               from MTL_PARAMETERS
10938               where organization_id = last_vld_org_id_mig(j);
10939            Exception
10940               when no_data_found then
10941                  inv_master_org_id_mig(j) := inv_master_org_id_mig(j);
10942            End;
10943         END LOOP;
10944         --
10945         FORALL i in 1..instance_id_mig.count
10946            UPDATE CSI_ITEM_INSTANCES
10947            set inv_master_organization_id = inv_master_org_id_mig(i)
10948            where instance_id = instance_id_mig(i);
10949         commit;
10950         --
10951         FORALL i in 1..instance_id_mig.count
10952            UPDATE CSI_ITEM_INSTANCES_H
10953            set old_inv_master_organization_id = decode(old_inv_master_organization_id,null,null,inv_master_org_id_mig(i)),
10954                new_inv_master_organization_id = decode(new_inv_master_organization_id,null,null,inv_master_org_id_mig(i))
10955            where instance_id = instance_id_mig(i);
10956         commit;
10957         --
10958         EXIT WHEN CSI_CUR%NOTFOUND;
10959      END LOOP;
10960      commit;
10961      CLOSE CSI_CUR;
10962   END Update_Master_Organization_ID;
10963   --
10964   PROCEDURE Get_Children
10965     (p_object_id     IN  NUMBER,
10966      p_rel_tbl       OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl
10967     ) IS
10968     --
10972     l_rel_tbl_final           csi_datastructures_pub.ii_relationship_tbl;
10969     l_rel_tbl                 csi_datastructures_pub.ii_relationship_tbl;
10970     l_rel_tbl_next_lvl        csi_datastructures_pub.ii_relationship_tbl;
10971     l_rel_tbl_temp            csi_datastructures_pub.ii_relationship_tbl;
10973     l_next_ind                NUMBER := 0;
10974     l_final_ind               NUMBER := 0;
10975     l_ctr                     NUMBER := 0;
10976     l_found                   NUMBER;
10977   BEGIN
10978      Get_Next_Level
10979        ( p_object_id                 => p_object_id,
10980 	 p_rel_tbl                   => l_rel_tbl
10981        );
10982 
10983      <<Next_Level>>
10984 
10985      l_rel_tbl_next_lvl.delete;
10986      l_next_ind := 0;
10987      --
10988      IF l_rel_tbl.count > 0 THEN
10989 	FOR l_ind IN l_rel_tbl.FIRST .. l_rel_tbl.LAST LOOP
10990 	   l_final_ind := l_final_ind + 1;
10991 	   l_rel_tbl_final(l_final_ind) := l_rel_tbl(l_ind);
10992 	   /* get the next level using this Subject ID as the parent */
10993 	   Get_Next_Level
10994 	     ( p_object_id                 => l_rel_tbl(l_ind).subject_id,
10995 	       p_rel_tbl                   => l_rel_tbl_temp
10996 	     );
10997 	   --
10998 	   IF l_rel_tbl_temp.count > 0 THEN
10999 	      FOR l_temp_ind IN l_rel_tbl_temp.FIRST .. l_rel_tbl_temp.LAST LOOP
11000                  IF l_rel_tbl_final.count > 0 THEN
11001                     l_found := 0;
11002                     FOR i IN l_rel_tbl_final.FIRST .. l_rel_tbl_final.LAST LOOP
11003                        IF l_rel_tbl_final(i).object_id = l_rel_tbl_temp(l_temp_ind).object_id THEN
11004                           l_found := 1;
11005                           exit;
11006                        END IF;
11007                     END LOOP;
11008                  END IF;
11009                  IF l_found = 0 THEN
11010 		    l_next_ind := l_next_ind + 1;
11011 		    l_rel_tbl_next_lvl(l_next_ind) := l_rel_tbl_temp(l_temp_ind);
11012                  END IF;
11013 	      END LOOP;
11014 	   END IF;
11015 	END LOOP;
11016 	--
11017 	IF l_rel_tbl_next_lvl.count > 0 THEN
11018 	   l_rel_tbl.DELETE;
11019 	   l_rel_tbl := l_rel_tbl_next_lvl;
11020 	   --
11021 	   goto Next_Level;
11022 	END IF;
11023      END IF;
11024      --
11025      p_rel_tbl := l_rel_tbl_final;
11026      --
11027      -- The output of l_rel_tbl_final will be Breadth first search Order.
11028   END Get_Children;
11029   --
11030   PROCEDURE Delete_Dup_Relationship IS
11031      CURSOR CSI_REL_CUR IS
11032      select object_id,subject_id,relationship_type_code,count(*)
11033      from CSI_II_RELATIONSHIPS
11034      where active_end_date is null
11035      and   nvl(migrated_flag,'N') = 'Y'
11036      group by object_id,subject_id,relationship_type_code
11037      having count(*) > 1;
11038      --
11039      -- Delete the ones that are not having any non-migrated txns
11040      CURSOR CSI_REL_DEL_CUR(p_rel_id IN NUMBER
11041 			   ,p_object_id IN NUMBER
11042 			   ,p_subject_id IN NUMBER
11043 			   ,p_rel_type IN VARCHAR2) IS
11044      select cir.relationship_id
11045      from CSI_II_RELATIONSHIPS cir
11046      where cir.object_id = p_object_id
11047      and   cir.subject_id = p_subject_id
11048      and   cir.relationship_type_code = p_rel_type
11049      and   cir.active_end_date is null
11050      and   nvl(cir.migrated_flag,'N') = 'Y'
11051      and   cir.relationship_id <> p_rel_id
11052      and   not exists (select 'x' from CSI_II_RELATIONSHIPS_H cirh
11053                        where cirh.relationship_id = cir.relationship_id
11054                        and   nvl(cirh.migrated_flag,'N') = 'N');
11055      --
11056      l_ret_relationship_id      NUMBER;
11057      TYPE NUMLIST IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11058      l_rel_id_tbl     NUMLIST;
11059      l_ctr            NUMBER := 0;
11060      --
11061      Type NumTabType is VARRAY(10000) of NUMBER;
11062      Type V30TabType is VARRAY(10000) of VARCHAR2(30);
11063      l_object_id_mig            NumTabType;
11064      l_subject_id_mig           NumTabType;
11065      l_count_mig                NumTabType;
11066      l_rel_type_code_mig        V30TabType;
11067      --
11068      MAX_BUFFER_SIZE         NUMBER := 1000;
11069   BEGIN
11070      OPEN CSI_REL_CUR;
11071      LOOP
11072         FETCH CSI_REL_CUR BULK COLLECT INTO
11073            l_object_id_mig,
11074            l_subject_id_mig,
11075            l_rel_type_code_mig,
11076            l_count_mig
11077         LIMIT MAX_BUFFER_SIZE;
11078         --
11079         FOR k in 1..l_object_id_mig.count LOOP
11080            l_ret_relationship_id := -9999;
11081            -- Try to get the relationship which has non-migrated txns
11082    	   Begin
11083 	      select max(cir.relationship_id)
11084 	      into l_ret_relationship_id
11085 	      from CSI_II_RELATIONSHIPS cir
11086 	      where cir.object_id = l_object_id_mig(k)
11087 	      and   cir.subject_id = l_subject_id_mig(k)
11088 	      and   cir.relationship_type_code = l_rel_type_code_mig(k)
11089 	      and   cir.active_end_date is null
11090 	      and   nvl(cir.migrated_flag,'N') = 'Y'
11091               and   exists (select 'x' from CSI_II_RELATIONSHIPS_H cirh
11092                             where cirh.relationship_id = cir.relationship_id
11093                             and   nvl(cirh.migrated_flag,'N') = 'N');
11094 	   End;
11095            --
11099 	         into l_ret_relationship_id
11096            IF nvl(l_ret_relationship_id,-9999) = -9999 THEN
11097 	      Begin
11098 	         select max(relationship_id)
11100 	         from CSI_II_RELATIONSHIPS
11101 	         where object_id = l_object_id_mig(k)
11102 	         and   subject_id = l_subject_id_mig(k)
11103 	         and   relationship_type_code = l_rel_type_code_mig(k)
11104 	         and   active_end_date is null
11105 	         and   nvl(migrated_flag,'N') = 'Y';
11106 	      End;
11107            END IF;
11108 	   --
11109            -- The above l_ret_relationship_id will be retained
11110            --
11111 	   FOR del_rec in CSI_REL_DEL_CUR(l_ret_relationship_id,
11112 	   			          l_object_id_mig(k),
11113 				          l_subject_id_mig(k),
11114                                           l_rel_type_code_mig(k)) LOOP
11115 	      l_ctr := l_ctr + 1;
11116 	      l_rel_id_tbl(l_ctr) := del_rec.relationship_id;
11117 	   END LOOP;
11118         END LOOP;
11119         EXIT WHEN CSI_REL_CUR%NOTFOUND;
11120      END LOOP;
11121      --
11122      IF CSI_REL_CUR%ISOPEN THEN
11123         CLOSE CSI_REL_CUR;
11124      END IF;
11125      --
11126      IF l_rel_id_tbl.count > 0 THEN
11127 	FORALL j in l_rel_id_tbl.FIRST .. l_rel_id_tbl.LAST
11128 	   DELETE FROM CSI_II_RELATIONSHIPS_H
11129 	   WHERE relationship_id = l_rel_id_tbl(j);
11130 	commit;
11131 	--
11132 	FORALL j in l_rel_id_tbl.FIRST .. l_rel_id_tbl.LAST
11133 	   DELETE FROM CSI_II_RELATIONSHIPS
11134 	   WHERE relationship_id = l_rel_id_tbl(j);
11135 	commit;
11136      END IF;
11137   END Delete_Dup_Relationship;
11138   --
11139   PROCEDURE Call_Parallel_Expire
11140       (errbuf          OUT NOCOPY VARCHAR2,
11141        retcode         OUT NOCOPY NUMBER,
11142        p_process_code  IN VARCHAR2
11143       ) IS
11144      --
11145      CURSOR EXP_CUR IS
11146      select instance_id,rowid
11147      from CSI_EXPIRE_INSTANCES_TEMP
11148      where process_code = p_process_code
11149      and   processed_flag in ('E','R');
11150      --
11151      l_vld_org          NUMBER;
11152      v_commit_count     NUMBER := 0;
11153      --
11154      x_return_status          VARCHAR2(1);
11155      x_msg_count              NUMBER;
11156      x_msg_data               VARCHAR2(2000);
11157      l_msg_index              NUMBER;
11158      l_msg_count              NUMBER;
11159      px_oks_txn_inst_tbl      oks_ibint_pub.txn_instance_tbl;
11160      --
11161      Process_next       EXCEPTION;
11162   BEGIN
11163      FOR exp IN EXP_CUR LOOP
11164         BEGIN
11165            Begin
11166               select last_vld_organization_id
11167               into l_vld_org
11168               from CSI_ITEM_INSTANCES
11169               where instance_id = exp.instance_id;
11170            Exception
11171               when no_data_found then
11172                  Raise Process_next;
11173            End;
11174            --
11175 	   CSI_Item_Instance_Pvt.Call_to_Contracts
11176 	      ( p_transaction_type    => 'TRM'
11177 	       ,p_instance_id         => exp.instance_id
11178 	       ,p_new_instance_id     => NULL
11179 	       ,p_vld_org_id          => l_vld_org
11180 	       ,p_quantity            => NULL
11181 	       ,p_party_account_id1   => NULL
11182 	       ,p_party_account_id2   => NULL
11183                ,p_oks_txn_inst_tbl    => px_oks_txn_inst_tbl
11184 	       ,x_return_status       => x_return_status
11185 	       ,x_msg_count           => x_msg_count
11186 	       ,x_msg_data            => x_msg_data
11187 	      );
11188 	      --
11189            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11190               UPDATE CSI_EXPIRE_INSTANCES_TEMP
11191               set processed_flag = 'E',
11192                   error_message = x_msg_data
11193               where rowid = exp.rowid;
11194            ELSE
11195               UPDATE CSI_EXPIRE_INSTANCES_TEMP
11196               set processed_flag = 'P',
11197                   error_message = null
11198               where rowid = exp.rowid;
11199            END IF;
11200            --
11201            v_commit_count := v_commit_count + 1;
11202            IF v_commit_count = 500 THEN
11203               v_commit_count := 0;
11204               commit;
11205            END IF;
11206         EXCEPTION
11207            WHEN Process_next THEN
11208               NULL;
11209         END;
11210      END LOOP;
11211      commit;
11212      --
11213      IF px_oks_txn_inst_tbl.count > 0 THEN
11214 	OKS_IBINT_PUB.IB_interface
11215 	   (
11216 	     P_Api_Version           =>  1.0,
11217 	     P_init_msg_list         =>  fnd_api.g_true,
11218 	     P_single_txn_date_flag  =>  'Y',
11219 	     P_Batch_type            =>  NULL,
11220 	     P_Batch_ID              =>  NULL,
11221 	     P_OKS_Txn_Inst_tbl      =>  px_oks_txn_inst_tbl,
11222 	     x_return_status         =>  x_return_status,
11223 	     x_msg_count             =>  x_msg_count,
11224 	     x_msg_data              =>  x_msg_data
11225 	  );
11226 	--
11227      END IF;
11228   END Call_Parallel_Expire;
11229   --
11230   PROCEDURE Expire_Non_Trackable_Instance IS
11231      CURSOR CSI_CUR IS
11232      select cii.instance_id,cii.inventory_item_id,cii.inv_master_organization_id
11233      from CSI_ITEM_INSTANCES cii
11237      select cii.instance_id,cii.inventory_item_id,cii.inv_master_organization_id,
11234      where nvl(cii.active_end_date,(sysdate+1)) > sysdate;
11235      --
11236      CURSOR REL_CUR IS
11238             cir.relationship_id
11239      from   CSI_ITEM_INSTANCES cii,
11240             CSI_II_RELATIONSHIPS cir
11241      where  nvl(cii.active_end_date,(sysdate+1)) > sysdate
11242      and    cir.subject_id = cii.instance_id
11243      and   cir.relationship_type_code = 'COMPONENT-OF'
11244      and   nvl(cir.active_end_date,(sysdate+1)) > sysdate;
11245      --
11246      CURSOR CSI_MAT_ERROR IS
11247      select cii.transaction_error_id,
11248      mmt.inventory_item_id,mmt.organization_id
11249      from CSI_TXN_ERRORS cii,
11250           MTL_MATERIAL_TRANSACTIONS mmt
11251      where cii.processed_flag in ('E', 'R')
11252      and   cii.inv_material_transaction_id is not null
11253      and   mmt.transaction_id = cii.inv_material_transaction_id;
11254      --
11255      CURSOR CSI_NON_MAT_ERROR IS
11256      select transaction_error_id,source_id
11257      from CSI_TXN_ERRORS cii
11258      where cii.inv_material_transaction_id is null
11259      and   cii.source_id is not null
11260      and   cii.processed_flag in ('E', 'R');
11261      --
11262      v_commit_count           NUMBER := 0;
11263      v_err_msg                VARCHAR2(2000);
11264      v_txn_type_id            NUMBER;
11265      v_txn_id                 NUMBER;
11266      v_user_id                NUMBER := fnd_global.user_id;
11267      l_nl                     VARCHAR2(1);
11268      l_item_id                NUMBER;
11269      l_org_id                 NUMBER;
11270      l_organization_id        NUMBER;
11271      --
11272      TYPE NUMLIST IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11273      l_upd_txn_tbl           NUMLIST;
11274      l_upd_count             NUMBER := 0;
11275      l_rel_count             NUMBER := 0;
11276      l_rel_tbl               NUMLIST;
11277      l_rel_code              VARCHAR2(30) := 'COMPONENT-OF';
11278      l_ctr                   NUMBER := 0;
11279      l_inst_tbl              NUMLIST;
11280      l_inst_hist_tbl         NUMLIST;
11281      l_req_count             NUMBER := 0;
11282      l_req_tbl               NUMLIST;
11283      v_request_id            NUMBER;
11284      l_child_tbl             csi_datastructures_pub.ii_relationship_tbl;
11285      l_contracts_status      VARCHAR2(3);
11286      l_ins_flag              VARCHAR2(1) := 'N';
11287      --
11288      Type NumTabType is VARRAY(10000) of NUMBER;
11289      instance_id_mig         NumTabType;
11290      inventory_item_id_mig   NumTabType;
11291      mast_org_id_mig         NumTabType;
11292      relationship_id_mig     NumTabType;
11293      organization_id_mig     NumTabType;
11294      txn_error_id_mig        NumTabType;
11295      source_id_mig           NumTabType;
11296      --
11297      MAX_BUFFER_SIZE         NUMBER := 1000;
11298      INST_BUFFER_SIZE        NUMBER := 1000;
11299      --
11300      comp_error              EXCEPTION;
11301      Process_next            EXCEPTION;
11302   BEGIN
11303      DELETE FROM CSI_EXPIRE_INSTANCES_TEMP
11304      WHERE processed_flag = 'P'
11305      AND   process_code = 'EXPNL';
11306      commit;
11307      --
11308      -- Get the Transaction Type ID for Txn Type MIGRATED
11309      Begin
11310         select transaction_type_id
11311         into v_txn_type_id
11312         from CSI_TXN_TYPES
11313         where SOURCE_TRANSACTION_TYPE = 'DATA_CORRECTION';
11314      Exception
11315         when no_data_found then
11316            v_err_msg := 'Txn Type DATA_CORRECTION not defined in CSI_TXN_TYPES';
11317            Raise comp_error;
11318         when others then
11319            v_err_msg := 'Unable to get the ID for Txn Type DATA_CORRECTION from CSI_TXN_TYPES';
11320            Raise comp_error;
11321      End;
11322      -- End data the relationships
11323      OPEN REL_CUR;
11324      LOOP
11325         FETCH REL_CUR BULK COLLECT INTO
11326         instance_id_mig,
11327         inventory_item_id_mig,
11328         mast_org_id_mig,
11329         relationship_id_mig
11330         LIMIT MAX_BUFFER_SIZE;
11331         --
11332         FOR j in 1..instance_id_mig.count LOOP
11333            Begin
11334               Begin
11335                  select nvl(comms_nl_trackable_flag,'N')
11336                  into l_nl
11337                  from MTL_SYSTEM_ITEMS
11338                  where inventory_item_id = inventory_item_id_mig(j)
11339                  and   organization_id = mast_org_id_mig(j);
11340               Exception
11341                  when no_data_found then
11342                     Raise Process_next;
11343               End;
11344               IF l_nl <> 'Y' THEN
11345                  l_rel_count := l_rel_count + 1;
11346                  l_rel_tbl(l_rel_count) := relationship_id_mig(j);
11347               END IF;
11348            Exception
11349               when Process_next then
11350                  null;
11351            End;
11352         END LOOP;
11353         EXIT WHEN REL_CUR%NOTFOUND;
11354      END LOOP;
11355      CLOSE REL_CUR;
11356      --
11357      IF REL_CUR%ISOPEN THEN
11358         CLOSE REL_CUR;
11359      END IF;
11360      -- Update the Relationship end_date.
11361      IF l_rel_tbl.count > 0 THEN
11362         FORALL i in l_rel_tbl.FIRST .. l_rel_tbl.LAST
11363            UPDATE CSI_II_RELATIONSHIPS
11367         commit;
11364            set active_end_date = sysdate
11365            where relationship_id = l_rel_tbl(i);
11366         --
11368      END IF;
11369      --
11370      select CSI_TRANSACTIONS_S.nextval
11371      into v_txn_id from dual;
11372      --
11373      OPEN CSI_CUR;
11374      LOOP
11375         FETCH CSI_CUR BULK COLLECT INTO
11376         instance_id_mig,
11377         inventory_item_id_mig,
11378         mast_org_id_mig
11379         LIMIT INST_BUFFER_SIZE;
11380         --
11381         l_ctr := 0;
11382         l_inst_tbl.DELETE;
11383         l_inst_hist_tbl.DELETE;
11384         --
11385         FOR i in 1 .. instance_id_mig.count LOOP
11386            Begin
11387               Begin
11388                  select nvl(comms_nl_trackable_flag,'N')
11389                  into l_nl
11390                  from MTL_SYSTEM_ITEMS
11391                  where inventory_item_id = inventory_item_id_mig(i)
11392                  and   organization_id = mast_org_id_mig(i);
11393               Exception
11394                  when no_data_found then
11395                     Raise Process_next;
11396               End;
11397               IF l_nl = 'Y' THEN
11398                  Raise Process_next;
11399               END IF;
11400               --
11401               l_ctr := l_ctr + 1;
11402               l_inst_tbl(l_ctr) := instance_id_mig(i);
11403               --
11404               select CSI_ITEM_INSTANCES_H_S.nextval
11405               into l_inst_hist_tbl(l_ctr) from dual;
11406               --
11407               -- For this instance_id get the children
11408               l_child_tbl.DELETE;
11409               --
11410               Get_Children
11411                  ( p_object_id     => instance_id_mig(i),
11412                    p_rel_tbl       => l_child_tbl
11413                  );
11414               --
11415               IF l_child_tbl.count > 0 THEN
11416                  FOR rel_count in l_child_tbl.FIRST .. l_child_tbl.LAST LOOP
11417                     l_ctr := l_ctr + 1;
11418                     l_inst_tbl(l_ctr) := l_child_tbl(rel_count).subject_id;
11419                     --
11420                     select CSI_ITEM_INSTANCES_H_S.nextval
11421                     into l_inst_hist_tbl(l_ctr) from dual;
11422                  END LOOP;
11423               END IF;
11424            Exception
11425               when Process_next then
11426                  null;
11427            End;
11428         END LOOP;
11429            IF l_inst_tbl.count > 0 THEN
11430               l_ins_flag := 'Y';
11431               FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11432                  INSERT INTO CSI_EXPIRE_INSTANCES_TEMP
11433                     ( INSTANCE_ID,
11434                       PROCESSED_FLAG,
11435                       PROCESS_CODE
11436                     )
11437                  VALUES
11438                    ( l_inst_tbl(j),
11439                      'R',
11440                      'EXPNL'
11441                    );
11442               -- Bulk Update Instances
11443               FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11444                  UPDATE CSI_ITEM_INSTANCES
11445                  set active_end_date = sysdate,
11446                      instance_status_id = 1,
11447                      last_update_date = sysdate,
11448                      last_updated_by = v_user_id
11449                  where instance_id = l_inst_tbl(j);
11450               --
11451               -- Tie the Transaction to the history
11452               FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11453 		 INSERT INTO CSI_ITEM_INSTANCES_H
11454 		     (
11455 		      INSTANCE_HISTORY_ID
11456 		     ,TRANSACTION_ID
11457 		     ,INSTANCE_ID
11458 		     ,CREATION_DATE
11459 		     ,LAST_UPDATE_DATE
11460 		     ,CREATED_BY
11461 		     ,LAST_UPDATED_BY
11462 		     ,LAST_UPDATE_LOGIN
11463 		     ,OBJECT_VERSION_NUMBER
11464 		    )
11465 		 VALUES
11466 		    (
11467 		      l_inst_hist_tbl(j)
11468 		     ,v_txn_id
11469 		     ,l_inst_tbl(j)
11470 		     ,SYSDATE
11471 		     ,SYSDATE
11472 		     ,v_user_id
11473 		     ,v_user_id
11474 		     ,-1
11475 		     ,1
11476 		    );
11477            END IF;
11478            commit;
11479            EXIT WHEN CSI_CUR%NOTFOUND;
11480      END LOOP;
11481      CLOSE CSI_CUR;
11482      -- Insert one record into CSI_TRANSACTIONS
11483      IF l_ins_flag = 'Y' THEN
11484 	   INSERT INTO CSI_TRANSACTIONS(
11485 	    TRANSACTION_ID
11486 	   ,TRANSACTION_DATE
11487 	   ,SOURCE_TRANSACTION_DATE
11488 	   ,SOURCE_HEADER_REF
11489 	   ,SOURCE_LINE_REF
11490 	   ,TRANSACTION_TYPE_ID
11491 	   ,CREATED_BY
11492 	   ,CREATION_DATE
11493 	   ,LAST_UPDATED_BY
11494 	   ,LAST_UPDATE_DATE
11495 	   ,LAST_UPDATE_LOGIN
11496 	   ,OBJECT_VERSION_NUMBER
11497 	  )
11498 	  VALUES(
11499 	    v_txn_id                             -- TRANSACTION_ID
11500 	   ,SYSDATE                              -- TRANSACTION_DATE
11501 	   ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
11502 	   ,'COMMS_NL_TRACKABLE_FLAG got switched off'   -- SOURCE_HEADER_REF
11503 	   ,'DATAFIX By Expire Non_NL Trackable' -- SOURCE_LINE_REF
11504 	   ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
11508 	   ,sysdate
11505 	   ,v_user_id
11506 	   ,sysdate
11507 	   ,v_user_id
11509 	   ,-1
11510 	   ,1
11511 	  );
11512      END IF;
11513      commit;
11514      --
11515      IF CSI_CUR%ISOPEN THEN
11516         CLOSE CSI_CUR;
11517      END IF;
11518      -- Call Expire_Item_Instance wraper to Expire Contracts
11519      l_contracts_status := FND_PROFILE.VALUE('CSI_CONTRACTS_ENABLED');
11520      IF UPPER(l_contracts_status) = 'Y'  THEN
11521         UPDATE CSI_TRANSACTIONS
11522         set contracts_invoked = 'Y'
11523         where transaction_id = v_txn_id;
11524         --
11525         v_request_id := 0;
11526         v_request_id := fnd_request.submit_request
11527                            (
11528                               'CSI'
11529                              ,'CSIEXPIR'
11530                              ,NULL
11531                              ,SYSDATE
11532                              ,FALSE
11533                              ,'EXPNL'
11534                            );
11535         commit;
11536      END IF; -- Contracts enabled check
11537      commit;
11538      -- Update the Relationship end_date back to null.
11539      IF l_rel_tbl.count > 0 THEN
11540         FORALL i in l_rel_tbl.FIRST .. l_rel_tbl.LAST
11541            UPDATE CSI_II_RELATIONSHIPS
11542            set active_end_date = null
11543            where relationship_id = l_rel_tbl(i);
11544         --
11545         commit;
11546      END IF;
11547      commit;
11548      --
11549      OPEN CSI_MAT_ERROR;
11550      LOOP
11551         FETCH CSI_MAT_ERROR BULK COLLECT INTO
11552         txn_error_id_mig,
11553         inventory_item_id_mig,
11554         organization_id_mig
11555         LIMIT MAX_BUFFER_SIZE;
11556         --
11557         FOR i in 1 .. txn_error_id_mig.count LOOP
11558            select comms_nl_trackable_flag
11559            into l_nl
11560            from MTL_SYSTEM_ITEMS msi,
11561                 MTL_PARAMETERS mp
11562            where mp.organization_id = organization_id_mig(i)
11563            and   msi.inventory_item_id = inventory_item_id_mig(i)
11564            and   msi.organization_id = mp.master_organization_id;
11565            --
11566            IF nvl(l_nl,'N') <> 'Y' THEN
11567               l_upd_count := l_upd_count + 1;
11568               l_upd_txn_tbl(l_upd_count) := txn_error_id_mig(i);
11569            END IF;
11570         END LOOP;
11571         EXIT WHEN CSI_MAT_ERROR%NOTFOUND;
11572      END LOOP;
11573      CLOSE CSI_MAT_ERROR;
11574      --
11575      -- Perform a Bulk Update
11576      IF l_upd_txn_tbl.count > 0 THEN
11577        FORALL i in l_upd_txn_tbl.FIRST .. l_upd_txn_tbl.LAST
11578          UPDATE csi_txn_errors
11579          SET    processed_flag   = 'D',
11580                 error_text       = 'COMMS_NL_TRACKABLE_FLAG got switched off',
11581                 last_update_date = sysdate
11582          WHERE transaction_error_id = l_upd_txn_tbl(i);
11583        commit;
11584      END IF;
11585      --
11586      --
11587      l_upd_txn_tbl.DELETE;
11588      l_upd_count := 0;
11589      --
11590      OPEN CSI_NON_MAT_ERROR;
11591      LOOP
11592         FETCH CSI_NON_MAT_ERROR BULK COLLECT INTO
11593         txn_error_id_mig,source_id_mig
11594         LIMIT MAX_BUFFER_SIZE;
11595         --
11596         FOR i in 1 .. txn_error_id_mig.count LOOP
11597            BEGIN
11598 	      Begin
11599 		 select oel.inventory_item_id,oel.org_id
11600 		 into l_item_id, l_org_id
11601 		 from OE_ORDER_LINES_ALL oel
11602 		 where oel.line_id = source_id_mig(i);
11603 
11604                  l_organization_id := oe_sys_parameters.value(
11605                                         param_name => 'MASTER_ORGANIZATION_ID',
11606                                         p_org_id   => l_org_id);
11607 
11608 	      Exception
11609 		 when no_data_found then
11610 		    Raise Process_next;
11611 	      End;
11612 	      --
11613 	      Begin
11614 		 select comms_nl_trackable_flag
11615 		 into l_nl
11616 		 from MTL_SYSTEM_ITEMS msi,
11617                       MTL_PARAMETERS mp
11618 		 where mp.organization_id = l_organization_id
11619                  and   msi.inventory_item_id = l_item_id
11620 		 and   msi.organization_id = mp.master_organization_id;
11621 	      Exception
11622 		 when no_data_found then
11623 		    Raise Process_next;
11624 	      End;
11625 	      --
11626 	      IF nvl(l_nl,'N') <> 'Y' THEN
11627 	         l_upd_count := l_upd_count + 1;
11628 		 l_upd_txn_tbl(l_upd_count) := txn_error_id_mig(i);
11629 	      END IF;
11630            EXCEPTION
11631               WHEN Process_next then
11632                  NULL;
11633            END;
11634         END LOOP;
11635         EXIT WHEN CSI_NON_MAT_ERROR%NOTFOUND;
11636      END LOOP;
11637      CLOSE CSI_NON_MAT_ERROR;
11638      -- Perform a Bulk Update
11639      IF l_upd_txn_tbl.count > 0 THEN
11640         FORALL i in l_upd_txn_tbl.FIRST .. l_upd_txn_tbl.LAST
11641            UPDATE CSI_TXN_ERRORS
11642            set processed_flag = 'D',
11643            error_text = 'COMMS_NL_TRACKABLE_FLAG got switched off',
11644            last_update_date = sysdate
11645            where transaction_error_id = l_upd_txn_tbl(i);
11646         commit;
11650         CLOSE CSI_NON_MAT_ERROR;
11647      END IF;
11648      --
11649      IF CSI_NON_MAT_ERROR%ISOPEN THEN
11651      END IF;
11652      commit;
11653   EXCEPTION
11654      WHEN comp_error then
11655         NULL;
11656   END Expire_Non_Trackable_Instance;
11657   --
11658   -- The following procedure identifies the instances that got a srl/lot number without the
11659   -- respective control and nullify the srl/lot number.
11660   -- The history will be populated with the old srl/lot number and new value will be null.
11661   -- For Inventory instances, we just expire them
11662   --
11663   PROCEDURE Update_No_ctl_Srl_Lot_Inst IS
11664   /* commenting the following cursors for the bug 5989350 ,Since there is
11665      no need to nullify the serial and lot number for the instances
11666      which are already shipped to customers */
11667   /* CURSOR CSI_SRL_CUR IS
11668      select cii.instance_id,cii.serial_number,
11669             cii.last_vld_organization_id,cii.inventory_item_id
11670      from CSI_ITEM_INSTANCES cii
11671      where cii.serial_number is not null
11672      and   cii.last_vld_organization_id is not null
11673      and   cii.inv_organization_id is null
11674      and   cii.inv_subinventory_name is null; -- to filter Inventory instances
11675      --
11676      CURSOR CSI_LOT_CUR IS
11677      select cii.instance_id,cii.lot_number,
11678             cii.last_vld_organization_id,cii.inventory_item_id
11679      from CSI_ITEM_INSTANCES cii
11680      where cii.lot_number is not null
11681      and   cii.last_vld_organization_id is not null
11682      and   cii.inv_organization_id is null
11683      and   cii.inv_subinventory_name is null; -- to filter Inventory instances
11684      --
11685   */
11686      CURSOR INV_CSI_SRL_CUR IS
11687      select cii.instance_id,cii.serial_number,
11688             cii.last_vld_organization_id,cii.inventory_item_id
11689      from CSI_ITEM_INSTANCES cii
11690      where cii.serial_number is not null
11691      and   cii.last_vld_organization_id is not null
11692      and   cii.location_type_code = 'INVENTORY'
11693      and   cii.instance_usage_code = 'IN_INVENTORY'
11694      and   nvl(cii.active_end_date,(sysdate+1)) > sysdate
11695      and   cii.inv_organization_id is not null
11696      and   cii.inv_subinventory_name is not null; -- to handle Inventory instances
11697      --
11698      CURSOR INV_CSI_LOT_CUR IS
11699      select cii.instance_id,cii.lot_number,
11700             cii.last_vld_organization_id,cii.inventory_item_id
11701      from CSI_ITEM_INSTANCES cii
11702      where cii.lot_number is not null
11703      and   cii.last_vld_organization_id is not null
11704      and   cii.inv_organization_id is not null
11705      and   cii.location_type_code = 'INVENTORY'
11706      and   cii.instance_usage_code = 'IN_INVENTORY'
11707      and   nvl(cii.active_end_date,(sysdate+1)) > sysdate
11708      and   cii.inv_subinventory_name is not null; -- to handle Inventory instances
11709      --
11710      v_commit_count         NUMBER := 0;
11711      v_err_msg              VARCHAR2(2000);
11712      v_txn_type_id          NUMBER;
11713      v_srl_txn_id           NUMBER;
11714      v_lot_txn_id           NUMBER;
11715      v_user_id              NUMBER := fnd_global.user_id;
11716      v_srl_ctl              NUMBER;
11717      v_lot_ctl              NUMBER;
11718      --
11719      TYPE NUMLIST IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11720      TYPE T_V30 IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
11721      TYPE T_V80 IS TABLE OF VARCHAR2(80) INDEX BY BINARY_INTEGER;
11722      --
11723      l_ctr                   NUMBER := 0;
11724      l_inst_tbl              NUMLIST;
11725      l_srl_tbl               T_V30;
11726      l_lot_tbl               T_V80;
11727      l_inst_hist_tbl         NUMLIST;
11728      l_srl_ins_flag          VARCHAR2(1) := 'N';
11729      l_lot_ins_flag          VARCHAR2(1) := 'N';
11730      --
11731      Type NumTabType is VARRAY(10000) of NUMBER;
11732      Type V30TabType is VARRAY(10000) of VARCHAR2(30);
11733      Type V80TabType is VARRAY(10000) of VARCHAR2(80); --bnarayan added for lot number change
11734      --
11735      instance_id_mig         NumTabType;
11736      vld_org_id_mig          NumTabType;
11737      inventory_item_id_mig   NumTabType;
11738      serial_number_mig       V30TabType;
11739      lot_number_mig          V80TabType;
11740      relationship_id_mig     NumTabType;
11741      organization_id_mig     NumTabType;
11742      --
11743      MAX_BUFFER_SIZE         NUMBER := 1000;
11744      INST_BUFFER_SIZE        NUMBER := 1000;
11745      --
11746      comp_error              EXCEPTION;
11747   BEGIN
11748      -- Get the Transaction Type ID for Txn Type DATA_CORRECTION
11749      Begin
11750 	select transaction_type_id
11751 	into v_txn_type_id
11752 	from CSI_TXN_TYPES
11753 	where SOURCE_TRANSACTION_TYPE = 'DATA_CORRECTION';
11754      Exception
11755 	when no_data_found then
11756 	   v_err_msg := 'Txn Type DATA_CORRECTION not defined in CSI_TXN_TYPES';
11757 	   Raise comp_error;
11758 	when others then
11759 	   v_err_msg := 'Unable to get the ID for Txn Type DATA_CORRECTION from CSI_TXN_TYPES';
11760 	   Raise comp_error;
11761      End;
11762      --
11763      select CSI_TRANSACTIONS_S.nextval
11764      into v_srl_txn_id from dual;
11765      --
11766      select CSI_TRANSACTIONS_S.nextval
11767      into v_lot_txn_id from dual;
11771      which are already shipped to customers */
11768      --
11769      /* commenting the following cursors for the bug 5989350 ,Since there is
11770      no need to nullify the serial and lot number for the instances
11772      /*OPEN CSI_SRL_CUR;
11773      LOOP
11774         FETCH CSI_SRL_CUR BULK COLLECT INTO
11775         instance_id_mig,
11776         serial_number_mig,
11777         vld_org_id_mig,
11778         inventory_item_id_mig
11779         LIMIT INST_BUFFER_SIZE;
11780         --
11781         l_ctr := 0;
11782         l_inst_tbl.DELETE;
11783         l_srl_tbl.DELETE;
11784         l_inst_hist_tbl.DELETE;
11785         --
11786         FOR i in 1 .. instance_id_mig.count LOOP
11787            v_srl_ctl := null;
11788            Begin
11789               select serial_number_control_code
11790               into v_srl_ctl
11791               from MTL_SYSTEM_ITEMS
11792               where inventory_item_id = inventory_item_id_mig(i)
11793               and   organization_id = vld_org_id_mig(i);
11794            Exception
11795               when others then
11796                  v_srl_ctl := null;
11797            End;
11798            IF nvl(v_srl_ctl,1) = 1 THEN
11799               l_ctr := l_ctr + 1;
11800               l_inst_tbl(l_ctr) := instance_id_mig(i);
11801               l_srl_tbl(l_ctr) := serial_number_mig(i);
11802               --
11803 	         select CSI_ITEM_INSTANCES_H_S.nextval
11804 	         into l_inst_hist_tbl(l_ctr) from dual;
11805            END IF;
11806 	      --
11807         END LOOP;
11808         IF l_inst_tbl.count > 0 THEN
11809 	   -- Bulk Update Instances
11810            l_srl_ins_flag := 'Y';
11811 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11812 	      UPDATE CSI_ITEM_INSTANCES
11813 	      set serial_number = null,
11814                mfg_serial_number_flag = 'N',
11815 		     last_update_date = sysdate,
11816 		     last_updated_by = v_user_id
11817 	      where instance_id = l_inst_tbl(j);
11818 	      --
11819 	      -- Tie the Transaction to the history
11820 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11821 	      INSERT INTO CSI_ITEM_INSTANCES_H
11822 		  (
11823 		   INSTANCE_HISTORY_ID
11824 		  ,TRANSACTION_ID
11825 		  ,INSTANCE_ID
11826             ,OLD_SERIAL_NUMBER
11827             ,NEW_SERIAL_NUMBER
11828 		  ,CREATION_DATE
11829 		  ,LAST_UPDATE_DATE
11830 		  ,CREATED_BY
11831 		  ,LAST_UPDATED_BY
11832 		  ,LAST_UPDATE_LOGIN
11833 		  ,OBJECT_VERSION_NUMBER
11834 		 )
11835 	      VALUES
11836 		 (
11837 		   l_inst_hist_tbl(j)
11838 		  ,v_srl_txn_id
11839 		  ,l_inst_tbl(j)
11840             ,l_srl_tbl(j)
11841             ,NULL
11842 		  ,SYSDATE
11843 		  ,SYSDATE
11844 		  ,v_user_id
11845 		  ,v_user_id
11846 		  ,-1
11847 		  ,1
11848 		 );
11849         END IF;
11850         commit;
11851         EXIT WHEN CSI_SRL_CUR%NOTFOUND;
11852      END LOOP;
11853      commit;
11854      CLOSE CSI_SRL_CUR;
11855      --
11856      OPEN CSI_LOT_CUR;
11857      LOOP
11858         FETCH CSI_LOT_CUR BULK COLLECT INTO
11859         instance_id_mig,
11860         lot_number_mig,
11861         vld_org_id_mig,
11862         inventory_item_id_mig
11863         LIMIT INST_BUFFER_SIZE;
11864         --
11865         l_ctr := 0;
11866         l_inst_tbl.DELETE;
11867         l_lot_tbl.DELETE;
11868         l_inst_hist_tbl.DELETE;
11869         --
11870         FOR i in 1 .. instance_id_mig.count LOOP
11871            v_lot_ctl := null;
11872            Begin
11873               select lot_control_code
11874               into v_lot_ctl
11875               from MTL_SYSTEM_ITEMS
11876               where inventory_item_id = inventory_item_id_mig(i)
11877               and   organization_id = vld_org_id_mig(i);
11878            Exception
11879               when others then
11880                  v_lot_ctl := null;
11881            End;
11882            IF nvl(v_lot_ctl,1) = 1 THEN
11883               l_ctr := l_ctr + 1;
11884               l_inst_tbl(l_ctr) := instance_id_mig(i);
11885               l_lot_tbl(l_ctr) := lot_number_mig(i);
11886 	         --
11887 	         select CSI_ITEM_INSTANCES_H_S.nextval
11888 	         into l_inst_hist_tbl(l_ctr) from dual;
11889            END IF;
11890         END LOOP;
11891         --
11892         IF l_inst_tbl.count > 0 THEN
11893            l_lot_ins_flag := 'Y';
11894 	      -- Bulk Update Instances
11895 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11896 	      UPDATE CSI_ITEM_INSTANCES
11897 	      set lot_number = null,
11898 		     last_update_date = sysdate,
11899 		     last_updated_by = v_user_id
11900 	      where instance_id = l_inst_tbl(j);
11901 	      --
11902 	      -- Tie the Transaction to the history
11903 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11904 	      INSERT INTO CSI_ITEM_INSTANCES_H
11905 		  (
11906 		   INSTANCE_HISTORY_ID
11907 		  ,TRANSACTION_ID
11908 		  ,INSTANCE_ID
11909                   ,OLD_LOT_NUMBER
11910                   ,NEW_LOT_NUMBER
11911 		  ,CREATION_DATE
11912 		  ,LAST_UPDATE_DATE
11913 		  ,CREATED_BY
11914 		  ,LAST_UPDATED_BY
11915 		  ,LAST_UPDATE_LOGIN
11919 		 (
11916 		  ,OBJECT_VERSION_NUMBER
11917 		 )
11918 	      VALUES
11920 		   l_inst_hist_tbl(j)
11921 		  ,v_lot_txn_id
11922 		  ,l_inst_tbl(j)
11923                   ,l_lot_tbl(j)
11924                   ,NULL
11925 		  ,SYSDATE
11926 		  ,SYSDATE
11927 		  ,v_user_id
11928 		  ,v_user_id
11929 		  ,-1
11930 		  ,1
11931 		 );
11932         END IF;
11933         commit;
11934         EXIT WHEN CSI_LOT_CUR%NOTFOUND;
11935      END LOOP;
11936      commit;
11937      CLOSE CSI_LOT_CUR;*/
11938      --
11939      OPEN INV_CSI_SRL_CUR;
11940      LOOP
11941         FETCH INV_CSI_SRL_CUR BULK COLLECT INTO
11942         instance_id_mig,
11943         serial_number_mig,
11944         vld_org_id_mig,
11945         inventory_item_id_mig
11946         LIMIT INST_BUFFER_SIZE;
11947         --
11948         l_ctr := 0;
11949         l_inst_tbl.DELETE;
11950         l_inst_hist_tbl.DELETE;
11951         --
11952         FOR i in 1 .. instance_id_mig.count LOOP
11953            v_srl_ctl := null;
11954            Begin
11955               select serial_number_control_code
11956               into v_srl_ctl
11957               from MTL_SYSTEM_ITEMS
11958               where inventory_item_id = inventory_item_id_mig(i)
11959               and   organization_id = vld_org_id_mig(i);
11960            Exception
11961               when others then
11962                  v_srl_ctl := null;
11963            End;
11964            IF nvl(v_srl_ctl,1) = 1 THEN
11965               l_ctr := l_ctr + 1;
11966               l_inst_tbl(l_ctr) := instance_id_mig(i);
11967 	         --
11968 	         select CSI_ITEM_INSTANCES_H_S.nextval
11969 	         into l_inst_hist_tbl(l_ctr) from dual;
11970            END IF;
11971         END LOOP;
11972         IF l_inst_tbl.count > 0 THEN
11973 	   -- Bulk Update Instances
11974            l_srl_ins_flag := 'Y';
11975 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11976 	      UPDATE CSI_ITEM_INSTANCES
11977 	      set active_end_date = sysdate,
11978                instance_status_id = 1,
11979 		     last_update_date = sysdate,
11980 		     last_updated_by = v_user_id
11981 	      where instance_id = l_inst_tbl(j);
11982 	      --
11983 	      -- Tie the Transaction to the history
11984 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
11985 	      INSERT INTO CSI_ITEM_INSTANCES_H
11986 		  (
11987 		   INSTANCE_HISTORY_ID
11988 		  ,TRANSACTION_ID
11989 		  ,INSTANCE_ID
11990 		  ,CREATION_DATE
11991 		  ,LAST_UPDATE_DATE
11992 		  ,CREATED_BY
11993 		  ,LAST_UPDATED_BY
11994 		  ,LAST_UPDATE_LOGIN
11995 		  ,OBJECT_VERSION_NUMBER
11996 		 )
11997 	      VALUES
11998 		 (
11999 		   l_inst_hist_tbl(j)
12000 		  ,v_srl_txn_id
12001 		  ,l_inst_tbl(j)
12002 		  ,SYSDATE
12003 		  ,SYSDATE
12004 		  ,v_user_id
12005 		  ,v_user_id
12006 		  ,-1
12007 		  ,1
12008 		 );
12009         END IF;
12010         commit;
12011         EXIT WHEN INV_CSI_SRL_CUR%NOTFOUND;
12012      END LOOP;
12013      commit;
12014      CLOSE INV_CSI_SRL_CUR;
12015      --
12016      OPEN INV_CSI_LOT_CUR;
12017      LOOP
12018         FETCH INV_CSI_LOT_CUR BULK COLLECT INTO
12019         instance_id_mig,
12020         lot_number_mig,
12021         vld_org_id_mig,
12022         inventory_item_id_mig
12023         LIMIT INST_BUFFER_SIZE;
12024         --
12025         l_ctr := 0;
12026         l_inst_tbl.DELETE;
12027         l_inst_hist_tbl.DELETE;
12028         --
12029         FOR i in 1 .. instance_id_mig.count LOOP
12030            v_lot_ctl := null;
12031            Begin
12032               select lot_control_code
12033               into v_lot_ctl
12034               from MTL_SYSTEM_ITEMS
12035               where inventory_item_id = inventory_item_id_mig(i)
12036               and   organization_id = vld_org_id_mig(i);
12037            Exception
12038               when others then
12039                  v_lot_ctl := null;
12040            End;
12041            IF nvl(v_lot_ctl,1) = 1 THEN
12042               l_ctr := l_ctr + 1;
12043               l_inst_tbl(l_ctr) := instance_id_mig(i);
12044 	         --
12045 	         select CSI_ITEM_INSTANCES_H_S.nextval
12046 	         into l_inst_hist_tbl(l_ctr) from dual;
12047            END IF;
12048         END LOOP;
12049         --
12050         IF l_inst_tbl.count > 0 THEN
12051            l_lot_ins_flag := 'Y';
12052 	      -- Bulk Update Instances
12053 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
12054 	      UPDATE CSI_ITEM_INSTANCES
12055 	      set active_end_date = sysdate,
12056                instance_status_id = 1,
12057 		     last_update_date = sysdate,
12058 		     last_updated_by = v_user_id
12059 	      where instance_id = l_inst_tbl(j);
12060 	      --
12061 	      -- Tie the Transaction to the history
12062 	      FORALL j in l_inst_tbl.FIRST .. l_inst_tbl.LAST
12063 	      INSERT INTO CSI_ITEM_INSTANCES_H
12064 		  (
12065 		   INSTANCE_HISTORY_ID
12066 		  ,TRANSACTION_ID
12067 		  ,INSTANCE_ID
12068 		  ,CREATION_DATE
12069 		  ,LAST_UPDATE_DATE
12070 		  ,CREATED_BY
12071 		  ,LAST_UPDATED_BY
12072 		  ,LAST_UPDATE_LOGIN
12073 		  ,OBJECT_VERSION_NUMBER
12074 		 )
12075 	      VALUES
12076 		 (
12080 		  ,SYSDATE
12077 		   l_inst_hist_tbl(j)
12078 		  ,v_lot_txn_id
12079 		  ,l_inst_tbl(j)
12081 		  ,SYSDATE
12082 		  ,v_user_id
12083 		  ,v_user_id
12084 		  ,-1
12085 		  ,1
12086 		 );
12087         END IF;
12088         commit;
12089         EXIT WHEN INV_CSI_LOT_CUR%NOTFOUND;
12090      END LOOP;
12091      commit;
12092      CLOSE INV_CSI_LOT_CUR;
12093      --
12094      -- Insert one record into CSI_TRANSACTIONS
12095      IF l_srl_ins_flag = 'Y' THEN
12096 	   INSERT INTO CSI_TRANSACTIONS(
12097 	     TRANSACTION_ID
12098 	    ,TRANSACTION_DATE
12099 	    ,SOURCE_TRANSACTION_DATE
12100 	    ,SOURCE_HEADER_REF
12101 	    ,SOURCE_LINE_REF
12102 	    ,TRANSACTION_TYPE_ID
12103 	    ,CREATED_BY
12104 	    ,CREATION_DATE
12105 	    ,LAST_UPDATED_BY
12106 	    ,LAST_UPDATE_DATE
12107 	    ,LAST_UPDATE_LOGIN
12108 	    ,OBJECT_VERSION_NUMBER
12109 	   )
12110 	   VALUES(
12111 	     v_srl_txn_id                             -- TRANSACTION_ID
12112 	    ,SYSDATE                              -- TRANSACTION_DATE
12113 	    ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
12114 	    ,'Serial or Lot Control got switched off'   -- SOURCE_HEADER_REF
12115 	    ,'DATAFIX By Update_No_ctl_Srl_Lot_Inst' -- SOURCE_LINE_REF
12116 	    ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
12117 	    ,v_user_id
12118 	    ,sysdate
12119 	    ,v_user_id
12120 	    ,sysdate
12121 	    ,-1
12122 	    ,1
12123 	   );
12124      END IF;
12125      --
12126      IF l_lot_ins_flag = 'Y' THEN
12127 	   INSERT INTO CSI_TRANSACTIONS(
12128 	     TRANSACTION_ID
12129 	    ,TRANSACTION_DATE
12130 	    ,SOURCE_TRANSACTION_DATE
12131 	    ,SOURCE_HEADER_REF
12132 	    ,SOURCE_LINE_REF
12133 	    ,TRANSACTION_TYPE_ID
12134 	    ,CREATED_BY
12135 	    ,CREATION_DATE
12136 	    ,LAST_UPDATED_BY
12137 	    ,LAST_UPDATE_DATE
12138 	    ,LAST_UPDATE_LOGIN
12139 	    ,OBJECT_VERSION_NUMBER
12140 	   )
12141 	   VALUES(
12142 	     v_lot_txn_id                             -- TRANSACTION_ID
12143 	    ,SYSDATE                              -- TRANSACTION_DATE
12144 	    ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
12145 	    ,'Serial or Lot Control got switched off'   -- SOURCE_HEADER_REF
12146 	    ,'DATAFIX By Update_No_ctl_Srl_Lot_Inst' -- SOURCE_LINE_REF
12147 	    ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
12148 	    ,v_user_id
12149 	    ,sysdate
12150 	    ,v_user_id
12151 	    ,sysdate
12152 	    ,-1
12153 	    ,1
12154 	   );
12155      END IF;
12156      commit;
12157   EXCEPTION
12158      when comp_error then
12159         null;
12160   END Update_No_ctl_Srl_Lot_Inst;
12161   --
12162   -- This following Procedure identifies the failed shipping Txn and Bumpup or Create the
12163   -- necessary Shipping subinventory.
12164   -- We also consider WIP issues that need to be bumped up.
12165   PROCEDURE Create_or_Update_Shipping_Inst IS
12166      CURSOR CSI_CUR IS
12167      select cii.transaction_error_id,cii.inv_material_transaction_id,
12168             null,null,null,null,null,null
12169      from csi_txn_errors cii
12170      where cii.processed_flag in ('E', 'R')
12171      and   cii.inv_material_transaction_id is not null;
12172      --
12173      CURSOR LOT_CUR(p_txn_id in number) IS
12174      select lot_number,ABS(primary_quantity) transaction_quantity
12175      from mtl_transaction_lot_numbers
12176      where transaction_id = p_txn_id;
12177      --
12178      v_txn_id                           NUMBER;
12179      l_upg_profile                      VARCHAR2(30) := fnd_Profile.value('CSI_UPGRADING_FROM_RELEASE');
12180      v_freeze_date                      DATE;
12181      v_txn_type_id                      NUMBER;
12182      v_nl_trackable                     VARCHAR2(1);
12183      v_mast_org_id                      NUMBER;
12184      v_location_id                      NUMBER;
12185      v_ins_condition_id                 NUMBER;
12186      v_mfg_srl_flag                     VARCHAR2(1);
12187      v_ins_status_id                    NUMBER;
12188      v_instance_id                      NUMBER;
12189      v_ins_history_id                   NUMBER;
12190      v_created_by                       NUMBER := fnd_global.user_id;
12191      v_last_updated_by                  NUMBER := fnd_global.user_id;
12192      v_ins_ou_id                        NUMBER;
12193      v_ins_ou_history_id                NUMBER;
12194      v_ins_party_id                     NUMBER;
12195      v_ins_party_history_id             NUMBER;
12196      v_party_id                         NUMBER;
12197      v_source_reference_id              NUMBER;
12198      v_err_msg                          VARCHAR2(2000);
12199      v_exists                           VARCHAR2(1);
12200      v_ins_qty                          NUMBER;
12201      v_srl_ctl                          NUMBER;
12202      v_lot_ctl                          NUMBER;
12203      v_pri_uom                          VARCHAR2(3);
12204      --
12205      Type NumTabType is VARRAY(10000) of NUMBER;
12206      txn_error_id_mig         NumTabType;
12207      mat_txn_id_mig           NumTabType;
12208      organization_id_mig      NumTabType;
12209      inventory_item_id_mig    NumTabType;
12210      locator_id_mig           NumTabType;
12211      quantity_mig             NumTabType;
12212      --
12213      Type V3Type is VARRAY(10000) of VARCHAR2(3);
12217      subinv_mig               V10Type;
12214      revision_mig             V3Type;
12215      --
12216      Type V10Type is VARRAY(10000) of VARCHAR2(10);
12218      --
12219      MAX_BUFFER_SIZE          NUMBER := 1000;
12220      --
12221      Comp_error               EXCEPTION;
12222      Process_next             EXCEPTION;
12223   BEGIN
12224      IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
12225         csi_gen_utility_pvt.populate_install_param_rec;
12226      END IF;
12227      --
12228      v_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
12229      --
12230      -- Get the Transaction Type ID for Txn Type MIGRATED
12231      Begin
12232 	   select transaction_type_id
12233 	   into v_txn_type_id
12234 	   from CSI_TXN_TYPES
12235 	   where SOURCE_TRANSACTION_TYPE = 'DATA_CORRECTION';
12236      Exception
12237 	   when no_data_found then
12238 	      v_err_msg := 'Txn Type DATA_CORRECTION not defined in CSI_TXN_TYPES';
12239 	      Raise comp_error;
12240 	   when others then
12241 	      v_err_msg := 'Unable to get the ID for Txn Type DATA_CORRECTION from CSI_TXN_TYPES';
12242 	      Raise comp_error;
12243      End;
12244      --
12245      -- Get the LATEST Status ID. This will be used for all INV records.
12246      Begin
12247 	   select instance_status_id
12248 	   into v_ins_status_id
12249 	   from CSI_INSTANCE_STATUSES
12250 	   where name = 'Latest';
12251      Exception
12252 	   when no_data_found then
12253 	      v_err_msg := 'Status ID not found in CSI for Latest Status';
12254 	      Raise comp_error;
12255 	   when too_many_rows then
12256 	      v_err_msg := 'Too many rows fouund in CSI for Latest Status';
12257 	      Raise comp_error;
12258 	   when others then
12259 	      v_err_msg := 'Error in getting the Status ID in CSI for Latest Status';
12260 	      Raise comp_error;
12261      End;
12262      -- Get the Internal Party ID
12263      IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
12264         csi_gen_utility_pvt.populate_install_param_rec;
12265      END IF;
12266      --
12267      v_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
12268      --
12269      if v_party_id is null then
12270 	   v_err_msg := 'Internal Party ID not found in CSI_INSTALL_PARAMETERS';
12271 	   Raise comp_error;
12272      end if;
12273      --
12274      OPEN CSI_CUR;
12275      LOOP
12276         FETCH CSI_CUR BULK COLLECT INTO
12277         txn_error_id_mig,
12278         mat_txn_id_mig,
12279         inventory_item_id_mig,
12280         revision_mig,
12281         organization_id_mig,
12282         subinv_mig,
12283         locator_id_mig,
12284         quantity_mig
12285         LIMIT MAX_BUFFER_SIZE;
12286         FOR i in 1..txn_error_id_mig.count LOOP
12287 	   Begin
12288               Begin
12289                  select inventory_item_id,organization_id,revision,
12290 	         subinventory_code,locator_id,abs(primary_quantity) transaction_quantity
12291                  into inventory_item_id_mig(i),organization_id_mig(i),revision_mig(i),
12292                  subinv_mig(i),locator_id_mig(i),quantity_mig(i)
12293                  from MTL_MATERIAL_TRANSACTIONS
12294                  where transaction_id = mat_txn_id_mig(i)
12295                  and   ( (transaction_type_id = 33) OR
12296                          (transaction_source_type_id = 5 AND transaction_quantity < 0) );
12297               Exception
12298                  when others then
12299                     Raise Process_next;
12300               End;
12301 	      Begin
12302 	         select primary_uom_code,serial_number_control_code,lot_control_code
12303 	         into v_pri_uom,v_srl_ctl,v_lot_ctl
12304 	         from MTL_SYSTEM_ITEMS
12305 	         where inventory_item_id = inventory_item_id_mig(i)
12306 	         and   organization_id = organization_id_mig(i);
12307 	      Exception
12308 	         when no_data_found then
12309 	            Raise Process_next;
12310 	      End;
12311 	      --
12312 	      IF v_srl_ctl <> 1 THEN
12313 	         Raise Process_next;
12314 	      END IF;
12315 	      --
12316 	      -- Get the Master Organization ID
12317 	      Begin
12318 	         select master_organization_id
12319 	         into v_mast_org_id
12320 	         from MTL_PARAMETERS
12321 	         where organization_id = organization_id_mig(i);
12322 	      Exception
12323 	         when no_data_found then
12324 	            Raise Process_next;
12325 	      End;
12326 	      --
12327 	      v_nl_trackable := 'N';
12328 	      Begin
12329 	         select comms_nl_trackable_flag
12330 	         into v_nl_trackable
12331 	         from MTL_SYSTEM_ITEMS
12332 	         where inventory_item_id = inventory_item_id_mig(i)
12333 	         and   organization_id = v_mast_org_id;
12334 	         Exception
12335 	            when no_data_found then
12336 		       Raise Process_next;
12337 	         End;
12338 	         --
12339 	         IF NVL(v_nl_trackable,'N') <> 'Y' THEN
12340 	            Update CSI_TXN_ERRORS
12341 	            set processed_flag = 'D'
12342 		          ,error_text = 'COMMS_NL_TRACKABLE_FLAG got switched off'
12343                     ,last_update_date = sysdate
12344 	            where transaction_error_id = txn_error_id_mig(i);
12345 	            --
12346 	            Raise Process_next;
12350 	            v_exists := 'N';
12347 	         END IF;
12348 	         --
12349 	         IF v_lot_ctl = 1 THEN
12351 	            Begin
12352 		       select quantity,instance_id
12353 		       into v_ins_qty,v_instance_id
12354 		       from CSI_ITEM_INSTANCES
12355 		       where inventory_item_id = inventory_item_id_mig(i)
12356 		       and   inv_organization_id = organization_id_mig(i)
12357                        and   serial_number is null
12358                        and   lot_number is null
12359 		       and   location_type_code = 'INVENTORY'
12360 		       and   instance_usage_code = 'IN_INVENTORY'
12361 		       and   inv_subinventory_name = subinv_mig(i)
12362 		       and   nvl(inv_locator_id,-999) = nvl(locator_id_mig(i),-999)
12363 		       and   nvl(inventory_revision,'$#$') = nvl(revision_mig(i),'$#$');
12364 		       v_exists := 'Y';
12365 	            Exception
12366 		       when no_data_found then
12367 		          v_exists := 'N';
12368 		       when too_many_rows then
12369 		          Raise Process_next;
12370 	            End;
12371 	            --
12372 	      Begin
12373 		 select CSI_TRANSACTIONS_S.nextval
12374 		 into v_txn_id
12375 		 from DUAL;
12376 	      End;
12377 	      --
12378 	      Begin
12379 		 INSERT INTO CSI_TRANSACTIONS(
12380 		      TRANSACTION_ID
12381 		     ,TRANSACTION_DATE
12382 		     ,SOURCE_TRANSACTION_DATE
12383 		     ,SOURCE_HEADER_REF
12384 		     ,TRANSACTION_TYPE_ID
12385 		     ,CREATED_BY
12386 		     ,CREATION_DATE
12387 		     ,LAST_UPDATED_BY
12388 		     ,LAST_UPDATE_DATE
12389 		     ,LAST_UPDATE_LOGIN
12390 		     ,OBJECT_VERSION_NUMBER
12391 		    )
12392 		    VALUES(
12393 		      v_txn_id                             -- TRANSACTION_ID
12394 		     ,SYSDATE                              -- TRANSACTION_DATE
12395 		     ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
12396 		     ,'DATAFIX by STAGING Bump'            -- SOURCE_HEADER_REF
12397 		     ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
12398 		     ,v_created_by
12399 		     ,sysdate
12400 		     ,v_last_updated_by
12401 		     ,sysdate
12402 		     ,-1
12403 		     ,1
12404 		    );
12405 	       Exception
12406 		  when others then
12407 		     v_err_msg := 'Error while Inserting into CSI_TRANSACTIONS '||substr(sqlerrm,1,1000);
12408 		     raise_application_error(-20000, v_err_msg );
12409 		     Raise;
12410 	       End;
12411 	      --
12412 	      IF v_exists = 'Y' THEN
12413 		 UPDATE CSI_ITEM_INSTANCES
12414 		 set quantity = quantity + quantity_mig(i),
12415 		     active_end_date = null,
12416 		     instance_status_id = v_ins_status_id,
12417 		     last_update_date = sysdate,
12418 		     last_updated_by = v_last_updated_by,
12419                      last_vld_organization_id = organization_id_mig(i)
12420 		 where instance_id = v_instance_id;
12421 		 --
12422 		 -- Tie the Transaction to the history
12423 		 INSERT INTO CSI_ITEM_INSTANCES_H
12424 		     (
12425 		      INSTANCE_HISTORY_ID
12426 		     ,TRANSACTION_ID
12427 		     ,INSTANCE_ID
12428 		     ,CREATION_DATE
12429 		     ,LAST_UPDATE_DATE
12430 		     ,CREATED_BY
12431 		     ,LAST_UPDATED_BY
12432 		     ,LAST_UPDATE_LOGIN
12433 		     ,OBJECT_VERSION_NUMBER
12434 		    )
12435 		 VALUES
12436 		    (
12437 		      CSI_ITEM_INSTANCES_H_S.nextval
12438 		     ,v_txn_id
12439 		     ,v_instance_id
12440 		     ,SYSDATE
12441 		     ,SYSDATE
12442 		     ,v_created_by
12443 		     ,v_last_updated_by
12444 		     ,-1
12445 		     ,1
12446 		    );
12447 		 --
12448 		 Update CSI_TXN_ERRORS
12449 		 set processed_flag = 'R',
12450                      last_update_date = sysdate
12451 		 where transaction_error_id = txn_error_id_mig(i);
12452 		 --
12453 		 Raise Process_next;
12454 	      END IF;
12455 	      -- If instance is not found then Create the Instance
12456 	      -- Get the Location ID from MTL_SECONDARY_INVENTORIES
12457 	      v_location_id := NULL;
12458 	      Begin
12459 		 select location_id
12460 		 into v_location_id
12461 		 from MTL_SECONDARY_INVENTORIES
12462 		 where organization_id = organization_id_mig(i)
12463 		 and   secondary_inventory_name = subinv_mig(i);
12464 	      Exception
12465 		 when no_data_found then
12466 		    Raise Process_next;
12467 	      End;
12468 	      -- Get the Location ID from HR_ORGANIZATION_UNITS
12469 	      IF v_location_id IS NULL THEN
12470 		 Begin
12471 		    select location_id
12472 		    into v_location_id
12473 		    from HR_ORGANIZATION_UNITS
12474 		    where organization_id = organization_id_mig(i);
12475 		 Exception
12476 		    when no_data_found then
12477 		       Raise Process_next;
12478 		 End;
12479 	      END IF;
12480 	      --
12481 	      Begin
12482 		 select csi_item_instances_s.nextval
12483 		 into v_instance_id
12484 		 from DUAL;
12485 	      End;
12486 	      --
12487 	      -- Insert into CSI_ITEM_INSTANCES
12488 	      Begin
12489 		 INSERT INTO CSI_ITEM_INSTANCES(
12490 		      INSTANCE_ID
12491 		     ,INSTANCE_NUMBER
12492 		     ,EXTERNAL_REFERENCE
12493 		     ,INVENTORY_ITEM_ID
12494 		     ,INVENTORY_REVISION
12495 		     ,INV_MASTER_ORGANIZATION_ID
12496 		     ,QUANTITY
12497 		     ,UNIT_OF_MEASURE
12501 		     ,MERCHANT_VIEW_FLAG
12498 		     ,ACCOUNTING_CLASS_CODE
12499 		     ,INSTANCE_STATUS_ID
12500 		     ,CUSTOMER_VIEW_FLAG
12502 		     ,SELLABLE_FLAG
12503 		     ,SYSTEM_ID
12504 		     ,INSTANCE_TYPE_CODE
12505 		     ,ACTIVE_START_DATE
12506 		     ,ACTIVE_END_DATE
12507 		     ,LOCATION_TYPE_CODE
12508 		     ,LOCATION_ID
12509 		     ,INV_ORGANIZATION_ID
12510 		     ,INV_SUBINVENTORY_NAME
12511 		     ,INV_LOCATOR_ID
12512 		     ,INSTALL_DATE
12513 		     ,MANUALLY_CREATED_FLAG
12514 		     ,CREATION_COMPLETE_FLAG
12515 		     ,COMPLETENESS_FLAG
12516 		     ,CREATED_BY
12517 		     ,CREATION_DATE
12518 		     ,LAST_UPDATED_BY
12519 		     ,LAST_UPDATE_DATE
12520 		     ,LAST_UPDATE_LOGIN
12521 		     ,OBJECT_VERSION_NUMBER
12522 		     ,SECURITY_GROUP_ID
12523 		     ,INSTANCE_USAGE_CODE
12524 		     ,OWNER_PARTY_SOURCE_TABLE
12525 		     ,OWNER_PARTY_ID
12526 		     ,LAST_VLD_ORGANIZATION_ID
12527 		    )
12528 		    VALUES(
12529 		      v_instance_id                        -- INSTANCE_ID
12530 		     ,v_instance_id                        -- INSTANCE_NUMBER
12531 		     ,NULL                                 -- EXTERNAL_REFERENCE
12532 		     ,inventory_item_id_mig(i)              -- INVENTORY_ITEM_ID
12533 		     ,revision_mig(i)                       -- INVENTORY_REVISION
12534 		     ,v_mast_org_id                        -- INV_MASTER_ORGANIZATION_ID
12535 		     ,quantity_mig(i)           -- QUANTITY
12536 		     ,v_pri_uom                            -- UNIT_OF_MEASURE (PRIMARY)
12537 		     ,'INV'                                -- ACCOUNTING_CLASS_CODE
12538 		     ,v_ins_status_id                      -- INSTANCE_STATUS_ID
12539 		     ,'N'                                  -- CUSTOMER_VIEW_FLAG
12540 		     ,'Y'                                  -- MERCHANT_VIEW_FLAG
12541 		     ,'Y'                                  -- SELLABLE_FLAG
12542 		     ,NULL                                 -- SYSTEM_ID
12543 		     ,NULL                                 -- INSTANCE_TYPE_CODE
12544 		     ,SYSDATE                              -- ACTIVE_START_DATE
12545 		     ,NULL                                 -- ACTIVE_END_DATE
12546 		     ,'INVENTORY'                          -- LOCATION_TYPE_CODE
12547 		     ,v_location_id                        -- LOCATION_ID
12548 		     ,organization_id_mig(i)                -- INV_ORGANIZATION_ID
12549 		     ,subinv_mig(i)              -- INV_SUBINVENTORY_NAME
12550 		     ,locator_id_mig(i)                     -- INV_LOCATOR_ID
12551 		     ,NULL                                 -- INSTALL_DATE
12552 		     ,'N'                                  -- MANUALLY_CREATED_FLAG
12553 		     ,'Y'                                  -- CREATION_COMPLETE_FLAG
12554 		     ,'Y'                                  -- COMPLETENESS_FLAG
12555 		     ,v_created_by                         -- CREATED_BY
12556 		     ,sysdate                              -- CREATION_DATE
12557 		     ,v_last_updated_by                    -- LAST_UPDATED_BY
12558 		     ,sysdate                              -- LAST_UPDATE_DATE
12559 		     ,-1                                   -- LAST_UPDATE_LOGIN
12560 		     ,1                                    -- OBJECT_VERSION_NUMBER
12561 		     ,NULL                                 -- SECURITY_GROUP_ID
12562 		     ,'IN_INVENTORY'                       -- INSTANCE_USAGE_CODE
12563 		     ,'HZ_PARTIES'                         -- OWNER_PARTY_SOURCE_TABLE
12564 		     ,v_party_id                           -- OWNER_PARTY_ID
12565 		     ,organization_id_mig(i)                -- LAST_VLD_ORGANIZATION_ID
12566 		    );
12567 	      Exception
12568 		 when others then
12569 		    v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
12570 					  ||' into CSI_ITEM_INSTANCES '||SUBSTR(sqlerrm,1,1000);
12571 		    raise_application_error(-20000, v_err_msg );
12572 		    Raise;
12573 	      End;
12574 	      -- Use the same instance record to create the history
12575 	      Begin
12576 		    select CSI_ITEM_INSTANCES_H_S.nextval
12577 		    into v_ins_history_id
12578 		    from DUAL;
12579 	      End;
12580 	      --
12581 	      Begin
12582 		    INSERT INTO CSI_ITEM_INSTANCES_H(
12583 		      INSTANCE_HISTORY_ID
12584 		     ,INSTANCE_ID
12585 		     ,TRANSACTION_ID
12586 		     ,OLD_INSTANCE_NUMBER
12587 		     ,NEW_INSTANCE_NUMBER
12588 		     ,OLD_EXTERNAL_REFERENCE
12589 		     ,NEW_EXTERNAL_REFERENCE
12590 		     ,OLD_INVENTORY_ITEM_ID
12591 		     ,NEW_INVENTORY_ITEM_ID
12592 		     ,OLD_INVENTORY_REVISION
12593 		     ,NEW_INVENTORY_REVISION
12594 		     ,OLD_INV_MASTER_ORGANIZATION_ID
12595 		     ,NEW_INV_MASTER_ORGANIZATION_ID
12596 		     ,OLD_QUANTITY
12597 		     ,NEW_QUANTITY
12598 		     ,OLD_UNIT_OF_MEASURE
12599 		     ,NEW_UNIT_OF_MEASURE
12600 		     ,OLD_ACCOUNTING_CLASS_CODE
12601 		     ,NEW_ACCOUNTING_CLASS_CODE
12602 		     ,OLD_INSTANCE_STATUS_ID
12603 		     ,NEW_INSTANCE_STATUS_ID
12604 		     ,OLD_CUSTOMER_VIEW_FLAG
12605 		     ,NEW_CUSTOMER_VIEW_FLAG
12606 		     ,OLD_MERCHANT_VIEW_FLAG
12607 		     ,NEW_MERCHANT_VIEW_FLAG
12608 		     ,OLD_SELLABLE_FLAG
12609 		     ,NEW_SELLABLE_FLAG
12610 		     ,OLD_SYSTEM_ID
12611 		     ,NEW_SYSTEM_ID
12612 		     ,OLD_INSTANCE_TYPE_CODE
12613 		     ,NEW_INSTANCE_TYPE_CODE
12614 		     ,OLD_ACTIVE_START_DATE
12615 		     ,NEW_ACTIVE_START_DATE
12616 		     ,OLD_ACTIVE_END_DATE
12617 		     ,NEW_ACTIVE_END_DATE
12618 		     ,OLD_LOCATION_TYPE_CODE
12622 		     ,OLD_INV_ORGANIZATION_ID
12619 		     ,NEW_LOCATION_TYPE_CODE
12620 		     ,OLD_LOCATION_ID
12621 		     ,NEW_LOCATION_ID
12623 		     ,NEW_INV_ORGANIZATION_ID
12624 		     ,OLD_INV_SUBINVENTORY_NAME
12625 		     ,NEW_INV_SUBINVENTORY_NAME
12626 		     ,OLD_INV_LOCATOR_ID
12627 		     ,NEW_INV_LOCATOR_ID
12628 		     ,OLD_COMPLETENESS_FLAG
12629 		     ,NEW_COMPLETENESS_FLAG
12630 		     ,CREATED_BY
12631 		     ,CREATION_DATE
12632 		     ,LAST_UPDATED_BY
12633 		     ,LAST_UPDATE_DATE
12634 		     ,LAST_UPDATE_LOGIN
12635 		     ,OBJECT_VERSION_NUMBER
12636 		     ,SECURITY_GROUP_ID
12637 		     ,FULL_DUMP_FLAG
12638 		     ,OLD_INST_USAGE_CODE
12639 		     ,NEW_INST_USAGE_CODE
12640 		     ,OLD_LAST_VLD_ORGANIZATION_ID
12641 		     ,NEW_LAST_VLD_ORGANIZATION_ID
12642 		    )
12643 		    VALUES(
12644 		      v_ins_history_id                                    -- INSTANCE_HISTORY_ID
12645 		     ,v_instance_id                                       -- INSTANCE_ID
12646 		     ,v_txn_id                                            -- TRANSACTION_ID
12647 		     ,NULL                                                -- OLD_INSTANCE_NUMBER
12648 		     ,v_instance_id                                       -- NEW_INSTANCE_NUMBER
12649 		     ,NULL                                                -- OLD_EXTERNAL_REFERENCE
12650 		     ,NULL                                                -- NEW_EXTERNAL_REFERENCE
12651 		     ,NULL                                                -- OLD_INVENTORY_ITEM_ID
12652 		     ,inventory_item_id_mig(i)                             -- NEW_INVENTORY_ITEM_ID
12653 		     ,NULL                                                -- OLD_INVENTORY_REVISION
12654 		     ,revision_mig(i)                                      -- NEW_INVENTORY_REVISION
12655 		     ,NULL                                                -- OLD_INV_MASTER_ORGANIZATION_ID
12656 		     ,v_mast_org_id                                       -- NEW_INV_MASTER_ORGANIZATION_ID
12657 		     ,NULL                                                -- OLD_QUANTITY
12658 		     ,quantity_mig(i)                          -- NEW_QUANTITY
12659 		     ,NULL                                                -- OLD_UNIT_OF_MEASURE
12660 		     ,v_pri_uom                                           -- NEW_UNIT_OF_MEASURE
12661 		     ,NULL                                                -- OLD_ACCOUNTING_CLASS_CODE
12662 		     ,'INV'                                               -- NEW_ACCOUNTING_CLASS_CODE
12663 		     ,NULL                                                -- OLD_INSTANCE_STATUS_ID
12664 		     ,v_ins_status_id                                     -- NEW_INSTANCE_STATUS_ID
12665 		     ,NULL                                                -- OLD_CUSTOMER_VIEW_FLAG
12666 		     ,'N'                                                 -- NEW_CUSTOMER_VIEW_FLAG
12667 		     ,NULL                                                -- OLD_MERCHANT_VIEW_FLAG
12668 		     ,'Y'                                                 -- NEW_MERCHANT_VIEW_FLAG
12669 		     ,NULL                                                -- OLD_SELLABLE_FLAG
12670 		     ,NULL                                                -- NEW_SELLABLE_FLAG
12671 		     ,NULL                                                -- OLD_SYSTEM_ID
12672 		     ,NULL                                                -- NEW_SYSTEM_ID
12673 		     ,NULL                                                -- OLD_INSTANCE_TYPE_CODE
12674 		     ,NULL                                                -- NEW_INSTANCE_TYPE_CODE
12675 		     ,NULL                                                -- OLD_ACTIVE_START_DATE
12676 		     ,SYSDATE                                             -- NEW_ACTIVE_START_DATE
12677 		     ,NULL                                                -- OLD_ACTIVE_END_DATE
12678 		     ,NULL                                                -- NEW_ACTIVE_END_DATE
12679 		     ,NULL                                                -- OLD_LOCATION_TYPE_CODE
12680 		     ,'INVENTORY'                                         -- NEW_LOCATION_TYPE_CODE
12681 		     ,NULL                                                -- OLD_LOCATION_ID
12682 		     ,v_location_id                                       -- NEW_LOCATION_ID
12683 		     ,NULL                                                -- OLD_INV_ORGANIZATION_ID
12684 		     ,organization_id_mig(i)                               -- NEW_INV_ORGANIZATION_ID
12685 		     ,NULL                                                -- OLD_INV_SUBINVENTORY_NAME
12686 		     ,subinv_mig(i)                             -- NEW_INV_SUBINVENTORY_NAME
12687 		     ,NULL                                                -- OLD_INV_LOCATOR_ID
12688 		     ,locator_id_mig(i)                                    -- NEW_INV_LOCATOR_ID
12689 		     ,NULL                                                -- OLD_COMPLETENESS_FLAG
12690 		     ,'Y'                                                 -- NEW_COMPLETENESS_FLAG
12691 		     ,v_created_by                                        -- CREATED_BY
12692 		     ,sysdate                                             -- CREATION_DATE
12693 		     ,v_last_updated_by                                   -- LAST_UPDATED_BY
12694 		     ,sysdate                                             -- LAST_UPDATE_DATE
12695 		     ,-1                                                  -- LAST_UPDATE_LOGIN
12696 		     ,1                                                   -- OBJECT_VERSION_NUMBER
12697 		     ,NULL                                                -- SECURITY_GROUP_ID
12698 		     ,'N'                                                 -- FULL_DUMP_FLAG
12699 		     ,NULL                                                -- OLD_INST_USAGE_CODE
12703 		    );
12700 		     ,'IN_INVENTORY'                                      -- NEW_INST_USAGE_CODE
12701 		     ,NULL                                                -- OLD_LAST_VLD_ORGANIZATION_ID
12702 		     ,organization_id_mig(i)                               -- NEW_LAST_VLD_ORGANIZATION_ID
12704 	      Exception
12705 		    when others then
12706 			  v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
12707 				   ||' into CSI_ITEM_INSTANCES_H Using the Same Instance '||SUBSTR(sqlerrm,1,1000);
12708 			     raise_application_error(-20000, v_err_msg );
12709 			  Raise;
12710 	      End;
12711 	      --
12712 	      Begin
12713 		 select CSI_I_PARTIES_S.nextval
12714 		 into v_ins_party_id
12715 		 from DUAL;
12716 	      End;
12717 	      Begin
12718 		    INSERT INTO CSI_I_PARTIES(
12719 		      INSTANCE_PARTY_ID
12720 		     ,INSTANCE_ID
12721 		     ,PARTY_SOURCE_TABLE
12722 		     ,PARTY_ID
12723 		     ,RELATIONSHIP_TYPE_CODE
12724 		     ,CONTACT_FLAG
12725 		     ,CONTACT_IP_ID
12726 		     ,ACTIVE_START_DATE
12727 		     ,ACTIVE_END_DATE
12728 		     ,CREATED_BY
12729 		     ,CREATION_DATE
12730 		     ,LAST_UPDATED_BY
12731 		     ,LAST_UPDATE_DATE
12732 		     ,LAST_UPDATE_LOGIN
12733 		     ,OBJECT_VERSION_NUMBER
12734 		     ,SECURITY_GROUP_ID
12735 		    )
12736 		    VALUES(
12737 		      v_ins_party_id                   -- INSTANCE_PARTY_ID
12738 		     ,v_instance_id                    -- INSTANCE_ID
12739 		     ,'HZ_PARTIES'                     -- PARTY_SOURCE_TABLE
12740 		     ,v_party_id                       -- PARTY_ID
12741 		     ,'OWNER'                          -- RELATIONSHIP_TYPE_CODE
12742 		     ,'N'                              -- CONTACT_FLAG
12743 		     ,NULL                             -- CONTACT_IP_ID
12744 		     ,SYSDATE                          -- ACTIVE_START_DATE
12745 		     ,NULL                             -- ACTIVE_END_DATE
12746 		     ,v_created_by                     -- CREATED_BY
12747 		     ,sysdate                          -- CREATION_DATE
12748 		     ,v_last_updated_by                -- LAST_UPDATED_BY
12749 		     ,sysdate                          -- LAST_UPDATE_DATE
12750 		     ,-1                               -- LAST_UPDATE_LOGIN
12751 		     ,1                                -- OBJECT_VERSION_NUMBER
12752 		     ,NULL                             -- SECURITY_GROUP_ID
12753 		    );
12754 		    Exception
12755 			  when others then
12756 			  v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
12757 						  ||' into CSI_I_PARTIES '||SUBSTR(sqlerrm,1,1000);
12758 			     raise_application_error(-20000, v_err_msg );
12759 			  Raise;
12760 		    End;
12761 		    -- Insert into CSI_I_PARTIES_H
12762 	      Begin
12763 		 select CSI_I_PARTIES_H_S.nextval
12764 		 into v_ins_party_history_id
12765 		 from DUAL;
12766 	      End;
12767 	      -- Insert into CSI_I_PARTIES_H
12768 	      Begin
12769 		    INSERT INTO CSI_I_PARTIES_H(
12770 		      INSTANCE_PARTY_HISTORY_ID
12771 		     ,INSTANCE_PARTY_ID
12772 		     ,TRANSACTION_ID
12773 		     ,OLD_PARTY_SOURCE_TABLE
12774 		     ,NEW_PARTY_SOURCE_TABLE
12775 		     ,OLD_PARTY_ID
12776 		     ,NEW_PARTY_ID
12777 		     ,OLD_RELATIONSHIP_TYPE_CODE
12778 		     ,NEW_RELATIONSHIP_TYPE_CODE
12779 		     ,OLD_CONTACT_FLAG
12780 		     ,NEW_CONTACT_FLAG
12781 		     ,OLD_CONTACT_IP_ID
12782 		     ,NEW_CONTACT_IP_ID
12783 		     ,OLD_ACTIVE_START_DATE
12784 		     ,NEW_ACTIVE_START_DATE
12785 		     ,OLD_ACTIVE_END_DATE
12786 		     ,NEW_ACTIVE_END_DATE
12787 		     ,FULL_DUMP_FLAG
12788 		     ,CREATED_BY
12789 		     ,CREATION_DATE
12790 		     ,LAST_UPDATED_BY
12791 		     ,LAST_UPDATE_DATE
12792 		     ,LAST_UPDATE_LOGIN
12793 		     ,OBJECT_VERSION_NUMBER
12794 		     ,SECURITY_GROUP_ID
12795 		    )
12796 		    VALUES(
12797 		      v_ins_party_history_id               -- INSTANCE_PARTY_HISTORY_ID
12798 		     ,v_ins_party_id                       -- INSTANCE_PARTY_ID
12799 		     ,v_txn_id                             -- TRANSACTION_ID
12800 		     ,NULL                                 -- OLD_PARTY_SOURCE_TABLE
12801 		     ,'HZ_PARTIES'                         -- NEW_PARTY_SOURCE_TABLE
12802 		     ,NULL                                 -- OLD_PARTY_ID
12803 		     ,v_party_id                           -- NEW_PARTY_ID
12804 		     ,NULL                                 -- OLD_RELATIONSHIP_TYPE_CODE
12805 		     ,'OWNER'                              -- NEW_RELATIONSHIP_TYPE_CODE
12806 		     ,NULL                                 -- OLD_CONTACT_FLAG
12807 		     ,'N'                                  -- NEW_CONTACT_FLAG
12808 		     ,NULL                                 -- OLD_CONTACT_IP_ID
12809 		     ,NULL                                 -- NEW_CONTACT_IP_ID
12810 		     ,NULL                                 -- OLD_ACTIVE_START_DATE
12811 		     ,SYSDATE                              -- NEW_ACTIVE_START_DATE
12812 		     ,NULL                                 -- OLD_ACTIVE_END_DATE
12813 		     ,NULL                                 -- NEW_ACTIVE_END_DATE
12814 		     ,'N'                                  -- FULL_DUMP_FLAG
12815 		     ,v_created_by
12816 		     ,sysdate
12817 		     ,v_last_updated_by
12818 		     ,sysdate
12819 		     ,-1
12820 		     ,1
12821 		     ,NULL
12822 		    );
12823 	      Exception
12824 		    when others then
12828 			  Raise;
12825 			  v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
12826 				   ||' into CSI_I_PARTIES_H using the same Instance '||SUBSTR(sqlerrm,1,1000);
12827 			     raise_application_error(-20000, v_err_msg );
12829 	      End;
12830 	   ELSE -- Lot controlled item
12831 	      FOR lot_rec in LOT_CUR(mat_txn_id_mig(i)) LOOP
12832 	      v_exists := 'N';
12833 		 Begin
12834 		    select quantity,instance_id
12835 		    into v_ins_qty,v_instance_id
12836 		    from CSI_ITEM_INSTANCES
12837 		    where inventory_item_id = inventory_item_id_mig(i)
12838 		    and   inv_organization_id = organization_id_mig(i)
12839                     and   serial_number is null
12840 		    and   location_type_code = 'INVENTORY'
12841 		    and   instance_usage_code = 'IN_INVENTORY'
12842 		    and   inv_subinventory_name = subinv_mig(i)
12843 		    and   nvl(inv_locator_id,-999) = nvl(locator_id_mig(i),-999)
12844 		    and   nvl(inventory_revision,'$#$') = nvl(revision_mig(i),'$#$')
12845 		    and   lot_number = lot_rec.lot_number;
12846 		    v_exists := 'Y';
12847 		 Exception
12848 		    when no_data_found then
12849 		       v_exists := 'N';
12850 		    when too_many_rows then
12851 		       Raise Process_next;
12852 		 End;
12853 		 --
12854 		 Begin
12855 		    select CSI_TRANSACTIONS_S.nextval
12856 		    into v_txn_id
12857 		    from DUAL;
12858 		 End;
12859 		 --
12860 		 Begin
12861 		    INSERT INTO CSI_TRANSACTIONS(
12862 			 TRANSACTION_ID
12863 			,TRANSACTION_DATE
12864 			,SOURCE_TRANSACTION_DATE
12865 			,SOURCE_HEADER_REF
12866 			,TRANSACTION_TYPE_ID
12867 			,CREATED_BY
12868 			,CREATION_DATE
12869 			,LAST_UPDATED_BY
12870 			,LAST_UPDATE_DATE
12871 			,LAST_UPDATE_LOGIN
12872 			,OBJECT_VERSION_NUMBER
12873 		       )
12874 		       VALUES(
12875 			 v_txn_id                             -- TRANSACTION_ID
12876 			,SYSDATE                              -- TRANSACTION_DATE
12877 			,SYSDATE                              -- SOURCE_TRANSACTION_DATE
12878 			,'DATAFIX By STAGING Bump'            -- SOURCE_HEADER_REF
12879 			,v_txn_type_id                        -- TRANSACTION_TYPE_ID
12880 			,v_created_by
12881 			,sysdate
12882 			,v_last_updated_by
12883 			,sysdate
12884 			,-1
12885 			,1
12886 		       );
12887 		  Exception
12888 		     when others then
12889 			v_err_msg := 'Error while Inserting into CSI_TRANSACTIONS '||substr(sqlerrm,1,1000);
12890 			raise_application_error(-20000, v_err_msg );
12891 			Raise;
12892 		  End;
12893 		 --
12894 		 IF v_exists = 'Y' THEN
12895 		    UPDATE CSI_ITEM_INSTANCES
12896 		    set quantity = quantity + lot_rec.transaction_quantity,
12897 			active_end_date = null,
12898 			instance_status_id = v_ins_status_id,
12899 			last_update_date = sysdate,
12900 			last_updated_by = v_last_updated_by,
12901                         last_vld_organization_id = organization_id_mig(i)
12902 		    where instance_id = v_instance_id;
12903 		    --
12904 		    -- Tie the Transaction to the history
12905 		    INSERT INTO CSI_ITEM_INSTANCES_H
12906 			(
12907 			 INSTANCE_HISTORY_ID
12908 			,TRANSACTION_ID
12909 			,INSTANCE_ID
12910 			,CREATION_DATE
12911 			,LAST_UPDATE_DATE
12912 			,CREATED_BY
12913 			,LAST_UPDATED_BY
12914 			,LAST_UPDATE_LOGIN
12915 			,OBJECT_VERSION_NUMBER
12916 		       )
12917 		    VALUES
12918 		       (
12919 			 CSI_ITEM_INSTANCES_H_S.nextval
12920 			,v_txn_id
12921 			,v_instance_id
12922 			,SYSDATE
12923 			,SYSDATE
12924 			,v_created_by
12925 			,v_last_updated_by
12926 			,-1
12927 			,1
12928 		       );
12929 		    --
12930 		    Update CSI_TXN_ERRORS
12931 		    set processed_flag = 'R',
12932                         last_update_date = sysdate
12933 		    where transaction_error_id = txn_error_id_mig(i);
12934 		    --
12935 		    Raise Process_next;
12936 		 END IF;
12937 		 -- If instance not found then Create the Instance
12938 		 -- Get the Location ID from MTL_SECONDARY_INVENTORIES
12939 		 v_location_id := NULL;
12940 		 Begin
12941 		    select location_id
12942 		    into v_location_id
12943 		    from MTL_SECONDARY_INVENTORIES
12944 		    where organization_id = organization_id_mig(i)
12945 		    and   secondary_inventory_name = subinv_mig(i);
12946 		 Exception
12947 		    when no_data_found then
12948 		       Raise Process_next;
12949 		 End;
12950 		 -- Get the Location ID from HR_ORGANIZATION_UNITS
12951 		 IF v_location_id IS NULL THEN
12952 		    Begin
12953 		       select location_id
12954 		       into v_location_id
12955 		       from HR_ORGANIZATION_UNITS
12956 		       where organization_id = organization_id_mig(i);
12957 		    Exception
12958 		       when no_data_found then
12959 			  Raise Process_next;
12960 		    End;
12961 		 END IF;
12962 		 --
12963 		 Begin
12964 		    select csi_item_instances_s.nextval
12965 		    into v_instance_id
12966 		    from DUAL;
12967 		 End;
12968 		 --
12969 		 -- Insert into CSI_ITEM_INSTANCES
12970 		 Begin
12971 		    INSERT INTO CSI_ITEM_INSTANCES(
12972 			 INSTANCE_ID
12973 			,INSTANCE_NUMBER
12974 			,EXTERNAL_REFERENCE
12975 			,INVENTORY_ITEM_ID
12976 			,INVENTORY_REVISION
12977 			,INV_MASTER_ORGANIZATION_ID
12981 			,UNIT_OF_MEASURE
12978 			,MFG_SERIAL_NUMBER_FLAG
12979 			,LOT_NUMBER
12980 			,QUANTITY
12982 			,ACCOUNTING_CLASS_CODE
12983 			,INSTANCE_STATUS_ID
12984 			,CUSTOMER_VIEW_FLAG
12985 			,MERCHANT_VIEW_FLAG
12986 			,SELLABLE_FLAG
12987 			,SYSTEM_ID
12988 			,INSTANCE_TYPE_CODE
12989 			,ACTIVE_START_DATE
12990 			,ACTIVE_END_DATE
12991 			,LOCATION_TYPE_CODE
12992 			,LOCATION_ID
12993 			,INV_ORGANIZATION_ID
12994 			,INV_SUBINVENTORY_NAME
12995 			,INV_LOCATOR_ID
12996 			,INSTALL_DATE
12997 			,MANUALLY_CREATED_FLAG
12998 			,CREATION_COMPLETE_FLAG
12999 			,COMPLETENESS_FLAG
13000 			,CREATED_BY
13001 			,CREATION_DATE
13002 			,LAST_UPDATED_BY
13003 			,LAST_UPDATE_DATE
13004 			,LAST_UPDATE_LOGIN
13005 			,OBJECT_VERSION_NUMBER
13006 			,SECURITY_GROUP_ID
13007 			,INSTANCE_USAGE_CODE
13008 			,OWNER_PARTY_SOURCE_TABLE
13009 			,OWNER_PARTY_ID
13010 			,LAST_VLD_ORGANIZATION_ID
13011 		       )
13012 		       VALUES(
13013 			 v_instance_id                        -- INSTANCE_ID
13014 			,v_instance_id                        -- INSTANCE_NUMBER
13015 			,NULL                                 -- EXTERNAL_REFERENCE
13016 			,inventory_item_id_mig(i)              -- INVENTORY_ITEM_ID
13017 			,revision_mig(i)                       -- INVENTORY_REVISION
13018 			,v_mast_org_id                        -- INV_MASTER_ORGANIZATION_ID
13019 			,'Y'                                  -- MFG_SERIAL_NUMBER_FLAG
13020 			,lot_rec.lot_number                   -- LOT_NUMBER
13021 			,lot_rec.transaction_quantity         -- QUANTITY
13022 			,v_pri_uom                            -- UNIT_OF_MEASURE (PRIMARY)
13023 			,'INV'                                -- ACCOUNTING_CLASS_CODE
13024 			,v_ins_status_id                      -- INSTANCE_STATUS_ID
13025 			,'N'                                  -- CUSTOMER_VIEW_FLAG
13026 			,'Y'                                  -- MERCHANT_VIEW_FLAG
13027 			,'Y'                                  -- SELLABLE_FLAG
13028 			,NULL                                 -- SYSTEM_ID
13029 			,NULL                                 -- INSTANCE_TYPE_CODE
13030 			,SYSDATE                              -- ACTIVE_START_DATE
13031 			,NULL                                 -- ACTIVE_END_DATE
13032 			,'INVENTORY'                          -- LOCATION_TYPE_CODE
13033 			,v_location_id                        -- LOCATION_ID
13034 			,organization_id_mig(i)                -- INV_ORGANIZATION_ID
13035 			,subinv_mig(i)              -- INV_SUBINVENTORY_NAME
13036 			,locator_id_mig(i)                     -- INV_LOCATOR_ID
13037 			,NULL                                 -- INSTALL_DATE
13038 			,'N'                                  -- MANUALLY_CREATED_FLAG
13039 			,'Y'                                  -- CREATION_COMPLETE_FLAG
13040 			,'Y'                                  -- COMPLETENESS_FLAG
13041 			,v_created_by                         -- CREATED_BY
13042 			,sysdate                              -- CREATION_DATE
13043 			,v_last_updated_by                    -- LAST_UPDATED_BY
13044 			,sysdate                              -- LAST_UPDATE_DATE
13045 			,-1                                   -- LAST_UPDATE_LOGIN
13046 			,1                                    -- OBJECT_VERSION_NUMBER
13047 			,NULL                                 -- SECURITY_GROUP_ID
13048 			,'IN_INVENTORY'                       -- INSTANCE_USAGE_CODE
13049 			,'HZ_PARTIES'                         -- OWNER_PARTY_SOURCE_TABLE
13050 			,v_party_id                           -- OWNER_PARTY_ID
13051 			,organization_id_mig(i)                -- LAST_VLD_ORGANIZATION_ID
13052 		       );
13053 		 Exception
13054 		       when others then
13055 			     v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
13056 						     ||' into CSI_ITEM_INSTANCES '||SUBSTR(sqlerrm,1,1000);
13057 				raise_application_error(-20000, v_err_msg );
13058 			     Raise;
13059 		 End;
13060 		 -- Use the same instance record to create the history
13061 		 Begin
13062 		       select CSI_ITEM_INSTANCES_H_S.nextval
13063 		       into v_ins_history_id
13064 		       from DUAL;
13065 		 End;
13066 		 --
13067 		 Begin
13068 		       INSERT INTO CSI_ITEM_INSTANCES_H(
13069 			 INSTANCE_HISTORY_ID
13070 			,INSTANCE_ID
13071 			,TRANSACTION_ID
13072 			,OLD_INSTANCE_NUMBER
13073 			,NEW_INSTANCE_NUMBER
13074 			,OLD_EXTERNAL_REFERENCE
13075 			,NEW_EXTERNAL_REFERENCE
13076 			,OLD_INVENTORY_ITEM_ID
13077 			,NEW_INVENTORY_ITEM_ID
13078 			,OLD_INVENTORY_REVISION
13079 			,NEW_INVENTORY_REVISION
13080 			,OLD_INV_MASTER_ORGANIZATION_ID
13081 			,NEW_INV_MASTER_ORGANIZATION_ID
13082 			,OLD_MFG_SERIAL_NUMBER_FLAG
13083 			,NEW_MFG_SERIAL_NUMBER_FLAG
13084 			,OLD_LOT_NUMBER
13085 			,NEW_LOT_NUMBER
13086 			,OLD_QUANTITY
13087 			,NEW_QUANTITY
13088 			,OLD_UNIT_OF_MEASURE
13089 			,NEW_UNIT_OF_MEASURE
13090 			,OLD_ACCOUNTING_CLASS_CODE
13091 			,NEW_ACCOUNTING_CLASS_CODE
13092 			,OLD_INSTANCE_STATUS_ID
13093 			,NEW_INSTANCE_STATUS_ID
13094 			,OLD_CUSTOMER_VIEW_FLAG
13095 			,NEW_CUSTOMER_VIEW_FLAG
13096 			,OLD_MERCHANT_VIEW_FLAG
13097 			,NEW_MERCHANT_VIEW_FLAG
13098 			,OLD_SELLABLE_FLAG
13099 			,NEW_SELLABLE_FLAG
13100 			,OLD_SYSTEM_ID
13101 			,NEW_SYSTEM_ID
13102 			,OLD_INSTANCE_TYPE_CODE
13103 			,NEW_INSTANCE_TYPE_CODE
13104 			,OLD_ACTIVE_START_DATE
13105 			,NEW_ACTIVE_START_DATE
13106 			,OLD_ACTIVE_END_DATE
13107 			,NEW_ACTIVE_END_DATE
13111 			,NEW_LOCATION_ID
13108 			,OLD_LOCATION_TYPE_CODE
13109 			,NEW_LOCATION_TYPE_CODE
13110 			,OLD_LOCATION_ID
13112 			,OLD_INV_ORGANIZATION_ID
13113 			,NEW_INV_ORGANIZATION_ID
13114 			,OLD_INV_SUBINVENTORY_NAME
13115 			,NEW_INV_SUBINVENTORY_NAME
13116 			,OLD_INV_LOCATOR_ID
13117 			,NEW_INV_LOCATOR_ID
13118 			,OLD_COMPLETENESS_FLAG
13119 			,NEW_COMPLETENESS_FLAG
13120 			,CREATED_BY
13121 			,CREATION_DATE
13122 			,LAST_UPDATED_BY
13123 			,LAST_UPDATE_DATE
13124 			,LAST_UPDATE_LOGIN
13125 			,OBJECT_VERSION_NUMBER
13126 			,SECURITY_GROUP_ID
13127 			,FULL_DUMP_FLAG
13128 			,OLD_INST_USAGE_CODE
13129 			,NEW_INST_USAGE_CODE
13130 			,OLD_LAST_VLD_ORGANIZATION_ID
13131 			,NEW_LAST_VLD_ORGANIZATION_ID
13132 		       )
13133 		       VALUES(
13134 			 v_ins_history_id                                    -- INSTANCE_HISTORY_ID
13135 			,v_instance_id                                       -- INSTANCE_ID
13136 			,v_txn_id                                            -- TRANSACTION_ID
13137 			,NULL                                                -- OLD_INSTANCE_NUMBER
13138 			,v_instance_id                                       -- NEW_INSTANCE_NUMBER
13139 			,NULL                                                -- OLD_EXTERNAL_REFERENCE
13140 			,NULL                                                -- NEW_EXTERNAL_REFERENCE
13141 			,NULL                                                -- OLD_INVENTORY_ITEM_ID
13142 			,inventory_item_id_mig(i)                             -- NEW_INVENTORY_ITEM_ID
13143 			,NULL                                                -- OLD_INVENTORY_REVISION
13144 			,revision_mig(i)                                      -- NEW_INVENTORY_REVISION
13145 			,NULL                                                -- OLD_INV_MASTER_ORGANIZATION_ID
13146 			,v_mast_org_id                                       -- NEW_INV_MASTER_ORGANIZATION_ID
13147 			,NULL                                                -- OLD_MFG_SERIAL_NUMBER_FLAG
13148 			,'Y'                                                 -- NEW_MFG_SERIAL_NUMBER_FLAG
13149 			,NULL                                                -- OLD_LOT_NUMBER
13150 			,lot_rec.lot_number                                  -- NEW_LOT_NUMBER
13151 			,NULL                                                -- OLD_QUANTITY
13152 			,lot_rec.transaction_quantity                        -- NEW_QUANTITY
13153 			,NULL                                                -- OLD_UNIT_OF_MEASURE
13154 			,v_pri_uom                                           -- NEW_UNIT_OF_MEASURE
13155 			,NULL                                                -- OLD_ACCOUNTING_CLASS_CODE
13156 			,'INV'                                               -- NEW_ACCOUNTING_CLASS_CODE
13157 			,NULL                                                -- OLD_INSTANCE_STATUS_ID
13158 			,v_ins_status_id                                     -- NEW_INSTANCE_STATUS_ID
13159 			,NULL                                                -- OLD_CUSTOMER_VIEW_FLAG
13160 			,'N'                                                 -- NEW_CUSTOMER_VIEW_FLAG
13161 			,NULL                                                -- OLD_MERCHANT_VIEW_FLAG
13162 			,'Y'                                                 -- NEW_MERCHANT_VIEW_FLAG
13163 			,NULL                                                -- OLD_SELLABLE_FLAG
13164 			,NULL                                                -- NEW_SELLABLE_FLAG
13165 			,NULL                                                -- OLD_SYSTEM_ID
13166 			,NULL                                                -- NEW_SYSTEM_ID
13167 			,NULL                                                -- OLD_INSTANCE_TYPE_CODE
13168 			,NULL                                                -- NEW_INSTANCE_TYPE_CODE
13169 			,NULL                                                -- OLD_ACTIVE_START_DATE
13170 			,SYSDATE                                             -- NEW_ACTIVE_START_DATE
13171 			,NULL                                                -- OLD_ACTIVE_END_DATE
13172 			,NULL                                                -- NEW_ACTIVE_END_DATE
13173 			,NULL                                                -- OLD_LOCATION_TYPE_CODE
13174 			,'INVENTORY'                                         -- NEW_LOCATION_TYPE_CODE
13175 			,NULL                                                -- OLD_LOCATION_ID
13176 			,v_location_id                                       -- NEW_LOCATION_ID
13177 			,NULL                                                -- OLD_INV_ORGANIZATION_ID
13178 			,organization_id_mig(i)                               -- NEW_INV_ORGANIZATION_ID
13179 			,NULL                                                -- OLD_INV_SUBINVENTORY_NAME
13180 			,subinv_mig(i)                             -- NEW_INV_SUBINVENTORY_NAME
13181 			,NULL                                                -- OLD_INV_LOCATOR_ID
13182 			,locator_id_mig(i)                                    -- NEW_INV_LOCATOR_ID
13183 			,NULL                                                -- OLD_COMPLETENESS_FLAG
13184 			,'Y'                                                 -- NEW_COMPLETENESS_FLAG
13185 			,v_created_by                                        -- CREATED_BY
13186 			,sysdate                                             -- CREATION_DATE
13187 			,v_last_updated_by                                   -- LAST_UPDATED_BY
13188 			,sysdate                                             -- LAST_UPDATE_DATE
13189 			,-1                                                  -- LAST_UPDATE_LOGIN
13190 			,1                                                   -- OBJECT_VERSION_NUMBER
13191 			,NULL                                                -- SECURITY_GROUP_ID
13195 			,NULL                                                -- OLD_LAST_VLD_ORGANIZATION_ID
13192 			,'N'                                                 -- FULL_DUMP_FLAG
13193 			,NULL                                                -- OLD_INST_USAGE_CODE
13194 			,'IN_INVENTORY'                                      -- NEW_INST_USAGE_CODE
13196 			,organization_id_mig(i)                               -- NEW_LAST_VLD_ORGANIZATION_ID
13197 		       );
13198 		 Exception
13199 		       when others then
13200 			     v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
13201 				      ||' into CSI_ITEM_INSTANCES_H Using the Same Instance '||SUBSTR(sqlerrm,1,1000);
13202 				raise_application_error(-20000, v_err_msg );
13203 			     Raise;
13204 		 End;
13205 		 --
13206 		 Begin
13207 		    select CSI_I_PARTIES_S.nextval
13208 		    into v_ins_party_id
13209 		    from DUAL;
13210 		 End;
13211 		 Begin
13212 		       INSERT INTO CSI_I_PARTIES(
13213 			 INSTANCE_PARTY_ID
13214 			,INSTANCE_ID
13215 			,PARTY_SOURCE_TABLE
13216 			,PARTY_ID
13217 			,RELATIONSHIP_TYPE_CODE
13218 			,CONTACT_FLAG
13219 			,CONTACT_IP_ID
13220 			,ACTIVE_START_DATE
13221 			,ACTIVE_END_DATE
13222 			,CREATED_BY
13223 			,CREATION_DATE
13224 			,LAST_UPDATED_BY
13225 			,LAST_UPDATE_DATE
13226 			,LAST_UPDATE_LOGIN
13227 			,OBJECT_VERSION_NUMBER
13228 			,SECURITY_GROUP_ID
13229 		       )
13230 		       VALUES(
13231 			 v_ins_party_id                   -- INSTANCE_PARTY_ID
13232 			,v_instance_id                    -- INSTANCE_ID
13233 			,'HZ_PARTIES'                     -- PARTY_SOURCE_TABLE
13234 			,v_party_id                       -- PARTY_ID
13235 			,'OWNER'                          -- RELATIONSHIP_TYPE_CODE
13236 			,'N'                              -- CONTACT_FLAG
13237 			,NULL                             -- CONTACT_IP_ID
13238 			,SYSDATE                          -- ACTIVE_START_DATE
13239 			,NULL                             -- ACTIVE_END_DATE
13240 			,v_created_by                     -- CREATED_BY
13241 			,sysdate                          -- CREATION_DATE
13242 			,v_last_updated_by                -- LAST_UPDATED_BY
13243 			,sysdate                          -- LAST_UPDATE_DATE
13244 			,-1                               -- LAST_UPDATE_LOGIN
13245 			,1                                -- OBJECT_VERSION_NUMBER
13246 			,NULL                             -- SECURITY_GROUP_ID
13247 		       );
13248 		       Exception
13249 			     when others then
13250 			     v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
13251 						     ||' into CSI_I_PARTIES '||SUBSTR(sqlerrm,1,1000);
13252 				raise_application_error(-20000, v_err_msg );
13253 			     Raise;
13254 		       End;
13255 		       -- Insert into CSI_I_PARTIES_H
13256 		 Begin
13257 		    select CSI_I_PARTIES_H_S.nextval
13258 		    into v_ins_party_history_id
13259 		    from DUAL;
13260 		 End;
13261 		 -- Insert into CSI_I_PARTIES_H
13262 		 Begin
13263 		       INSERT INTO CSI_I_PARTIES_H(
13264 			 INSTANCE_PARTY_HISTORY_ID
13265 			,INSTANCE_PARTY_ID
13266 			,TRANSACTION_ID
13267 			,OLD_PARTY_SOURCE_TABLE
13268 			,NEW_PARTY_SOURCE_TABLE
13269 			,OLD_PARTY_ID
13270 			,NEW_PARTY_ID
13271 			,OLD_RELATIONSHIP_TYPE_CODE
13272 			,NEW_RELATIONSHIP_TYPE_CODE
13273 			,OLD_CONTACT_FLAG
13274 			,NEW_CONTACT_FLAG
13275 			,OLD_CONTACT_IP_ID
13276 			,NEW_CONTACT_IP_ID
13277 			,OLD_ACTIVE_START_DATE
13278 			,NEW_ACTIVE_START_DATE
13279 			,OLD_ACTIVE_END_DATE
13280 			,NEW_ACTIVE_END_DATE
13281 			,FULL_DUMP_FLAG
13282 			,CREATED_BY
13283 			,CREATION_DATE
13284 			,LAST_UPDATED_BY
13285 			,LAST_UPDATE_DATE
13286 			,LAST_UPDATE_LOGIN
13287 			,OBJECT_VERSION_NUMBER
13288 			,SECURITY_GROUP_ID
13289 		       )
13290 		       VALUES(
13291 			 v_ins_party_history_id               -- INSTANCE_PARTY_HISTORY_ID
13292 			,v_ins_party_id                       -- INSTANCE_PARTY_ID
13293 			,v_txn_id                             -- TRANSACTION_ID
13294 			,NULL                                 -- OLD_PARTY_SOURCE_TABLE
13295 			,'HZ_PARTIES'                         -- NEW_PARTY_SOURCE_TABLE
13296 			,NULL                                 -- OLD_PARTY_ID
13297 			,v_party_id                           -- NEW_PARTY_ID
13298 			,NULL                                 -- OLD_RELATIONSHIP_TYPE_CODE
13299 			,'OWNER'                              -- NEW_RELATIONSHIP_TYPE_CODE
13300 			,NULL                                 -- OLD_CONTACT_FLAG
13301 			,'N'                                  -- NEW_CONTACT_FLAG
13302 			,NULL                                 -- OLD_CONTACT_IP_ID
13303 			,NULL                                 -- NEW_CONTACT_IP_ID
13304 			,NULL                                 -- OLD_ACTIVE_START_DATE
13305 			,SYSDATE                              -- NEW_ACTIVE_START_DATE
13306 			,NULL                                 -- OLD_ACTIVE_END_DATE
13307 			,NULL                                 -- NEW_ACTIVE_END_DATE
13308 			,'N'                                  -- FULL_DUMP_FLAG
13309 			,v_created_by
13310 			,sysdate
13311 			,v_last_updated_by
13312 			,sysdate
13313 			,-1
13314 			,1
13315 			,NULL
13316 		       );
13317 		 Exception
13318 		       when others then
13319 			     v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
13320 				      ||' into CSI_I_PARTIES_H using the same Instance '||SUBSTR(sqlerrm,1,1000);
13324 	      END LOOP;
13321 				raise_application_error(-20000, v_err_msg );
13322 			     Raise;
13323 		 End;
13325 	   END IF; -- Lot control check
13326 	   Update csi_txn_errors
13327 	   set processed_flag = 'R',
13328                last_update_date = sysdate
13329 	   where transaction_error_id = txn_error_id_mig(i);
13330 	   --
13331 	Exception
13332 	   when process_next then
13333 	      null;
13334 	End;
13335       END LOOP;
13336       commit;
13337       EXIT WHEN CSI_CUR%NOTFOUND;
13338     END LOOP;
13339     commit;
13340     CLOSE CSI_CUR;
13341   EXCEPTION
13342      When comp_error then
13343 	null;
13344   END Create_or_Update_Shipping_Inst;
13345   --
13346   PROCEDURE fix_srlsoi_returned_serials
13347   IS
13348 
13349     TYPE NumTabType is    varray(1000) of number;
13350     TYPE VarTabType is    varray(1000) of varchar2(80);
13351 
13352     l_serial_number_tab   VarTabType;
13353     l_item_id_tab         NumTabType;
13354     l_organization_id_tab NumTabType;
13355     l_lot_code_tab        NumTabType;
13356 
13357     MAX_BUFFER_SIZE       number := 1000;
13358 
13359     l_last_mtl_txn_id         number;
13360     l_last_mtl_action_id      number;
13361     l_last_mtl_source_type_id number;
13362     l_last_mtl_type_id        number;
13363     l_last_rma_processed      varchar2(1);
13364 
13365     l_change_owner_flag       varchar2(1);
13366     l_owner_party_id          number;
13367     l_owner_account_id        number;
13368     l_internal_party_id       number;
13369 
13370     l_txn_rec                 csi_datastructures_pub.transaction_rec;
13371     l_instance_rec            csi_datastructures_pub.instance_rec;
13372     l_parties_tbl             csi_datastructures_pub.party_tbl;
13373     l_pty_accts_tbl           csi_datastructures_pub.party_account_tbl;
13374 
13375     l_error_message           varchar2(2000);
13376 
13377     l_msg_count               number;
13378     l_msg_data                varchar2(2000);
13379     l_return_status           varchar2(1) := fnd_api.g_ret_sts_success;
13380 
13381     CURSOR soisrl_cur IS
13382       SELECT msn.serial_number,
13383              msn.inventory_item_id,
13384              msn.current_organization_id,
13385              msi.lot_control_code
13386       FROM   mtl_serial_numbers msn,
13387              mtl_system_items   msi
13388       WHERE  msn.current_status             = 1   -- predefined state (for rma'ed serials)
13389       AND    msi.inventory_item_id          = msn.inventory_item_id
13390       AND    msi.organization_id            = msn.current_organization_id
13391       AND    msi.serial_number_control_code = 6   -- serialized at so issue
13392       AND    nvl(msi.comms_nl_trackable_flag, 'N') = 'Y';
13393 
13394   BEGIN
13395 
13396     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
13397        csi_gen_utility_pvt.populate_install_param_rec;
13398     END IF;
13399     --
13400     l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
13401     --
13402     l_txn_rec.transaction_id                := fnd_api.g_miss_num;
13403     l_txn_rec.transaction_type_id           := correction_txn_type_id;
13404     l_txn_rec.source_header_ref             := 'DATAFIX';
13405     l_txn_rec.source_line_ref               := 'SRLSOI RETURNED FIX';
13406     l_txn_rec.source_transaction_date       := sysdate;
13407     l_txn_rec.transaction_date              := sysdate;
13408 
13409     OPEN soisrl_cur;
13410     LOOP
13411 
13412       FETCH soisrl_cur BULK COLLECT
13413       INTO  l_serial_number_tab,
13414             l_item_id_tab,
13415             l_organization_id_tab,
13416             l_lot_code_tab
13417       LIMIT MAX_BUFFER_SIZE;
13418 
13419       FOR l_ind IN 1 .. l_serial_number_tab.COUNT
13420       LOOP
13421 
13422         l_last_mtl_txn_id := null;
13423 
13424         FOR all_txn_rec IN  all_txn_cur(
13425           p_serial_number  => l_serial_number_tab(l_ind),
13426           p_item_id        => l_item_id_tab(l_ind))
13427         LOOP
13428           l_last_mtl_txn_id         := all_txn_rec.mtl_txn_id;
13429           l_last_mtl_action_id      := all_txn_rec.mtl_action_id;
13430           l_last_mtl_source_type_id := all_txn_rec.mtl_source_type_id;
13431           l_last_mtl_type_id        := all_txn_rec.mtl_type_id;
13432           EXIT;
13433         END LOOP;
13434 
13435         IF l_last_mtl_txn_id is not null AND l_last_mtl_type_id = 15 THEN
13436           BEGIN
13437             SELECT 'Y'
13438             INTO   l_last_rma_processed
13439             FROM   sys.dual
13440             WHERE  exists
13441               (SELECT '1' FROM csi_transactions
13442                WHERE  inv_material_transaction_id = l_last_mtl_txn_id);
13443           EXCEPTION
13444             WHEN no_data_found THEN
13445               l_last_rma_processed := 'N';
13446           END;
13447 
13448           IF l_last_rma_processed = 'Y' THEN
13449 
13450             BEGIN
13451 
13452               SELECT instance_id,
13453                      object_version_number,
13454                      location_type_code,
13455                      instance_usage_code
13456               INTO   l_instance_rec.instance_id,
13460               FROM   csi_item_instances
13457                      l_instance_rec.object_version_number,
13458                      l_instance_rec.location_type_code,
13459                      l_instance_rec.instance_usage_code
13461               WHERE  inventory_item_id = l_item_id_tab(l_ind)
13462               AND    serial_number     = l_serial_number_tab(l_ind);
13463 
13464               IF l_instance_rec.instance_usage_code <> 'RETURNED' OR
13465                  l_instance_rec.location_type_code  <> 'INVENTORY'
13466               THEN
13467 
13468                 csi_process_txn_pvt.check_and_break_relation(
13469                   p_instance_id   => l_instance_rec.instance_id,
13470                   p_csi_txn_rec   => l_txn_rec,
13471                   x_return_status => l_return_status);
13472 
13473                 get_rma_owner(
13474                   p_serial_number        => l_serial_number_tab(l_ind),
13475                   p_inventory_item_id    => l_item_id_tab(l_ind),
13476                   p_organization_id      => l_organization_id_tab(l_ind),
13477                   x_change_owner_flag    => l_change_owner_flag,
13478                   x_owner_party_id       => l_owner_party_id,
13479                   x_owner_account_id     => l_owner_account_id);
13480 
13481                 FOR inv_rec IN inv_cur (l_last_mtl_txn_id)
13482                 LOOP
13483 
13484                   -- build instance rec
13485                   SELECT object_version_number
13486                   INTO   l_instance_rec.object_version_number
13487                   FROM   csi_item_instances
13488                   WHERE  instance_id = l_instance_rec.instance_id;
13489 
13490                   l_instance_rec.location_type_code    := 'INVENTORY';
13491                   l_instance_rec.instance_usage_code   := 'RETURNED';
13492                   l_instance_rec.inv_organization_id   := inv_rec.organization_id;
13493                   l_instance_rec.inv_subinventory_name := inv_rec.subinv_code;
13494                   l_instance_rec.inv_locator_id        := inv_rec.locator_id;
13495                   l_instance_rec.active_end_date       := null;
13496 
13497                   get_lot_number(
13498                     p_lot_code        => l_lot_code_tab(l_ind),
13499                     p_mtl_txn_id      => l_last_mtl_txn_id,
13500                     p_serial_number   => l_serial_number_tab(l_ind),
13501                     x_lot_number      => l_instance_rec.lot_number);
13502 
13503                   l_instance_rec.inventory_revision       := inv_rec.revision;
13504                   l_instance_rec.vld_organization_id      := inv_rec.organization_id;
13505                   l_instance_rec.object_version_number    := 1.0;
13506 
13507                   SELECT nvl(mssi.location_id, haou.location_id)
13508                   INTO   l_instance_rec.location_id
13509                   FROM   mtl_secondary_inventories mssi,
13510                          hr_all_organization_units haou
13511                   WHERE  mssi.organization_id          = l_instance_rec.inv_organization_id
13512                   AND    mssi.secondary_inventory_name = l_instance_rec.inv_subinventory_name
13513                   AND    haou.organization_id          = mssi.organization_id;
13514 
13515                 END LOOP;
13516 
13517                 IF l_change_owner_flag = 'Y' THEN
13518                   l_instance_rec.active_end_date := sysdate;
13519 
13520                   -- build internal party record
13521                   l_parties_tbl(1).instance_party_id      := fnd_api.g_miss_num;
13522                   l_parties_tbl(1).party_source_table     := 'HZ_PARTIES';
13523                   l_parties_tbl(1).party_id               := l_internal_party_id;
13524                   l_parties_tbl(1).relationship_type_code := 'OWNER';
13525                   l_parties_tbl(1).contact_flag           := 'N';
13526                   l_parties_tbl(1).object_version_number  := 1.0;
13527 
13528                 END IF;
13529 
13530                 log('  serial :'||l_serial_number_tab(l_ind)||'  Change Owner :'||l_change_owner_flag);
13531 
13532                 update_instance(
13533                   p_txn_rec        => l_txn_rec,
13534                   p_instance_rec   => l_instance_rec,
13535                   p_parties_tbl    => l_parties_tbl,
13536                   p_pty_accts_tbl  => l_pty_accts_tbl,
13537                   x_return_status  => l_return_status,
13538                   x_error_message  => l_error_message);
13539 
13540               END IF;
13541 
13542             EXCEPTION
13543               WHEN no_data_found THEN
13544                 null;
13545               WHEN too_many_rows THEN
13546                 log('too many instances for item '||l_item_id_tab(l_ind)||
13547                     ' serial '||l_serial_number_tab(l_ind));
13548             END;
13549           END IF;
13550         END IF;
13551 
13552         IF mod(l_ind, 100) = 0 THEN
13553           commit;
13554         END IF;
13555 
13556       END LOOP;
13557 
13558       EXIT when soisrl_cur%NOTFOUND;
13559 
13560     END LOOP;
13561 
13562     IF soisrl_cur%ISOPEN THEN
13563       CLOSE soisrl_cur;
13564     END IF;
13565 
13566   EXCEPTION
13567     WHEN others THEN
13568       log('Error(O): fix_srlsoi_returned_serials '||sqlerrm);
13569       close soisrl_cur;
13570   END fix_srlsoi_returned_serials;
13571 
13572 
13576      ,           moq.inventory_item_id inventory_item_id
13573   PROCEDURE IB_INV_Synch_Non_srl IS
13574      CURSOR INV_ONH_BAL_CUR IS
13575      select   moq.organization_id organization_id
13577      ,           moq.revision revision
13578      ,           moq.subinventory_code subinventory_code
13579      ,           moq.locator_id locator_id
13580      ,           moq.lot_number lot_number
13581      ,           msi.primary_uom_code primary_uom_code
13582      ,           sum(moq.transaction_quantity) onhand_qty
13583      from
13584 		 mtl_system_items msi
13585      ,           mtl_onhand_quantities moq
13586      where       msi.inventory_item_id = moq.inventory_item_id
13587      and         msi.organization_id = moq.organization_id
13588      and         msi.serial_number_control_code in (1,6) -- No Serial control and at SO Issue Items
13589      group by
13590 		 moq.organization_id
13591      ,           moq.inventory_item_id
13592      ,           moq.revision
13593      ,           moq.subinventory_code
13594      ,           moq.locator_id
13595      ,           moq.lot_number
13596      ,           msi.primary_uom_code;
13597      --
13598      v_txn_id                           NUMBER;
13599      v_freeze_date                      DATE;
13600      v_txn_type_id                      NUMBER;
13601      l_upg_profile                      VARCHAR2(30) := fnd_Profile.value('CSI_UPGRADING_FROM_RELEASE');
13602      v_mast_org_id                      NUMBER;
13603      v_nl_trackable                     VARCHAR2(1);
13604      v_location_id                      NUMBER;
13605      v_ins_condition_id                 NUMBER;
13606      v_mfg_srl_flag                     VARCHAR2(1);
13607      v_ins_status_id                    NUMBER;
13608      v_instance_id                      NUMBER;
13609      v_end_date                         DATE;
13610      v_ins_history_id                   NUMBER;
13611      v_created_by                       NUMBER := fnd_global.user_id;
13612      v_last_updated_by                  NUMBER := fnd_global.user_id;
13613      v_ins_ou_id                        NUMBER;
13614      v_ins_ou_history_id                NUMBER;
13615      v_ins_party_id                     NUMBER;
13616      v_ins_party_history_id             NUMBER;
13617      v_party_id                         NUMBER;
13618      v_source_reference_id              NUMBER;
13619      v_err_msg                          VARCHAR2(2000);
13620      v_exists                           VARCHAR2(1);
13621      v_ins_qty                          NUMBER;
13622      v_ins_obj_nbr                      NUMBER;
13623      l_error_count                      NUMBER := 0;
13624      --
13625      Type NumTabType is VARRAY(10000) of NUMBER;
13626      organization_id_mig      NumTabType;
13627      inventory_item_id_mig    NumTabType;
13628      locator_id_mig           NumTabType;
13629      quantity_mig             NumTabType;
13630      --
13631      Type V3Type is VARRAY(10000) of VARCHAR2(3);
13632      uom_code_mig             V3Type;
13633      revision_mig             V3Type;
13634      --
13635      Type V10Type is VARRAY(10000) of VARCHAR2(10);
13636      subinv_mig               V10Type;
13637      --
13638      Type V80Type is VARRAY(10000) of VARCHAR2(80);
13639      lot_mig                  V80Type;
13640      --
13641      MAX_BUFFER_SIZE        NUMBER := 1000;
13642      x_return_status          VARCHAR2(1);
13643   --
13644      process_next                       EXCEPTION;
13645      comp_error                         EXCEPTION;
13646   --
13647   BEGIN
13648      csi_t_gen_utility_pvt.build_file_name(
13649          p_file_segment1 => 'csinonsy',
13650          p_file_segment2 => to_char(sysdate, 'hh24miss'));
13651      --
13652      IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
13653         csi_gen_utility_pvt.populate_install_param_rec;
13654      END IF;
13655      --
13656      v_freeze_date := csi_datastructures_pub.g_install_param_rec.freeze_date;
13657      --
13658      -- Get the Transaction Type ID for Txn Type MIGRATED
13659      Begin
13660 	select transaction_type_id
13661 	into v_txn_type_id
13662 	from CSI_TXN_TYPES
13663 	where SOURCE_TRANSACTION_TYPE = 'DATA_CORRECTION';
13664      Exception
13665 	when no_data_found then
13666 	   v_err_msg := 'Txn Type DATA_CORRECTION not defined in CSI_TXN_TYPES';
13667 	   Raise comp_error;
13668 	when others then
13669 	   v_err_msg := 'Unable to get the ID for Txn Type DATA_CORRECTION from CSI_TXN_TYPES';
13670 	   Raise comp_error;
13671      End;
13672      --
13673      -- Get the LATEST Status ID. This will be used for all INV records.
13674      Begin
13675 	select instance_status_id
13676 	into v_ins_status_id
13677 	from CSI_INSTANCE_STATUSES
13678 	where name = 'Latest';
13679      Exception
13680 	when no_data_found then
13681 	   v_err_msg := 'Status ID not found in CSI for Latest Status';
13682 	   Raise comp_error;
13683 	when too_many_rows then
13684 	   v_err_msg := 'Too many rows fouund in CSI for Latest Status';
13685 	   Raise comp_error;
13686 	when others then
13687 	   v_err_msg := 'Error in getting the Status ID in CSI for Latest Status';
13688 	   Raise comp_error;
13689      End;
13690      -- Get the Internal Party ID
13691      IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
13692         csi_gen_utility_pvt.populate_install_param_rec;
13696      --
13693      END IF;
13694      --
13695      v_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
13697      if v_party_id is null then
13698 	v_err_msg := 'Internal Party ID not found in CSI_INSTALL_PARAMETERS';
13699 	Raise comp_error;
13700      end if;
13701      --
13702      --
13703      OPEN INV_ONH_BAL_CUR;
13704      LOOP
13705         FETCH INV_ONH_BAL_CUR BULK COLLECT INTO
13706         organization_id_mig,
13707         inventory_item_id_mig,
13708         revision_mig,
13709         subinv_mig,
13710         locator_id_mig,
13711         lot_mig,
13712         uom_code_mig,
13713         quantity_mig
13714         LIMIT MAX_BUFFER_SIZE;
13715         --
13716         FOR i in 1 .. organization_id_mig.count LOOP
13717            Begin
13718 	       -- Assign NULL to all variables getting values from sequence. This is used at the later stage
13719 	       -- to delete the records if the Insert fails. Assigning NULL will ensure that we do not delete
13720 	       -- wrong set of previous records if the insert fails for the next.
13721 	       v_txn_id := -99999;
13722 	       v_instance_id := -99999;
13723 	       v_ins_history_id := -99999;
13724 	       v_ins_ou_id := -99999;
13725 	       v_ins_ou_history_id := -99999;
13726 	       v_ins_party_id := -99999;
13727 	       v_ins_party_history_id := -99999;
13728 	       --
13729 	      -- Get the Master Organization ID
13730 	      Begin
13731 		 select master_organization_id
13732 		 into v_mast_org_id
13733 		 from MTL_PARAMETERS
13734 		 where organization_id = organization_id_mig(i);
13735 	      Exception
13736 		 when no_data_found then
13737 		    Raise Process_next;
13738 	      End;
13739 	      -- Check for IB trackable
13740 	      v_nl_trackable := 'N';
13741 	      Begin
13742 		 select comms_nl_trackable_flag
13743 		 into v_nl_trackable
13744 		 from MTL_SYSTEM_ITEMS
13745 		 where inventory_item_id = inventory_item_id_mig(i)
13746 		 and   organization_id = v_mast_org_id;
13747 	      Exception
13748 		 when no_data_found then
13749 		    Raise Process_next;
13750 	      End;
13751 	      -- Ignore if not Trackable
13752 	      IF NVL(v_nl_trackable,'N') <> 'Y' THEN
13753 		 Raise Process_next;
13754 	      END IF; -- nl_trackable check
13755 	      --
13756               -- Check if there are any errors in CSI_TXN_ERRORS
13757               l_error_count := 0;
13758               Begin
13759                  select count(*)
13760                  into l_error_count
13761                  from CSI_TXN_ERRORS cii,
13762                       MTL_MATERIAL_TRANSACTIONS mmt
13763                  where cii.inv_material_transaction_id is not null
13764                  and   cii.inv_material_transaction_id = mmt.transaction_id
13765                  and   cii.processed_flag in ('E','R')
13766                  and   mmt.inventory_item_id = inventory_item_id_mig(i)
13767                  and   mmt.organization_id = organization_id_mig(i);
13768               End;
13769               --
13770               IF nvl(l_error_count,0) > 0 THEN
13771                  v_err_msg := 'Unable to Synch Item ID '||to_char(inventory_item_id_mig(i))||
13772                               '  Under Organization '||to_char(organization_id_mig(i));
13773                  Out(v_err_msg);
13774                  Raise Process_next;
13775               END IF;
13776 	      -- Get the Location ID from MTL_SECONDARY_INVENTORIES
13777 	      Begin
13778 		 select location_id
13779 		 into v_location_id
13780 		 from MTL_SECONDARY_INVENTORIES
13781 		 where organization_id = organization_id_mig(i)
13782 		 and   secondary_inventory_name = subinv_mig(i);
13783 	      Exception
13784 		 when no_data_found then
13785 		    Raise Process_next;
13786 	      End;
13787 	      -- Get the Location ID from HR_ORGANIZATION_UNITS
13788 	      IF v_location_id IS NULL THEN
13789 		 Begin
13790 		    select location_id
13791 		    into v_location_id
13792 		    from HR_ORGANIZATION_UNITS
13793 		    where organization_id = organization_id_mig(i);
13794 		 Exception
13795 		    when no_data_found then
13796 		       Raise Process_next;
13797 		 End;
13798 	      END IF;
13799 	      --
13800 	      if lot_mig(i) is not NULL then
13801 		 v_mfg_srl_flag := 'Y';
13802 	      else
13803 		 v_mfg_srl_flag := NULL;
13804 	      end if;
13805 	      --
13806 	      v_exists := 'N';
13807 	      v_end_date := NULL;
13808 	      Begin
13809 		 select quantity,instance_id,active_end_date
13810 		 into v_ins_qty,v_instance_id,v_end_date
13811 		 from CSI_ITEM_INSTANCES
13812 		 where inventory_item_id = inventory_item_id_mig(i)
13813 		 and   inv_organization_id = organization_id_mig(i)
13814                  and   serial_number is null
13815 		 and   location_type_code = 'INVENTORY'
13816 		 and   instance_usage_code = 'IN_INVENTORY'
13817 		 and   inv_subinventory_name = subinv_mig(i)
13818 		 and   nvl(inv_locator_id,-999) = nvl(locator_id_mig(i),-999)
13819 		 and   nvl(inventory_revision,'$#$') = nvl(revision_mig(i),'$#$')
13820 		 and   nvl(lot_number,'$#$') = nvl(lot_mig(i),'$#$');
13821 		 v_exists := 'Y';
13822 	      Exception
13823 		 when no_data_found then
13824 		    v_exists := 'N';
13825 		 when too_many_rows then
13826 		    Raise Process_next;
13827 	      End;
13828 	      --
13829 	      IF v_exists = 'Y' THEN
13830 		 IF v_ins_qty <> quantity_mig(i) OR
13834 		       ,active_end_date = decode(quantity_mig(i),0,sysdate,null)
13831 		    NVL(v_end_date,(sysdate+1)) <= sysdate THEN
13832 		    UPDATE CSI_ITEM_INSTANCES
13833 		    set quantity = quantity_mig(i)
13835 		       ,instance_status_id = decode(quantity_mig(i),0,1,v_ins_status_id)
13836 		       ,last_update_date = sysdate
13837 		       ,last_updated_by = v_last_updated_by
13838                        ,last_vld_organization_id = organization_id_mig(i)
13839 		    where instance_id = v_instance_id;
13840 		    --
13841 		    Begin
13842 		       select CSI_TRANSACTIONS_S.nextval
13843 		       into v_txn_id
13844 		       from DUAL;
13845 		    End;
13846 		    --
13847 		    Begin
13848 		       INSERT INTO CSI_TRANSACTIONS(
13849 			    TRANSACTION_ID
13850 			   ,TRANSACTION_DATE
13851 			   ,SOURCE_TRANSACTION_DATE
13852 			   ,SOURCE_HEADER_REF
13853 			   ,TRANSACTION_TYPE_ID
13854 			   ,CREATED_BY
13855 			   ,CREATION_DATE
13856 			   ,LAST_UPDATED_BY
13857 			   ,LAST_UPDATE_DATE
13858 			   ,LAST_UPDATE_LOGIN
13859 			   ,OBJECT_VERSION_NUMBER
13860 			  )
13861 			  VALUES(
13862 			    v_txn_id                             -- TRANSACTION_ID
13863 			   ,SYSDATE                              -- TRANSACTION_DATE
13864 			   ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
13865 			   ,'DATAFIX By IB-INV Synch'            -- SOURCE_HEADER_REF
13866 			   ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
13867 			   ,v_created_by
13868 			   ,sysdate
13869 			   ,v_last_updated_by
13870 			   ,sysdate
13871 			   ,-1
13872 			   ,1
13873 			  );
13874 		    Exception
13875 		       when others then
13876 			  v_err_msg := 'Error while Inserting into CSI_TRANSACTIONS '||substr(sqlerrm,1,1000);
13877 			  raise_application_error(-20000, v_err_msg );
13878 			  Raise;
13879 		    End;
13880 		    -- Tie the Transaction with the instance history
13881 		    INSERT INTO CSI_ITEM_INSTANCES_H
13882 			(
13883 			 INSTANCE_HISTORY_ID
13884 			,TRANSACTION_ID
13885 			,INSTANCE_ID
13886 			,OLD_QUANTITY
13887 			,NEW_QUANTITY
13888 			,CREATION_DATE
13889 			,LAST_UPDATE_DATE
13890 			,CREATED_BY
13891 			,LAST_UPDATED_BY
13892 			,LAST_UPDATE_LOGIN
13893 			,OBJECT_VERSION_NUMBER
13894 		       )
13895 		    VALUES
13896 		       (
13897 			 CSI_ITEM_INSTANCES_H_S.nextval
13898 			,v_txn_id
13899 			,v_instance_id
13900 			,v_ins_qty
13901 			,quantity_mig(i)
13902 			,SYSDATE
13903 			,SYSDATE
13904 			,v_created_by
13905 			,v_last_updated_by
13906 			,-1
13907 			,1
13908 		       );
13909 		 END IF;
13910 		 Raise Process_next;
13911 	      END IF; -- Check for instance existance
13912 	      --
13913 	      -- If instance is not found then create the INV instance
13914 	      -- For each record, we insert a record into CSI_TRANSACTIONS. This Transaction ID will be used
13915 	      -- to populate the History Record.
13916 	      Begin
13917 		 select CSI_TRANSACTIONS_S.nextval
13918 		 into v_txn_id
13919 		 from DUAL;
13920 	      End;
13921 	      --
13922 	      Begin
13923 		 INSERT INTO CSI_TRANSACTIONS(
13924 		      TRANSACTION_ID
13925 		     ,TRANSACTION_DATE
13926 		     ,SOURCE_TRANSACTION_DATE
13927 		     ,SOURCE_HEADER_REF
13928 		     ,TRANSACTION_TYPE_ID
13929 		     ,CREATED_BY
13930 		     ,CREATION_DATE
13931 		     ,LAST_UPDATED_BY
13932 		     ,LAST_UPDATE_DATE
13933 		     ,LAST_UPDATE_LOGIN
13934 		     ,OBJECT_VERSION_NUMBER
13935 		    )
13936 		    VALUES(
13937 		      v_txn_id                             -- TRANSACTION_ID
13938 		     ,SYSDATE                              -- TRANSACTION_DATE
13939 		     ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
13940 		     ,'DATAFIX By IB-INV Synch'            -- SOURCE_HEADER_REF
13941 		     ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
13942 		     ,v_created_by
13943 		     ,sysdate
13944 		     ,v_last_updated_by
13945 		     ,sysdate
13946 		     ,-1
13947 		     ,1
13948 		    );
13949 	      Exception
13950 		 when others then
13951 		    v_err_msg := 'Error while Inserting into CSI_TRANSACTIONS '||substr(sqlerrm,1,1000);
13952 		    raise_application_error(-20000, v_err_msg );
13953 		    Raise;
13954 	      End;
13955 	      --
13956 	      Begin
13957 		 select csi_item_instances_s.nextval
13958 		 into v_instance_id
13959 		 from DUAL;
13960 	      End;
13961 	      --
13962 	      -- Insert into CSI_ITEM_INSTANCES
13963 	      Begin
13964 		    INSERT INTO CSI_ITEM_INSTANCES(
13965 		      INSTANCE_ID
13966 		     ,INSTANCE_NUMBER
13967 		     ,EXTERNAL_REFERENCE
13968 		     ,INVENTORY_ITEM_ID
13969 		     ,INVENTORY_REVISION
13970 		     ,INV_MASTER_ORGANIZATION_ID
13971 		     ,MFG_SERIAL_NUMBER_FLAG
13972 		     ,LOT_NUMBER
13973 		     ,QUANTITY
13974 		     ,UNIT_OF_MEASURE
13975 		     ,ACCOUNTING_CLASS_CODE
13976 		     ,INSTANCE_CONDITION_ID
13977 		     ,INSTANCE_STATUS_ID
13978 		     ,CUSTOMER_VIEW_FLAG
13979 		     ,MERCHANT_VIEW_FLAG
13980 		     ,SELLABLE_FLAG
13981 		     ,SYSTEM_ID
13982 		     ,INSTANCE_TYPE_CODE
13983 		     ,ACTIVE_START_DATE
13984 		     ,ACTIVE_END_DATE
13985 		     ,LOCATION_TYPE_CODE
13986 		     ,LOCATION_ID
13990 		     ,PA_PROJECT_ID
13987 		     ,INV_ORGANIZATION_ID
13988 		     ,INV_SUBINVENTORY_NAME
13989 		     ,INV_LOCATOR_ID
13991 		     ,PA_PROJECT_TASK_ID
13992 		     ,IN_TRANSIT_ORDER_LINE_ID
13993 		     ,WIP_JOB_ID
13994 		     ,PO_ORDER_LINE_ID
13995 		     ,LAST_OE_ORDER_LINE_ID
13996 		     ,LAST_OE_RMA_LINE_ID
13997 		     ,LAST_PO_PO_LINE_ID
13998 		     ,LAST_OE_PO_NUMBER
13999 		     ,LAST_WIP_JOB_ID
14000 		     ,LAST_PA_PROJECT_ID
14001 		     ,LAST_PA_TASK_ID
14002 		     ,LAST_OE_AGREEMENT_ID
14003 		     ,INSTALL_DATE
14004 		     ,MANUALLY_CREATED_FLAG
14005 		     ,RETURN_BY_DATE
14006 		     ,ACTUAL_RETURN_DATE
14007 		     ,CREATION_COMPLETE_FLAG
14008 		     ,COMPLETENESS_FLAG
14009 		     ,CREATED_BY
14010 		     ,CREATION_DATE
14011 		     ,LAST_UPDATED_BY
14012 		     ,LAST_UPDATE_DATE
14013 		     ,LAST_UPDATE_LOGIN
14014 		     ,OBJECT_VERSION_NUMBER
14015 		     ,SECURITY_GROUP_ID
14016 		     ,INSTANCE_USAGE_CODE
14017 		     ,OWNER_PARTY_SOURCE_TABLE
14018 		     ,OWNER_PARTY_ID
14019 		     ,LAST_VLD_ORGANIZATION_ID
14020 		    )
14021 		    VALUES(
14022 		      v_instance_id                        -- INSTANCE_ID
14023 		     ,v_instance_id                        -- INSTANCE_NUMBER
14024 		     ,NULL                                 -- EXTERNAL_REFERENCE
14025 		     ,INVENTORY_ITEM_ID_mig(i)             -- INVENTORY_ITEM_ID
14026 		     ,revision_mig(i)                      -- INVENTORY_REVISION
14027 		     ,v_mast_org_id                        -- INV_MASTER_ORGANIZATION_ID
14028 		     ,v_mfg_srl_flag                       -- MFG_SERIAL_NUMBER_FLAG
14029 		     ,LOT_mig(i)                           -- LOT_NUMBER
14030 		     ,quantity_mig(i)                      -- QUANTITY
14031 		     ,uom_code_mig(i)                      -- UNIT_OF_MEASURE (PRIMARY)
14032 		     ,'INV'                                -- ACCOUNTING_CLASS_CODE
14033 		     ,v_ins_condition_id                   -- INSTANCE_CONDITION_ID
14034 		     ,v_ins_status_id                      -- INSTANCE_STATUS_ID
14035 		     ,'N'                                  -- CUSTOMER_VIEW_FLAG
14036 		     ,'Y'                                  -- MERCHANT_VIEW_FLAG
14037 		     ,'Y'                                  -- SELLABLE_FLAG
14038 		     ,NULL                                 -- SYSTEM_ID
14039 		     ,NULL                                 -- INSTANCE_TYPE_CODE
14040 		     ,SYSDATE                              -- ACTIVE_START_DATE
14041 		     ,NULL                                 -- ACTIVE_END_DATE
14042 		     ,'INVENTORY'                          -- LOCATION_TYPE_CODE
14043 		     ,v_location_id                        -- LOCATION_ID
14044 		     ,ORGANIZATION_ID_mig(i)               -- INV_ORGANIZATION_ID
14045 		     ,subinv_mig(i)                        -- INV_SUBINVENTORY_NAME
14046 		     ,LOCATOR_ID_mig(i)                    -- INV_LOCATOR_ID
14047 		     ,NULL                                 -- PA_PROJECT_ID
14048 		     ,NULL                                 -- PA_PROJECT_TASK_ID
14049 		     ,NULL                                 -- IN_TRANSIT_ORDER_LINE_ID
14050 		     ,NULL                                 -- WIP_JOB_ID
14051 		     ,NULL                                 -- PO_ORDER_LINE_ID
14052 		     ,NULL                                 -- LAST_OE_ORDER_LINE_ID
14053 		     ,NULL                                 -- LAST_OE_RMA_LINE_ID
14054 		     ,NULL                                 -- LAST_PO_PO_LINE_ID
14055 		     ,NULL                                 -- LAST_OE_PO_NUMBER
14056 		     ,NULL                                 -- LAST_WIP_JOB_ID
14057 		     ,NULL                                 -- LAST_PA_PROJECT_ID
14058 		     ,NULL                                 -- LAST_PA_TASK_ID
14059 		     ,NULL                                 -- LAST_OE_AGREEMENT_ID
14060 		     ,NULL                                 -- INSTALL_DATE
14061 		     ,'N'                                  -- MANUALLY_CREATED_FLAG
14062 		     ,NULL                                 -- RETURN_BY_DATE
14063 		     ,NULL                                 -- ACTUAL_RETURN_DATE
14064 		     ,'Y'                                  -- CREATION_COMPLETE_FLAG
14065 		     ,'Y'                                  -- COMPLETENESS_FLAG
14066 		     ,v_created_by                         -- CREATED_BY
14067 		     ,sysdate                              -- CREATION_DATE
14068 		     ,v_last_updated_by                    -- LAST_UPDATED_BY
14069 		     ,sysdate                              -- LAST_UPDATE_DATE
14070 		     ,-1                                   -- LAST_UPDATE_LOGIN
14071 		     ,1                                    -- OBJECT_VERSION_NUMBER
14072 		     ,NULL                                 -- SECURITY_GROUP_ID
14073 		     ,'IN_INVENTORY'                       -- INSTANCE_USAGE_CODE
14074 		     ,'HZ_PARTIES'                         -- OWNER_PARTY_SOURCE_TABLE
14075 		     ,v_party_id                           -- OWNER_PARTY_ID
14076 		     ,ORGANIZATION_ID_mig(i)               -- LAST_VLD_ORGANIZATION_ID
14077 		    );
14078 	      Exception
14079 		    when others then
14080 			  v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
14081 						  ||' into CSI_ITEM_INSTANCES '||SUBSTR(sqlerrm,1,1000);
14082 			     raise_application_error(-20000, v_err_msg );
14083 			  Raise;
14084 	      End;
14085 		    -- Use the same instance record to create the history
14086 	      Begin
14087 		    select CSI_ITEM_INSTANCES_H_S.nextval
14088 		    into v_ins_history_id
14089 		    from DUAL;
14090 	      End;
14091 	      --
14092 	      Begin
14096 		     ,TRANSACTION_ID
14093 		    INSERT INTO CSI_ITEM_INSTANCES_H(
14094 		      INSTANCE_HISTORY_ID
14095 		     ,INSTANCE_ID
14097 		     ,OLD_INSTANCE_NUMBER
14098 		     ,NEW_INSTANCE_NUMBER
14099 		     ,OLD_EXTERNAL_REFERENCE
14100 		     ,NEW_EXTERNAL_REFERENCE
14101 		     ,OLD_INVENTORY_ITEM_ID
14102 		     ,NEW_INVENTORY_ITEM_ID
14103 		     ,OLD_INVENTORY_REVISION
14104 		     ,NEW_INVENTORY_REVISION
14105 		     ,OLD_INV_MASTER_ORGANIZATION_ID
14106 		     ,NEW_INV_MASTER_ORGANIZATION_ID
14107 		     ,OLD_MFG_SERIAL_NUMBER_FLAG
14108 		     ,NEW_MFG_SERIAL_NUMBER_FLAG
14109 		     ,OLD_LOT_NUMBER
14110 		     ,NEW_LOT_NUMBER
14111 		     ,OLD_QUANTITY
14112 		     ,NEW_QUANTITY
14113 		     ,OLD_UNIT_OF_MEASURE
14114 		     ,NEW_UNIT_OF_MEASURE
14115 		     ,OLD_ACCOUNTING_CLASS_CODE
14116 		     ,NEW_ACCOUNTING_CLASS_CODE
14117 		     ,OLD_INSTANCE_CONDITION_ID
14118 		     ,NEW_INSTANCE_CONDITION_ID
14119 		     ,OLD_INSTANCE_STATUS_ID
14120 		     ,NEW_INSTANCE_STATUS_ID
14121 		     ,OLD_CUSTOMER_VIEW_FLAG
14122 		     ,NEW_CUSTOMER_VIEW_FLAG
14123 		     ,OLD_MERCHANT_VIEW_FLAG
14124 		     ,NEW_MERCHANT_VIEW_FLAG
14125 		     ,OLD_SELLABLE_FLAG
14126 		     ,NEW_SELLABLE_FLAG
14127 		     ,OLD_SYSTEM_ID
14128 		     ,NEW_SYSTEM_ID
14129 		     ,OLD_INSTANCE_TYPE_CODE
14130 		     ,NEW_INSTANCE_TYPE_CODE
14131 		     ,OLD_ACTIVE_START_DATE
14132 		     ,NEW_ACTIVE_START_DATE
14133 		     ,OLD_ACTIVE_END_DATE
14134 		     ,NEW_ACTIVE_END_DATE
14135 		     ,OLD_LOCATION_TYPE_CODE
14136 		     ,NEW_LOCATION_TYPE_CODE
14137 		     ,OLD_LOCATION_ID
14138 		     ,NEW_LOCATION_ID
14139 		     ,OLD_INV_ORGANIZATION_ID
14140 		     ,NEW_INV_ORGANIZATION_ID
14141 		     ,OLD_INV_SUBINVENTORY_NAME
14142 		     ,NEW_INV_SUBINVENTORY_NAME
14143 		     ,OLD_INV_LOCATOR_ID
14144 		     ,NEW_INV_LOCATOR_ID
14145 		     ,OLD_PA_PROJECT_ID
14146 		     ,NEW_PA_PROJECT_ID
14147 		     ,OLD_PA_PROJECT_TASK_ID
14148 		     ,NEW_PA_PROJECT_TASK_ID
14149 		     ,OLD_IN_TRANSIT_ORDER_LINE_ID
14150 		     ,NEW_IN_TRANSIT_ORDER_LINE_ID
14151 		     ,OLD_WIP_JOB_ID
14152 		     ,NEW_WIP_JOB_ID
14153 		     ,OLD_PO_ORDER_LINE_ID
14154 		     ,NEW_PO_ORDER_LINE_ID
14155 		     ,OLD_COMPLETENESS_FLAG
14156 		     ,NEW_COMPLETENESS_FLAG
14157 		     ,CREATED_BY
14158 		     ,CREATION_DATE
14159 		     ,LAST_UPDATED_BY
14160 		     ,LAST_UPDATE_DATE
14161 		     ,LAST_UPDATE_LOGIN
14162 		     ,OBJECT_VERSION_NUMBER
14163 		     ,SECURITY_GROUP_ID
14164 		     ,FULL_DUMP_FLAG
14165 		     ,OLD_INST_USAGE_CODE
14166 		     ,NEW_INST_USAGE_CODE
14167 		     ,OLD_LAST_VLD_ORGANIZATION_ID
14168 		     ,NEW_LAST_VLD_ORGANIZATION_ID
14169 		    )
14170 		    VALUES(
14171 		      v_ins_history_id                                    -- INSTANCE_HISTORY_ID
14172 		     ,v_instance_id                                       -- INSTANCE_ID
14173 		     ,v_txn_id                                            -- TRANSACTION_ID
14174 		     ,NULL                                                -- OLD_INSTANCE_NUMBER
14175 		     ,v_instance_id                                       -- NEW_INSTANCE_NUMBER
14176 		     ,NULL                                                -- OLD_EXTERNAL_REFERENCE
14177 		     ,NULL                                                -- NEW_EXTERNAL_REFERENCE
14178 		     ,NULL                                                -- OLD_INVENTORY_ITEM_ID
14179 		     ,INVENTORY_ITEM_ID_mig(i)                            -- NEW_INVENTORY_ITEM_ID
14180 		     ,NULL                                                -- OLD_INVENTORY_REVISION
14181 		     ,revision_mig(i)                                     -- NEW_INVENTORY_REVISION
14182 		     ,NULL                                                -- OLD_INV_MASTER_ORGANIZATION_ID
14183 		     ,v_mast_org_id                                       -- NEW_INV_MASTER_ORGANIZATION_ID
14184 		     ,NULL                                                -- OLD_MFG_SERIAL_NUMBER_FLAG
14185 		     ,v_mfg_srl_flag                                      -- NEW_MFG_SERIAL_NUMBER_FLAG
14186 		     ,NULL                                                -- OLD LOT
14187 		     ,LOT_mig(i)                                          -- NEW LOT
14188 		     ,NULL                                                -- OLD_QUANTITY
14189 		     ,quantity_mig(i)                                     -- NEW_QUANTITY
14190 		     ,NULL                                                -- OLD_UNIT_OF_MEASURE
14191 		     ,uom_code_mig(i)                                     -- NEW_UNIT_OF_MEASURE
14192 		     ,NULL                                                -- OLD_ACCOUNTING_CLASS_CODE
14193 		     ,'INV'                                               -- NEW_ACCOUNTING_CLASS_CODE
14194 		     ,NULL                                                -- OLD_INSTANCE_CONDITION_ID
14195 		     ,v_ins_condition_id                                  -- NEW_INSTANCE_CONDITION_ID
14196 		     ,NULL                                                -- OLD_INSTANCE_STATUS_ID
14197 		     ,v_ins_status_id                                     -- NEW_INSTANCE_STATUS_ID
14198 		     ,NULL                                                -- OLD_CUSTOMER_VIEW_FLAG
14199 		     ,'N'                                                 -- NEW_CUSTOMER_VIEW_FLAG
14200 		     ,NULL                                                -- OLD_MERCHANT_VIEW_FLAG
14201 		     ,'Y'                                                 -- NEW_MERCHANT_VIEW_FLAG
14202 		     ,NULL                                                -- OLD_SELLABLE_FLAG
14206 		     ,NULL                                                -- OLD_INSTANCE_TYPE_CODE
14203 		     ,NULL                                                -- NEW_SELLABLE_FLAG
14204 		     ,NULL                                                -- OLD_SYSTEM_ID
14205 		     ,NULL                                                -- NEW_SYSTEM_ID
14207 		     ,NULL                                                -- NEW_INSTANCE_TYPE_CODE
14208 		     ,NULL                                                -- OLD_ACTIVE_START_DATE
14209 		     ,SYSDATE                                             -- NEW_ACTIVE_START_DATE
14210 		     ,NULL                                                -- OLD_ACTIVE_END_DATE
14211 		     ,NULL                                                -- NEW_ACTIVE_END_DATE
14212 		     ,NULL                                                -- OLD_LOCATION_TYPE_CODE
14213 		     ,'INVENTORY'                                         -- NEW_LOCATION_TYPE_CODE
14214 		     ,NULL                                                -- OLD_LOCATION_ID
14215 		     ,v_location_id                                       -- NEW_LOCATION_ID
14216 		     ,NULL                                                -- OLD_INV_ORGANIZATION_ID
14217 		     ,ORGANIZATION_ID_mig(i)                              -- NEW_INV_ORGANIZATION_ID
14218 		     ,NULL                                                -- OLD_INV_SUBINVENTORY_NAME
14219 		     ,subinv_mig(i)                                       -- NEW_INV_SUBINVENTORY_NAME
14220 		     ,NULL                                                -- OLD_INV_LOCATOR_ID
14221 		     ,LOCATOR_ID_mig(i)                                   -- NEW_INV_LOCATOR_ID
14222 		     ,NULL                                                -- OLD_PA_PROJECT_ID
14223 		     ,NULL                                                -- NEW_PA_PROJECT_ID
14224 		     ,NULL                                                -- OLD_PA_PROJECT_TASK_ID
14225 		     ,NULL                                                -- NEW_PA_PROJECT_TASK_ID
14226 		     ,NULL                                                -- OLD_IN_TRANSIT_ORDER_LINE_ID
14227 		     ,NULL                                                -- NEW_IN_TRANSIT_ORDER_LINE_ID
14228 		     ,NULL                                                -- OLD_WIP_JOB_ID
14229 		     ,NULL                                                -- NEW_WIP_JOB_ID
14230 		     ,NULL                                                -- OLD_PO_ORDER_LINE_ID
14231 		     ,NULL                                                -- NEW_PO_ORDER_LINE_ID
14232 		     ,NULL                                                -- OLD_COMPLETENESS_FLAG
14233 		     ,'Y'                                                 -- NEW_COMPLETENESS_FLAG
14234 		     ,v_created_by                                        -- CREATED_BY
14235 		     ,sysdate                                             -- CREATION_DATE
14236 		     ,v_last_updated_by                                   -- LAST_UPDATED_BY
14237 		     ,sysdate                                             -- LAST_UPDATE_DATE
14238 		     ,-1                                                  -- LAST_UPDATE_LOGIN
14239 		     ,1                                                   -- OBJECT_VERSION_NUMBER
14240 		     ,NULL                                                -- SECURITY_GROUP_ID
14241 		     ,'N'                                                 -- FULL_DUMP_FLAG
14242 		     ,NULL                                                -- OLD_INST_USAGE_CODE
14243 		     ,'IN_INVENTORY'                                      -- NEW_INST_USAGE_CODE
14244 		     ,NULL                                                -- OLD_LAST_VLD_ORGANIZATION_ID
14245 		     ,ORGANIZATION_ID_mig(i)                              -- NEW_LAST_VLD_ORGANIZATION_ID
14246 		    );
14247 	      Exception
14248 		    when others then
14249 			  v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
14250 				   ||' into CSI_ITEM_INSTANCES_H Using the Same Instance '||SUBSTR(sqlerrm,1,1000);
14251 			     raise_application_error(-20000, v_err_msg );
14252 			  Raise;
14253 	      End;
14254 	      --
14255 	      Begin
14256 		 select CSI_I_PARTIES_S.nextval
14257 		 into v_ins_party_id
14258 		 from DUAL;
14259 	      End;
14260 	      Begin
14261 		    INSERT INTO CSI_I_PARTIES(
14262 		      INSTANCE_PARTY_ID
14263 		     ,INSTANCE_ID
14264 		     ,PARTY_SOURCE_TABLE
14265 		     ,PARTY_ID
14266 		     ,RELATIONSHIP_TYPE_CODE
14267 		     ,CONTACT_FLAG
14268 		     ,CONTACT_IP_ID
14269 		     ,ACTIVE_START_DATE
14270 		     ,ACTIVE_END_DATE
14271 		     ,CREATED_BY
14272 		     ,CREATION_DATE
14273 		     ,LAST_UPDATED_BY
14274 		     ,LAST_UPDATE_DATE
14275 		     ,LAST_UPDATE_LOGIN
14276 		     ,OBJECT_VERSION_NUMBER
14277 		     ,SECURITY_GROUP_ID
14278 		    )
14279 		    VALUES(
14280 		      v_ins_party_id                   -- INSTANCE_PARTY_ID
14281 		     ,v_instance_id                    -- INSTANCE_ID
14282 		     ,'HZ_PARTIES'                     -- PARTY_SOURCE_TABLE
14283 		     ,v_party_id                       -- PARTY_ID
14284 		     ,'OWNER'                          -- RELATIONSHIP_TYPE_CODE
14285 		     ,'N'                              -- CONTACT_FLAG
14286 		     ,NULL                             -- CONTACT_IP_ID
14287 		     ,SYSDATE                          -- ACTIVE_START_DATE
14288 		     ,NULL                             -- ACTIVE_END_DATE
14289 		     ,v_created_by                     -- CREATED_BY
14290 		     ,sysdate                          -- CREATION_DATE
14291 		     ,v_last_updated_by                -- LAST_UPDATED_BY
14292 		     ,sysdate                          -- LAST_UPDATE_DATE
14293 		     ,-1                               -- LAST_UPDATE_LOGIN
14297 		    Exception
14294 		     ,1                                -- OBJECT_VERSION_NUMBER
14295 		     ,NULL                             -- SECURITY_GROUP_ID
14296 		    );
14298 			  when others then
14299 			  v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
14300 						  ||' into CSI_I_PARTIES '||SUBSTR(sqlerrm,1,1000);
14301 			     raise_application_error(-20000, v_err_msg );
14302 			  Raise;
14303 		    End;
14304 		    -- Insert into CSI_I_PARTIES_H
14305 	      Begin
14306 		 select CSI_I_PARTIES_H_S.nextval
14307 		 into v_ins_party_history_id
14308 		 from DUAL;
14309 	      End;
14310 	      -- Insert into CSI_I_PARTIES_H
14311 	      Begin
14312 		    INSERT INTO CSI_I_PARTIES_H(
14313 		      INSTANCE_PARTY_HISTORY_ID
14314 		     ,INSTANCE_PARTY_ID
14315 		     ,TRANSACTION_ID
14316 		     ,OLD_PARTY_SOURCE_TABLE
14317 		     ,NEW_PARTY_SOURCE_TABLE
14318 		     ,OLD_PARTY_ID
14319 		     ,NEW_PARTY_ID
14320 		     ,OLD_RELATIONSHIP_TYPE_CODE
14321 		     ,NEW_RELATIONSHIP_TYPE_CODE
14322 		     ,OLD_CONTACT_FLAG
14323 		     ,NEW_CONTACT_FLAG
14324 		     ,OLD_CONTACT_IP_ID
14325 		     ,NEW_CONTACT_IP_ID
14326 		     ,OLD_ACTIVE_START_DATE
14327 		     ,NEW_ACTIVE_START_DATE
14328 		     ,OLD_ACTIVE_END_DATE
14329 		     ,NEW_ACTIVE_END_DATE
14330 		     ,FULL_DUMP_FLAG
14331 		     ,CREATED_BY
14332 		     ,CREATION_DATE
14333 		     ,LAST_UPDATED_BY
14334 		     ,LAST_UPDATE_DATE
14335 		     ,LAST_UPDATE_LOGIN
14336 		     ,OBJECT_VERSION_NUMBER
14337 		     ,SECURITY_GROUP_ID
14338 		    )
14339 		    VALUES(
14340 		      v_ins_party_history_id               -- INSTANCE_PARTY_HISTORY_ID
14341 		     ,v_ins_party_id                       -- INSTANCE_PARTY_ID
14342 		     ,v_txn_id                             -- TRANSACTION_ID
14343 		     ,NULL                                 -- OLD_PARTY_SOURCE_TABLE
14344 		     ,'HZ_PARTIES'                         -- NEW_PARTY_SOURCE_TABLE
14345 		     ,NULL                                 -- OLD_PARTY_ID
14346 		     ,v_party_id                           -- NEW_PARTY_ID
14347 		     ,NULL                                 -- OLD_RELATIONSHIP_TYPE_CODE
14348 		     ,'OWNER'                              -- NEW_RELATIONSHIP_TYPE_CODE
14349 		     ,NULL                                 -- OLD_CONTACT_FLAG
14350 		     ,'N'                                  -- NEW_CONTACT_FLAG
14351 		     ,NULL                                 -- OLD_CONTACT_IP_ID
14352 		     ,NULL                                 -- NEW_CONTACT_IP_ID
14353 		     ,NULL                                 -- OLD_ACTIVE_START_DATE
14354 		     ,SYSDATE                              -- NEW_ACTIVE_START_DATE
14355 		     ,NULL                                 -- OLD_ACTIVE_END_DATE
14356 		     ,NULL                                 -- NEW_ACTIVE_END_DATE
14357 		     ,'N'                                  -- FULL_DUMP_FLAG
14358 		     ,v_created_by
14359 		     ,sysdate
14360 		     ,v_last_updated_by
14361 		     ,sysdate
14362 		     ,-1
14363 		     ,1
14364 		     ,NULL
14365 		    );
14366 	      Exception
14367 		    when others then
14368 			  v_err_msg := 'Unable to Insert Item ID '||to_char(inventory_item_id_mig(i))
14369 				   ||' into CSI_I_PARTIES_H using the same Instance '||SUBSTR(sqlerrm,1,1000);
14370 			     raise_application_error(-20000, v_err_msg );
14371 			  Raise;
14372 	      End;
14373 	   Exception
14374 	      when process_next then
14375 		 null;
14376 	      when others then
14377 		 v_err_msg := substr(sqlerrm,1,1000);
14378 		 raise_application_error(-20000, v_err_msg );
14379 		 Raise;
14380 	   End;
14381         END LOOP; -- for loop
14382         commit;
14383         EXIT WHEN INV_ONH_BAL_CUR%NOTFOUND;
14384      END LOOP; -- Open loop
14385      commit;
14386      CLOSE INV_ONH_BAL_CUR;
14387   EXCEPTION
14388      when comp_error then
14389 	null;
14390   END IB_INV_Synch_Non_srl;
14391 
14392   --
14393   PROCEDURE mark_error_transactions IS
14394     CURSOR CSI_CUR IS
14395       SELECT cii.transaction_error_id,
14396              mmt.inventory_item_id,
14397              mmt.organization_id,
14398              mmt.transaction_action_id,
14399              mmt.transaction_source_type_id,
14400              mmt.transaction_id
14401       FROM   csi_txn_errors cii,
14402              mtl_material_transactions mmt
14403       WHERE  cii.processed_flag in ('E', 'R')
14404       AND    cii.inv_material_transaction_id is not null
14405       AND    mmt.transaction_id =  cii.inv_material_transaction_id;
14406 
14407     TYPE NumTabType is varray(10000) of number;
14408 
14409     txn_error_id          NumTabType;
14410     item_id               NumTabType;
14411     inv_org_id            NumTabType;
14412     mmt_action_id         NumTabType;
14413     mmt_source_type_id    NumTabType;
14414     mat_txn_id            NumTabType;
14415     --
14416     max_buffer_size       number := 1000;
14417     --
14418     l_user_id             number := fnd_global.user_id;
14419     v_srl_ctl             number;
14420     v_txn_type_id         number;
14421     v_lot_ctl             number;
14422     l_ctr                 number := 0;
14423     --
14424 
14425     TYPE numlist is TABLE of number INDEX BY binary_integer;
14426     l_upd_txn_tbl         numlist;
14427     --
14428     process_next          exception;
14432 
14429     comp_error            exception;
14430 
14431   BEGIN
14433     -- Get the Transaction Type ID for Txn Type MIGRATED
14434     BEGIN
14435       SELECT transaction_type_id
14436       INTO   v_txn_type_id
14437       FROM   csi_txn_types
14438       WHERE  source_transaction_type = 'DATA_CORRECTION';
14439     EXCEPTION
14440       WHEN no_data_found THEN
14441         RAISE comp_error;
14442       WHEN others THEN
14443 	RAISE comp_error;
14444     END;
14445     --
14446 
14447     OPEN CSI_CUR;
14448     LOOP
14449       FETCH CSI_CUR BULK COLLECT INTO
14450         txn_error_id,
14451         item_id,
14452         inv_org_id,
14453         mmt_action_id,
14454         mmt_source_type_id,
14455         mat_txn_id
14456       LIMIT MAX_BUFFER_SIZE;
14457       --
14458       FOR i in 1 .. txn_error_id.count
14459       LOOP
14460         BEGIN
14461 
14462           -- skip wip errors
14463           IF mmt_source_type_id(i) = 5 THEN
14464             RAISE process_next;
14465           END IF;
14466 
14467           -- skip shipment and RMA errors
14468           IF (mmt_action_id(i) = 1  AND mmt_source_type_id(i) = 2)  -- Sales Order Issue
14469               OR
14470              (mmt_action_id(i) = 27 AND mmt_source_type_id(i) = 12) -- RMA Receipt
14471           THEN
14472             RAISE process_next;
14473           END IF;
14474 
14475           --
14476           BEGIN
14477             SELECT serial_number_control_code,
14478                    lot_control_code
14479             INTO   v_srl_ctl,
14480                    v_lot_ctl
14481             FROM   mtl_system_items
14482             WHERE  inventory_item_id = item_id(i)
14483             AND    organization_id   = inv_org_id(i);
14484           EXCEPTION
14485             WHEN no_data_found THEN
14486               RAISE process_next;
14487           END;
14488 
14489           --
14490           IF v_srl_ctl not in (1, 6) THEN
14491             RAISE process_next;
14492           END IF;
14493           --
14494 
14495           IF v_srl_ctl = 6 THEN
14496 
14497             -- skip iso shipments for srlsoi items
14498             IF (mmt_action_id(i) = 21 AND mmt_source_type_id(i) = 8)  -- Int Order Intr Ship
14499                 OR
14500                (mmt_action_id(i) = 12 AND mmt_source_type_id(i) = 7)  -- Int Req Intr Rcpt
14501                 OR
14502                (mmt_action_id(i) = 3  AND mmt_source_type_id(i) = 8)  -- Int Order Direct Ship
14503                 OR
14504                (mmt_action_id(i) = 1  AND mmt_source_type_id(i) = 8)  -- Internal order issue
14505             THEN
14506               RAISE process_next;
14507             END IF;
14508           END IF;
14509 
14510           l_ctr := l_ctr + 1;
14511           l_upd_txn_tbl(l_ctr) := txn_error_id(i);
14512 
14513         EXCEPTION
14514           WHEN process_next THEN
14515             null;
14516         END;
14517       END LOOP;
14518 
14519       EXIT WHEN csi_cur%notfound;
14520 
14521     END LOOP;
14522 
14523     CLOSE csi_cur;
14524     --
14525     IF l_upd_txn_tbl.count > 0 THEN
14526       FORALL i in l_upd_txn_tbl.FIRST .. l_upd_txn_tbl.LAST
14527         UPDATE csi_txn_errors
14528         SET    processed_flag = 'D',
14529                error_text = 'Data fix done - mark_error_transactions',
14530                last_update_date = sysdate
14531         WHERE  transaction_error_id = l_upd_txn_tbl(i);
14532         commit;
14533     END IF;
14534   EXCEPTION
14535     WHEN comp_error THEN
14536       null;
14537   END mark_error_transactions;
14538 
14539   --
14540   PROCEDURE Reverse_IB_INV_Synch IS
14541      CURSOR CSI_CUR IS
14542      select cii.instance_id,cii.inventory_item_id,cii.inv_organization_id,
14543      cii.inv_subinventory_name,cii.inv_locator_id,
14544      cii.inventory_revision,cii.lot_number,cii.quantity
14545      from CSI_ITEM_INSTANCES cii,
14546           MTL_SYSTEM_ITEMS msi
14547      where cii.location_type_code = 'INVENTORY'
14548      and   cii.instance_usage_code = 'IN_INVENTORY'
14549      and   cii.serial_number is NULL
14550      and   msi.inventory_item_id = cii.inventory_item_id
14551      and   msi.organization_id = cii.inv_master_organization_id
14552      and   nvl(msi.comms_nl_trackable_flag,'N') = 'Y';
14553      --
14554      v_qty                        NUMBER;
14555      l_txn_id                     NUMBER;
14556      l_user_id                    NUMBER := fnd_global.user_id;
14557      l_error_count                NUMBER;
14558      l_ins_flag                   VARCHAR2(1) := 'N';
14559      v_txn_type_id                NUMBER;
14560      v_err_msg                    VARCHAR2(2000);
14561      --
14562      Type NumTabType is VARRAY(10000) of NUMBER;
14563      instance_id_mig          NumTabType;
14564      organization_id_mig      NumTabType;
14565      inventory_item_id_mig    NumTabType;
14566      locator_id_mig           NumTabType;
14567      quantity_mig             NumTabType;
14568      --
14569      Type V3Type is VARRAY(10000) of VARCHAR2(3);
14570      revision_mig             V3Type;
14571      --
14572      Type V10Type is VARRAY(10000) of VARCHAR2(10);
14573      subinv_mig               V10Type;
14574      --
14575      Type V80Type is VARRAY(10000) of VARCHAR2(80);
14576      lot_mig                  V80Type;
14577      --
14581      comp_error             EXCEPTION;
14578      MAX_BUFFER_SIZE        NUMBER := 1000;
14579      --
14580      process_next           EXCEPTION;
14582   BEGIN
14583      csi_t_gen_utility_pvt.build_file_name(
14584          p_file_segment1 => 'csinonsy',
14585          p_file_segment2 => to_char(sysdate, 'hh24miss'));
14586      --
14587      -- Get the Transaction Type ID for Txn Type MIGRATED
14588      Begin
14589 	select transaction_type_id
14590 	into v_txn_type_id
14591 	from CSI_TXN_TYPES
14592 	where SOURCE_TRANSACTION_TYPE = 'DATA_CORRECTION';
14593      Exception
14594 	when no_data_found then
14595 	   Raise comp_error;
14596 	when others then
14597 	   Raise comp_error;
14598      End;
14599      select CSI_TRANSACTIONS_S.nextval
14600      into l_txn_id from dual;
14601      --
14602      OPEN CSI_CUR;
14603      LOOP
14604         FETCH CSI_CUR BULK COLLECT INTO
14605         instance_id_mig,
14606         inventory_item_id_mig,
14607         organization_id_mig,
14608         subinv_mig,
14609         locator_id_mig,
14610         revision_mig,
14611         lot_mig,
14612         quantity_mig
14613         LIMIT MAX_BUFFER_SIZE;
14614         --
14615         FOR i in 1 .. instance_id_mig.count LOOP
14616 	   Begin
14617               l_error_count := 0;
14618               Begin
14619                  select count(*)
14620                  into l_error_count
14621                  from CSI_TXN_ERRORS cii,
14622                       MTL_MATERIAL_TRANSACTIONS mmt
14623                  where cii.inv_material_transaction_id is not null
14624                  and   cii.inv_material_transaction_id = mmt.transaction_id
14625                  and   cii.processed_flag in ('E','R')
14626                  and   mmt.inventory_item_id = inventory_item_id_mig(i)
14627                  and   mmt.organization_id = organization_id_mig(i);
14628               End;
14629               --
14630               IF nvl(l_error_count,0) > 0 THEN
14631                  v_err_msg := 'Unable to Reverse Synch Item ID '||to_char(inventory_item_id_mig(i))||
14632                               '  Under Organization '||to_char(organization_id_mig(i));
14633                  Out(v_err_msg);
14634                  Raise Process_next;
14635               END IF;
14636               --
14637 	      v_qty := 0;
14638 	      Begin
14639 	         select NVL(sum(transaction_quantity),0)
14640 	         into v_qty
14641 	         from MTL_ONHAND_QUANTITIES
14642 	         where inventory_item_id = inventory_item_id_mig(i)
14643 	         and   organization_id = organization_id_mig(i)
14644 	         and   subinventory_code = subinv_mig(i)
14645 	         and   nvl(locator_id,-999) = nvl(locator_id_mig(i),-999)
14646 	         and   nvl(revision,'$#$') = nvl(revision_mig(i),'$#$')
14647 	         and   nvl(lot_number,'$#$') = nvl(lot_mig(i),'$#$');
14648 	      End;
14649 	      --
14650 	      IF v_qty <> quantity_mig(i) THEN
14651                  l_ins_flag := 'Y';
14652 	         UPDATE CSI_ITEM_INSTANCES
14653 	         set quantity = v_qty,
14654 	   	     active_end_date = decode(v_qty,0,sysdate,active_end_date),
14655 		     instance_status_id = decode(v_qty,0,1,instance_status_id),
14656                      last_update_date = sysdate,
14657                      last_updated_by = l_user_id
14658 	         where instance_id = instance_id_mig(i);
14659                  --
14660                  -- Tie this instance with the transaction
14661 		 INSERT INTO CSI_ITEM_INSTANCES_H
14662 		     (
14663 		      INSTANCE_HISTORY_ID
14664 		     ,TRANSACTION_ID
14665 		     ,INSTANCE_ID
14666 		     ,CREATION_DATE
14667 		     ,LAST_UPDATE_DATE
14668 		     ,CREATED_BY
14669 		     ,LAST_UPDATED_BY
14670 		     ,LAST_UPDATE_LOGIN
14671 		     ,OBJECT_VERSION_NUMBER
14672 		    )
14673 		 VALUES
14674 		    (
14675                       CSI_ITEM_INSTANCES_H_S.nextval
14676 		     ,l_txn_id
14677 		     ,instance_id_mig(i)
14678 		     ,SYSDATE
14679 		     ,SYSDATE
14680 		     ,l_user_id
14681 		     ,l_user_id
14682 		     ,-1
14683 		     ,1
14684 		    );
14685 	      END IF;
14686            Exception
14687               when Process_next then
14688                  null;
14689 	   End;
14690         END LOOP; -- for loop
14691         commit;
14692         EXIT WHEN CSI_CUR%NOTFOUND;
14693      END LOOP;
14694      CLOSE CSI_CUR;
14695      --
14696      IF l_ins_flag = 'Y' THEN
14697         INSERT INTO CSI_TRANSACTIONS(
14698 	  TRANSACTION_ID
14699 	 ,TRANSACTION_DATE
14700 	 ,SOURCE_TRANSACTION_DATE
14701 	 ,SOURCE_HEADER_REF
14702 	 ,TRANSACTION_TYPE_ID
14703 	 ,CREATED_BY
14704 	 ,CREATION_DATE
14705 	 ,LAST_UPDATED_BY
14706 	 ,LAST_UPDATE_DATE
14707 	 ,LAST_UPDATE_LOGIN
14708 	 ,OBJECT_VERSION_NUMBER
14709 	)
14710 	VALUES(
14711 	  l_txn_id                             -- TRANSACTION_ID
14712 	 ,SYSDATE                              -- TRANSACTION_DATE
14713 	 ,SYSDATE                              -- SOURCE_TRANSACTION_DATE
14714 	 ,'Reverse Synch'                      -- SOURCE_HEADER_REF
14715 	 ,v_txn_type_id                        -- TRANSACTION_TYPE_ID
14716 	 ,l_user_id
14717 	 ,sysdate
14718 	 ,l_user_id
14719 	 ,sysdate
14720 	 ,-1
14721 	 ,1
14722 	);
14723      END IF;
14724      --
14725      commit;
14726   EXCEPTION
14727      when comp_error then
14728         null;
14729   END Reverse_IB_INV_Synch;
14733     CURSOR all_item_cur IS
14730   --
14731   PROCEDURE get_nl_trackable_report
14732   IS
14734       SELECT m_msi.concatenated_segments,
14735              m_msi.comms_nl_trackable_flag,
14736              c_msi.comms_nl_trackable_flag,
14737              m_mp.organization_code,
14738              c_mp.organization_code
14739       FROM   mtl_system_items_b   c_msi, -- Child Items
14740              mtl_parameters       c_mp,  -- Child Parameters
14741              mtl_system_items_kfv m_msi, -- Master Items
14742              mtl_parameters       m_mp   -- Master Parameters
14743       WHERE  m_mp.organization_id        = m_mp.master_organization_id
14744       AND    m_msi.organization_id       = m_mp.organization_id
14745       AND    m_msi.organization_id       = c_mp.master_organization_id
14746       AND    c_mp.master_organization_id = m_mp.organization_id
14747       AND    c_msi.organization_id       = c_mp.organization_id
14748       AND    m_msi.organization_id      <> c_mp.organization_id
14749       AND    c_msi.organization_id      <> m_msi.organization_id
14750       AND    c_msi.inventory_item_id     = m_msi.inventory_item_id
14751       AND    nvl(m_msi.comms_nl_trackable_flag,'N') <> nvl(c_msi.comms_nl_trackable_flag,'N')
14752       AND  EXISTS (SELECT 1 from  HR_ALL_ORGANIZATION_UNITS haou
14753       WHERE date_to IS NULL
14754       AND haou.organization_id =m_msi.organization_id)
14755       AND  EXISTS (SELECT 1 from  HR_ALL_ORGANIZATION_UNITS haou
14756       WHERE date_to IS NULL
14757       AND haou.organization_id =c_msi.organization_id)
14758       ORDER BY m_msi.inventory_item_id;
14759     --
14760     l_printheader  boolean := TRUE;
14761     l_printfooter  boolean := FALSE;
14762 
14763     v_msg          varchar2(4000);
14764     --
14765     Type V1TabType is VARRAY(10000) of VARCHAR2(1);
14766     l_master_flag_mig        V1TabType;
14767     l_child_flag_mig         V1TabType;
14768     Type V3TabType is VARRAY(10000) of VARCHAR2(3);
14769     l_master_org_mig         V3TabType;
14770     l_child_org_mig          V3TabType;
14771     Type V240TabType is VARRAY(10000) of MTL_SYSTEM_ITEMS_KFV.CONCATENATED_SEGMENTS%TYPE;
14772     l_item_segment_mig       V240TabType;
14773     --
14774     MAX_BUFFER_SIZE          NUMBER := 1000;
14775   BEGIN
14776     OPEN ALL_ITEM_CUR;
14777     LOOP
14778       FETCH ALL_ITEM_CUR BULK COLLECT INTO
14779         l_item_segment_mig,
14780         l_master_flag_mig,
14781         l_child_flag_mig,
14782         l_master_org_mig,
14783         l_child_org_mig
14784       LIMIT MAX_BUFFER_SIZE;
14785       --
14786       FOR i in 1..l_item_segment_mig.count LOOP
14787         IF l_printheader THEN
14788           l_printheader := FALSE;
14789 	  l_printfooter := TRUE;
14790 	  out('-----------------------------------------------------------------------');
14791 	  out('Inconsistent IB trackable setting within master and child organizations');
14792 	  out('-----------------------------------------------------------------------');
14793         END IF;
14794         l_global_warning_flag := 'Y';
14795         v_msg := 'Item : '||l_item_segment_mig(i)||
14796  	         '  is set as  '||l_master_flag_mig(i)||
14797 	         '  in Master Org '||l_master_org_mig(i)||
14798 	         '  and  '|| l_child_flag_mig(i)||
14799 	         '  in Child Org '||l_child_org_mig(i);
14800         out(v_msg);
14801       END LOOP;
14802       EXIT WHEN ALL_ITEM_CUR%NOTFOUND;
14803     END LOOP;
14804      --
14805     IF ALL_ITEM_CUR%ISOPEN THEN
14806       CLOSE ALL_ITEM_CUR;
14807     END IF;
14808     --
14809     IF l_printfooter THEN
14810        out('***************************END OF REPORT**********************************');
14811     END IF;
14812   END get_nl_trackable_report;
14813   --
14814   PROCEDURE MERGE_NON_SRL_INV_INSTANCE IS
14815    CURSOR c1 IS
14816    SELECT /*+ parallel(a) parallel(c) */
14817          a.instance_id,
14818          a.inventory_item_id,
14819          a.location_type_code,
14820          a.location_id,
14821          a.inv_organization_id,
14822          a.inv_subinventory_name,
14823          a.instance_usage_code,
14824          a.quantity,
14825          a.active_end_date,
14826          a.inventory_revision,
14827          a.inv_locator_id,
14828          a.lot_number,
14829          a.owner_party_id
14830    FROM   csi_item_instances a,
14831          mtl_system_items_b c
14832    WHERE a.ROWID > (SELECT MIN(b.ROWID)
14833                    FROM csi_item_instances b
14834                    WHERE b.inventory_item_id = a.inventory_item_id
14835                    AND   b.location_type_code = a.location_type_code
14836                  --  AND   b.location_id = a.location_id
14837                    AND   b.serial_number is null
14838                    AND   b.inv_organization_id = a.inv_organization_id
14839                    AND   b.inv_subinventory_name = a.inv_subinventory_name
14840                    AND   b.instance_usage_code = a.instance_usage_code
14841                    AND   nvl(b.inventory_revision,'$#$') = nvl(a.inventory_revision,'$#$')
14842                    AND   nvl(b.inv_locator_id,-999) = nvl(a.inv_locator_id,-999)
14843                    AND   nvl(b.lot_number,'$#$')= nvl(a.lot_number,'$#$')
14844                    AND   b.owner_party_id = a.owner_party_id
14845                    AND   b.location_type_code = 'INVENTORY'
14846                    AND   b.instance_usage_code = 'IN_INVENTORY')
14847                  --  AND   b.active_end_date IS NULL)
14848  -- AND a.active_end_date IS NULL
14849   AND a.inventory_item_id = c.inventory_item_id
14853 
14850   AND a.inv_organization_id = c.organization_id
14851   AND a.serial_number is null
14852   AND c.serial_number_control_code IN (1,6);
14854   CURSOR c2  IS
14855   SELECT a.instance_id,
14856          a.inventory_item_id,
14857          a.location_type_code,
14858          a.location_id,
14859          a.inv_organization_id,
14860          a.inv_subinventory_name,
14861          a.instance_usage_code,
14862          a.quantity,
14863          a.active_end_date,
14864          a.inventory_revision,
14865          a.inv_locator_id,
14866          a.lot_number,
14867          a.owner_party_id
14868   FROM   csi_item_instances a,
14869          mtl_system_items_b c
14870   WHERE  a.ROWID = (SELECT MIN(b.ROWID)
14871                    FROM csi_item_instances b
14872                    WHERE b.inventory_item_id = a.inventory_item_id
14873                    AND   b.location_type_code = a.location_type_code
14874                  --  AND   b.location_id = a.location_id
14875                    AND   b.serial_number is null
14876                    AND   b.inv_organization_id = a.inv_organization_id
14877                    AND   b.inv_subinventory_name = a.inv_subinventory_name
14878                    AND   b.instance_usage_code = a.instance_usage_code
14879                    AND   nvl(b.inventory_revision,'$#$') = nvl(a.inventory_revision,'$#$')
14880                    AND   nvl(b.inv_locator_id,-999) = nvl(a.inv_locator_id,-999)
14881                    AND   nvl(b.lot_number,'$#$')= nvl(a.lot_number,'$#$')
14882                    AND   b.owner_party_id = a.owner_party_id
14883                    AND   b.location_type_code = 'INVENTORY'
14884                    AND   b.instance_usage_code = 'IN_INVENTORY')
14885                  --  AND   b.active_end_date IS NULL)
14886   AND a.inventory_item_id = c.inventory_item_id
14887   AND a.inv_organization_id = c.organization_id
14888   AND a.serial_number is null
14889   AND c.serial_number_control_code IN (1,6);
14890 
14891   p_instance_tbl     csi_datastructures_pub.instance_tbl;
14892   l_count            NUMBER;
14893   m                  NUMBER;
14894   temp_quantity      NUMBER;
14895   l_status_id        NUMBER;
14896   l_active_end_date  DATE;
14897  BEGIN
14898     m := 1;
14899     FOR i IN c1 LOOP
14900          p_instance_tbl(m).inventory_item_id :=i.inventory_item_id;
14901          p_instance_tbl(m).location_type_code :=i.location_type_code;
14902          p_instance_tbl(m).inv_organization_id :=i.inv_organization_id;
14903          p_instance_tbl(m).inv_subinventory_name :=i.inv_subinventory_name;
14904          p_instance_tbl(m).instance_usage_code :=i.instance_usage_code;
14905          p_instance_tbl(m).location_id :=i.location_id;
14906          p_instance_tbl(m).quantity:=i.quantity;
14907          p_instance_tbl(m).inventory_revision:=i.inventory_revision;
14908          p_instance_tbl(m).inv_locator_id:=i.inv_locator_id;
14909          p_instance_tbl(m).lot_number:=i.lot_number;
14910          p_instance_tbl(m).attribute1:=i.owner_party_id;
14911 
14912          DELETE FROM csi_item_instances_h
14913          WHERE  instance_id=i.instance_id;
14914          --
14915          DELETE FROM csi_i_parties_h
14916          WHERE instance_party_id in (select instance_party_id from csi_i_parties
14917                                      WHERE  instance_id=i.instance_id);
14918          --
14919          DELETE FROM csi_i_parties
14920          WHERE  instance_id=i.instance_id;
14921          --
14922          DELETE FROM csi_item_instances
14923          WHERE  instance_id=i.instance_id;
14924 
14925          m := m+1;
14926 
14927      END LOOP;
14928      l_count:=p_instance_tbl.COUNT;
14929      IF l_count > 0 THEN
14930         FOR j IN c2 LOOP
14931           temp_quantity:=0;
14932            FOR k in 1..l_count
14933            LOOP
14934               IF   p_instance_tbl(k).inventory_item_id =j.inventory_item_id
14935                AND p_instance_tbl(k).location_type_code =j.location_type_code
14936                AND p_instance_tbl(k).inv_organization_id =j.inv_organization_id
14937                AND p_instance_tbl(k).inv_subinventory_name =j.inv_subinventory_name
14938                AND p_instance_tbl(k).instance_usage_code =j.instance_usage_code
14939              --  AND p_instance_tbl(k).location_id =j.location_id
14940                AND nvl(p_instance_tbl(k).inventory_revision,'$#$')=nvl(j.inventory_revision,'$#$')
14941                AND nvl(p_instance_tbl(k).inv_locator_id,-999)=nvl(j.inv_locator_id,-999)
14942                AND nvl(p_instance_tbl(k).lot_number,'$#$')=nvl(j.lot_number,'$#$')
14943                AND p_instance_tbl(k).attribute1 = j.owner_party_id
14944              --  AND j.active_end_date IS NULL
14945               THEN
14946                 temp_quantity:=temp_quantity+p_instance_tbl(k).quantity;
14947               END IF;
14948            END LOOP;
14949 
14950            IF j.quantity + temp_quantity = 0 THEN
14951               l_status_id := 1;
14952               l_active_end_date := sysdate;
14953            ELSE
14954               l_status_id := 510;
14955               l_active_end_date := null;
14956            END IF;
14957            --
14958            UPDATE csi_item_instances
14959            SET quantity=j.quantity+temp_quantity,
14960                instance_status_id = l_status_id,
14961                active_end_date = l_active_end_date
14962            WHERE instance_id=j.instance_id;
14963 
14964         END LOOP;
14965      END IF;
14966      commit;
14967   END MERGE_NON_SRL_INV_INSTANCE;
14968 
14969   PROCEDURE get_non_srl_rma_report(
14973     l_ownership_override  varchar2(1);
14970     p_show_instances      IN varchar2)
14971   IS
14972 
14974 
14975     CURSOR CSI_ERROR IS
14976       SELECT cii.transaction_error_id,
14977              cii.inv_material_transaction_id,
14978              cii.error_text,
14979              mmt.inventory_item_id,
14980              mmt.organization_id,
14981              mmt.transaction_quantity,
14982              mmt.trx_source_line_id,
14983              mmt.revision
14984       FROM   csi_txn_errors cii,
14985              mtl_material_transactions mmt
14986       WHERE  cii.processed_flag = 'E'
14987       AND    cii.inv_material_transaction_id is not null
14988       AND    mmt.transaction_id = cii.inv_material_transaction_id
14989       AND    mmt.transaction_type_id = 15; -- RMA
14990 
14991     --
14992     CURSOR tld_cur(p_rma_line_id in number) is
14993       SELECT ctld.sub_type_id, ctld.instance_id
14994       FROM   csi_t_transaction_lines ctl,
14995              csi_t_txn_line_details ctld
14996       WHERE  ctl.source_transaction_table = 'OE_ORDER_LINES_ALL'
14997       AND    ctl.source_transaction_id    = p_rma_line_id
14998       AND    ctld.transaction_line_id     = ctl.transaction_line_id
14999       AND    ctld.source_transaction_flag = 'Y';
15000 
15001     --
15002     CURSOR lot_cur(p_txn_id in number) IS
15003       SELECT lot_number,transaction_quantity
15004       FROM   mtl_transaction_lot_numbers
15005       WHERE  transaction_id = p_txn_id;
15006 
15007     --
15008     CURSOR csi_cur(
15009       p_item_id     in number,
15010       p_chg_owner   in varchar2,
15011       p_customer_id in number,
15012       p_revision    in varchar2,
15013       p_lot_number  in varchar2)
15014     IS
15015       SELECT instance_id,
15016 		   instance_number,
15017              last_vld_organization_id,
15018              quantity,
15019              lot_number,
15020              inventory_revision ,
15021              owner_party_account_id account_id,
15022              owner_party_id         party_id
15023       FROM   csi_item_instances,
15024              hz_parties
15025       WHERE  inventory_item_id      = p_item_id
15026       AND    owner_party_account_id = decode(p_chg_owner,'Y',owner_party_account_id,p_customer_id)
15027       AND    instance_usage_code    = 'OUT_OF_ENTERPRISE'
15028       AND    nvl(lot_number,'$#$')  = nvl(p_lot_number,'$#$')
15029       AND    nvl(inventory_revision,'$#$') = nvl(p_revision,'$#$')
15030       AND    party_id = owner_party_id
15031       ORDER BY party_name asc, quantity desc;
15032     --
15033     l_ib_flag             varchar2(1) := 'N';
15034     l_customer_id         number;
15035     l_message             varchar2(32767);
15036     l_srl_ctl             number;
15037     l_lot_ctl             number;
15038     l_rma_num             varchar2(50) ;
15039     l_rma_line_num        varchar2(50) ;
15040     l_loop_count          number := 0;
15041     l_inst_ref            number;
15042     l_org_code            varchar2(30);
15043 
15044     --
15045     l_item                varchar2(240);
15046     l_customer_name       varchar2(240);
15047     l_instances_found     boolean := FALSE;
15048     Process_next          exception;
15049 
15050     FUNCTION get_customer(
15051       p_account_id IN number,
15052       p_party_id   IN number)
15053     RETURN varchar2 IS
15054       l_customer_name varchar2(240);
15055     BEGIN
15056 
15057       IF p_account_id is not null THEN
15058         SELECT hp.party_name
15059         INTO   l_customer_name
15060         FROM   hz_cust_accounts hca,
15061                hz_parties       hp
15062         WHERE  hca.cust_account_id = p_account_id
15063         AND    hp.party_id         = hca.party_id;
15064       ELSE
15065         IF p_party_id is not null THEN
15066           SELECT party_name
15067           INTO   l_customer_name
15068           FROM   hz_parties
15069           WHERE  party_id = p_party_id;
15070         END IF;
15071       END IF;
15072 
15073       return l_customer_name;
15074 
15075     EXCEPTION
15076       WHEN others THEN
15077         return l_customer_name;
15078     END get_customer;
15079 
15080     FUNCTION fill(
15081       p_column in varchar2,
15082       p_width  in number,
15083       p_side   in varchar2 default 'R')
15084     RETURN varchar2 is
15085       l_column varchar2(2000);
15086       l_width  number;
15087     BEGIN
15088       l_width  := p_width - 1;
15089       l_column := nvl(p_column, ' ');
15090       IF p_side = 'L' THEN
15091         return(lpad(l_column, l_width, ' ')||',');
15092       ELSIF p_side = 'R' THEN
15093         return(rpad(l_column, l_width, ' ')||',');
15094       END IF;
15095     END fill;
15096 
15097   BEGIN
15098 
15099     out('  ');
15100     out('********************************************************************************');
15101     out('               Non serialized RMAs without installation details                 ');
15102     out('********************************************************************************');
15103 
15104     l_message := fill('MTLTxnID', 10)||
15105                  fill('RMA#', 10)||
15106                  fill('Line', 6)||
15107                  fill('Instance', 10)||
15108                  fill('Owner', 35)||
15112 
15109                  fill('Quantity', 9);
15110 
15111     out(l_message);
15113     --
15114     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
15115        csi_gen_utility_pvt.populate_install_param_rec;
15116     END IF;
15117     --
15118     l_ownership_override := csi_datastructures_pub.g_install_param_rec.ownership_override_at_txn;
15119     --
15120     FOR csi_rec IN csi_error
15121     LOOP
15122 
15123       BEGIN
15124 
15125         SELECT concatenated_segments,
15126                serial_number_control_code,
15127                lot_control_code
15128         INTO   l_item, l_srl_ctl,l_lot_ctl
15129         FROM   mtl_system_items_kfv mtl
15130         WHERE  mtl.inventory_item_id = csi_rec.inventory_item_id
15131         AND    mtl.organization_id = csi_rec.organization_id;
15132 
15133         SELECT comms_nl_trackable_flag,
15134                organization_code
15135         INTO   l_ib_flag,
15136                l_org_code
15137         FROM   mtl_system_items_b msi ,
15138                mtl_parameters     mp
15139         WHERE  msi.inventory_item_id = csi_rec.inventory_item_id
15140         AND    msi.organization_id   = mp.master_organization_id
15141         AND    mp.organization_id    = csi_rec.organization_id;
15142         --
15143         IF nvl(l_ib_flag, 'N') <> 'Y' THEN
15144           RAISE Process_next;
15145         END IF;
15146         --
15147 
15148         SELECT nvl(line.sold_to_org_id, hdr.sold_to_org_id),
15149                hdr.order_number,
15150                line.line_number||'.'||line.shipment_number
15151         INTO   l_customer_id,
15152                l_rma_num,
15153                l_rma_line_num
15154         FROM   oe_order_lines_all   line,
15155                oe_order_headers_all hdr
15156         WHERE  line.line_id = csi_rec.trx_source_line_id
15157         AND    hdr.header_id = line.header_id;
15158 
15159         l_customer_name := get_customer(l_customer_id, null);
15160 
15161         --
15162         IF l_srl_ctl = 1 THEN
15163           l_loop_count := 0;
15164           l_inst_ref := 0;
15165           FOR tld_rec in tld_cur(csi_rec.trx_source_line_id)
15166           LOOP
15167             IF nvl(tld_rec.instance_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
15168               l_inst_ref := 1;
15169               --
15170             END IF;
15171             l_loop_count := l_loop_count + 1;
15172           END LOOP;
15173 
15174           IF ((l_loop_count = 0) OR (l_inst_ref = 1)) THEN
15175 
15176             l_customer_name := null;
15177 
15178             --
15179             IF l_lot_ctl = 1 THEN
15180 
15181               l_instances_found := FALSE;
15182 
15183               IF p_show_instances = 'Y' THEN
15184                 FOR ins in csi_cur (csi_rec.inventory_item_id,l_ownership_override,
15185                   l_customer_id,csi_rec.revision,null)
15186                 LOOP
15187 
15188                   l_instances_found := TRUE;
15189 
15190                   IF csi_cur%rowcount = 1 THEN
15191                     out('---------,---------,-----,---------,'||
15192                         '----------------------------------,--------,');
15193                   END IF;
15194 
15195                   l_customer_name := get_customer(ins.account_id, ins.party_id);
15196 
15197                   l_message := fill(csi_rec.inv_material_transaction_id, 10)||
15198                                fill(l_rma_num, 10)||
15199 					      fill(l_rma_line_num, 6)||
15200                                fill(ins.instance_number, 10)||
15201                                fill(l_customer_name, 35)||
15202                                fill(ins.quantity, 9);
15203                   out(l_message);
15204                 END LOOP;
15205               END IF;
15206 
15207               IF NOT(l_instances_found) THEN
15208                 out('---------,---------,-----,---------,'||
15209                     '----------------------------------,--------,');
15210                 l_message := fill(csi_rec.inv_material_transaction_id, 10)||
15211                              fill(l_rma_num, 10)||
15212                              fill(l_rma_line_num, 6);
15213                 out(l_message);
15214               END IF;
15215 
15216             ELSE
15217 
15218               l_instances_found := FALSE;
15219 
15220               IF p_show_instances = 'Y' THEN
15221 
15222                 FOR lot IN lot_cur(csi_rec.inv_material_transaction_id)
15223                 LOOP
15224 
15225                   FOR ins in CSI_CUR (csi_rec.inventory_item_id, l_ownership_override,l_customer_id
15226                                      ,csi_rec.revision,lot.lot_number)
15227                   LOOP
15228 
15229                     l_instances_found := TRUE;
15230 
15231                     IF csi_cur%rowcount = 1 THEN
15232                       out('---------,---------,-----,---------,'||
15233                           '----------------------------------,--------,');
15234                     END IF;
15235 
15236                     l_customer_name := get_customer(ins.account_id, ins.party_id);
15237 
15238                     l_message := fill(csi_rec.inv_material_transaction_id, 10)||
15239                                  fill(l_rma_num, 10)||
15240                                  fill(l_rma_line_num, 6)||
15241                                  fill(ins.instance_number, 10)||
15245                   END LOOP;
15242                                  fill(l_customer_name, 35)||
15243                                  fill(ins.quantity, 9);
15244                     out(l_message);
15246                 END LOOP;
15247               END IF;
15248 
15249               IF NOT(l_instances_found) THEN
15250                 out('---------,---------,-----,---------,'||
15251                     '----------------------------------,--------,');
15252                 l_message := fill(csi_rec.inv_material_transaction_id, 10)||
15253                              fill(l_rma_num, 10)||
15254                              fill(l_rma_line_num, 6);
15255                 out(l_message);
15256               END IF;
15257 
15258             END IF;
15259           END IF;
15260         END IF;
15261       EXCEPTION
15262         WHEN Process_next then
15263           null;
15264       END;
15265 
15266     END LOOP;
15267     commit;
15268   EXCEPTION
15269     WHEN others THEN
15270      out('  Error in report:'||sqlerrm);
15271   END get_non_srl_rma_report;
15272 
15273   PROCEDURE check_org_uniqueness IS
15274     CURSOR uniq_cur IS
15275       SELECT a.instance_id,
15276              a.serial_number,
15277              a.inventory_item_id inst_item_id,
15278              d.inventory_item_id serial_item_id,
15279              d.current_status,
15280              d.current_organization_id,
15281              a.manually_created_flag,
15282              a.instance_usage_code,
15283              a.location_type_code,
15284              a.active_end_date
15285       FROM   csi_item_instances a,
15286              mtl_serial_numbers d,
15287              mtl_parameters    e
15288       WHERE  a.serial_number is not null
15289       AND    d.serial_number      = a.serial_number
15290       AND    d.inventory_item_id  <> a.inventory_item_id
15291       AND    e.organization_id    = nvl(a.last_vld_organization_id, a.inv_master_organization_id)
15292       AND    e.serial_number_type = 3;
15293   BEGIN
15294    csi_t_gen_utility_pvt.build_file_name(
15295        p_file_segment1 => 'csisrlun',
15296        p_file_segment2 => to_char(sysdate, 'hh24miss'));
15297    --
15298     FOR uniq_rec IN uniq_cur
15299     LOOP
15300 
15301       l_global_sync_flag := 'Y';
15302 
15303       IF uniq_cur%rowcount = 1 THEN
15304         out('Serial Uniqueness Report - Across Organization');
15305         out('------------------------------------------------------------------');
15306       END IF;
15307 
15308       out(to_char(uniq_rec.instance_id)||
15309                        '  '||uniq_rec.serial_number||
15310                        '  '||to_char(uniq_rec.inst_item_id)||
15311                        '  '||to_char(uniq_rec.serial_item_id)||
15312                        '  '||to_char(uniq_rec.current_status)||
15313                        '  '||to_char(uniq_rec.current_organization_id)||
15314                        '  '||uniq_rec.manually_created_flag||
15315                        '  '||uniq_rec.instance_usage_code||
15316                        '  '||uniq_rec.location_type_code);
15317 
15318     END LOOP;
15319   END check_org_uniqueness;
15320 
15321 
15322 PROCEDURE CREATE_NSRL_RMA_TLD IS
15323 
15324   l_inventory_item_id    number;
15325   l_organization_id      number;
15326   l_serial_code          number;
15327   l_owner_pty_id         number;
15328   l_owner_acct_id        number;
15329   l_order_qty            number;
15330   l_order_uom            varchar2(9);
15331   l_txn_line_detail_id   number;
15332   l_transaction_line_id  number;
15333   l_instance_count       number;
15334   l_tld_count            number;
15335   l_sub_type_id          number;
15336   l_change_owner         varchar2(1);
15337   l_internal_party_id    number;
15338 
15339   l_instance_id          number;
15340   l_instance_qty         number;
15341   l_rma_line_id          number;
15342   l_primary_qty          number;
15343   l_processed_flag       varchar2(1) := 'N';
15344 
15345   l_line_rec       csi_t_datastructures_grp.txn_line_rec;
15346   l_line_dtl_tbl   csi_t_datastructures_grp.txn_line_detail_tbl;
15347   l_pty_dtl_tbl    csi_t_datastructures_grp.txn_party_detail_tbl;
15348   l_pty_acct_tbl   csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
15349   l_ii_rltns_tbl   csi_t_datastructures_grp.txn_ii_rltns_tbl;
15350   l_oa_tbl         csi_t_datastructures_grp.txn_org_assgn_tbl;
15351   l_ea_tbl         csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
15352   l_sys_tbl        csi_t_datastructures_grp.txn_systems_tbl;
15353 
15354   l_return_status  varchar2(1);
15355   l_msg_count      number;
15356   l_msg_data       varchar2(2000);
15357 
15358   l_mtl_txn_date   date;
15359   l_mtl_cre_date   date;
15360 
15361   skip_error       exception;
15362   i                number;
15363   j                number;
15364 
15365    --added for bug 5248037--
15366   MAX_BUFFER_SIZE          number := 1000;
15367   l_rec_change             BOOLEAN;
15368   l_rma_txn_tbl           csi_diagnostics_pkg.rma_txn_tbl;
15369   l_instance_tbl          csi_diagnostics_pkg.instance_tbl;
15370 
15371   --Modified rma_cur and inst_cur for 5248037--
15372   CURSOR rma_cur
15373   IS
15374   SELECT cte.transaction_error_id transaction_error_id,
15375          cte.inv_material_transaction_id inv_material_transaction_id,
15376          mmt.inventory_item_id item_id,
15380          abs(mmt.primary_quantity) mtl_txn_qty,
15377          mmt.organization_id organization_id,
15378          mmt.trx_source_line_id mtl_src_line_id,
15379          mmt.creation_date mtl_creation_date,
15381          msi.serial_number_control_code serial_code,
15382          oel.sold_to_org_id owner_acct,
15383          oel.ordered_quantity ordered_qty,
15384          oel.order_quantity_uom ordered_uom,
15385          hca.party_id party_id
15386   FROM   csi_txn_errors cte,mtl_material_transactions mmt,mtl_system_items msi,oe_order_lines_all oel,hz_cust_accounts hca
15387   WHERE  cte.processed_flag in ('E', 'R')
15388   AND    cte.transaction_type_id = 53
15389   AND    cte.inv_material_transaction_id = mmt.transaction_id
15390   AND    msi.inventory_item_id = mmt.inventory_item_id
15391   AND    msi.organization_id = mmt.organization_id
15392   AND    msi.serial_number_control_code = 1
15393   AND    oel.line_id = mmt.trx_source_line_id
15394   AND    hca.cust_account_id = oel.sold_to_org_id
15395   ORDER BY item_id, party_id, owner_acct,mtl_txn_qty;
15396 
15397   CURSOR inst_cur (p_item_id NUMBER,
15398                    p_owner_party_id NUMBER,
15399                    p_owner_acct_id NUMBER)
15400   IS
15401   SELECT cii.instance_id instance_id,
15402          cii.quantity quantity,
15403          cii.active_start_date active_start_date
15404   FROM   csi_item_instances cii
15405   WHERE  cii.inventory_item_id      = p_item_id
15406   AND    cii.accounting_class_code  = 'CUST_PROD'
15407   AND    cii.instance_usage_code    = 'OUT_OF_ENTERPRISE'
15408   AND    cii.owner_party_id         = p_owner_party_id
15409   AND    cii.owner_party_account_id = p_owner_acct_id
15410   AND    sysdate between nvl(cii.active_start_date, sysdate-1) and nvl(cii.active_end_date, sysdate+1)
15411   ORDER BY quantity;
15412 
15413   CURSOR tld_cur(p_transaction_line_id IN number)
15414   IS
15415   SELECT txn_line_detail_id ,
15416          instance_id,
15417          quantity
15418   FROM   csi_t_txn_line_details
15419   WHERE  transaction_line_id = p_transaction_line_id
15420   AND    source_transaction_flag = 'Y';
15421 
15422 
15423   PROCEDURE debug(p_message IN varchar2)
15424   IS
15425   BEGIN
15426     csi_t_gen_utility_pvt.add(p_message);
15427   END debug;
15428 
15429   BEGIN
15430 
15431     SELECT sub_type_id ,
15432            src_change_owner
15433     INTO   l_sub_type_id,
15434            l_change_owner
15435     FROM   csi_txn_sub_types
15436     WHERE  transaction_type_id = 53
15437     AND    default_flag        = 'Y';
15438 
15439     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
15440        csi_gen_utility_pvt.populate_install_param_rec;
15441     END IF;
15442     l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
15443 
15444     --Changed to use the BULK COLLECT for cursor for bug5248037--
15445     OPEN rma_cur;
15446     LOOP
15447       FETCH rma_cur BULK COLLECT
15448          INTO l_rma_txn_tbl
15449             LIMIT MAX_BUFFER_SIZE;
15450 
15451       l_rec_change := TRUE;
15452 
15453       FOR i IN  1..l_rma_txn_tbl.COUNT
15454       LOOP
15455 	l_processed_flag := 'N';
15456 
15457         IF l_rec_change THEN
15458           OPEN inst_cur(l_rma_txn_tbl(i).item_id,
15459                         l_rma_txn_tbl(i).party_id,
15460                         l_rma_txn_tbl(i).owner_acct);
15461           LOOP
15462             l_instance_tbl.delete;
15463             FETCH inst_cur BULK COLLECT
15464             INTO l_instance_tbl
15465             LIMIT MAX_BUFFER_SIZE;
15466             EXIT WHEN inst_cur%NOTFOUND;
15467          END LOOP;
15468 
15469 	 IF inst_cur%ISOPEN THEN
15470             CLOSE inst_cur;
15471          END IF;
15472         END IF;
15473 
15474     IF l_instance_tbl.count > 0 THEN
15475      FOR j IN l_instance_tbl.FIRST..l_instance_tbl.LAST
15476      LOOP
15477       IF l_instance_tbl.EXISTS(j) THEN
15478        IF l_instance_tbl(j).quantity >= l_rma_txn_tbl(i).mtl_txn_qty
15479         AND l_instance_tbl(j).active_start_date <= l_rma_txn_tbl(i).mtl_creation_date THEN
15480 
15481           -- check for existance of txn details
15482           l_transaction_line_id := null;
15483           BEGIN
15484               SELECT transaction_line_id
15485               INTO   l_transaction_line_id
15486               FROM   csi_t_transaction_lines
15487               WHERE  source_transaction_table = 'OE_ORDER_LINES_ALL'
15488               AND    source_transaction_id    = l_rma_txn_tbl(i).mtl_src_line_id
15489               AND    source_transaction_type_id = 53;
15490           EXCEPTION
15491               WHEN no_data_found THEN
15492                 l_transaction_line_id := null;
15493           END;
15494 
15495           -- if not found then
15496 
15497           IF l_transaction_line_id is null THEN
15498              -- create transaction details
15499 	      l_line_rec.transaction_line_id            := fnd_api.g_miss_num;
15500               l_line_rec.source_transaction_type_id     := 53;
15501               l_line_rec.source_transaction_id          := l_rma_txn_tbl(i).mtl_src_line_id;
15502               l_line_rec.source_transaction_table       := 'OE_ORDER_LINES_ALL';
15503               l_line_rec.inv_material_txn_flag          := 'Y';
15504               l_line_rec.object_version_number          := 1.0;
15505 
15506               -- transaction line details table
15510               l_line_dtl_tbl(1).instance_exists_flag    := 'Y';
15507               l_line_dtl_tbl(1).transaction_line_id     := fnd_api.g_miss_num;
15508               l_line_dtl_tbl(1).txn_line_detail_id      := fnd_api.g_miss_num;
15509               l_line_dtl_tbl(1).sub_type_id             := l_sub_type_id;
15511               l_line_dtl_tbl(1).instance_id             := l_instance_tbl(j).instance_id;
15512               l_line_dtl_tbl(1).source_transaction_flag := 'Y';
15513               l_line_dtl_tbl(1).quantity                := l_rma_txn_tbl(i).ordered_qty;
15514               l_line_dtl_tbl(1).inventory_item_id       := l_rma_txn_tbl(i).item_id;
15515               l_line_dtl_tbl(1).inv_organization_id     := l_rma_txn_tbl(i).organization_id;
15516               l_line_dtl_tbl(1).unit_of_measure         := l_rma_txn_tbl(i).ordered_uom;
15517               l_line_dtl_tbl(1).mfg_serial_number_flag  := 'N';
15518               l_line_dtl_tbl(1).active_start_date       := sysdate;
15519               l_line_dtl_tbl(1).preserve_detail_flag    := 'Y';
15520               l_line_dtl_tbl(1).object_version_number   := 1.0;
15521 
15522                IF l_change_owner = 'Y' THEN
15523                   l_pty_dtl_tbl(1).txn_party_detail_id    := fnd_api.g_miss_num;
15524                   l_pty_dtl_tbl(1).txn_line_detail_id     := fnd_api.g_miss_num;
15525                   l_pty_dtl_tbl(1).party_source_table     := 'HZ_PARTIES';
15526                   l_pty_dtl_tbl(1).party_source_id        := l_internal_party_id;
15527                   l_pty_dtl_tbl(1).relationship_type_code := 'OWNER';
15528                   l_pty_dtl_tbl(1).contact_flag           := 'N';
15529                   l_pty_dtl_tbl(1).active_start_date      := sysdate;
15530                   l_pty_dtl_tbl(1).preserve_detail_flag   := 'Y';
15531                   l_pty_dtl_tbl(1).txn_line_details_index := 1;
15532 
15533 		  BEGIN
15534                     SELECT instance_party_id
15535                     INTO   l_pty_dtl_tbl(1).instance_party_id
15536                     FROM   csi_i_parties
15537                     WHERE  instance_id            = l_instance_tbl(j).instance_id
15538                     AND    relationship_type_code = 'OWNER';
15539                   EXCEPTION
15540                     WHEN no_data_found THEN
15541                        l_pty_dtl_tbl(1).instance_party_id := fnd_api.g_miss_num;
15542                   END;
15543                END IF;
15544 
15545               -- api call
15546               csi_t_txn_details_grp.create_transaction_dtls(
15547                                p_api_version              => 1.0,
15548                                p_commit                   => fnd_api.g_false,
15549                                p_init_msg_list            => fnd_api.g_true,
15550                                p_validation_level         => fnd_api.g_valid_level_full,
15551                                px_txn_line_rec            => l_line_rec,
15552                                px_txn_line_detail_tbl     => l_line_dtl_tbl,
15553                                px_txn_party_detail_tbl    => l_pty_dtl_tbl,
15554                                px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
15555                                px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
15556                                px_txn_org_assgn_tbl       => l_oa_tbl,
15557                                px_txn_ext_attrib_vals_tbl => l_ea_tbl,
15558                                px_txn_systems_tbl         => l_sys_tbl,
15559                                x_return_status            => l_return_status,
15560                                x_msg_count                => l_msg_count,
15561                                x_msg_data                 => l_msg_data);
15562 
15563              IF l_return_status <> fnd_api.g_ret_sts_success THEN
15564                RAISE fnd_api.g_exc_error;
15565              END IF;
15566 
15567              l_processed_flag := 'Y';
15568              -- else check if count of source line detail
15569 
15570         ELSE
15571            FOR tld_rec IN tld_cur(l_transaction_line_id)
15572            LOOP
15573              l_tld_count := tld_cur%rowcount;
15574              l_txn_line_detail_id := tld_rec.txn_line_detail_id;
15575              IF l_tld_count > 1 THEN
15576                  exit;
15577              END IF;
15578            END LOOP;
15579 
15580            -- if only one then
15581            IF l_tld_count = 1 THEN
15582                 UPDATE csi_t_txn_line_details
15583                 SET    instance_id = l_instance_tbl(j).instance_id,
15584                        instance_exists_flag = 'Y'
15585                 WHERE  txn_line_detail_id = l_txn_line_detail_id;
15586                        l_processed_flag := 'Y';
15587            END IF;
15588 
15589         END IF;
15590 
15591         IF l_processed_flag = 'Y' THEN
15592            UPDATE csi_txn_errors
15593            SET    processed_flag       = 'R'
15594            WHERE  transaction_error_id = l_rma_txn_tbl(i).Txn_error_id;
15595 
15596           l_instance_tbl(j).quantity:=l_instance_tbl(j).quantity-l_rma_txn_tbl(i).ordered_qty;
15597 
15598           --If an instance is matched for the error'd record then that instance is removed from
15599 	  --table
15600           IF l_instance_tbl(j).quantity = 0 THEN
15601             l_instance_tbl.DELETE(j);
15602           END IF;
15603           EXIT;
15604         END IF;
15605       END IF;
15606      END IF; --for record existing check
15607    END LOOP; -- instance for loop
15608   END IF; --instance tbl cnt greater than zero
15609 
15610    --This IF loop avoids the re-query if the next error record is for the same item,party and owner--
15614      OR (l_rma_Txn_tbl(i).owner_acct <> l_rma_txn_tbl(i+1).owner_acct) THEN
15611    IF i < l_rma_txn_tbl.count THEN
15612      IF (l_rma_Txn_tbl(i).item_id <> l_rma_txn_tbl(i+1).item_id)
15613      OR (l_rma_Txn_tbl(i).party_id <> l_rma_txn_tbl(i+1).party_id)
15615         l_rec_change := TRUE;
15616      ELSE
15617       l_rec_change := FALSE;
15618      END IF;
15619    END IF;
15620 
15621    END LOOP;
15622 
15623    COMMIT;
15624 
15625    EXIT WHEN rma_cur%NOTFOUND;
15626 
15627   END LOOP; --rma tbl
15628 
15629   IF rma_cur%ISOPEN THEN
15630    CLOSE rma_cur;
15631   END IF;
15632 
15633   EXCEPTION
15634     WHEN fnd_api.g_exc_error THEN
15635       null;
15636     WHEN others THEN
15637       null;
15638       log('  Other Error:'||substr(sqlerrm, 1,250));
15639   END create_nsrl_rma_tld;
15640 
15641   PROCEDURE fix_txn_error_rec
15642   IS
15643 
15644     CURSOR err_cur IS
15645       SELECT transaction_error_id,
15646              inv_material_transaction_id
15647       FROM   csi_txn_errors
15648       WHERE  processed_flag in ('E', 'R')
15649       AND    inv_material_transaction_id is not null
15650       AND    (source_type is null OR transaction_type_id is null);
15651 
15652     l_release             varchar2(30);
15653     l_mtl_txn_id          number;
15654     l_mtl_type_id         number;
15655     l_mtl_action_id       number;
15656     l_mtl_source_type_id  number;
15657     l_mtl_type_class      number;
15658     l_mtl_txn_qty         number;
15659 
15660     l_source_type         varchar2(30);
15661     l_csi_txn_type_id     number;
15662     l_txn_processed       varchar2(1) := 'N';
15663 
15664 
15665   BEGIN
15666 
15667     SELECT fnd_Profile.value('csi_upgrading_from_release')
15668     INTO   l_release
15669     FROM   sys.dual;
15670 
15671     FOR err_rec IN err_cur
15672     LOOP
15673 
15674       BEGIN
15675         SELECT 'Y' INTO l_txn_processed
15676         FROM   sys.dual
15677         WHERE  exists (
15678           SELECT 'X' FROM csi_transactions
15679           WHERE  inv_material_transaction_id = err_rec.inv_material_transaction_id);
15680 
15681         UPDATE csi_txn_errors
15682         SET    processed_flag = 'D'
15683         WHERE  transaction_error_id = err_rec.transaction_error_id;
15684 
15685       EXCEPTION
15686         WHEN no_data_found THEN
15687 
15688           BEGIN
15689             SELECT mmt.transaction_id,
15690                    mmt.transaction_type_id,
15691                    mmt.transaction_action_id,
15692                    mmt.transaction_source_type_id,
15693                    mtt.type_class,
15694                    mmt.transaction_quantity
15695             INTO   l_mtl_txn_id,
15696                    l_mtl_type_id,
15697                    l_mtl_action_id,
15698                    l_mtl_source_type_id,
15699                    l_mtl_type_class,
15700                    l_mtl_txn_qty
15701             FROM   mtl_material_transactions mmt,
15702                    mtl_transaction_types     mtt
15703             WHERE  mmt.transaction_id      = err_rec.inv_material_transaction_id
15704             AND    mtt.transaction_type_id = mmt.transaction_type_id;
15705 
15706             get_source_type(
15707               p_mtl_txn_id         => l_mtl_txn_id,
15708               p_mtl_type_id        => l_mtl_type_id,
15709               p_mtl_action_id      => l_mtl_action_id,
15710               p_mtl_source_type_id => l_mtl_source_type_id,
15711               p_mtl_type_class     => l_mtl_type_class,
15712               p_mtl_txn_qty        => l_mtl_txn_qty,
15713               p_release            => l_release,
15714               x_source_type        => l_source_type,
15715               x_csi_txn_type_id    => l_csi_txn_type_id);
15716 
15717             UPDATE csi_txn_errors
15718             SET    source_type          = l_source_type,
15719                    transaction_type_id  = l_csi_txn_type_id
15720             WHERE  transaction_error_id = err_rec.transaction_error_id;
15721 
15722           EXCEPTION
15723             WHEN no_data_found THEN
15724               null;
15725           END;
15726       END ;
15727     END LOOP;
15728     commit;
15729   END fix_txn_error_rec;
15730 
15731   PROCEDURE fix_wip_usage IS
15732 
15733     TYPE NumTabType is       varray(10000) of number;
15734     l_instance_id_tab        NumTabType;
15735     MAX_BUFFER_SIZE          number := 1000;
15736 
15737     CURSOR wip_cur IS
15738       SELECT cii.instance_id
15739       FROM   csi_item_instances cii
15740       WHERE  cii.location_type_code = 'WIP'
15741       AND    cii.instance_usage_code <> 'IN_RELATIONSHIP'
15742       AND    exists (
15743         SELECT 'X' FROM mtl_system_items msi
15744         WHERE  msi.inventory_item_id = cii.inventory_item_id
15745         AND    msi.organization_id   = cii.last_vld_organization_id
15746         AND    msi.serial_number_control_code in (1, 6));
15747 
15748   BEGIN
15749 
15750     OPEN wip_cur;
15751     LOOP
15752 
15753       FETCH wip_cur BULK COLLECT
15754       INTO  l_instance_id_tab
15755       LIMIT MAX_BUFFER_SIZE;
15756 
15757       FOR ind IN 1 .. l_instance_id_tab.COUNT
15758       LOOP
15759         UPDATE csi_item_instances
15760         SET    instance_usage_code = 'IN_WIP'
15761         WHERE  instance_id         = l_instance_id_tab(ind);
15762       END LOOP;
15766 
15763       commit;
15764 
15765       EXIT when wip_cur%NOTFOUND;
15767     END LOOP;
15768 
15769     IF wip_cur%ISOPEN THEN
15770       CLOSE wip_cur;
15771     END IF;
15772 
15773   END fix_wip_usage;
15774 
15775   PROCEDURE delete_dup_nsrl_wip_instances IS
15776 
15777     l_keep_instance_id       number;
15778     TYPE NumTabType is       varray(10000) of number;
15779     TYPE VarTabType is       varray(10000) of varchar2(100);
15780 
15781     l_item_id_tab            NumTabType;
15782     l_revision_tab           VarTabType;
15783     l_lot_number_tab         VarTabType;
15784     l_wip_job_id_tab         NumTabType;
15785 
15786     MAX_BUFFER_SIZE          number := 1000;
15787 
15788     CURSOR dup_wip_cur IS
15789       SELECT cii.inventory_item_id,
15790              cii.inventory_revision,
15791              cii.lot_number,
15792              cii.wip_job_id
15793       FROM   csi_item_instances cii,
15794              mtl_system_items   msi
15795       WHERE  cii.location_type_code  = 'WIP'
15796       AND    cii.instance_usage_code = 'IN_WIP'
15797       AND    msi.inventory_item_id = cii.inventory_item_id
15798       AND    msi.organization_id   = cii.last_vld_organization_id
15799       AND    msi.serial_number_control_code in (1, 6)
15800       GROUP BY cii.inventory_item_id,
15801                cii.inventory_revision,
15802                cii.lot_number,
15803                cii.wip_job_id
15804       HAVING   count(*) > 1;
15805 
15806     CURSOR dup_inst_cur(
15807       p_item_id    IN number,
15808       p_revision   IN varchar,
15809       p_lot_number IN varchar2,
15810       p_wip_job_id IN number)
15811     IS
15812       SELECT cii.instance_id,
15813              cii.quantity
15814       FROM   csi_item_instances cii
15815       WHERE  cii.location_type_code  = 'WIP'
15816       AND    cii.instance_usage_code = 'IN_WIP'
15817       AND    cii.inventory_item_id                = p_item_id
15818       AND    nvl(cii.inventory_revision, '#*#*#') = nvl(p_revision, '#*#*#')
15819       AND    nvl(cii.lot_number,'#*#*#')          = nvl(p_lot_number, '#*#*#')
15820       AND    cii.wip_job_id                       = p_wip_job_id;
15821 
15822     CURSOR ip_cur(p_instance_id IN number) IS
15823       SELECT instance_party_id
15824       FROM   csi_i_parties
15825       WHERE  instance_id = p_instance_id;
15826 
15827   BEGIN
15828 
15829     OPEN dup_wip_cur;
15830     LOOP
15831 
15832       FETCH dup_wip_cur BULK COLLECT
15833       INTO  l_item_id_tab,
15834             l_revision_tab,
15835             l_lot_number_tab,
15836             l_wip_job_id_tab
15837       LIMIT MAX_BUFFER_SIZE;
15838 
15839       FOR ind IN 1 .. l_item_id_tab.COUNT
15840       LOOP
15841 
15842         l_keep_instance_id := null;
15843 
15844         FOR dup_inst_rec IN dup_inst_cur(
15845           p_item_id    => l_item_id_tab(ind),
15846           p_revision   => l_revision_tab(ind),
15847           p_lot_number => l_lot_number_tab(ind),
15848           p_wip_job_id => l_wip_job_id_tab(ind))
15849         LOOP
15850 
15851           IF dup_inst_cur%rowcount = 1 THEN
15852             l_keep_instance_id := dup_inst_rec.instance_id;
15853           ELSE
15854 
15855             -- preserve one instance for the wip job component and cumulate quantity
15856             UPDATE csi_item_instances
15857             SET    quantity    = quantity + dup_inst_rec.quantity
15858             WHERE  instance_id = l_keep_instance_id;
15859 
15860             -- delete the rest of the instances (party and accounts)
15861             FOR ip_rec IN ip_cur(dup_inst_rec.instance_id)
15862             LOOP
15863 
15864               -- there may not be an account, but just in case
15865               DELETE FROM csi_ip_accounts
15866               WHERE  instance_party_id = ip_rec.instance_party_id;
15867 
15868               DELETE FROM csi_i_parties_h
15869               WHERE  instance_party_id = ip_rec.instance_party_id;
15870 
15871             END LOOP;
15872 
15873             DELETE FROM csi_i_parties
15874             WHERE  instance_id = dup_inst_rec.instance_id;
15875 
15876             DELETE FROM csi_item_instances
15877             WHERE  instance_id = dup_inst_rec.instance_id;
15878 
15879             DELETE FROM csi_item_instances_h
15880             WHERE  instance_id = dup_inst_rec.instance_id;
15881 
15882           END IF;
15883         END LOOP;
15884 
15885       END LOOP;
15886 
15887       commit;
15888 
15889       EXIT when dup_wip_cur%NOTFOUND;
15890 
15891     END LOOP;
15892 
15893     IF dup_wip_cur%ISOPEN THEN
15894       CLOSE dup_wip_cur;
15895     END IF;
15896 
15897   END delete_dup_nsrl_wip_instances;
15898   --
15899   PROCEDURE Delete_Dup_Org_Assignments IS
15900      cursor csi_dup_cur is
15901      select instance_id,relationship_type_code
15902      from csi_i_org_assignments
15903      group by instance_id,relationship_type_code
15904      having count(*) > 1;
15905      --
15906      cursor csi_org_cur(p_instance_id in number,p_rel_type_code in varchar2) is
15907      select *
15908      from csi_i_org_assignments
15909      where instance_id = p_instance_id
15910      and   relationship_type_code = p_rel_type_code
15911      order by creation_date asc;
15912      --
15913      cursor csi_org_hist_cur(p_instance_id in number,p_rel_type_code in varchar2) is
15917      and   coa.relationship_type_code = p_rel_type_code
15914      select coah.* from csi_i_org_assignments_h coah,
15915 	    csi_i_org_assignments coa
15916      where coa.instance_id = p_instance_id
15918      and   coah.instance_ou_id = coa.instance_ou_id
15919      order by coah.transaction_id,coah.last_update_date asc;
15920      --
15921      l_hist_rec             csi_org_hist_cur%ROWTYPE;
15922      v_min_ou_id            NUMBER;
15923      v_min_org_id           NUMBER;
15924      v_max_ou_id            NUMBER;
15925      v_max_org_id           NUMBER;
15926      l_row_count            NUMBER;
15927      l_del_count            NUMBER := 0;
15928      TYPE NumList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
15929      l_del_tbl              NumList;
15930      TYPE ORG_HIST_TBL IS TABLE OF CSI_I_ORG_ASSIGNMENTS_H%ROWTYPE INDEX BY BINARY_INTEGER;
15931      l_org_hist_tbl         ORG_HIST_TBL;
15932      l_hist_count           NUMBER;
15933      v_ret_ou_id            NUMBER;
15934      l_prev_rec             csi_org_hist_cur%ROWTYPE;
15935      l_ou_hist_count        NUMBER;
15936      l_del_ou_hist_tbl      NumList;
15937      l_flag                 VARCHAR2(1);
15938      --
15939      Process_next           EXCEPTION;
15940   BEGIN
15941      FOR dup_rec in csi_dup_cur LOOP
15942 	Begin
15943 	   -- Get the latest org assignment. This org_id will be retained
15944 	   v_max_ou_id := -9999;
15945 	   Begin
15946 	      select instance_ou_id
15947 	      into v_max_ou_id
15948 	      from csi_i_org_assignments
15949 	      where instance_id = dup_rec.instance_id
15950 	      and   relationship_type_code = dup_rec.relationship_type_code
15951 	      and   creation_date = ( select max(creation_date)
15952 				      from csi_i_org_assignments
15953 				      where instance_id = dup_rec.instance_id
15954 				      and   relationship_type_code = dup_rec.relationship_type_code
15955 				      and   nvl(active_end_date,(sysdate+1)) > sysdate)
15956 	      and   nvl(active_end_date,(sysdate+1)) > sysdate
15957 	      and   rownum < 2;
15958 	   Exception
15959 	      when no_data_found then
15960 		 select max(instance_ou_id)
15961 		 into  v_max_ou_id
15962 		 from csi_i_org_assignments
15963 		 where instance_id = dup_rec.instance_id
15964 		 and   relationship_type_code = dup_rec.relationship_type_code;
15965 	   End;
15966 	   --
15967 	   l_row_count := 0;
15968 	   l_del_count := 0;
15969 	   l_del_tbl.DELETE;
15970 	   l_hist_count := 0;
15971 	   l_org_hist_tbl.DELETE;
15972 	   v_ret_ou_id := -99999;
15973 	   --
15974 	   FOR org_rec in csi_org_cur(dup_rec.instance_id,dup_rec.relationship_type_code) LOOP
15975 	      l_row_count := l_row_count + 1;
15976 	      IF l_row_count = 1 THEN
15977 		 v_ret_ou_id := org_rec.instance_ou_id;
15978 		 UPDATE CSI_I_ORG_ASSIGNMENTS
15979 		 set (operating_unit_id,active_end_date,context,attribute1,attribute2,attribute3,
15980 		      attribute4,attribute5,attribute6,attribute7,attribute8,attribute9,attribute10,
15981 		      attribute11,attribute12,attribute13,attribute14,attribute15,last_update_date) =
15982 		    (select operating_unit_id,active_end_date,context,attribute1,attribute2,attribute3,
15983 		     attribute4,attribute5,attribute6,attribute7,attribute8,attribute9,attribute10,
15984 		     attribute11,attribute12,attribute13,attribute14,attribute15,sysdate
15985 		     from csi_i_org_assignments
15986 		     where instance_ou_id = v_max_ou_id)
15987 		  where instance_ou_id = org_rec.instance_ou_id;
15988 	      ELSE
15989 		 l_del_count := l_del_count + 1;
15990 		 l_del_tbl(l_del_count) := org_rec.instance_ou_id;
15991 	      END IF;
15992 	   END LOOP; -- end of instance_id, relationship type combination
15993 	   --
15994 	   -- For this Instance - Relationship type, get all the history records ordered by txn_id
15995 	   open csi_org_hist_cur(dup_rec.instance_id,dup_rec.relationship_type_code);
15996 	   LOOP
15997 	      fetch csi_org_hist_cur into l_hist_rec;
15998 	      IF csi_org_hist_cur%FOUND THEN
15999 		 l_hist_count := l_hist_count + 1;
16000 		 l_org_hist_tbl(l_hist_count) := l_hist_rec;
16001 	      END IF;
16002 	      EXIT WHEN csi_org_hist_cur%NOTFOUND;
16003 	   END LOOP;
16004 	   close csi_org_hist_cur;
16005 	   --
16006 	   -- Merge the history belonging to the same transaction
16007 	   l_flag := 'N';
16008 	   l_del_ou_hist_tbl.DELETE;
16009 	   --
16010 	   IF l_org_hist_tbl.count > 0 THEN
16011 	      FOR j IN l_org_hist_tbl.FIRST .. l_org_hist_tbl.LAST LOOP
16012 		 IF j = 1 THEN
16013 		    l_prev_rec := l_org_hist_tbl(j);
16014 		 ELSE
16015 		    IF l_org_hist_tbl(j).transaction_id = l_prev_rec.transaction_id THEN
16016 		       l_flag := 'Y';
16017 		       l_ou_hist_count := l_del_ou_hist_tbl.count + 1;
16018 		       l_del_ou_hist_tbl(l_ou_hist_count) := l_org_hist_tbl(j).instance_ou_history_id;
16019 		       IF nvl(l_org_hist_tbl(j).old_operating_unit_id,-999) <>
16020 			  nvl(l_org_hist_tbl(j).new_operating_unit_id,-999) THEN
16021 			  l_prev_rec.old_operating_unit_id := l_org_hist_tbl(j).old_operating_unit_id;
16022 			  l_prev_rec.new_operating_unit_id := l_org_hist_tbl(j).new_operating_unit_id;
16023 		       END IF;
16024 		       --
16025 		       IF nvl(l_org_hist_tbl(j).old_relationship_type_code,'$#$') <>
16026 			  nvl(l_org_hist_tbl(j).new_relationship_type_code,'$#$') THEN
16027 			  l_prev_rec.old_relationship_type_code := l_org_hist_tbl(j).old_relationship_type_code;
16028 			  l_prev_rec.new_relationship_type_code := l_org_hist_tbl(j).new_relationship_type_code;
16029 		       END IF;
16030 		       --
16031 		       IF nvl(l_org_hist_tbl(j).old_active_start_date,fnd_api.g_miss_date) <>
16035 		       END IF;
16032 			  nvl(l_org_hist_tbl(j).new_active_start_date,fnd_api.g_miss_date) THEN
16033 			  l_prev_rec.old_active_start_date := l_org_hist_tbl(j).old_active_start_date;
16034 			  l_prev_rec.new_active_start_date := l_org_hist_tbl(j).new_active_start_date;
16036 		       --
16037 		       IF nvl(l_org_hist_tbl(j).old_active_end_date,fnd_api.g_miss_date) <>
16038 			  nvl(l_org_hist_tbl(j).new_active_end_date,fnd_api.g_miss_date) THEN
16039 			  l_prev_rec.old_active_end_date := l_org_hist_tbl(j).old_active_end_date;
16040 			  l_prev_rec.new_active_end_date := l_org_hist_tbl(j).new_active_end_date;
16041 		       END IF;
16042 		       --
16043 		       IF nvl(l_org_hist_tbl(j).old_context,'$#$') <>
16044 			  nvl(l_org_hist_tbl(j).new_context,'$#$') THEN
16045 			  l_prev_rec.old_context := l_org_hist_tbl(j).old_context;
16046 			  l_prev_rec.new_context := l_org_hist_tbl(j).new_context;
16047 		       END IF;
16048 		       --
16049 		       IF nvl(l_org_hist_tbl(j).old_attribute1,'$#$') <>
16050 			  nvl(l_org_hist_tbl(j).new_attribute1,'$#$') THEN
16051 			  l_prev_rec.old_attribute1 := l_org_hist_tbl(j).old_attribute1;
16052 			  l_prev_rec.new_attribute1 := l_org_hist_tbl(j).new_attribute1;
16053 		       END IF;
16054 		       --
16055 		       IF nvl(l_org_hist_tbl(j).old_attribute2,'$#$') <>
16056 			  nvl(l_org_hist_tbl(j).new_attribute2,'$#$') THEN
16057 			  l_prev_rec.old_attribute2 := l_org_hist_tbl(j).old_attribute2;
16058 			  l_prev_rec.new_attribute2 := l_org_hist_tbl(j).new_attribute2;
16059 		       END IF;
16060 		       --
16061 		       IF nvl(l_org_hist_tbl(j).old_attribute3,'$#$') <>
16062 			  nvl(l_org_hist_tbl(j).new_attribute3,'$#$') THEN
16063 			  l_prev_rec.old_attribute3 := l_org_hist_tbl(j).old_attribute3;
16064 			  l_prev_rec.new_attribute3 := l_org_hist_tbl(j).new_attribute3;
16065 		       END IF;
16066 		       --
16067 		       IF nvl(l_org_hist_tbl(j).old_attribute4,'$#$') <>
16068 			  nvl(l_org_hist_tbl(j).new_attribute4,'$#$') THEN
16069 			  l_prev_rec.old_attribute4 := l_org_hist_tbl(j).old_attribute4;
16070 			  l_prev_rec.new_attribute4 := l_org_hist_tbl(j).new_attribute4;
16071 		       END IF;
16072 		       --
16073 		       IF nvl(l_org_hist_tbl(j).old_attribute5,'$#$') <>
16074 			  nvl(l_org_hist_tbl(j).new_attribute5,'$#$') THEN
16075 			  l_prev_rec.old_attribute5 := l_org_hist_tbl(j).old_attribute5;
16076 			  l_prev_rec.new_attribute5 := l_org_hist_tbl(j).new_attribute5;
16077 		       END IF;
16078 		       --
16079 		       IF nvl(l_org_hist_tbl(j).old_attribute6,'$#$') <>
16080 			  nvl(l_org_hist_tbl(j).new_attribute6,'$#$') THEN
16081 			  l_prev_rec.old_attribute6 := l_org_hist_tbl(j).old_attribute6;
16082 			  l_prev_rec.new_attribute6 := l_org_hist_tbl(j).new_attribute6;
16083 		       END IF;
16084 		       --
16085 		       IF nvl(l_org_hist_tbl(j).old_attribute7,'$#$') <>
16086 			  nvl(l_org_hist_tbl(j).new_attribute7,'$#$') THEN
16087 			  l_prev_rec.old_attribute7 := l_org_hist_tbl(j).old_attribute7;
16088 			  l_prev_rec.new_attribute7 := l_org_hist_tbl(j).new_attribute7;
16089 		       END IF;
16090 		       --
16091 		       IF nvl(l_org_hist_tbl(j).old_attribute8,'$#$') <>
16092 			  nvl(l_org_hist_tbl(j).new_attribute8,'$#$') THEN
16093 			  l_prev_rec.old_attribute8 := l_org_hist_tbl(j).old_attribute8;
16094 			  l_prev_rec.new_attribute8 := l_org_hist_tbl(j).new_attribute8;
16095 		       END IF;
16096 		       --
16097 		       IF nvl(l_org_hist_tbl(j).old_attribute9,'$#$') <>
16098 			  nvl(l_org_hist_tbl(j).new_attribute9,'$#$') THEN
16099 			  l_prev_rec.old_attribute9 := l_org_hist_tbl(j).old_attribute9;
16100 			  l_prev_rec.new_attribute9 := l_org_hist_tbl(j).new_attribute9;
16101 		       END IF;
16102 		       --
16103 		       IF nvl(l_org_hist_tbl(j).old_attribute10,'$#$') <>
16104 			  nvl(l_org_hist_tbl(j).new_attribute10,'$#$') THEN
16105 			  l_prev_rec.old_attribute10 := l_org_hist_tbl(j).old_attribute10;
16106 			  l_prev_rec.new_attribute10 := l_org_hist_tbl(j).new_attribute10;
16107 		       END IF;
16108 		       --
16109 		       IF nvl(l_org_hist_tbl(j).old_attribute11,'$#$') <>
16110 			  nvl(l_org_hist_tbl(j).new_attribute11,'$#$') THEN
16111 			  l_prev_rec.old_attribute11 := l_org_hist_tbl(j).old_attribute11;
16112 			  l_prev_rec.new_attribute11 := l_org_hist_tbl(j).new_attribute11;
16113 		       END IF;
16114 		       --
16115 		       IF nvl(l_org_hist_tbl(j).old_attribute12,'$#$') <>
16116 			  nvl(l_org_hist_tbl(j).new_attribute12,'$#$') THEN
16117 			  l_prev_rec.old_attribute12 := l_org_hist_tbl(j).old_attribute12;
16118 			  l_prev_rec.new_attribute12 := l_org_hist_tbl(j).new_attribute12;
16119 		       END IF;
16120 		       --
16121 		       IF nvl(l_org_hist_tbl(j).old_attribute13,'$#$') <>
16122 			  nvl(l_org_hist_tbl(j).new_attribute13,'$#$') THEN
16123 			  l_prev_rec.old_attribute13 := l_org_hist_tbl(j).old_attribute13;
16124 			  l_prev_rec.new_attribute13 := l_org_hist_tbl(j).new_attribute13;
16125 		       END IF;
16126 		       --
16127 		       IF nvl(l_org_hist_tbl(j).old_attribute14,'$#$') <>
16128 			  nvl(l_org_hist_tbl(j).new_attribute14,'$#$') THEN
16129 			  l_prev_rec.old_attribute14 := l_org_hist_tbl(j).old_attribute14;
16130 			  l_prev_rec.new_attribute14 := l_org_hist_tbl(j).new_attribute14;
16131 		       END IF;
16132 		       --
16133 		       IF nvl(l_org_hist_tbl(j).old_attribute15,'$#$') <>
16134 			  nvl(l_org_hist_tbl(j).new_attribute15,'$#$') THEN
16135 			  l_prev_rec.old_attribute15 := l_org_hist_tbl(j).old_attribute15;
16136 			  l_prev_rec.new_attribute15 := l_org_hist_tbl(j).new_attribute15;
16137 		       END IF;
16138 		       --
16139 		    ELSE -- Txn id not same
16140 		       IF l_flag = 'Y' THEN
16141 			  update csi_i_org_assignments_h
16145 			      new_relationship_type_code = l_prev_rec.new_relationship_type_code,
16142 			  set old_operating_unit_id = l_prev_rec.old_operating_unit_id,
16143 			      new_operating_unit_id = l_prev_rec.new_operating_unit_id,
16144 			      old_relationship_type_code = l_prev_rec.old_relationship_type_code,
16146 			      old_active_start_date = l_prev_rec.old_active_start_date,
16147 			      new_active_start_date = l_prev_rec.new_active_start_date,
16148 			      old_active_end_date = l_prev_rec.old_active_end_date,
16149 			      new_active_end_date = l_prev_rec.new_active_end_date,
16150 			      old_context = l_prev_rec.old_context,
16151 			      new_context = l_prev_rec.new_context,
16152 			      old_attribute1 = l_prev_rec.old_attribute1,
16153 			      new_attribute1= l_prev_rec.new_attribute1,
16154 			      old_attribute2 = l_prev_rec.old_attribute2,
16155 			      new_attribute2= l_prev_rec.new_attribute2,
16156 			      old_attribute3 = l_prev_rec.old_attribute3,
16157 			      new_attribute3= l_prev_rec.new_attribute3,
16158 			      old_attribute4 = l_prev_rec.old_attribute4,
16159 			      new_attribute4= l_prev_rec.new_attribute4,
16160 			      old_attribute5 = l_prev_rec.old_attribute5,
16161 			      new_attribute5= l_prev_rec.new_attribute5,
16162 			      old_attribute6 = l_prev_rec.old_attribute6,
16163 			      new_attribute6= l_prev_rec.new_attribute6,
16164 			      old_attribute7 = l_prev_rec.old_attribute7,
16165 			      new_attribute7= l_prev_rec.new_attribute7,
16166 			      old_attribute8 = l_prev_rec.old_attribute8,
16167 			      new_attribute8= l_prev_rec.new_attribute8,
16168 			      old_attribute9 = l_prev_rec.old_attribute9,
16169 			      new_attribute9= l_prev_rec.new_attribute9,
16170 			      old_attribute10 = l_prev_rec.old_attribute10,
16171 			      new_attribute10= l_prev_rec.new_attribute10,
16172 			      old_attribute11 = l_prev_rec.old_attribute11,
16173 			      new_attribute11= l_prev_rec.new_attribute11,
16174 			      old_attribute12 = l_prev_rec.old_attribute12,
16175 			      new_attribute12= l_prev_rec.new_attribute12,
16176 			      old_attribute13 = l_prev_rec.old_attribute13,
16177 			      new_attribute13= l_prev_rec.new_attribute13,
16178 			      old_attribute14 = l_prev_rec.old_attribute14,
16179 			      new_attribute14= l_prev_rec.new_attribute14,
16180 			      old_attribute15 = l_prev_rec.old_attribute15,
16181 			      new_attribute15= l_prev_rec.new_attribute15,
16182 			      last_update_date = sysdate
16183 			  where instance_ou_history_id = l_prev_rec.instance_ou_history_id;
16184 			  --
16185 			  FORALL i in 1..l_del_ou_hist_tbl.count
16186 			  delete from csi_i_org_assignments_h
16187 			  where instance_ou_history_id = l_del_ou_hist_tbl(i);
16188 			  --
16189 			  l_flag := 'N';
16190 			  l_del_ou_hist_tbl.DELETE;
16191 		       END IF;
16192 		       l_prev_rec := l_org_hist_tbl(j);
16193 		    END IF;
16194 		 END IF;
16195 	      END LOOP;
16196 	      -- Update the instance_ou_id with the one that is retained
16197 	      IF l_flag = 'Y' THEN -- Just in case the last record in the loop matches with prev txn
16198 		 update csi_i_org_assignments_h
16199 		 set old_operating_unit_id = l_prev_rec.old_operating_unit_id,
16200 		     new_operating_unit_id = l_prev_rec.new_operating_unit_id,
16201 		     old_relationship_type_code = l_prev_rec.old_relationship_type_code,
16202 		     new_relationship_type_code = l_prev_rec.new_relationship_type_code,
16203 		     old_active_start_date = l_prev_rec.old_active_start_date,
16204 		     new_active_start_date = l_prev_rec.new_active_start_date,
16205 		     old_active_end_date = l_prev_rec.old_active_end_date,
16206 		     new_active_end_date = l_prev_rec.new_active_end_date,
16207 		     old_context = l_prev_rec.old_context,
16208 		     new_context = l_prev_rec.new_context,
16209 		     old_attribute1 = l_prev_rec.old_attribute1,
16210 		     new_attribute1= l_prev_rec.new_attribute1,
16211 		     old_attribute2 = l_prev_rec.old_attribute2,
16212 		     new_attribute2= l_prev_rec.new_attribute2,
16213 		     old_attribute3 = l_prev_rec.old_attribute3,
16214 		     new_attribute3= l_prev_rec.new_attribute3,
16215 		     old_attribute4 = l_prev_rec.old_attribute4,
16216 		     new_attribute4= l_prev_rec.new_attribute4,
16217 		     old_attribute5 = l_prev_rec.old_attribute5,
16218 		     new_attribute5= l_prev_rec.new_attribute5,
16219 		     old_attribute6 = l_prev_rec.old_attribute6,
16220 		     new_attribute6= l_prev_rec.new_attribute6,
16221 		     old_attribute7 = l_prev_rec.old_attribute7,
16222 		     new_attribute7= l_prev_rec.new_attribute7,
16223 		     old_attribute8 = l_prev_rec.old_attribute8,
16224 		     new_attribute8= l_prev_rec.new_attribute8,
16225 		     old_attribute9 = l_prev_rec.old_attribute9,
16226 		     new_attribute9= l_prev_rec.new_attribute9,
16227 		     old_attribute10 = l_prev_rec.old_attribute10,
16228 		     new_attribute10= l_prev_rec.new_attribute10,
16229 		     old_attribute11 = l_prev_rec.old_attribute11,
16230 		     new_attribute11= l_prev_rec.new_attribute11,
16231 		     old_attribute12 = l_prev_rec.old_attribute12,
16232 		     new_attribute12= l_prev_rec.new_attribute12,
16233 		     old_attribute13 = l_prev_rec.old_attribute13,
16234 		     new_attribute13= l_prev_rec.new_attribute13,
16235 		     old_attribute14 = l_prev_rec.old_attribute14,
16236 		     new_attribute14= l_prev_rec.new_attribute14,
16237 		     old_attribute15 = l_prev_rec.old_attribute15,
16238 		     new_attribute15= l_prev_rec.new_attribute15,
16239 		     last_update_date = sysdate
16240 		 where instance_ou_history_id = l_prev_rec.instance_ou_history_id;
16241 		 --
16242 		 FORALL i in 1..l_del_ou_hist_tbl.count
16243 		 delete from csi_i_org_assignments_h
16247 		 l_del_ou_hist_tbl.DELETE;
16244 		 where instance_ou_history_id = l_del_ou_hist_tbl(i);
16245 		 --
16246 		 l_flag := 'N';
16248 	      END IF;
16249 	      --
16250 	      FOR x in l_org_hist_tbl.FIRST .. l_org_hist_tbl.LAST LOOP
16251 		 update csi_i_org_assignments_h
16252 		 set instance_ou_id = v_ret_ou_id,
16253 		     last_update_date = sysdate
16254 		 where instance_ou_history_id = l_org_hist_tbl(x).instance_ou_history_id;
16255 	      END LOOP;
16256 	   END IF;
16257 	   --
16258 	   -- Delete the Duplicate Org Assignments
16259 	   FORALL x in l_del_tbl.FIRST .. l_del_tbl.LAST
16260 	      DELETE FROM CSI_I_ORG_ASSIGNMENTS
16261 	      where instance_ou_id = l_del_tbl(x);
16262 	   commit;
16263 	Exception
16264 	   when Process_next then
16265 	      null;
16266 	End;
16267      END LOOP;
16268      commit;
16269   END Delete_Dup_Org_Assignments;
16270   --
16271   PROCEDURE dump_unprocessed_fs_serials IS
16272 
16273     CURSOR fs_cur IS
16274       SELECT inventory_item_id,
16275              serial_number,
16276              instance_id,
16277              date_time_stamp,
16278              mtl_txn_id,
16279              error_message
16280       FROM   csi_ii_forward_sync_temp
16281       WHERE  process_flag <> 'P';
16282 
16283     CURSOR err_txn_cur (p_item_id IN number, p_serial_number IN varchar2) IS
16284       SELECT cdt.mtl_txn_name,
16285              cdt.mtl_txn_id,
16286              cdt.mtl_txn_date,
16287              cte.error_text
16288       FROM   csi_diagnostics_temp cdt,
16289              csi_txn_errors       cte
16290       WHERE  cdt.inventory_item_id = p_item_id
16291       AND    cdt.serial_number = p_serial_number
16292       AND    cte.inv_material_transaction_id = cdt.mtl_txn_id
16293       AND    cte.processed_flag in ('E', 'R')
16294       ORDER BY diag_seq_id;
16295 
16296     l_out varchar2(2000);
16297 
16298   BEGIN
16299     FOR fs_rec IN fs_cur
16300     LOOP
16301 
16302       IF fs_cur%rowcount = 1 THEN
16303         l_out := fill('item_id', 10)||
16304                  fill('serial_number', 20)||
16305                  fill('inst_id',10)||
16306                  fill('time_stamp',12)||
16307                  fill('mtl_txn_id',10)||
16308                  fill('error_message', 18);
16309         log(l_out);
16310         l_out := fill('-------', 10)||
16311                  fill('-------------', 20)||
16312                  fill('-------',10)||
16313                  fill('----------',12)||
16314                  fill('----------',10)||
16315                  fill('-------------', 18);
16316         log(l_out);
16317       END IF;
16318 
16319       l_out := fill(fs_rec.inventory_item_id, 10)||
16320                fill(fs_rec.serial_number, 20)||
16321                fill(fs_rec.instance_id,10)||
16322                fill(fs_rec.date_time_stamp,12)||
16323                fill(fs_rec.mtl_txn_id,10)||
16324                fill(fs_rec.error_message, 18);
16325 
16326       FOR err_txn_rec IN err_txn_cur(fs_rec.inventory_item_id, fs_rec.serial_number)
16327       LOOP
16328         l_out := '  '||
16329                  fill(err_txn_rec.mtl_txn_name, 25)||
16330                  fill(err_txn_rec.mtl_txn_id, 10)||
16331                  fill(err_txn_rec.mtl_txn_date, 12)||
16332                  fill(err_txn_rec.error_text, 30);
16333         log(l_out);
16334       END LOOP;
16335     END LOOP;
16336   END dump_unprocessed_fs_serials;
16337 
16338   PROCEDURE populate_mtl_txn_creation_date
16339   IS
16340     l_creation_date date;
16341 
16342     CURSOR fs_cur IS
16343       SELECT mtl_txn_id
16344       FROM   csi_ii_forward_sync_temp
16345       WHERE  process_flag <> 'P'
16346       AND    mtl_txn_creation_date is null
16347       FOR UPDATE OF mtl_txn_creation_date;
16348   BEGIN
16349     FOR fs_rec IN fs_cur
16350     LOOP
16351       SELECT creation_date
16352       INTO   l_creation_date
16353       FROM   mtl_material_transactions
16354       WHERE  transaction_id = fs_rec.mtl_txn_id;
16355 
16356       UPDATE csi_ii_forward_sync_temp
16357       SET    mtl_txn_creation_date = l_creation_date
16358       WHERE  current of fs_cur;
16359 
16360     END LOOP;
16361     commit;
16362   END populate_mtl_txn_creation_date;
16363 
16364   --
16365   PROCEDURE create_mmt_trigger IS
16366   BEGIN
16367 
16368     log(date_time_stamp||'creating mmt trigger csi_block_mat_txn_trg');
16369 
16370     EXECUTE IMMEDIATE
16371      'CREATE OR REPLACE TRIGGER CSI_BLOCK_MAT_TXN_TRG
16372       BEFORE INSERT ON MTL_MATERIAL_TRANSACTIONS
16373       REFERENCING NEW AS NEW OLD AS OLD
16374       FOR EACH ROW
16375       DECLARE
16376         v_nl_trackable   VARCHAR2(1);
16377       BEGIN
16378         BEGIN
16379           SELECT comms_nl_trackable_flag
16380           INTO v_nl_trackable
16381           FROM MTL_SYSTEM_ITEMS msi,
16382                MTL_PARAMETERS mp
16383           where mp.organization_id = :new.organization_id
16384           and   msi.inventory_item_id = :new.inventory_item_id
16385           and   msi.organization_id = mp.master_organization_id;
16386         EXCEPTION
16387           WHEN no_data_found THEN
16388             NULL;
16389         END;
16390         IF nvl(v_nl_trackable,''N'') = ''Y'' THEN
16391           :new.last_updated_by := null;
16392         END IF;
16393       END;';
16394   EXCEPTION
16395     WHEN OTHERS THEN
16399   PROCEDURE drop_mmt_trigger IS
16396       NULL;
16397   END create_mmt_trigger;
16398 
16400   BEGIN
16401     log(date_time_stamp||'dropping the trigger csi_block_mat_txn_trg');
16402     EXECUTE IMMEDIATE 'DROP TRIGGER CSI_BLOCK_MAT_TXN_TRG';
16403   EXCEPTION
16404     WHEN others THEN
16405       null;
16406   END drop_mmt_trigger;
16407 
16408   PROCEDURE ib_sync(
16409     errbuf            OUT NOCOPY VARCHAR2,
16410     retcode           OUT NOCOPY NUMBER,
16411     p_show_instances  IN         VARCHAR2,
16412     p_mode            IN         VARCHAR2,
16413     p_force_data_fix  IN         VARCHAR2)
16414   IS
16415     l_errbuf           varchar2(2000);
16416     l_retcode          number;
16417     l_recount          number;
16418     comp_error         exception;
16419     l_auto_populate_allowed varchar2(3); --bug 5248037--
16420 
16421     --
16422     TYPE LOOKUP_REC IS RECORD
16423        ( lookup_code       VARCHAR2(30),
16424          enabled_flag      VARCHAR2(1)
16425        );
16426     TYPE LOOKUP_TBL IS TABLE OF LOOKUP_REC INDEX BY BINARY_INTEGER;
16427     --
16428     l_lookup_tbl          LOOKUP_TBL;
16429     l_ctr                 NUMBER := 0;
16430     l_type                VARCHAR2(30) := 'CSI_CORRECTION_ROUTINES';
16431     --
16432     CURSOR CSI_LOOKUP_CUR IS
16433     select lookup_code,enabled_flag
16434     from CSI_LOOKUPS
16435     where lookup_type = l_type;
16436     --
16437     FUNCTION Is_Routine_Enabled(
16438       p_lookup_tbl       in lookup_tbl,
16439       p_routine_name     in varchar2)
16440     RETURN BOOLEAN
16441     IS
16442        l_ret_value   BOOLEAN := TRUE;
16443        l_flag        VARCHAR2(1);
16444     BEGIN
16445        l_flag := 'Y'; -- No data will qualify for Procedure execution
16446        --
16447        IF p_lookup_tbl.count > 0 THEN
16448 	  FOR J IN p_lookup_tbl.FIRST .. p_lookup_tbl.LAST LOOP
16449 	     IF p_lookup_tbl(J).lookup_code = p_routine_name THEN
16450 		l_flag := p_lookup_tbl(J).enabled_flag;
16451 		exit;
16452 	     END IF;
16453 	  END LOOP;
16454        END IF;
16455        --
16456        IF l_flag = 'Y' THEN
16457 	  l_ret_value := TRUE;
16458        ELSE
16459 	  l_ret_value := FALSE;
16460        END IF;
16461        --
16462        RETURN l_ret_value;
16463     END Is_Routine_Enabled;
16464     --
16465   BEGIN
16466 
16467     debug_off;
16468 
16469     log('------------------------------------------------------------------------');
16470     log(date_time_stamp||'start ib_sync ');
16471     log('  parameter - Show Instances    :'||p_show_instances);
16472     log('  parameter - Mode of execution :'||p_mode);
16473     --
16474     IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
16475        csi_gen_utility_pvt.populate_install_param_rec;
16476     END IF;
16477     --
16478     IF csi_datastructures_pub.g_install_param_rec.fetch_flag = 'N' OR
16479        csi_datastructures_pub.g_install_param_rec.freeze_flag = 'N' THEN
16480        log('Install Parameters no set. Process terminating...');
16481        errbuf := 'CSI Install Parameters not set...';
16482        retcode := 1;
16483        RAISE comp_error;
16484     END IF;
16485     -- checks block -- show stoppers
16486     log(date_time_stamp||'get_nl_trackable_report');
16487     csi_diagnostics_pkg.get_nl_trackable_report;
16488 
16489     IF l_global_warning_flag = 'Y' THEN
16490       log('Inconsistent IB trackable flag setup in org items and master items detected.');
16491       log('Please fix the items in the report csinonl.<mmddyy>.dbg and then rerun the program.');
16492       log('Process terminating...');
16493       errbuf := 'Inconsistent IB trackability in org items and master items detected';
16494       retcode := 1;
16495       RAISE comp_error;
16496     END IF;
16497 
16498     -- reports block
16499     log(date_time_stamp||'check_org_uniqueness');
16500     csi_diagnostics_pkg.check_org_uniqueness;
16501 
16502     log(date_time_stamp||'get_non_srl_rma_report');
16503     csi_diagnostics_pkg.get_non_srl_rma_report(
16504       p_show_instances  => p_show_instances);
16505     --
16506     -- Enable the Lookup Values that contain the Data Fix routines so that they all get executed.
16507     --
16508     IF nvl(p_force_data_fix,'N') = 'Y' THEN
16509        UPDATE FND_LOOKUP_VALUES
16510        SET enabled_flag = 'Y',
16511 	   last_updated_by = -1,
16512 	   last_update_date = sysdate
16513        WHERE lookup_type = l_type;
16514        --
16515        commit;
16516     END IF;
16517     --
16518     IF p_mode IN ('C', 'S') THEN
16519       -- datafix block -
16520       FOR csi_rec IN CSI_LOOKUP_CUR LOOP
16521          l_ctr := l_ctr + 1;
16522          l_lookup_tbl(l_ctr).lookup_code := csi_rec.lookup_code;
16523          l_lookup_tbl(l_ctr).enabled_flag := csi_rec.enabled_flag;
16524       END LOOP;
16525       --
16526       IF Is_Routine_Enabled(l_lookup_tbl,'DELETE_DUP_RELATIONSHIP') THEN
16527          Update_Lookup('DELETE_DUP_RELATIONSHIP');
16528          log(date_time_stamp||'delete_dup_relationship');
16529          csi_diagnostics_pkg.Delete_Dup_Relationship;
16530          commit;
16531       ELSE
16532          log(date_time_stamp||'delete_dup_relationship already executed...');
16533       END IF;
16534 
16535       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_NO_CTL_SRL_LOT_INST') THEN
16536          Update_Lookup('UPDATE_NO_CTL_SRL_LOT_INST');
16537          log(date_time_stamp||'update_no_ctl_srl_lot_inst');
16541          log(date_time_stamp||'Update_No_Ctl_Srl_Lot_Inst already executed...');
16538          csi_diagnostics_pkg.Update_No_Ctl_Srl_Lot_Inst;
16539          commit;
16540       ELSE
16542       END IF;
16543 
16544       IF Is_Routine_Enabled(l_lookup_tbl,'DELETE_DUP_SRL_INV_INSTANCE') THEN
16545          Update_Lookup('DELETE_DUP_SRL_INV_INSTANCE');
16546          log(date_time_stamp||'delete_dup_srl_inv_instance');
16547          csi_diagnostics_pkg.Delete_Dup_Srl_Inv_Instance;
16548       ELSE
16549          log(date_time_stamp||'Delete_Dup_Srl_Inv_Instance already executed...');
16550       END IF;
16551 
16552       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_DUP_SRL_INSTANCE') THEN
16553          Update_Lookup('UPDATE_DUP_SRL_INSTANCE');
16554          log(date_time_stamp||'update_dup_srl_instance');
16555          csi_diagnostics_pkg.Update_Dup_Srl_Instance;
16556          commit;
16557       ELSE
16558          log(date_time_stamp||'Update_Dup_Srl_Instance already executed...');
16559       END IF;
16560 
16561       IF Is_Routine_Enabled(l_lookup_tbl,'DEL_API_DUP_SRL_INSTANCE') THEN
16562          Update_Lookup('DEL_API_DUP_SRL_INSTANCE');
16563          log(date_time_stamp||'del_api_dup_srl_instance');
16564          csi_diagnostics_pkg.Del_API_Dup_Srl_Instance;
16565          commit;
16566       ELSE
16567          log(date_time_stamp||'Del_API_Dup_Srl_Instance already executed...');
16568       END IF;
16569 
16570       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_INSTANCE_USAGE') THEN
16571          Update_Lookup('UPDATE_INSTANCE_USAGE');
16572          log(date_time_stamp||'update_instance_usage');
16573          csi_diagnostics_pkg.Update_Instance_Usage;
16574          commit;
16575       ELSE
16576          log(date_time_stamp||'Update_Instance_Usage already executed...');
16577       END IF;
16578 
16579       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_FULL_DUMP_FLAG') THEN
16580          Update_Lookup('UPDATE_FULL_DUMP_FLAG');
16581          log(date_time_stamp||'update_full_dump_flag');
16582          csi_diagnostics_pkg.Update_Full_dump_flag;
16583          commit;
16584       ELSE
16585          log(date_time_stamp||'Update_Full_dump_flag already executed...');
16586       END IF;
16587 
16588       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_VLD_ORGANIZATION') THEN
16589          Update_Lookup('UPDATE_VLD_ORGANIZATION');
16590          log(date_time_stamp||'update_vld_organization');
16591          csi_diagnostics_pkg.Update_Vld_Organization;
16592          commit;
16593       ELSE
16594          log(date_time_stamp||'Update_Vld_Organization already executed...');
16595       END IF;
16596 
16597       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_REVISION') THEN
16598          Update_Lookup('UPDATE_REVISION');
16599          log(date_time_stamp||'update_revision');
16600          csi_diagnostics_pkg.Update_Revision;
16601          commit;
16602       ELSE
16603          log(date_time_stamp||'Update_Revision already executed...');
16604       END IF;
16605 
16606       IF Is_Routine_Enabled(l_lookup_tbl,'MERGE_NON_SRL_INV_INSTANCE') THEN
16607          Update_Lookup('MERGE_NON_SRL_INV_INSTANCE');
16608          log(date_time_stamp||'merge_non_srl_inv_instance');
16609          csi_diagnostics_pkg.merge_non_srl_inv_instance;
16610          commit;
16611       ELSE
16612          log(date_time_stamp||'merge_non_srl_inv_instance already executed...');
16613       END IF;
16614 
16615       IF Is_Routine_Enabled(l_lookup_tbl,'DELETE_DUP_ACCOUNT') THEN
16616          Update_Lookup('DELETE_DUP_ACCOUNT');
16617          log(date_time_stamp||'delete_dup_account');
16618          csi_diagnostics_pkg.delete_dup_account;
16619          commit;
16620       ELSE
16621          log(date_time_stamp||'delete_dup_account already executed...');
16622       END IF;
16623 
16624       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_INSTANCE_PARTY_SOURCE') THEN
16625          Update_Lookup('UPDATE_INSTANCE_PARTY_SOURCE');
16626          log(date_time_stamp||'update_instance_party_source');
16627          csi_diagnostics_pkg.update_instance_party_source;
16628          commit;
16629       ELSE
16630          log(date_time_stamp||'update_instance_party_source already executed...');
16631       END IF;
16632 
16633       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_CONTACT_PARTY_RECORD') THEN
16634          Update_Lookup('UPDATE_CONTACT_PARTY_RECORD');
16635          log(date_time_stamp||'update_contact_party_record');
16636          csi_diagnostics_pkg.update_contact_party_record;
16637          commit;
16638       ELSE
16639          log(date_time_stamp||'update_contact_party_record already executed...');
16640       END IF;
16641 
16642       IF Is_Routine_Enabled(l_lookup_tbl,'REVERT_PARTY_REL_TYPE_UPDATE') THEN
16643          Update_Lookup('REVERT_PARTY_REL_TYPE_UPDATE');
16644          log(date_time_stamp||'revert_party_rel_type_update');
16645          csi_diagnostics_pkg.revert_party_rel_type_update;
16646          commit;
16647       ELSE
16648          log(date_time_stamp||'revert_party_rel_type_update already executed...');
16649       END IF;
16650 
16651       IF Is_Routine_Enabled(l_lookup_tbl,'UPDATE_MASTER_ORGANIZATION_ID') THEN
16652          Update_Lookup('UPDATE_MASTER_ORGANIZATION_ID');
16653          log(date_time_stamp||'update_master_organization_id');
16654          csi_diagnostics_pkg.update_master_organization_ID;
16655          commit;
16656       ELSE
16657          log(date_time_stamp||'update_master_organization_ID already executed...');
16658       END IF;
16659 
16660       IF Is_Routine_Enabled(l_lookup_tbl,'MISSING_MTL_TXN_ID_IN_CSI') THEN
16664          commit;
16661          Update_Lookup('MISSING_MTL_TXN_ID_IN_CSI');
16662          log(date_time_stamp||'missing_mtl_txn_id_in_csi');
16663          csi_diagnostics_pkg.missing_mtl_txn_id_in_csi;
16665       ELSE
16666          log(date_time_stamp||'missing_mtl_txn_id_in_csi already executed...');
16667       END IF;
16668 
16669       IF Is_Routine_Enabled(l_lookup_tbl,'FIX_WIP_USAGE') THEN
16670          Update_Lookup('FIX_WIP_USAGE');
16671          log(date_time_stamp||'fix_wip_usage');
16672          csi_diagnostics_pkg.fix_wip_usage;
16673          commit;
16674       ELSE
16675          log(date_time_stamp||'fix_wip_usage already executed...');
16676       END IF;
16677 
16678       IF Is_Routine_Enabled(l_lookup_tbl,'DELETE_DUP_NSRL_WIP_INSTANCES') THEN
16679          Update_Lookup('DELETE_DUP_NSRL_WIP_INSTANCES');
16680          log(date_time_stamp||'delete_dup_nsrl_wip_instances');
16681          csi_diagnostics_pkg.delete_dup_nsrl_wip_instances;
16682          commit;
16683       ELSE
16684          log(date_time_stamp||'delete_dup_nsrl_wip_instances already executed...');
16685       END IF;
16686 
16687       IF Is_Routine_Enabled(l_lookup_tbl,'DELETE_DUP_ORG_ASSIGNMENTS') THEN
16688          Update_Lookup('DELETE_DUP_ORG_ASSIGNMENTS');
16689          log(date_time_stamp||'Delete_Dup_Org_Assignments');
16690          csi_diagnostics_pkg.Delete_Dup_Org_Assignments;
16691          commit;
16692       ELSE
16693          log(date_time_stamp||'Delete_Dup_Org_Assignments already executed...');
16694       END IF;
16695       --
16696       commit;
16697 
16698     END IF;
16699 
16700     IF p_mode = 'S' THEN -- Synchronize IB
16701 
16702       create_mmt_trigger;
16703 
16704       -- read pending messages in SFM queue and pump them as errors
16705       log(date_time_stamp||'deque_messages_as_errors');
16706       dequeue_messages_as_errors;
16707 
16708       -- spawn the requbmit interface for the pumped errors
16709       log(date_time_stamp||'Resubmit interface for pending messages');
16710       csi_resubmit_pub.resubmit_interface(
16711         errbuf        => l_errbuf,
16712         retcode       => l_retcode,
16713         p_option      => 'SELECTED');
16714 
16715       log(date_time_stamp||'Resubmit interface completed successfully.');
16716 
16717     END IF;
16718 
16719     IF p_mode in ('C', 'S') THEN
16720 
16721       IF Is_Routine_Enabled(l_lookup_tbl,'EXPIRE_NON_TRACKABLE_INSTANCE') THEN
16722          Update_Lookup('EXPIRE_NON_TRACKABLE_INSTANCE');
16723          log(date_time_stamp||'expire_non_trackable_instance');
16724          csi_diagnostics_pkg.expire_non_trackable_instance;
16725          commit;
16726       ELSE
16727          log(date_time_stamp||'expire_non_trackable_instance already executed...');
16728       END IF;
16729 
16730       log(date_time_stamp||'fix_srlsoi_returned_serials');
16731       csi_diagnostics_pkg.fix_srlsoi_returned_serials;
16732 
16733       log(date_time_stamp||'mark_error_transactions');
16734       csi_diagnostics_pkg.mark_error_transactions;
16735 
16736       log(date_time_stamp||'create_or_update_shipping_inst');
16737       csi_diagnostics_pkg.create_or_update_shipping_inst;
16738 
16739       l_auto_populate_allowed := FND_PROFILE.VALUE('CSI_AUTO_POPULATE_INSTANCE'); --bug 5248037--
16740       log('Auto population allowed '||l_auto_populate_allowed);
16741 
16742       --Added IF condition for bug 5248037--
16743       IF UPPER(l_auto_populate_allowed) = 'Y'  THEN
16744 	log(date_time_stamp||'create_nsrl_rma_tld');
16745         csi_diagnostics_pkg.create_nsrl_rma_tld;
16746       END IF;
16747 
16748       -- serial data spool and preprocess
16749       log(date_time_stamp||'get_srldata');
16750       csi_diagnostics_pkg.get_srldata;
16751 
16752       log(date_time_stamp||'preprocess_srldata');
16753       csi_diagnostics_pkg.preprocess_srldata;
16754 
16755       -- fix srl errors
16756       log(date_time_stamp||'fix_srldata');
16757       csi_diagnostics_pkg.fix_srldata;
16758 
16759       -- serial correction reports
16760       log(date_time_stamp||'spool errors serial Info');
16761       csi_diagnostics_pkg.spool_srldata('ERRORS');
16762 
16763       -- serial correction reports
16764       log(date_time_stamp||'spool all serial info');
16765       csi_diagnostics_pkg.spool_srldata('ALL');
16766 
16767       -- spawn the resubmit interface for the marked errors
16768       log(date_time_stamp||'Resubmit errors for the corrected serial numbers');
16769       csi_resubmit_pub.Resubmit_Interface(
16770         errbuf        => l_errbuf,
16771         retcode       => l_retcode,
16772         p_option      => 'SELECTED');
16773       log(date_time_stamp||'Resubmit interface completed successfully.');
16774 
16775       -- for the newly created column populate the value reading mtl_txn_id
16776       populate_mtl_txn_creation_date;
16777 
16778       -- forward sync serial routine
16779       log(date_time_stamp||'forward_sync');
16780       csi_diagnostics_pkg.forward_sync;
16781       commit;
16782 
16783       -- Check whether all the instances are forward synched
16784       BEGIN
16785         SELECT count(*)
16786         INTO   l_recount
16787         FROM   csi_ii_forward_sync_temp
16788         WHERE  process_flag <> 'P';
16789       END;
16793         errbuf  := 'Forward Sync did not complete successfully.';
16790       --
16791       IF nvl(l_recount,0) > 0 THEN
16792         log( 'Forward Synch did not complete successfully. unprocessed count : '||l_recount);
16794         retcode := 1;
16795         log(date_time_stamp||'dump_unprocessed_fs_serials');
16796         dump_unprocessed_fs_serials;
16797       END IF;
16798       --
16799     END IF;
16800 
16801     IF p_mode = 'S' THEN -- synchronize IB
16802 
16803       IF l_global_sync_flag = 'Y' THEN
16804         log('Error condition detected for SRL uniqueness across org/Non serial RMA failures.');
16805         log('Please check the items reported in the concurrent request output.');
16806         log('Process terminating...');
16807         errbuf  := 'SRL uniqueness across org OR Non serial RMA failures';
16808         retcode := 1;
16809         Raise comp_error;
16810       END IF;
16811 
16812       IF is_sfm_active THEN
16813         log('Please shut down the SFM Event Manager queue and re-run the program.');
16814         log('Process terminating...');
16815         retcode := 1;
16816         errbuf  := 'Please shut down the SFM event manager queue and re-run the program.';
16817         Raise comp_error;
16818       END IF;
16819       --
16820 
16821       log(date_time_stamp||'sync_inv_serials');
16822       csi_diagnostics_pkg.sync_inv_serials;
16823 
16824       log(date_time_stamp||'ib_inv_synch_non_srl');
16825       csi_diagnostics_pkg.ib_inv_synch_non_srl;
16826 
16827       log(date_time_stamp||'reverse_ib_inv_synch');
16828       csi_diagnostics_pkg.reverse_ib_inv_synch;
16829 
16830     END IF;
16831 
16832     drop_mmt_trigger;
16833 
16834     commit;
16835 
16836     log(date_time_stamp||'end ib_sync');
16837     log('------------------------------------------------------------------------');
16838 
16839   EXCEPTION
16840     WHEN comp_error THEN
16841       drop_mmt_trigger;
16842     WHEN OTHERS THEN
16843       drop_mmt_trigger;
16844       log('others error in ib_sync : '||sqlerrm);
16845       retcode := 1;
16846       errbuf  := sqlerrm;
16847   END ib_sync;
16848 
16849 
16850 PROCEDURE create_oper_upd_manager
16851   (x_errbuf         OUT  NOCOPY VARCHAR2,
16852    x_retcode        OUT  NOCOPY VARCHAR2
16853   )
16854  IS
16855  BEGIN
16856    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Start create_oper_upd_manager');
16857   -- Parent Processing
16858 
16859   AD_CONC_UTILS_PKG.Submit_Subrequests
16860     (x_errbuf                    => x_errbuf,
16861      x_retcode                   => x_retcode,
16862      x_workerconc_app_shortname  => 'CSI',
16863      x_workerconc_progname       => 'CSIUPOPS',
16864      x_batch_size                => 1000,
16865      x_num_workers               => 5
16866     );
16867 
16868   FND_FILE.PUT_LINE(FND_FILE.LOG, 'x_errbuf: ' || x_errbuf);
16869   FND_FILE.PUT_LINE(FND_FILE.LOG, 'x_retcode: ' || x_retcode);
16870   FND_FILE.PUT_LINE(FND_FILE.LOG, 'End create_oper_upd_manager');
16871 
16872  END create_oper_upd_manager;
16873 
16874 PROCEDURE create_oper_upd_worker
16875   (x_errbuf         OUT  NOCOPY VARCHAR2,
16876    x_retcode        OUT  NOCOPY VARCHAR2,
16877    x_batch_size     IN   NUMBER,
16878    x_worker_id      IN   NUMBER,
16879    x_num_workers    IN   NUMBER
16880   )
16881  IS
16882    l_table_owner           VARCHAR2(30);
16883    l_product               VARCHAR2(30) := 'CSI';
16884    l_status                VARCHAR2(30);
16885    l_industry              VARCHAR2(30);
16886    l_retstatus             BOOLEAN;
16887    l_batch_size            NUMBER := 1000;
16888    l_worker_id             NUMBER:=5;
16889    l_num_workers           NUMBER := 5;
16890    l_any_rows_to_process   BOOLEAN;
16891    l_table_name            VARCHAR2(30) := 'CSI_ITEM_INSTANCES';
16892    l_update_name           VARCHAR2(30) := 'csiupops.sql';
16893    l_start_rowid           rowid;
16894    l_end_rowid             rowid;
16895    l_rows_processed        number;
16896  BEGIN
16897 
16898   l_retstatus := fnd_installation.get_app_info(
16899                      l_product, l_status, l_industry, l_table_owner);
16900 
16901   IF ((l_retstatus = FALSE) OR (l_table_owner IS NULL)) THEN
16902        RAISE_APPLICATION_ERROR(-20001,
16903           'Cannot get schema name for product : '||l_product);
16904   END IF;
16905   FND_FILE.PUT_LINE(FND_FILE.LOG, '  x_worker_id : '||x_worker_id);
16906   FND_FILE.PUT_LINE(FND_FILE.LOG, 'x_num_workers : '||x_num_workers);
16907   ad_parallel_updates_pkg.initialize_rowid_range(
16908       ad_parallel_updates_pkg.ROWID_RANGE
16909       ,l_table_owner
16910       ,l_table_name
16911       ,l_update_name
16912       ,x_worker_id
16913       ,x_num_workers
16914       ,x_batch_size,0);
16915 
16916    ad_parallel_updates_pkg.get_rowid_range(
16917        l_start_rowid
16918       ,l_end_rowid
16919       ,l_any_rows_to_process
16920       ,x_batch_size
16921       ,TRUE);
16922 
16923    WHILE(l_any_rows_to_process = TRUE)
16924    LOOP
16925 
16926       UPDATE /*+ rowid(cii) */ csi_item_instances cii
16927       SET    operational_status_code =
16928              DECODE(instance_usage_code,'IN_SERVICE','IN_SERVICE','OUT_OF_SERVICE',
16929                  'OUT_OF_SERVICE', 'INSTALLED','INSTALLED','NOT_USED')
16930              ,LAST_UPDATE_DATE = sysdate
16931              ,LAST_UPDATED_BY = -1
16932       where  operational_status_code IS NULL
16933       AND    rowid between l_start_rowid and l_end_rowid;
16934 
16935       l_rows_processed := SQL%ROWCOUNT;
16936 
16937       ad_parallel_updates_pkg.processed_rowid_range(
16938            l_rows_processed,
16939            l_end_rowid);
16940 
16941       commit;
16942 
16943       ad_parallel_updates_pkg.get_rowid_range(
16944            l_start_rowid,
16945            l_end_rowid,
16946            l_any_rows_to_process,
16947            x_batch_size,
16948            FALSE);
16949    END LOOP;
16950    x_retcode := AD_CONC_UTILS_PKG.CONC_SUCCESS;
16951 
16952     EXCEPTION
16953       WHEN OTHERS THEN
16954         x_retcode := AD_CONC_UTILS_PKG.CONC_FAIL;
16955         RAISE;
16956  END create_oper_upd_worker;
16957 
16958 END csi_diagnostics_pkg;