DBA Data[Home] [Help]

PACKAGE BODY: APPS.INV_EBI_ITEM_PUB

Source


1 PACKAGE BODY INV_EBI_ITEM_PUB AS
2 /* $Header: INVEIPITB.pls 120.24.12010000.7 2009/02/19 11:21:36 prepatel ship $ */
3 
4 /************************************************************************************
5 --      API name        : validate_item
6 --      Type            : Public
7 --      Function        :
8 --
9 ************************************************************************************/
10 PROCEDURE validate_item (
11     p_transaction_type  IN         VARCHAR2
12    ,p_item              IN         inv_ebi_item_obj
13    ,x_out               OUT NOCOPY inv_ebi_item_output_obj
14 ) IS
15   l_master_org_id               NUMBER;
16   l_is_master_org               VARCHAR2(3) := FND_API.g_false;
17   l_is_new_item_request_reqd    VARCHAR2(3) := FND_API.g_false;
18   l_output_status               inv_ebi_output_status;
19   l_item_catalog_group_code     VARCHAR2(40);
20   l_pk_col_name_val_pairs       INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl;
21 BEGIN
22   l_output_status := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
23   x_out           := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL);
24   FND_MSG_PUB.initialize;
25   l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
26   IF(p_transaction_type = INV_EBI_ITEM_PUB.g_otype_create) THEN
27     IF(p_item.main_obj_type.organization_id IS NULL OR p_item.main_obj_type.organization_id = fnd_api.g_miss_num) THEN
28 
29       x_out.organization_id := INV_EBI_ITEM_HELPER.get_default_master_org(
30                                              p_config  => p_item.name_value_tbl
31                                            );
32 
33       IF x_out.organization_id IS NULL  THEN
34         FND_MESSAGE.set_name('INV','INV_EBI_NO_DEFAULT_ORG');
35         FND_MSG_PUB.add;
36         RAISE FND_API.g_exc_error;
37       ELSE
38         l_is_master_org := FND_API.g_true;
39       END IF;
40 
41     END IF;
42 
43     IF(p_item.main_obj_type.organization_id IS NOT NULL
44     AND p_item.main_obj_type.organization_id <> FND_API.g_miss_num) THEN
45       l_is_master_org := INV_EBI_UTIL.is_master_org(
46                            p_organization_id => p_item.main_obj_type.organization_id
47                          );
48 
49     END IF;
50 
51     IF(l_is_master_org = FND_API.g_true) THEN
52       l_is_new_item_request_reqd := INV_EBI_ITEM_HELPER.is_new_item_request_reqd(
53                                      p_item_catalog_group_id => p_item.main_obj_type.item_catalog_group_id
54                                     );
55 
56       IF(l_is_new_item_request_reqd = FND_API.g_true) THEN
57         FND_MESSAGE.set_name('INV','INV_EBI_ICC_CONFG_FOR_NIR');
58         IF p_item.main_obj_type.item_catalog_group_code IS  NULL THEN
59           l_pk_col_name_val_pairs.EXTEND(1);
60           l_pk_col_name_val_pairs(1).name  := 'item_catalog_group_id';
61           l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.item_catalog_group_id;
62           l_item_catalog_group_code := INV_EBI_ITEM_HELPER.id_to_value(
63                                            p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
64                                           ,p_entity_name            => INV_EBI_ITEM_HELPER.G_ITEM_CATALOG_GROUP
65                                          );
66           l_pk_col_name_val_pairs.TRIM(1);
67 
68         ELSE
69           l_item_catalog_group_code := p_item.main_obj_type.item_catalog_group_code;
70         END IF;
71 
72         FND_MESSAGE.set_token('ITEM',p_item.main_obj_type.item_number);
73         FND_MESSAGE.set_token('ITEM_CATALOG', l_item_catalog_group_code);
74         FND_MSG_PUB.add;
75         RAISE  FND_API.g_exc_error;
76 
77       END IF;
78     END IF;
79   END IF;
80   EXCEPTION
81   WHEN FND_API.g_exc_error THEN
82     x_out.output_status.return_status :=  FND_API.g_ret_sts_error;
83     IF(x_out.output_status.msg_data IS NULL) THEN
84       FND_MSG_PUB.count_and_get(
85         p_encoded => FND_API.g_false
86        ,p_count   => x_out.output_status.msg_count
87        ,p_data    => x_out.output_status.msg_data
88      );
89     END IF;
90   WHEN OTHERS THEN
91     x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
92     IF (x_out.output_status.msg_data IS NOT NULL) THEN
93       x_out.output_status.msg_data  :=  x_out.output_status.msg_data||' -> INV_EBI_ITEM_PUB.validate_item ';
94     ELSE
95       x_out.output_status.msg_data  :=  SQLERRM||' INV_EBI_ITEM_PUB.validate_item ';
96     END IF;
97 END validate_item;
98 
99 /************************************************************************************
100 --      API name        : process_item
101 --      Type            : Public
102 --      Function        :
103 --
104 ************************************************************************************/
105 PROCEDURE process_item(
106   p_commit        IN  VARCHAR2
107  ,p_operation     IN  VARCHAR2
108  ,p_item          IN  inv_ebi_item_obj
109  ,x_out           OUT NOCOPY inv_ebi_item_output_obj
110 )
111 IS
112   l_item            inv_ebi_item_obj;
113   l_output_status   inv_ebi_output_status;
114   l_api_version     NUMBER:=1.0;
115   l_out             inv_ebi_item_output_obj;
116 
117 BEGIN
118   SAVEPOINT inv_ebi_process_item_save_pnt;
119   ERROR_HANDLER.initialize;
120   FND_MSG_PUB.initialize;
121 
122   l_output_status  := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
123   x_out            := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL);
124   INV_EBI_UTIL.SETUP();  --- one time for each process.
125 
126   INV_EBI_UTIL.debug_line('STEP: 10 '||'START INSIDE  INV_EBI_ITEM_PUB.process_item '||
127 			  'ORGANIZATION CODE: '||p_item.main_obj_type.organization_code||
128 			  'Item Number: '||p_item.main_obj_type.item_number
129 			  );
130   INV_EBI_UTIL.debug_line('STEP: 20 '||'START CALLING INV_EBI_ITEM_HELPER.populate_item_ids ');
131   INV_EBI_ITEM_HELPER.populate_item_ids(
132      p_item  =>  p_item
133     ,x_out   =>  x_out
134     ,x_item  =>  l_item
135   );
136   INV_EBI_UTIL.debug_line('STEP: 30 '||'END CALLING INV_EBI_ITEM_HELPER.populate_item_ids ');
137 
138   IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
139     RAISE  FND_API.g_exc_unexpected_error;
140   END IF;
141 
142  INV_EBI_UTIL.debug_line('STEP: 40 '||'START CALLING validate_item ');
143   validate_item (
144      p_transaction_type  =>  p_operation
145     ,p_item              =>  l_item
146     ,x_out               =>  x_out
147   );
148  INV_EBI_UTIL.debug_line('STEP: 50 '||'END CALLING validate_item ');
149 
150   IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
151      RAISE  FND_API.g_exc_unexpected_error;
152   END IF;
153 
154   IF(l_item.main_obj_type.organization_id IS NULL OR l_item.main_obj_type.organization_id = FND_API.g_miss_num) THEN
155     l_item.main_obj_type.organization_id := x_out.organization_id;
156   END IF;
157 
158   IF (l_item.main_obj_type.effectivity_date IS NULL  OR
159     l_item.main_obj_type.effectivity_date = fnd_api.g_miss_date OR
160     l_item.main_obj_type.effectivity_date <= sysdate ) THEN
161     l_item.main_obj_type.effectivity_date := sysdate+(2/(60*60*24));
162   END IF;
163 
164   --To create Production item
165   INV_EBI_UTIL.debug_line('STEP: 60 '||'START CALLING INV_EBI_ITEM_HELPER.sync_item ');
166 
167   INV_EBI_ITEM_HELPER.sync_item (
168      p_commit     => FND_API.g_false
169     ,p_operation  => p_operation
170     ,p_item       => l_item
171     ,x_out        => l_out
172   );
173 
174   INV_EBI_UTIL.debug_line('STEP: 70 '||'END CALLING INV_EBI_ITEM_HELPER.sync_item ');
175   IF (l_out.output_status.return_status <> fnd_api.g_ret_sts_success) THEN
176     x_out.output_status.msg_data := l_out.output_status.msg_data;
177     RAISE  fnd_api.g_exc_unexpected_error;
178   END IF;
179 
180   x_out.inventory_item_id    :=  l_out.inventory_item_id;
181   x_out.organization_id      :=  l_out.organization_id;
182   x_out.organization_code    :=  l_out.organization_code;
183   x_out.item_number          :=  l_out.item_number;
184   x_out.category_output      :=  l_out.category_output;
185   x_out.operating_unit       :=  l_out.operating_unit;
186   x_out.operating_unit_id    :=  l_out.operating_unit_id;
187 
188   -- To process Udas
189   IF (INV_EBI_UTIL.is_pim_installed AND l_item.main_obj_type.item_catalog_group_id IS NOT NULL ) THEN
190     IF (l_item.uda_type IS NOT  NULL AND l_item.uda_type.attribute_group_tbl.COUNT > 0) THEN
191       INV_EBI_ITEM_HELPER.process_item_uda(
192         p_api_version           =>  l_api_version
193        ,p_inventory_item_id     =>  x_out.inventory_item_id
194        ,p_organization_id       =>  x_out.organization_id
195        ,p_item_catalog_group_id =>  l_item.main_obj_type.item_catalog_group_id
196        ,p_revision_id           =>  l_item.main_obj_type.revision_id
197        ,p_revision_code         =>  l_item.main_obj_type.revision_code
198        ,p_uda_input_obj         =>  l_item.uda_type
199        ,p_commit                =>  fnd_api.g_false
200        ,x_uda_output_obj        =>  l_out
201      );
202     END IF;
203   END IF;
204 
205   IF (l_out.output_status.return_status <> fnd_api.g_ret_sts_success) THEN
206     RAISE  FND_API.g_exc_unexpected_error;
207   END IF;
208 
209   x_out.uda_output  :=  l_out.uda_output;
210 
211   x_out.output_status.error_table  := INV_EBI_UTIL.get_error_table();
212 
213   x_out.output_status.msg_data := INV_EBI_UTIL.get_error_table_msgtxt(x_out.output_status.error_table);
214 
215   IF FND_API.to_boolean(p_commit) THEN
216     COMMIT;
217   END IF;
218   INV_EBI_UTIL.debug_line('STEP: 80 '||'END INSIDE INV_EBI_ITEM_HELPER.process_item '||
219 			  'ORGANIZATION CODE: '||p_item.main_obj_type.organization_code||
220 			  'Item Number: '||p_item.main_obj_type.item_number
221 			  );
222   INV_EBI_UTIL.wrapup;
223   EXCEPTION
224     WHEN FND_API.g_exc_error THEN
225       ROLLBACK TO inv_ebi_process_item_save_pnt;
226       x_out.output_status.return_status :=  FND_API.g_ret_sts_error;
227       IF(x_out.output_status.msg_data IS NULL) THEN
228         FND_MSG_PUB.count_and_get(
229           p_encoded => FND_API.g_false
230          ,p_count   => x_out.output_status.msg_count
231          ,p_data    => x_out.output_status.msg_data
232        );
233     END IF;
234     WHEN FND_API.g_exc_unexpected_error THEN
235       ROLLBACK TO inv_ebi_process_item_save_pnt;
236       x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
237       IF(x_out.output_status.msg_data IS NULL) THEN
238             FND_MSG_PUB.count_and_get(
239               p_encoded => FND_API.g_false
240              ,p_count   => x_out.output_status.msg_count
241              ,p_data    => x_out.output_status.msg_data
242            );
243     END IF;
244    WHEN OTHERS THEN
245       ROLLBACK TO inv_ebi_process_item_save_pnt;
246       x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
247       IF (x_out.output_status.msg_data IS NOT NULL) THEN
248         x_out.output_status.msg_data  :=  x_out.output_status.msg_data ||' -> INV_EBI_ITEM_PUB.process_item ';
249       ELSE
250         x_out.output_status.msg_data :=  SQLERRM ||' INV_EBI_ITEM_PUB.process_item ';
251       END IF;
252 END process_item;
253 
254 /************************************************************************************
255 --      API name        : get_item_balance
256 --      Type            : Public
257 --      Function        :
258 ************************************************************************************/
259 PROCEDURE get_item_balance(
260   p_items                       IN              inv_ebi_item_list
261  ,x_item_balance_output         OUT NOCOPY      inv_ebi_item_bal_output_list
262  ,x_return_status               OUT NOCOPY      VARCHAR2
263  ,x_msg_count                   OUT NOCOPY      NUMBER
264  ,x_msg_data                    OUT NOCOPY      VARCHAR2
265 )
266 IS
267   l_return_status               VARCHAR2(1);
268   l_msg_count                   NUMBER;
269   l_msg_data                    VARCHAR2(1000);
270   l_items                       inv_ebi_item_list;
271   l_item_balance_input          inv_ebi_item_bal_input_list;
272   l_item_bal_input_tbl          inv_ebi_item_bal_input_tbl;
273   l_item_bal_input_obj          inv_ebi_item_bal_input_obj;
274   l_api_version                 NUMBER:=1.0;
275 
276 BEGIN
277   l_item_bal_input_tbl := inv_ebi_item_bal_input_tbl();
278 
279   l_items := p_items;
280   x_return_status := FND_API.G_RET_STS_SUCCESS;
281 
282 IF (l_items.item_table.COUNT > 0) THEN
283   FOR i IN l_items.item_table.FIRST..l_items.item_table.LAST LOOP
284     l_item_bal_input_tbl.extend();
285     l_item_bal_input_obj := inv_ebi_item_bal_input_obj(
286                               l_api_version
287                              ,fnd_api.g_true
288                              ,l_items.item_table(i).organization_id
289                              ,l_items.item_table(i).inventory_item_id
290                              ,inv_quantity_tree_pub.g_transaction_mode
291                              ,NULL
292                              ,NULL
293                              ,NULL
294                              ,NULL
295                              ,-9999
296                              ,-9999
297                              ,-9999
298                              ,NULL
299                              ,NULL
300                              ,NULL
301                              ,NULL
302                              ,NULL
303                              ,NULL
304                              ,inv_quantity_tree_pvt.g_all_subs
305                              ,NULL
306                              ,NULL
307                              ,NULL
308                              ,NULL
309                              ,fnd_api.g_true
310                             );
311     l_item_bal_input_tbl(i) := l_item_bal_input_obj;
312   END LOOP;
313 
314   l_item_balance_input := inv_ebi_item_bal_input_list(l_item_bal_input_tbl);
315 
316   INV_EBI_ITEM_HELPER.get_item_balance(
317     p_item_balance_input        => l_item_balance_input
318    ,x_item_balance_output       => x_item_balance_output
319    ,x_return_status             => x_return_status
320    ,x_msg_count                 => x_msg_count
321    ,x_msg_data                  => x_msg_data
322   );
323 
324   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
325     RAISE  FND_API.g_exc_unexpected_error;
326   END IF;
327 END IF;
328 
329 EXCEPTION
330   WHEN FND_API.g_exc_unexpected_error THEN
331     x_return_status := FND_API.g_ret_sts_error;
332     IF (x_msg_data IS NULL) THEN
333       FND_MSG_PUB.count_and_get(
334          p_encoded => FND_API.g_false
335         ,p_count => x_msg_count
336         ,p_data => x_msg_data
337       );
338     END IF;
339   WHEN OTHERS THEN
340     x_return_status := FND_API.g_ret_sts_unexp_error;
341     x_msg_data := SQLERRM ||' at INV_EBI_ITEM_PUB.get_item_balance';
342 END get_item_balance;
343 /************************************************************************************
344 --      API name        : Convert_date_str
345 --      Type            : Public
346 --      Function        :
347 ************************************************************************************/
348 
349 PROCEDURE Convert_date_str(p_item_tbl_obj IN         inv_ebi_item_attr_tbl_obj
350                           ,x_item_tbl_obj OUT NOCOPY inv_ebi_item_attr_tbl_obj)
351 IS
352 BEGIN
353 
354   IF p_item_tbl_obj IS NOT NULL THEN
355     x_item_tbl_obj := p_item_tbl_obj;
356   END IF;
357 
358   IF p_item_tbl_obj.ITEM_ATTR_TBL IS NOT NULL AND p_item_tbl_obj.ITEM_ATTR_TBL.COUNT>0 THEN
359     FOR i IN p_item_tbl_obj.ITEM_ATTR_TBL.FIRST..p_item_tbl_obj.ITEM_ATTR_TBL.LAST LOOP
360       ------------------------------------------------------------------
361       -- To Convert Date Fields in main_obj_type (INV_EBI_ITEM_MAIN_OBJ)
362       ------------------------------------------------------------------
363       x_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.start_date_active_str :=
364       INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.start_date_active);
365       x_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.end_date_active_str :=
366       INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.end_date_active);
367       x_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.creation_date_str:=
368       INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.creation_date);
369       x_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.last_update_date_str :=
370       INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.last_update_date_str);
371       x_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.program_update_date_str:=
372       INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.main_obj_type.program_update_date);
373 
374       --------------------------------------------------------------------------------
375       -- To Convert Date Fields in deprecated_obj_type (INV_EBI_ITEM_DEPRECATED_OBJ)
376       --------------------------------------------------------------------------------
377       IF(p_item_tbl_obj.item_attr_tbl(i).item_obj.deprecated_obj_type IS NOT NULL) THEN
378         x_item_tbl_obj.item_attr_tbl(i).item_obj.deprecated_obj_type.engineering_date_str :=
379         INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.deprecated_obj_type.engineering_date);
380         x_item_tbl_obj.item_attr_tbl(i).item_obj.deprecated_obj_type.wh_update_date :=
381         INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.deprecated_obj_type.wh_update_date);
382       END IF;
383 
384       --------------------------------------------------------------------------------
385       -- To Convert Date Fields in attribute_group_tbl(INV_EBI_UDA_ATTR_GRP_TBL)
386       --------------------------------------------------------------------------------
387 
388       IF(p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl IS NOT NULL AND
389          p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl.COUNT>0) THEN
390         FOR j IN p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl.FIRST..
391           p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl.LAST LOOP
392           IF(p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl(j).attributes_tbl IS NOT NULL
393             AND p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl(j).attributes_tbl.COUNT>0) THEN
394             FOR k IN p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl(j).attributes_tbl.FIRST..
395               p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl(j).attributes_tbl.LAST LOOP
396               x_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl(j).attributes_tbl(k).attr_value_date_str :=
397               INV_EBI_ITEM_HELPER.convert_date_str(p_item_tbl_obj.item_attr_tbl(i).item_obj.uda_type.attribute_group_tbl(j).attributes_tbl(k).attr_value_date);
398             END LOOP;
399           END IF;
400         END LOOP;
401       END IF;
402    END LOOP;
403   END IF;
404   EXCEPTION
405     WHEN OTHERS THEN
406       x_item_tbl_obj := p_item_tbl_obj;
407 END Convert_date_str;
408 
409 
410 /************************************************************************************
411 --      API name        : get_item_attributes
412 --      Type            : Public
413 --      Function        :
414 ************************************************************************************/
415 
416 PROCEDURE get_item_attributes(
417   p_items                       IN              inv_ebi_item_list
418  ,p_name_val_list               IN              inv_ebi_name_value_list
419  ,x_item_tbl_obj                OUT NOCOPY      inv_ebi_item_attr_tbl_obj
420  ,x_return_status               OUT NOCOPY      VARCHAR2
421  ,x_msg_count                   OUT NOCOPY      NUMBER
422  ,x_msg_data                    OUT NOCOPY      VARCHAR2
423 )
424 IS
425   l_return_status               VARCHAR2(1);
426   l_msg_count                   NUMBER;
427   l_msg_data                    VARCHAR2(1000);
428   l_items                       inv_ebi_item_list;
429   l_get_item_inp_obj            inv_ebi_get_item_input;
430   l_get_opr_attrs_tbl           inv_ebi_get_opr_attrs_tbl;
431   l_get_opr_atts                inv_ebi_get_operational_attrs;
432   l_inv_ebi_item_attr_tbl_obj   inv_ebi_item_attr_tbl_obj;
433 BEGIN
434   l_get_opr_attrs_tbl := inv_ebi_get_opr_attrs_tbl();
435   l_items := p_items;
436   x_return_status := FND_API.G_RET_STS_SUCCESS;
437 
438   INV_EBI_ITEM_HELPER.set_server_time_zone;
439 
440   IF (l_items.item_table.COUNT > 0) THEN
441     FOR i IN l_items.item_table.FIRST..l_items.item_table.LAST LOOP
442       l_get_opr_attrs_tbl.extend();
443       l_get_opr_atts := inv_ebi_get_operational_attrs(
444                           l_items.item_table(i).inventory_item_id
445                          ,NULL
446                          ,l_items.item_table(i).organization_id
447                          ,NULL
448                          ,NULL
449                          ,NULL
450                           );
451 
452       l_get_opr_attrs_tbl(i) := l_get_opr_atts;
453     END LOOP;
454 
455     l_get_item_inp_obj := inv_ebi_get_item_input(l_get_opr_attrs_tbl,p_name_val_list.name_value_table);
456 
457     INV_EBI_ITEM_HELPER.get_item_attributes(
458       p_get_item_inp_obj          => l_get_item_inp_obj
459      ,x_item_tbl_obj              => x_item_tbl_obj
460      ,x_return_status             => x_return_status
461      ,x_msg_count                 => x_msg_count
462      ,x_msg_data                  => x_msg_data
463     );
464 
465     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
466       RAISE  FND_API.g_exc_unexpected_error;
467     END IF;
468   END IF;
469 
470   IF(x_item_tbl_obj.item_attr_tbl IS NOT NULL AND x_item_tbl_obj.item_attr_tbl.COUNT>0) THEN
471     l_inv_ebi_item_attr_tbl_obj := inv_ebi_item_attr_tbl_obj(x_item_tbl_obj.item_attr_tbl);
472   END IF;
473 
474  -- Bug# 8201401
475  -- Call to wrapper API for converting all date fields to String
476  IF l_inv_ebi_item_attr_tbl_obj IS NOT NULL THEN
477    Convert_date_str(p_item_tbl_obj => l_inv_ebi_item_attr_tbl_obj
478                    ,x_item_tbl_obj => x_item_tbl_obj);
479  END IF;
480 
481 
482 EXCEPTION
483   WHEN FND_API.g_exc_unexpected_error THEN
484     x_return_status := FND_API.g_ret_sts_error;
485     IF (x_msg_data IS NULL) THEN
486       FND_MSG_PUB.count_and_get(
487          p_encoded => FND_API.g_false
488         ,p_count => x_msg_count
489         ,p_data => x_msg_data);
490     END IF;
491   WHEN OTHERS THEN
492     x_return_status := FND_API.g_ret_sts_unexp_error;
493     x_msg_data := SQLERRM ||' at INV_EBI_ITEM_PUB.get_item_attributes';
494 END get_item_attributes;
495 
496 /************************************************************************************
497  --     API name        : process_item_list
498  --     Type            : Public
499  --     Function        :
500  --     This API is used to process list of items
501  --
502  ************************************************************************************/
503 PROCEDURE process_item_list(
504   p_commit        IN  VARCHAR2
505  ,p_operation     IN  VARCHAR2
506  ,p_item          IN  inv_ebi_item_obj_tbl
507  ,x_out           OUT NOCOPY inv_ebi_item_output_obj_tbl
508  ,x_return_status               OUT NOCOPY      VARCHAR2
509  ,x_msg_count                   OUT NOCOPY      NUMBER
510  ,x_msg_data                    OUT NOCOPY      VARCHAR2
511 )
512 IS
513   l_inv_ebi_item_obj            inv_ebi_item_obj;
514   l_inv_ebi_item_output_obj     inv_ebi_item_output_obj;
515 
516   l_part_err_msg           VARCHAR2(32000);
517   l_org_code               VARCHAR2(3);
518   l_is_master_org          VARCHAR2(1);
519   l_item_number            VARCHAR2(2000);
520 BEGIN
521   SAVEPOINT inv_ebi_prc_itm_list_save_pnt;
522   ERROR_HANDLER.Initialize;
523   FND_MSG_PUB.initialize;
524   INV_EBI_UTIL.setup();
525   INV_EBI_UTIL.debug_line('STEP: 10 START INSIDE INV_EBI_ITEM_PUB.process_item_list');
526   x_return_status := FND_API.G_RET_STS_SUCCESS ;
527   x_out := inv_ebi_item_output_obj_tbl();
528   IF (p_item IS NOT NULL AND  p_item.count > 0) THEN
529     x_out.extend(p_item.count);
530     FOR i in 1..p_item.count
531     LOOP
532       l_inv_ebi_item_obj := p_item(i);
533        IF l_inv_ebi_item_obj.main_obj_type.organization_id IS NOT NULL THEN
534          l_is_master_org := INV_EBI_UTIL.is_master_org(l_inv_ebi_item_obj.main_obj_type.organization_id);
535        ELSE
536          l_is_master_org := INV_EBI_UTIL.is_master_org(l_inv_ebi_item_obj.main_obj_type.organization_code);
537        END IF;
538         l_item_number := l_inv_ebi_item_obj.main_obj_type.item_number;
539       IF(l_is_master_org = fnd_api.g_true ) THEN
540         INV_EBI_UTIL.debug_line('STEP: 20 START CALLING INV_EBI_ITEM_PUB.process_item for ');
541         INV_EBI_ITEM_PUB.process_item(
542                             p_commit        =>  p_commit
543                             ,p_operation    =>  p_operation
544                             ,p_item         =>  l_inv_ebi_item_obj
545                             ,x_out          =>  l_inv_ebi_item_output_obj
546                                                 );
547         INV_EBI_UTIL.debug_line('STEP: 30 END CALLING INV_EBI_ITEM_PUB.process_item for ');
548 
549         x_out(i) := l_inv_ebi_item_output_obj;
550         x_out(i).integration_id := l_inv_ebi_item_obj.integration_id;
551         IF x_out(i).output_status.return_status <> FND_API.G_RET_STS_SUCCESS THEN
552 	  x_return_status := FND_API.G_RET_STS_ERROR;
553           x_msg_count     := x_out(i).output_status.msg_count;
554           x_msg_data      := x_msg_data ||'Item Name :' || l_item_number || ' Err Msg: ' || x_out(i).output_status.msg_data;
555           RAISE  FND_API.g_exc_unexpected_error;
556         END IF;
557       END IF;
558     END LOOP;
559   END IF;
560 
561   IF (p_item IS NOT NULL AND  p_item.count > 0) THEN
562     FOR i in 1..p_item.count
563     LOOP
564       l_inv_ebi_item_obj := p_item(i);
565        IF l_inv_ebi_item_obj.main_obj_type.organization_id IS NOT NULL THEN
566          l_is_master_org := INV_EBI_UTIL.is_master_org(l_inv_ebi_item_obj.main_obj_type.organization_id);
567        ELSE
568         l_is_master_org := INV_EBI_UTIL.is_master_org(l_inv_ebi_item_obj.main_obj_type.organization_code);
569        END IF;
570       l_item_number := l_inv_ebi_item_obj.main_obj_type.item_number;
571       IF(l_is_master_org = fnd_api.g_false ) THEN
572         INV_EBI_UTIL.debug_line('STEP: 20 START CALLING INV_EBI_ITEM_PUB.process_item for ');
573         INV_EBI_ITEM_PUB.process_item(
574                             p_commit        =>  p_commit
575                             ,p_operation    =>  p_operation
576                             ,p_item         =>  l_inv_ebi_item_obj
577                             ,x_out          =>  l_inv_ebi_item_output_obj
578                          );
579         INV_EBI_UTIL.debug_line('STEP: 30 END CALLING INV_EBI_ITEM_PUB.process_item for ');
580 
581         x_out(i) := l_inv_ebi_item_output_obj;
582         x_out(i).integration_id := l_inv_ebi_item_obj.integration_id;
583        IF x_out(i).output_status.return_status <> FND_API.G_RET_STS_SUCCESS THEN
584 	  x_return_status := FND_API.G_RET_STS_ERROR;
585           x_msg_count     := x_out(i).output_status.msg_count;
586           x_msg_data      := x_msg_data ||'Item Name :' || l_item_number || ' Err Msg: ' || x_out(i).output_status.msg_data;
587           RAISE  FND_API.g_exc_unexpected_error;
588        END IF;
589       END IF;
590     END LOOP;
591   END IF;
592   IF FND_API.to_boolean(p_commit) THEN
593     COMMIT;
594   END IF;
595 INV_EBI_UTIL.debug_line('STEP: 40 END INSIDE INV_EBI_ITEM_PUB.process_item_list');
596 INV_EBI_UTIL.wrapup;
597 EXCEPTION
598   WHEN FND_API.g_exc_unexpected_error THEN
599     ROLLBACK TO inv_ebi_prc_itm_list_save_pnt;
600   WHEN OTHERS THEN
601     ROLLBACK TO inv_ebi_prc_itm_list_save_pnt;
602     x_return_status := FND_API.G_RET_STS_ERROR;
603     x_msg_data  :=  SQLERRM|| 'INV_EBI_ITEM_PUB.process_item_list';
604 END process_item_list;
605 END INV_EBI_ITEM_PUB;