DBA Data[Home] [Help]

PACKAGE BODY: APPS.MTL_CCEOI_PROCESS_PVT

Source


1 PACKAGE BODY MTL_CCEOI_PROCESS_PVT AS
2 /* $Header: INVVCCPB.pls 120.5 2006/12/21 08:36:41 rvedulla ship $ */
3   G_PKG_NAME CONSTANT VARCHAR2(30) := 'MTL_CCEOI_PROCESS_PVT';
4 
5 
6 procedure mdebug(msg in varchar2)
7 is
8     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
9 begin
10    null;
11   INV_TRX_UTIL_PUB.TRACE( P_MESG =>msg
12                        ,P_MOD => 'mtl_cceoi_action_pvt'
13                        ,p_level => 9
14                        );
15 end;
16 
17 
18 /* Bug 5721960 -Added the procedure */
19 
20    PROCEDURE GET_ITEM_COST(
21    p_organization_id IN NUMBER ,
22    p_inventory_item_id IN NUMBER ,
23    p_locator_id IN NUMBER ,
24    p_cost_group_id IN NUMBER,
25    x_item_cost OUT NOCOPY NUMBER )
26 
27    IS
28        l_locator_id NUMBER := p_locator_id ;
29        l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
30 
31    BEGIN
32 
33          IF ( l_debug = 1 ) THEN
34             mdebug ( '***get_item_cost***' );
35          END IF;
36 
37          IF ( l_locator_id = -1 ) THEN
38             l_locator_id := NULL;
39          END IF;
40 
41          IF ( l_debug = 1 ) THEN
42             mdebug ( 'Value of org_id:'|| p_organization_id );
43             mdebug ( 'Value of item_id:'|| p_inventory_item_id );
44             mdebug ( 'Value of locator_id:'|| p_locator_id );
45             mdebug ( 'Value of cost_group_id:'|| p_cost_group_id );
46          END IF;
47 
48     BEGIN
49             SELECT NVL ( ccicv.item_cost, 0 )
50             INTO   x_item_cost
51             FROM   cst_cg_item_costs_view ccicv,
52                    mtl_parameters mp
53             WHERE  l_locator_id IS NULL
54             AND    ccicv.organization_id = p_organization_id
55             AND    ccicv.inventory_item_id = p_inventory_item_id
56             AND    ccicv.organization_id = mp.organization_id
57             AND    ccicv.cost_group_id =
58                       DECODE ( mp.primary_cost_method,
59                                1, 1,
60                                NVL ( p_cost_group_id , mp.default_cost_group_id)
61                               )
62             UNION ALL
63             SELECT NVL ( ccicv.item_cost, 0 )
64             FROM   mtl_item_locations mil,
65                    cst_cg_item_costs_view ccicv,
66                    mtl_parameters mp
67             WHERE  l_locator_id IS NOT NULL
68             AND    mil.organization_id = p_organization_id
69             AND    mil.inventory_location_id = l_locator_id
70             AND    mil.project_id IS NULL
71             AND    ccicv.organization_id = mil.organization_id
72             AND    ccicv.inventory_item_id = p_inventory_item_id
73             AND    ccicv.organization_id = mp.organization_id
74             AND     ccicv.cost_group_id =
75                       DECODE ( mp.primary_cost_method,
76                                1, 1,
77                                NVL ( p_cost_group_id , mp.default_cost_group_id)
78                               )
79             UNION ALL
80             SELECT NVL ( ccicv.item_cost, 0 )
81             FROM   mtl_item_locations mil,
82                    mrp_project_parameters mrp,
83                    cst_cg_item_costs_view ccicv,
84                    mtl_parameters mp
85             WHERE  l_locator_id IS NOT NULL
86             AND    mil.organization_id = p_organization_id
87             AND    mil.inventory_location_id = l_locator_id
88             AND    mil.project_id IS NOT NULL
89             AND    mrp.organization_id = mil.organization_id
90             AND    mrp.project_id = mil.project_id
91             AND    ccicv.organization_id = mil.organization_id
92             AND    ccicv.inventory_item_id = p_inventory_item_id
93             AND    ccicv.organization_id = mp.organization_id
94             AND    ccicv.cost_group_id =
95                       DECODE ( mp.primary_cost_method,
96                                1, 1,
97                                NVL (  mrp.costing_group_id, 1 )
98                              );
99          EXCEPTION
100             WHEN NO_DATA_FOUND THEN
101                x_item_cost := 0;
102          END;
103 
104    END GET_ITEM_COST;
105    /* End of fix for Bug 5721960 */
106 
107 
108 -- compute count due date
109 -- pre: MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC contains data
110 --     (call Validate_CountHeader) to fill it out
111 -- post: returns count due date or throws an exception if date cannot be found
112 -- because of invalid data in MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC or
113 -- if anything else goes wrong (e.g end of calendar)
114 function compute_count_due_date(p_date IN DATE) return  DATE  is
115   l_msg_count NUMBER;
116   l_msg_data VARCHAR2(240);
117   l_return_status VARCHAR2(1);
118   l_result_date DATE;
119     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
120 begin
121    mtl_inv_validate_grp.get_offset_date(
122      p_api_version => 0.9,
123      x_msg_count => l_msg_count,
124      x_msg_data => l_msg_data,
125      x_return_status => l_return_status,
126      p_calendar_code =>
127      mtl_cceoi_var_pvt.g_cycle_count_header_rec.cycle_count_calendar,
128      p_exception_set_id =>
129      mtl_cceoi_var_pvt.g_cycle_count_header_rec.calendar_exception_set,
130      p_start_date => p_date,
131      p_offset_days =>
132      mtl_cceoi_var_pvt.g_cycle_count_header_rec.days_until_late,
133      x_result_date => l_result_date);
134 
135    IF (l_debug = 1) THEN
136       mdebug('Due date'||to_char(l_result_date));
137    END IF;
138    if (l_return_status <> fnd_api.g_ret_sts_success) then
139       IF (l_debug = 1) THEN
140          mdebug('error in due date computation');
141       END IF;
142       raise fnd_api.g_exc_unexpected_error;
143    end if;
144 
145    return l_result_date;
146 
147 end;
148 
149 -- this procedure prevents reuse of global variables between calls to
150 -- the public api done within the same session
151 PROCEDURE Reset_Global_Vars
152 IS
153     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
154 BEGIN
155    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC := null;
156    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC := null;
157    MTL_CCEOI_VAR_PVT.G_OPEN_REQUEST := false;
158    MTL_CCEOI_VAR_PVT.G_SKU_REC := null;
159    MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_AMOUNT := null;
160    MTL_CCEOI_VAR_PVT.G_ADJ_VARIANCE_PERCENTAGE := null;
161    MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := null;
162    MTL_CCEOI_VAR_PVT.G_ITEM_COST := null;
163    MTL_CCEOI_VAR_PVT.G_STOCK_LOCATOR_CONTROL_CODE := null;
164    MTL_CCEOI_VAR_PVT.G_SEQ_NO := null;
165    MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID := null;
166    MTL_CCEOI_VAR_PVT.G_ITEM_LOCATOR_TYPE := null;
167    MTL_CCEOI_VAR_PVT.G_SUB_LOCATOR_TYPE := null;
168    MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID := null;
169    MTL_CCEOI_VAR_PVT.G_ORIENTATION_CODE := null;
170    MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID := null;
171    MTL_CCEOI_VAR_PVT.G_LOCATOR_ID := null;
172    MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE := null;
173    MTL_CCEOI_VAR_PVT.G_UOM_CODE := null;
174    MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY := null;
175    MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY := null;
176    MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID := null;
177    MTL_CCEOI_VAR_PVT.G_COUNT_DATE := null;
178    MTL_CCEOI_VAR_PVT.G_SUBINVENTORY := null;
179    MTL_CCEOI_VAR_PVT.G_ADJUST_ACCOUNT_ID := null;
180    MTL_CCEOI_VAR_PVT.G_REC_IN_SYSTEM := true;
181    MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP := null;
182 
183    -- BEGIN INVCONV
184    MTL_CCEOI_VAR_PVT.G_TRACKING_QUANTITY_IND := null;
185    MTL_CCEOI_VAR_PVT.G_SECONDARY_DEFAULT_IND := null;
186    MTL_CCEOI_VAR_PVT.G_PROCESS_COSTING_ENABLED_FLAG := null;
187    MTL_CCEOI_VAR_PVT.G_PROCESS_ENABLED_FLAG := null;
188    MTL_CCEOI_VAR_PVT.G_SECONDARY_UOM_CODE := null;
189 
190    MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_UOM := null;
191    MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_QUANTITY := null;
192    MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY := null;
193    MTL_CCEOI_VAR_PVT.G_LPN_ITEM_SEC_SYSTEM_QTY := null;
194    MTL_CCEOI_VAR_PVT.G_SEC_ADJUSTMENT_QUANTITY := null;
195    -- END INVCONV
196 
197 END;
198 
199 --
200   --
201   -- Copy the current into the prior columns
202   PROCEDURE Current_To_Prior
203   IS
204     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
205   BEGIN
206     -- Start OF comments
207     -- API name  : Current_to_Prior
208     -- TYPE      : Private
209     -- Pre-reqs  : None
210     -- FUNCTION  :
211     -- this PROCEDURE SET the current VALUES of the open count request into
212     -- the system table mtl_cycle_count_entries to the prior column.
213     -- Parameters:
214     --     IN    :
215     --     OUT   :
216     -- Version: Current Version 0.9
217     --              Changed : Nothing
218     --          No Previous Version 0.0
219     --          Initial version 0.9
220     -- Notes  : Note text
221     -- END OF comments
222     DECLARE
223        --
224       dummy integer;
225     BEGIN
226        ---
227        -- SET the current DATE to the pri0r DATE
228        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_PRIOR:=
229        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_DATE_CURRENT;
230        --
231        -- SET the current counter to prior
232        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_PRIOR :=
233        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNTED_BY_EMPLOYEE_ID_CURRENT;
234        --
235        -- SET the COUNT uom to prior
236        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_UOM_PRIOR :=
237        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_UOM_CURRENT;
238        --
239        -- SET the current COUNT quantity to first
240        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_QUANTITY_PRIOR :=
241        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_QUANTITY_CURRENT;
242        --
243        -- SET the current system quanity to first
244        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_PRIOR :=
245        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.SYSTEM_QUANTITY_CURRENT;
246        --
247        -- SET the primary uom quantity
248        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.PRIMARY_UOM_QUANTITY_PRIOR :=
249        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.PRIMARY_UOM_QUANTITY_CURRENT;
250        --
251        -- SET the current refernce to first
252        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.REFERENCE_PRIOR :=
253        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.REFERENCE_CURRENT;
254        --
255 
256        -- BEGIN INVCONV
257        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_SECONDARY_UOM_PRIOR :=
258        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_SECONDARY_UOM_CURRENT;
259        --
260        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_UOM_QUANTITY_PRIOR :=
261        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.SECONDARY_UOM_QUANTITY_CURRENT;
262        --
263        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_SYSTEM_QTY_PRIOR :=
264        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.SECONDARY_SYSTEM_QTY_CURRENT;
265        -- END INVCONV
266 
267     END;
268   END;
269 
270   --
271   -- Propagates info about first count into updated record
272   PROCEDURE Propagate_First
273   IS
274     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
275   BEGIN
276      -- propagate first count date
277      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_FIRST :=
278        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_DATE_FIRST;
279 
280      -- propagate id of employee who first counted the record
281      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_FIRST :=
282        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNTED_BY_EMPLOYEE_ID_FIRST;
283 
284      -- propagate count uom used in thefirst count
285      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_UOM_FIRST :=
286        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_UOM_FIRST;
287 
288      -- propagate count quantity found in the first count
289      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_QUANTITY_FIRST :=
290        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_QUANTITY_FIRST;
291 
292      -- propagate system quantity for the first count
293      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_FIRST :=
294        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.SYSTEM_QUANTITY_FIRST;
295 
296      -- propagate primary uom quantity for the first count
297      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.PRIMARY_UOM_QUANTITY_FIRST :=
298        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.PRIMARY_UOM_QUANTITY_FIRST;
299 
300      -- propagate reference used in the first count
301      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.REFERENCE_FIRST :=
302        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.REFERENCE_FIRST;
303 
304      -- BEGIN INVCONV
305      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_SECONDARY_UOM_FIRST :=
306        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_SECONDARY_UOM_FIRST;
307      --
308      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_UOM_QUANTITY_FIRST :=
309        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.SECONDARY_UOM_QUANTITY_FIRST;
310      --
311      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_SYSTEM_QTY_FIRST :=
312        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.SECONDARY_SYSTEM_QTY_FIRST;
313      -- END INVCONV
314   END;
315 
316   --
317   -- Current information into first information.
318   PROCEDURE Current_To_First(
319   p_reference IN VARCHAR2 DEFAULT NULL,
320   p_primary_uom_quantity IN NUMBER )
321   IS
322     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
323   BEGIN
324     -- Start OF comments
325     -- API name  : Current_to_first
326     -- TYPE      : Private
327     -- Pre-reqs  : None
328     -- FUNCTION  :
329     -- this PROCEDURE SET the current VALUES to first. IF this
330     -- IS the first time to INSERT an entry.
331     -- Parameters:
332     --     IN    :
333     --  p_reference VARCHAR2(240) (optional)
334     --  default NULL
335     --
336     --  p_primary_uom_quantity IN NUMBER (required)
337     --  primary uom quantity
338     --
339     --     OUT   :
340     --
341     -- Version: Current Version 0.9
342     --              Changed : Nothing
343     --          No Previous Version 0.0
344     --          Initial version 0.9
345     -- Notes  : Note text
346     -- END OF comments
347     DECLARE
348        --
349        dummy integer;
350     BEGIN
351        ---
352        -- SET the current DATE to the first DATE
353        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_FIRST :=
354        MTL_CCEOI_VAR_PVT.G_COUNT_DATE;
355        --
356        -- SET the current counter to first
357        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_FIRST :=
358        MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID;
359        --
360        -- SET the COUNT uom to first
361        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_UOM_FIRST :=
362        MTL_CCEOI_VAR_PVT.G_UOM_CODE;
363        --
364        -- SET the current COUNT quantity to first
365        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_QUANTITY_FIRST :=
366        MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY;
367        --
368        -- SET the current system quanity to first
369        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_FIRST :=
370        MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY;
371        --
372        -- SET the primary uom quantity
373        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.PRIMARY_UOM_QUANTITY_FIRST :=
374        p_primary_uom_quantity;
375        --
376        -- SET the current refernce to first
377        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.REFERENCE_FIRST :=
378        p_reference;
379        --
380 
381        -- BEGIN INVCONV
382        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_SECONDARY_UOM_FIRST :=
383        MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_UOM;
384        --
385        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_UOM_QUANTITY_FIRST :=
386        MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_QUANTITY;
387        --
388        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_SYSTEM_QTY_FIRST :=
389        MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY;
390        -- END INVCONV
391 
392     END;
393   END;
394   -- Puts the entry values into current values.
395 PROCEDURE entry_to_current(
396   p_reference IN VARCHAR2 DEFAULT NULL,
397   p_primary_uom_quantity IN NUMBER )
398   IS
399     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
400   BEGIN
401     -- Start OF comments
402     -- API name  : Entry_to_Current
403     -- TYPE      : Private
404     -- Pre-reqs  : None
405     -- FUNCTION  :
406     -- Parameters:
407     --     IN    :
408     --  p_reference IN VARCHAR2(240) (optional)
409     --  default NULL, IS LIKE a note what IS happened
410     -- Version: Current Version 0.9
411     --              Changed : Nothing
412     --          No Previous Version 0.0
413     --          Initial version 0.9
414     -- Notes  : Note text
415     -- END OF comments
416     DECLARE
417        --
418        dummy integer;
419     BEGIN
420        --
421        -- SET the actual interface COUNT DATE to the current
422        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_CURRENT :=
423        MTL_CCEOI_VAR_PVT.G_COUNT_DATE;
424        --
425        -- SET current counter
426        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_CURRENT :=
427        MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID;
428        --
429        -- SET COUNT uom
430        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_UOM_CURRENT :=
431        MTL_CCEOI_VAR_PVT.G_UOM_CODE;
432        --
433        -- SET the COUNT quantity
434        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_QUANTITY_CURRENT:=
435        MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY;
436        --
437        -- SET the current system quantity
438        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_CURRENT:=
439        MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY;
440        --
441        -- SET the primary uom quantity
442        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.PRIMARY_UOM_QUANTITY_CURRENT :=
443        p_primary_uom_quantity;
444        --
445        -- SET the current reference
446        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.REFERENCE_CURRENT:=
447        p_reference;
448        --
449 
450        -- BEGIN INVCONV
451        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_SECONDARY_UOM_CURRENT :=
452        MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_UOM;
453        --
454        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_UOM_QUANTITY_CURRENT :=
455        MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_QUANTITY;
456        --
457        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SECONDARY_SYSTEM_QTY_CURRENT :=
458        MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY;
459        -- END INVCONV
460     END;
461   END;
462 -- Final update logic.
463   PROCEDURE Final_Preupdate_Logic(
464   p_reference IN VARCHAR2 DEFAULT NULL,
465   p_primary_uom_quantity IN NUMBER ,
466   p_count_uom IN VARCHAR2 ,
467   p_serial_number IN VARCHAR2 ,
468   p_subinventory IN VARCHAR2 ,
469   p_lot_number IN VARCHAR2 ,
470   p_lot_expiration IN date ,
471   p_revision IN VARCHAR2 ,
472   p_transaction_reason_id IN NUMBER ,
473   p_transaction_process_mode IN NUMBER DEFAULT 3,
474   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE)
475   IS
476     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
477   BEGIN
478     -- Start OF comments
479     -- API name  : Final_Update_Logic
480     -- TYPE      : Private
481     -- Pre-reqs  : None
482     -- FUNCTION  :
483     -- Parameters:
484     --     IN    :
485     -- p_reference IN VARCHAR2 (optional)
486     -- default NULL
487     --
488      -- p_primary_uom_quantity IN NUMBER  -- only useful for update of
489      -- interface tables
490     --
491      -- p_count_uom IN VARCHAR2 (required) XXX will not work if count qty
492      -- is entered through primary_uomqty
493     --
494     -- p_subinventory IN VARCHAR2(required)
495     --
496     -- p_lot_number IN VARCHAR2 (required)
497     --
498     -- p_lot_expiration_date DATE (required)
499     --
500     -- p_revision IN VARCHAR2(required)
501     --
502     -- p_transaction_reasion_id IN NUMBER (required)
503     --
504     -- p_serial_number IN VARCHAR2 (required)
505     --
506     -- p_transaction_process_mode IN NUMBER (required-defaulted)
507      --  default = 3 (Background processing) this parameter is not really used
508      -- since the only way the processing can be done now is in background mode
509     --
510     -- p_simulate IN VARCHAR2 (defaulted)
511     --   default = FND_API.G_FALSE may modify tables other than interface
512     --             FND_API.G_TRUE - may modify only interface tables
513     --
514     --     OUT   :
515     -- Version: Current Version 0.9
516     --              Changed : Nothing
517     --          No Previous Version 0.0
518     --          Initial version 0.9
519     -- Notes  : Note text
520     -- END OF comments
521     DECLARE
522        --
523        L_from_uom MTL_CYCLE_COUNT_ENTRIES.COUNT_UOM_CURRENT%type;
524        L_txn_uom MTL_CYCLE_COUNT_ENTRIES.COUNT_UOM_CURRENT%type;
525        L_txn_header_id NUMBER;
526        L_txn_temp_id NUMBER;
527        L_serial_prefix MTL_SYSTEM_ITEMS.auto_serial_alpha_prefix%type;
528        L_p_uom_qty NUMBER;
529        L_number_of_counts NUMBER;
530        L_success_flag NUMBER;
531        --
532     BEGIN
533        --
534 IF (l_debug = 1) THEN
535    MDEBUG( 'Process- Inside Final-Pre-update ');
536 END IF;
537        IF MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.entry_status_code = 5 THEN
538 	  --
539 	  MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_DATE := sysdate;
540 	  --
541        END IF;
542        --
543        L_number_of_counts :=
544        (NVL(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.number_of_counts, 0) + 1);
545        --
546        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NUMBER_OF_COUNTS :=
547        L_number_of_counts;
548        --
549 	IF (l_debug = 1) THEN
550    	mdebug('Final_Preupdate_Logic: Number of counts => ' ||	  L_number_of_Counts);
551 	END IF;
552 
553        IF L_number_of_counts = 1 THEN
554 	  --
555 	  Entry_To_Current(p_reference => p_reference
556 	    , p_primary_uom_quantity => p_primary_uom_quantity);
557 	  --
558 	  Current_To_First(
559 	     p_reference => p_reference
560 	     , p_primary_uom_quantity => p_primary_uom_quantity
561 	  );
562 	  --
563        ELSE
564 	  --
565 	  Propagate_First;
566 	  --
567 	  Current_To_Prior;
568 	  --
569 	  Entry_To_Current(
570 	    p_reference => p_reference
571 	    , p_primary_uom_quantity => p_primary_uom_quantity);
572 	  --
573        END IF;
574        --
575        L_from_uom := p_count_uom;
576        L_txn_uom := L_from_uom;
577        --
578 IF (l_debug = 1) THEN
579    MDEBUG( 'Process-Inside F-P-Update Logic: '|| to_char(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.entry_status_code));
580    MDEBUG( 'F-P-U :AdjQty= '||to_char(MTL_CCEOI_VAR_PVT.G_adjustment_quantity));
581    MDEBUG( 'F-P-U :SecAdjQty= '||to_char(MTL_CCEOI_VAR_PVT.g_sec_adjustment_quantity)); -- INVCONV
582    MDEBUG( 'F-P-U : '||p_simulate);
583 END IF;
584 
585        IF MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.entry_status_code = 5
586 	  AND MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY <> 0
587 	  AND NOT FND_API.to_Boolean(p_simulate)
588        THEN
589 	  --
590 IF (l_debug = 1) THEN
591    MDEBUG( 'F-P-U-Inside the If value ');
592 END IF;
593 	  SELECT mtl_material_transactions_s.nextval
594 	  INTO
595 	     L_txn_header_id
596 	  FROM
597 	     dual;
598 	  --
599 	  IF(p_serial_number IS NOT NULL) THEN
600 	     --
601 	     SELECT mtl_material_transactions_s.nextval
602 	     INTO
603 		L_txn_temp_id
604 	     FROM
605 		dual;
606 	     --
607 	     SELECT auto_serial_alpha_prefix
608 	     INTO
609 		L_serial_prefix
610 	     FROM
611 		mtl_system_items
612 	     WHERE
613 		inventory_item_id = MTL_CCEOI_VAR_PVT.G_inventory_item_id
614 		AND organization_id =
615 	       MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.organization_id;
616 	     --
617 	  END IF;
618 	  --
619 	  L_p_uom_qty := inv_convert.inv_um_convert(
620 	     item_id => MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID
621 	     , precision => 5
622 	     , from_quantity => MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY
623 	     , from_unit => MTL_CCEOI_VAR_PVT.G_UOM_CODE -- L_from_uom
624 	     , to_unit => MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE
625 	     , from_name => NULL
626 	    , to_name => NULL);
627 
628 
629 	  --
630 IF (l_debug = 1) THEN
631    MDEBUG( 'Process-Tolerence:Update Adj Amt  ');
632    MDEBUG( 'Account Id '||to_char(MTL_CCEOI_VAR_PVT.G_ADJUST_ACCOUNT_ID));
633    MDEBUG( 'Count Dt '||fnd_date.date_to_canonical(MTL_CCEOI_VAR_PVT.g_count_date));
634    MDEBUG( 'Subinv '||p_subinventory);
635    MDEBUG( 'CountUOM '||p_count_uom);
636    MDEBUG( 'CCEId '||to_char(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.cycle_count_entry_id));
637    mdebug('serial number='||p_serial_number);
638 END IF;
639 
640 IF (l_debug = 1) THEN
641    mdebug('Making a transaction. txn_hdr_id='||L_txn_header_id);
642    mdebug('Making a transaction. txn_tmp_id='||L_txn_temp_id);
643 END IF;
644 
645 	 -- delete record
646 	 DELETE_RESERVATION (p_subinventory, p_lot_number, p_revision);
647 
648 	  L_success_flag := mtl_cc_transact_pkg.cc_transact(
649 	    org_id=>
650 	     MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.organization_id
651 	    , cc_header_id => MTL_CCEOI_VAR_PVT.G_cc_header_id
652 	    , item_id => MTL_CCEOI_VAR_PVT.G_inventory_item_id
653 	    , sub=> p_subinventory
654 	    , PUOMQty=>L_p_uom_qty
655 	    , TxnQty=>MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY
656 	    , TxnUOM=> MTL_CCEOI_VAR_PVT.G_UOM_CODE -- p_count_uom
657 	    , TxnDate=>MTL_CCEOI_VAR_PVT.G_count_date
658 	    , TxnAcctId=>MTL_CCEOI_VAR_PVT.G_ADJUST_ACCOUNT_ID
659 	    , LotNum=>p_lot_number
660 	    , LotExpDate=>p_lot_expiration
661 	    , rev=>p_revision
662 	      , locator_id=>MTL_CCEOI_VAR_PVT.G_locator_id
663 	      , TxnRef=>p_reference
664 	      , ReasonId=> p_transaction_reason_id
665 	      , UserId=> MTL_CCEOI_VAR_PVT.G_userid
666 	      , cc_entry_id=>
667 	        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.cycle_count_entry_id
668 	      , LoginId => MTL_CCEOI_VAR_PVT.G_LoginId
669 	      , TxnProcMode => 3 -- p_transaction_process_mode
670 	      , TxnHeaderId=>L_txn_header_id
671 	      , SerialNum=>P_serial_number
672 	      , TxnTempId=>L_txn_temp_id
673 	      , SerialPrefix=>L_serial_prefix
674 	      , lpn_id => MTL_CCEOI_VAR_PVT.G_LPN_ID
675 	      , cost_group_id => MTL_CCEOI_VAR_PVT.G_COST_GROUP_ID
676 	      -- BEGIN INVCONV
677 	      , secUOM => MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_UOM
678 	      , secQty => MTL_CCEOI_VAR_PVT.G_SEC_ADJUSTMENT_QUANTITY
679 	      -- END INVCONV
680 	      );
681 	  --
682 IF (l_debug = 1) THEN
683    MDEBUG( 'Process-Tolerence:Update Adj Amt Flag '||L_success_flag);
684 END IF;
685 	  IF NVL(L_txn_header_id, -1) < 0
686 	     OR NVL(L_success_flag, -1) < 0 THEN
687 	     --
688 	     FND_MESSAGE.SET_NAME('INV', 'INV_ADJ_TXN_FAILED');
689 	     APP_EXCEPTION.RAISE_EXCEPTION;
690 IF (l_debug = 1) THEN
691    MDEBUG( 'Process-Tolerence : Adj Failed ');
692 END IF;
693 	     --
694 	  END IF;
695 	  --
696 	  /* MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_DATE := sysdate;
697 	  MTL_CCEOI_VAR_PVT.G_COMMIT_STATUS_FLAG := '1';
698 	  MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.INVENTORTY_ADJUST_ACCOUNT :=
699 	  MTL_CCEOI_VAR_PVT.G_ADJUST_ACCOUNT_ID;
700 	  */
701 	  --
702        END IF;
703 IF (l_debug = 1) THEN
704    MDEBUG( 'Process-Tolerence : End of Adj Qty process ');
705 END IF;
706     END;
707   END;
708   --
709 -- in tolerance.
710   PROCEDURE in_Tolerance(
711   p_reference  VARCHAR2 ,
712   p_primary_uom_quantity  NUMBER ,
713   p_count_uom  VARCHAR2 ,
714   p_subinventory  VARCHAR2 ,
715   p_lot_number  VARCHAR2 ,
716   p_lot_expiration_date  DATE ,
717   p_revision  VARCHAR2 ,
718   p_transaction_reason_id  NUMBER ,
719   p_serial_number  VARCHAR2 ,
720   p_transaction_process_mode  NUMBER ,
721   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE)
722   IS
723     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
724   BEGIN
725     -- Start OF comments
726     -- API name  : In_TOLERANCE
727     -- TYPE      : Private
728     -- Pre-reqs  : None
729     -- FUNCTION  :
730     -- Parameters:
731     --     IN    :
732     -- p_reference IN VARCHAR2 (optional)
733     -- default NULL
734     --
735     -- p_primary_uom_quantity IN NUMBER
736     --
737     -- p_count_uom IN VARCHAR2 (required)
738     --
739     -- p_subinventory IN VARCHAR2(required)
740     --
741     -- p_lot_number IN VARCHAR2 (required)
742     --
743     -- p_lot_expiration_date DATE (required)
744     --
745     -- p_revision IN VARCHAR2(required)
746     --
747     -- p_transaction_reasion_id IN NUMBER (required)
748     --
749     -- p_serial_number IN VARCHAR2 (required)
750     --
751     -- p_transaction_process_mode IN NUMBER (required-defaulted)
752     --  default = 3 (Background processing)
753     --
754     --  p_simulate in varchar2 (defaulted FND_API.G_FALSE)
755     --    G_FALSE - may modify data in tables other than ccoi interface
756     --    G_TRUE - may not modify data in tables othert than ccoi interface
757 
758     --     OUT   :
759     -- Version: Current Version 0.9
760     --              Changed : Nothing
761     --          No Previous Version 0.0
762     --          Initial version 0.9
763     -- Notes  : Note text
764     -- END OF comments
765     DECLARE
766        --
767        dummy integer;
768        --
769     BEGIN
770        IF (MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.approval_option_code = 1
771        AND MTL_CCEOI_VAR_PVT.G_LPN_ID IS NULL)
772        OR (MTL_CCEOI_VAR_PVT.G_LPN_ID IS NOT NULL
773            AND MTL_CCEOI_VAR_PVT.G_CONTAINER_ENABLED_FLAG = 1
774            AND (MTL_CCEOI_VAR_PVT.G_CONTAINER_ADJUSTMENT_OPTION = 2
775                 OR MTL_CCEOI_VAR_PVT.G_CONTAINER_DISCREPANCY_OPTION = 2)
776           )
777        THEN
778 	  --
779 	  MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
780 	  --
781        ELSE
782 	  --
783 	  MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
784 	  MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_TYPE := 1;
785 	  --
786        END IF;
787        --
788        Final_Preupdate_Logic(
789 	  p_reference => p_reference
790 	  , p_primary_uom_quantity => p_primary_uom_quantity
791 	  , p_count_uom => p_count_uom
792 	  , p_serial_number => p_serial_number
793 	  , p_subinventory => p_subinventory
794 	  , p_lot_number => p_lot_number
795 	  , p_lot_expiration => p_lot_expiration_date
796 	  , p_revision => p_revision
797 	  , p_transaction_reason_id => p_transaction_reason_id
798 	  , p_transaction_process_mode => p_transaction_process_mode
799 	 , p_simulate => p_simulate);
800        --
801     END;
802   END;
803   --
804   -- Out of tolerance.
805   PROCEDURE Out_Of_Tolerance(
806   p_reference  VARCHAR2 ,
807   p_primary_uom_quantity  NUMBER ,
808   p_count_uom  VARCHAR2 ,
809   p_subinventory  VARCHAR2 ,
810   p_lot_number  VARCHAR2 ,
811   p_lot_expiration_date  DATE ,
812   p_revision  VARCHAR2 ,
813   p_transaction_reason_id  NUMBER ,
814   p_serial_number  VARCHAR2 ,
815   p_transaction_process_mode  NUMBER ,
816   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE)
817   IS
818     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
819   BEGIN
820     -- Start OF comments
821     -- API name  : out_OF_TOLERANCE
822     -- TYPE      : Private
823     -- Pre-reqs  : None
824     -- FUNCTION  :
825     -- Parameters:
826     --     IN    :
827     -- p_reference IN VARCHAR2 (optional)
828     -- default NULL
829     --
830     -- p_primary_uom_quantity IN NUMBER
831     --
832     -- p_count_uom IN VARCHAR2 (required)
833     --
834     -- p_subinventory IN VARCHAR2(required)
835     --
836     -- p_lot_number IN VARCHAR2 (required)
837     --
838     -- p_lot_expiration_date DATE (required)
839     --
840     -- p_revision IN VARCHAR2(required)
841     --
842     -- p_transaction_reasion_id IN NUMBER (required)
843     --
844     -- p_serial_number IN VARCHAR2 (required)
845     --
846     -- p_transaction_process_mode IN NUMBER (required-defaulted)
847     --  default = 3 (Background processing)
848     --
849     --  p_simulate in varchar2 (defaulted FND_API.G_FALSE)
850     --     G_FALSE - may modify data in tables other than cc interface
851     --     G_TRUE - may not modify data in tables other than cc interface
852     --     OUT   :
853     -- Version: Current Version 0.9
854     --              Changed : Nothing
855     --          No Previous Version 0.0
856     --          Initial version 0.9
857     -- Notes  : Note text
858     -- END OF comments
859     DECLARE
860        --
861        dummy integer;
862        --
863     BEGIN
864        IF MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.automatic_recount_flag <> 1
865     THEN
866 	  IF (MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.approval_option_code = 2
867 	  AND MTL_CCEOI_VAR_PVT.G_LPN_ID IS NULL)
868 	  OR (MTL_CCEOI_VAR_PVT.G_LPN_ID IS NOT NULL
869               AND MTL_CCEOI_VAR_PVT.G_CONTAINER_ENABLED_FLAG = 1
870               AND MTL_CCEOI_VAR_PVT.G_CONTAINER_ADJUSTMENT_OPTION = 1
871               AND MTL_CCEOI_VAR_PVT.G_CONTAINER_DISCREPANCY_OPTION = 1)
872 	  THEN
873 	     --
874 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
875 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_TYPE := 1;
876 	     --
877 	  ELSE
878 	     --
879 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
880 	     --
881 	  END IF;
882        ELSE
883 	  IF NVL(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.NUMBER_OF_COUNTS, 0) <
884 	     MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.MAXIMUM_AUTO_RECOUNTS THEN
885 	     --
886 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 3;
887 
888 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DUE_DATE :=
889 	       Compute_Count_Due_Date(sysdate);
890 		--
891 	  ELSE
892 	     --
893 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
894 	     --
895 	  END IF;
896        END IF;
897        Final_Preupdate_Logic(
898 	  p_reference => p_reference
899 	  , p_primary_uom_quantity => p_primary_uom_quantity
900 	  , p_count_uom => p_count_uom
901 	  , p_serial_number => p_serial_number
902 	  , p_subinventory => p_subinventory
903 	  , p_lot_number => p_lot_number
904 	  , p_lot_expiration => p_lot_expiration_date
905 	  , p_revision => p_revision
906 	  , p_transaction_reason_id => p_transaction_reason_id
907 	  , p_transaction_process_mode => p_transaction_process_mode
908 	  , p_simulate => p_simulate);
909        --
910     END;
911   END;
912   --
913   PROCEDURE Tolerance_Logic(
914   p_pos_meas_err IN NUMBER ,
915   p_neg_meas_err IN NUMBER ,
916   p_app_tol_pos IN NUMBER ,
917   p_app_tol_neg IN NUMBER ,
918   p_cost_tol_pos IN NUMBER ,
919   p_cost_tol_neg IN NUMBER ,
920   p_adjustment_value IN NUMBER ,
921   p_adjustment_quantity IN NUMBER ,
922   p_system_quantity IN NUMBER ,
923   p_approval_option_code IN NUMBER ,
924   p_interface_rec IN MTL_CCEOI_VAR_PVT.INV_CCEOI_TYPE ,
925   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE)
926   IS
927     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
928   BEGIN
929     -- Start OF comments
930     -- API name  : Tolerance_logic
931     -- TYPE      : Private
932     -- Pre-reqs  : None
933     -- FUNCTION  :
934     -- Parameters:
935     --     IN    :
936     --  p_pos_meas_err IN NUMBER (required)
937     --  MTL_CYCLE_COUNT_ENTRIES_V.POSITIVE_MEASUREMENT_ERROR
938     --
939     --  p_neg_meas_err IN NUMBER (required)
940     --  MTL_CYCLE_COUNT_ENTRIES_V.NEGATIVE_MEASUREMENT_ERROR
941     --
942     --  p_app_tol_pos IN NUMBER  (required)
943     --  MTL_CYCLE_COUNT_ENTRIES_V.APP_TOL_POS
944     --
945     --  p_app_tol_neg IN NUMBER  (required)
946     --  MTL_CYCLE_COUNT_ENTRIES_V.APP_TOL_NEG
947     --
948     --  p_cost_tol_pos IN NUMBER  (required)
949     --  MTL_CYCLE_COUNT_ENTRIES_V.COST_TOL_POS
950     --
951     --  p_cost_tol_neg IN NUMBER  (required)
952     --  MTL_CYCLE_COUNT_ENTRIES_V.COST_TOL_NEG
953     --
954     --  p_adjustment_value IN NUMBER (required)
955     --  MTL_CYCLE_COUNT_ENTRIES_V.ADJUSTMENT_AMOUNT
956     --
957     --  p_adjustment_quantity IN NUMBER (required)
958     -- get the value FROM the global variable
959     -- MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY
960     --  MTL_CYCLE_COUNT_ENTRIES.ADJUSTMENT_QUANTITY
961     --
962     --  p_system_quantity IN NUMBER (required)
963     -- gets the value FROM the global variable
964     -- MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
965     --  MTL_CYCLE_COUNT_ENTRIES.SYSTEM_QUANTITY_CURRENT
966     --
967     --  p_approval_option_code IN NUMBER (required)
968     --  MTL_CYCLE_COUNT_HEADERS.APPROVAL_OPTION_CODE
969     --
970     -- p_interface_rec IN MTL_CC_ENTRIES_INTERFACE%rowtype
971     --
972     -- p_simulate IN varchar2 (default)
973     --   default = FND_API.G_FALSE - may modify data in other tables
974     --       FND_API.G_TRUE modify data only in the interface tables
975     --
976     --     OUT   :
977     -- Version: Current Version 0.9
978     --              Changed : Nothing
979     --          No Previous Version 0.0
980     --          Initial version 0.9
981     -- Notes  : Note text
982     -- END OF comments
983     DECLARE
984        --
985        dummy integer;
986        l_contianer_enabled_flag  	NUMBER := NULL;
987        l_contianer_adjustment_option 	NUMBER := NULL;
988        l_container_decrepancy_option 	NUMBER := NULL;
989     BEGIN
990        --
991 IF (l_debug = 1) THEN
992    MDEBUG( 'Process-Tolerance Logic ');
993 END IF;
994 
995        -- Approval option = Always
996        -- p_approval_option_code = 1 is applicable only when lpn_id is null
997        -- if lpn_id is not null, check container_adjustment_option = 2
998        IF (p_approval_option_code = 1 AND p_interface_rec.parent_lpn_id IS NULL) OR
999           ( p_interface_rec.parent_lpn_id IS NOT NULL
1000             AND MTL_CCEOI_VAR_PVT.G_CONTAINER_ENABLED_FLAG = 1
1001             AND ( MTL_CCEOI_VAR_PVT.G_CONTAINER_ADJUSTMENT_OPTION = 2
1002                   OR MTL_CCEOI_VAR_PVT.G_CONTAINER_DISCREPANCY_OPTION = 2 )
1003           )
1004        THEN
1005 	  --
1006 	  IF p_adjustment_quantity <> 0 THEN
1007 	     --
1008 	     IF p_system_quantity <> 0 THEN
1009 		--
1010 		IF p_adjustment_quantity < 0 THEN
1011 		   --
1012 		   IF p_neg_meas_err IS NOT NULL AND
1013 		      ABS((p_adjustment_quantity/ p_system_quantity) *100) < p_neg_meas_err THEN
1014 		      --
1015 		      -- No adjustments are required
1016 		      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
1017 	              MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_QUANTITY := 0;
1018 		      MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := 0;
1019 		      --
1020                       IF (l_debug = 1) THEN
1021                          MDEBUG( 'Tol : before final-pre-update-logic');
1022                       END IF;
1023 		      Final_Preupdate_Logic(
1024 			 p_reference => p_interface_rec.reference
1025 			 , p_primary_uom_quantity =>
1026 			 p_interface_rec.primary_uom_quantity
1027 			 , p_count_uom =>
1028 			 p_interface_rec.count_uom
1029 			 , p_serial_number => p_interface_rec.serial_number
1030 			 , p_subinventory =>p_interface_rec.subinventory
1031 			 , p_lot_number =>p_interface_rec.lot_number
1032 			 , p_lot_expiration =>
1033 			 MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1034 			 , p_revision =>p_interface_rec.revision
1035 			 , p_transaction_reason_id =>
1036 			 p_interface_rec.transaction_reason_id
1037 			 , p_transaction_process_mode => p_interface_rec.process_mode
1038 			 , p_simulate => p_simulate);
1039 		      --
1040                    IF (l_debug = 1) THEN
1041                       MDEBUG( 'Tole : After update logic');
1042                    END IF;
1043 		   ELSE
1044 		      --
1045 		      -- #### START OUT OF Tolerance
1046 		      IF (l_debug = 1) THEN
1047    		      MDEBUG( 'Before-Out of Tolerance ');
1048 		      END IF;
1049 		      Out_Of_Tolerance(
1050 			 p_reference => p_interface_rec.reference
1051 			 , p_primary_uom_quantity =>
1052 			 p_interface_rec.primary_uom_quantity
1053 			 , p_count_uom => p_interface_rec.count_uom
1054 			 , p_serial_number => p_interface_rec.serial_number
1055 			 , p_subinventory =>p_interface_rec.subinventory
1056 			 , p_lot_number =>p_interface_rec.lot_number
1057 			 , p_lot_expiration_date =>
1058 			 MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1059 			 , p_revision =>p_interface_rec.revision
1060 			 , p_transaction_reason_id =>
1061 			 p_interface_rec.transaction_reason_id
1062 			 , p_transaction_process_mode => p_interface_rec.process_mode
1063 			 , p_simulate => p_simulate );
1064 		      -- #### END OUT OF Tolerance
1065 IF (l_debug = 1) THEN
1066    MDEBUG( 'End of Out-of Tolerance ');
1067 END IF;
1068 		      --
1069 		   END IF;
1070 		   --
1071 		ELSE
1072 		   --
1073 		   IF p_pos_meas_err IS NOT NULL AND
1074 		      ABS((p_adjustment_quantity/p_system_quantity) *100) <
1075 		      p_pos_meas_err THEN
1076 		      --
1077 		      -- No adjustment required
1078 		      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
1079 	  	      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_QUANTITY := 0;
1080 		      MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := 0;
1081 		      --
1082 IF (l_debug = 1) THEN
1083    MDEBUG( 'Before preupdate logic - 2');
1084 END IF;
1085 		      Final_Preupdate_Logic(
1086 			 p_reference => p_interface_rec.reference
1087 			 , p_primary_uom_quantity =>
1088 			 p_interface_rec.primary_uom_quantity
1089 			 , p_count_uom => p_interface_rec.count_uom
1090 			 , p_serial_number => p_interface_rec.serial_number
1091 			 , p_subinventory =>p_interface_rec.subinventory
1092 			 , p_lot_number =>p_interface_rec.lot_number
1093 			 , p_lot_expiration =>
1094 			 MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1095 			 , p_revision =>p_interface_rec.revision
1096 			 , p_transaction_reason_id =>
1097 			 p_interface_rec.transaction_reason_id
1098 			 , p_transaction_process_mode => p_interface_rec.process_mode
1099 			 , p_simulate => p_simulate );
1100 		      --
1101 IF (l_debug = 1) THEN
1102    MDEBUG( 'preupdate logic-2 -end ');
1103 END IF;
1104 		   ELSE
1105 		      --
1106 IF (l_debug = 1) THEN
1107    MDEBUG( 'before start out-of tol -2 ');
1108 END IF;
1109 		      -- ## Start OUT OF TOLERANCE
1110 		      Out_Of_Tolerance(
1111 			 p_reference => p_interface_rec.reference
1112 			 , p_primary_uom_quantity =>
1113 			 p_interface_rec.primary_uom_quantity
1114 			 , p_count_uom =>
1115 			 p_interface_rec.count_uom
1116 			 , p_serial_number => p_interface_rec.serial_number
1117 			 , p_subinventory =>p_interface_rec.subinventory
1118 			 , p_lot_number =>p_interface_rec.lot_number
1119 			 , p_lot_expiration_date =>
1120 			 MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1121 			 , p_revision =>p_interface_rec.revision
1122 			 , p_transaction_reason_id =>
1123 			 p_interface_rec.transaction_reason_id
1124 			 , p_transaction_process_mode => p_interface_rec.process_mode
1125 			 , p_simulate => p_simulate );
1126 		      -- ## END OUT OF TOLERANCE
1127 		      --
1128 IF (l_debug = 1) THEN
1129    MDEBUG( 'After out-of-tol- end-2');
1130 END IF;
1131 		   END IF;
1132 		END IF;
1133 		-- System quantity = 0
1134 	     ELSE
1135 		--
1136 IF (l_debug = 1) THEN
1137    MDEBUG( 'Process-: Out of tol - 3');
1138 END IF;
1139 		Out_Of_Tolerance(
1140 		   p_reference => p_interface_rec.reference
1141 		   , p_primary_uom_quantity =>
1142 		   p_interface_rec.primary_uom_quantity
1143 		   , p_count_uom =>
1144 		   p_interface_rec.count_uom
1145 		   , p_serial_number => p_interface_rec.serial_number
1146 		   , p_subinventory =>p_interface_rec.subinventory
1147 , p_lot_number =>p_interface_rec.lot_number
1148                    , p_lot_expiration_date =>
1149                    MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1150                    , p_revision =>p_interface_rec.revision
1151                    , p_transaction_reason_id =>
1152                    p_interface_rec.transaction_reason_id
1153                    , p_transaction_process_mode => p_interface_rec.process_mode
1154                    , p_simulate => p_simulate );
1155                 --
1156 IF (l_debug = 1) THEN
1157    MDEBUG( 'Out of Tol-3 -end');
1158 END IF;
1159              END IF;
1160              -- if adjustment_qty = 0
1161           ELSE
1162              --
1163              MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
1164              MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_QUANTITY := 0;
1165              MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := 0;
1166              --
1167 IF (l_debug = 1) THEN
1168    MDEBUG( 'Before preupdate - 4');
1169 END IF;
1170              Final_Preupdate_Logic(
1171                 p_reference => p_interface_rec.reference
1172                 , p_primary_uom_quantity =>
1173                 p_interface_rec.primary_uom_quantity, p_count_uom =>
1174                 p_interface_rec.count_uom
1175                 , p_serial_number => p_interface_rec.serial_number
1176                 , p_subinventory =>p_interface_rec.subinventory
1177                 , p_lot_number =>p_interface_rec.lot_number
1178                 , p_lot_expiration =>
1179                 MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1180                 , p_revision =>p_interface_rec.revision
1181                 , p_transaction_reason_id =>
1182                 p_interface_rec.transaction_reason_id
1183                 , p_transaction_process_mode => p_interface_rec.process_mode
1184                 , p_simulate => p_simulate );
1185              --
1186 IF (l_debug = 1) THEN
1187    MDEBUG( 'End of pre-update - 4');
1188 END IF;
1189           END IF;
1190 
1191 	  -- if optional_option = required if out of tolerance
1192 	  -- approval option = 2 (never) or approval_option = 3 (out_of_toler)
1193 	  -- p_approval_option_code = 1 is applicable only when lpn_id is null
1194           -- if lpn_id is not null, check container_adjustment_option = 2
1195        ELSE
1196           --
1197           IF p_adjustment_quantity <> 0 THEN
1198              --
1199              IF p_system_quantity <> 0 THEN
1200                 --
1201                 IF p_adjustment_quantity < 0 THEN
1202                    --
1203                    IF p_neg_meas_err IS NOT NULL
1204                       AND ABS((p_adjustment_quantity/p_system_quantity) *100) < p_neg_meas_err THEN
1205                       --
1206                       MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
1207           	      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_QUANTITY := 0;
1208                       MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := 0;
1209                       --
1210 IF (l_debug = 1) THEN
1211    MDEBUG( 'before pre-update logic - 5');
1212 END IF;
1213                       Final_Preupdate_Logic(
1214                          p_reference => p_interface_rec.reference
1215                          , p_primary_uom_quantity =>
1216                          p_interface_rec.primary_uom_quantity
1217                          , p_count_uom => p_interface_rec.count_uom
1218                          , p_serial_number => p_interface_rec.serial_number
1219                          , p_subinventory =>p_interface_rec.subinventory
1220                          , p_lot_number =>p_interface_rec.lot_number
1221                          , p_lot_expiration =>
1222                          MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1223                          , p_revision =>p_interface_rec.revision
1224                          , p_transaction_reason_id =>
1225                          p_interface_rec.transaction_reason_id
1226                          , p_transaction_process_mode => p_interface_rec.process_mode
1227                          , p_simulate => p_simulate );
1228                       --
1229 IF (l_debug = 1) THEN
1230    MDEBUG( 'before pre-update logic -end - 5');
1231 END IF;
1232                    ELSE
1233                       --
1234                       IF(p_app_tol_neg IS NOT NULL AND
1235                         ABS((p_adjustment_quantity / p_system_quantity) * 100)>p_app_tol_neg) THEN
1236                          --
1237 IF (l_debug = 1) THEN
1238    MDEBUG( 'Out of tol if neg tol is not null ');
1239 END IF;
1240                          Out_Of_Tolerance(
1241                             p_reference => p_interface_rec.reference
1242                             , p_primary_uom_quantity =>
1243                             p_interface_rec.primary_uom_quantity
1244                             , p_count_uom => p_interface_rec.count_uom
1245                             , p_serial_number => p_interface_rec.serial_number
1246                             , p_subinventory =>p_interface_rec.subinventory
1247                             , p_lot_number =>p_interface_rec.lot_number
1248                             , p_lot_expiration_date =>
1249                             MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1250                             , p_revision =>p_interface_rec.revision
1251                             , p_transaction_reason_id =>
1252                             p_interface_rec.transaction_reason_id
1253                          , p_transaction_process_mode => p_interface_rec.process_mode
1254                          , p_simulate => p_simulate );
1255                          --
1256 IF (l_debug = 1) THEN
1257    MDEBUG( 'end of tol - if negtol is not null');
1258 END IF;
1259                       ELSE
1260                          --
1261                          IF((p_cost_tol_neg IS NOT NULL) AND
1262 			   (ABS(p_adjustment_value) > p_cost_tol_neg))
1263 			   THEN
1264                             --
1265                             Out_Of_Tolerance(
1266                                p_reference => p_interface_rec.reference
1267                                , p_primary_uom_quantity =>
1268                                p_interface_rec.primary_uom_quantity, p_count_uom =>
1269                                p_interface_rec.count_uom
1270                                , p_serial_number => p_interface_rec.serial_number
1271                                , p_subinventory =>p_interface_rec.subinventory
1272                                , p_lot_number =>p_interface_rec.lot_number
1273                                , p_lot_expiration_date =>
1274                                MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1275                                , p_revision =>p_interface_rec.revision
1276                                , p_transaction_reason_id =>
1277                                p_interface_rec.transaction_reason_id
1278                               , p_transaction_process_mode => p_interface_rec.process_mode
1279                               , p_simulate => p_simulate );
1280                             --
1281                          ELSE
1282                             --
1283 IF (l_debug = 1) THEN
1284    MDEBUG( 'Process-Tolerence-In');
1285 END IF;
1286                             in_Tolerance(
1287                                p_reference => p_interface_rec.reference
1288                                , p_primary_uom_quantity =>
1289                                p_interface_rec.primary_uom_quantity
1290                                , p_count_uom => p_interface_rec.count_uom
1291                                , p_serial_number => p_interface_rec.serial_number
1292                                , p_subinventory =>p_interface_rec.subinventory
1293                                , p_lot_number =>p_interface_rec.lot_number
1294                                , p_lot_expiration_date =>
1295                                MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1296                                , p_revision =>p_interface_rec.revision
1297                                , p_transaction_reason_id =>
1298                                p_interface_rec.transaction_reason_id
1299                               , p_transaction_process_mode => p_interface_rec.process_mode
1300                               , p_simulate => p_simulate );
1301                             --
1302 IF (l_debug = 1) THEN
1303    MDEBUG( 'Process-Tolerance -In -End ');
1304 END IF;
1305                          END IF;
1306                       END IF;
1307                    END IF;
1308                    -- p_adjustment_quantity >= 0
1309                 ELSE
1310                    --
1311                    IF p_pos_meas_err IS NOT NULL AND
1312                       ABS((p_adjustment_quantity/p_system_quantity) *100) < p_pos_meas_err THEN
1313                       --
1314                       MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
1315          MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_QUANTITY := 0;
1316                       MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := 0;
1317                       --
1318 IF (l_debug = 1) THEN
1319    MDEBUG( 'before final preupdate logic - err is not null');
1320 END IF;
1321                       Final_Preupdate_Logic(
1322                          p_reference => p_interface_rec.reference
1323                          , p_primary_uom_quantity =>
1324                          p_interface_rec.primary_uom_quantity, p_count_uom =>
1325                          p_interface_rec.count_uom
1326                          , p_serial_number => p_interface_rec.serial_number
1327                          , p_subinventory =>p_interface_rec.subinventory
1328                          , p_lot_number =>p_interface_rec.lot_number
1329                          , p_lot_expiration =>
1330                          MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1331                          , p_revision =>p_interface_rec.revision
1332                          , p_transaction_reason_id =>
1333                          p_interface_rec.transaction_reason_id
1334                          , p_transaction_process_mode => p_interface_rec.process_mode
1335                          , p_simulate => p_simulate );
1336                       --
1337 IF (l_debug = 1) THEN
1338    MDEBUG( 'end of preupdate logic - err is not null');
1339 END IF;
1340                    ELSE
1341                       --
1342                       IF(p_app_tol_pos IS NOT NULL AND
1343 			ABS((p_adjustment_quantity / p_system_quantity) * 100) > p_app_tol_pos)
1344 
1345                        THEN
1346                          --
1347                          Out_Of_Tolerance(
1348                             p_reference => p_interface_rec.reference
1349                             , p_primary_uom_quantity =>
1350                             p_interface_rec.primary_uom_quantity
1351                             , p_count_uom => p_interface_rec.count_uom
1352                             , p_serial_number => p_interface_rec.serial_number
1353                             , p_subinventory =>p_interface_rec.subinventory
1354                             , p_lot_number =>p_interface_rec.lot_number
1355                             , p_lot_expiration_date =>
1356                             MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1357                             , p_revision =>p_interface_rec.revision
1358                             , p_transaction_reason_id =>
1359                             p_interface_rec.transaction_reason_id
1360                          , p_transaction_process_mode => p_interface_rec.process_mode
1361                          , p_simulate => p_simulate );
1362                          --
1363                       ELSE
1364                          --
1365                          IF(p_cost_tol_pos IS NOT NULL AND
1366                                (ABS(p_adjustment_value)
1367 			   > p_cost_tol_pos))
1368 			 THEN
1369                             --
1370                             Out_Of_Tolerance(
1371                                p_reference => p_interface_rec.reference
1372                                , p_primary_uom_quantity =>
1373                                p_interface_rec.primary_uom_quantity
1374                                , p_count_uom => p_interface_rec.count_uom
1375                                , p_serial_number => p_interface_rec.serial_number
1376                                , p_subinventory =>p_interface_rec.subinventory
1377                                , p_lot_number =>p_interface_rec.lot_number
1378                                , p_lot_expiration_date =>
1379                                MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1380                                , p_revision =>p_interface_rec.revision
1381                                , p_transaction_reason_id =>
1382                                p_interface_rec.transaction_reason_id
1383                               , p_transaction_process_mode => p_interface_rec.process_mode
1384                               , p_simulate => p_simulate );
1385                             --
1386                          ELSE
1387                             --
1388                             in_Tolerance(
1389                                p_reference => p_interface_rec.reference
1390                                , p_primary_uom_quantity =>
1391                                p_interface_rec.primary_uom_quantity, p_count_uom =>
1392                                p_interface_rec.count_uom
1393                                , p_serial_number => p_interface_rec.serial_number
1394                                , p_subinventory =>p_interface_rec.subinventory
1395                                , p_lot_number =>p_interface_rec.lot_number
1396                                , p_lot_expiration_date =>
1397                                MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1398                                , p_revision =>p_interface_rec.revision
1399                                , p_transaction_reason_id =>
1400                                p_interface_rec.transaction_reason_id
1401                               , p_transaction_process_mode => p_interface_rec.process_mode
1402                               , p_simulate => p_simulate );
1403                             --
1404                          END IF;
1405                       END IF;
1406                    END IF;
1407                 END IF;
1408                 -- system quantity = 0
1409              ELSE
1410                 --
1411                 IF (p_app_tol_pos IS NOT NULL AND
1412 		  ABS((p_adjustment_quantity)*100) >p_app_tol_pos)
1413 		THEN
1414          --             ABS((p_adjustment_quantity/p_system_quantity) * 100) >p_app_tol_pos) THEN
1415                    --
1416 IF (l_debug = 1) THEN
1417    MDEBUG( 'Process-Out of tolerance ');
1418 END IF;
1419                    out_Of_Tolerance(
1420                       p_reference => p_interface_rec.reference
1421                       , p_primary_uom_quantity =>
1422                       p_interface_rec.primary_uom_quantity, p_count_uom =>
1423                       p_interface_rec.count_uom
1424                       , p_serial_number => p_interface_rec.serial_number
1425                       , p_subinventory =>p_interface_rec.subinventory
1426                       , p_lot_number =>p_interface_rec.lot_number
1427                       , p_lot_expiration_date =>
1428                       MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1429                       , p_revision =>p_interface_rec.revision
1430                       , p_transaction_reason_id =>
1431                       p_interface_rec.transaction_reason_id
1432                       , p_transaction_process_mode => p_interface_rec.process_mode
1433                       , p_simulate => p_simulate );
1434                    --
1435 IF (l_debug = 1) THEN
1436    MDEBUG( 'Process-End of Out of Tolerance');
1437 END IF;
1438                 ELSE
1439                    --
1440                    IF((p_cost_tol_pos IS NOT NULL) AND
1441 		     (ABS(p_adjustment_value) > p_cost_tol_pos))
1442 		    THEN
1443                       --
1444                       Out_Of_Tolerance(
1445                          p_reference => p_interface_rec.reference
1446                          , p_primary_uom_quantity =>
1447                          p_interface_rec.primary_uom_quantity, p_count_uom =>
1448                          p_interface_rec.count_uom
1449                          , p_serial_number => p_interface_rec.serial_number
1450                          , p_subinventory =>p_interface_rec.subinventory
1451                          , p_lot_number =>p_interface_rec.lot_number
1452                          , p_lot_expiration_date =>
1453                          MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1454                          , p_revision =>p_interface_rec.revision
1455                          , p_transaction_reason_id =>
1456                          p_interface_rec.transaction_reason_id
1457                          , p_transaction_process_mode => p_interface_rec.process_mode
1458                          , p_simulate => p_simulate );
1459                       --
1460                    ELSE
1461                       --
1462                       in_Tolerance(
1463                          p_reference => p_interface_rec.reference
1464                          , p_primary_uom_quantity =>
1465                          p_interface_rec.primary_uom_quantity
1466                          , p_count_uom => p_interface_rec.count_uom
1467                          , p_serial_number => p_interface_rec.serial_number
1468                          , p_subinventory =>p_interface_rec.subinventory
1469                          , p_lot_number =>p_interface_rec.lot_number
1470                          , p_lot_expiration_date =>
1471                          MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1472                          , p_revision =>p_interface_rec.revision
1473                          , p_transaction_reason_id =>
1474                          p_interface_rec.transaction_reason_id
1475                          , p_transaction_process_mode => p_interface_rec.process_mode
1476                          , p_simulate => p_simulate );
1477                       --
1478                    END IF;
1479                 END IF;
1480              END IF;
1481              -- adjustment qty = 0
1482           ELSE
1483              --
1484              MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
1485              MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_QUANTITY := 0;
1486              MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := 0;
1487              --
1488              Final_Preupdate_Logic(
1489                 p_reference => p_interface_rec.reference
1490                 , p_primary_uom_quantity =>
1491                 p_interface_rec.primary_uom_quantity
1492                 , p_count_uom => p_interface_rec.count_uom
1493                 , p_serial_number => p_interface_rec.serial_number
1494                 , p_subinventory =>p_interface_rec.subinventory
1495                 , p_lot_number =>p_interface_rec.lot_number
1496                 , p_lot_expiration =>
1497                 MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date
1498                 , p_revision =>p_interface_rec.revision
1499                 , p_transaction_reason_id =>
1500                 p_interface_rec.transaction_reason_id
1501                 , p_transaction_process_mode => p_interface_rec.process_mode
1502                 , p_simulate => p_simulate );
1503              --
1504           END IF;
1505        END IF;
1506        --
1507     END;
1508   END;
1509   --
1510   -- Zero count logic. count_type_code
1511   PROCEDURE Zero_Count_Logic(
1512   p_reference IN VARCHAR2 DEFAULT NULL,
1513   p_primary_uom_quantity IN NUMBER )
1514   IS
1515     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1516   BEGIN
1517     -- Start OF comments
1518     -- API name  : Zero_Count_logic
1519     -- TYPE      : Private
1520     -- Pre-reqs  : None
1521     -- FUNCTION  :
1522     -- this porcedure IS according to the count_type_code=4
1523     -- (zero COUNT) information without validation INTO
1524     -- temp data source OF cycle COUNT entries
1525     -- MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC_TMP
1526     -- Parameters:
1527     --     IN    :
1528     --  p_reference IN VARCHAR2(240) (optional)
1529     --  default NULL, LIKE a note what IS happened
1530     --
1531     --  p_primary_uom_quantity IN NUMBER (required)
1532     --  primary uom quantity
1533     --
1534     -- Version: Current Version 0.9
1535     --              Changed : Nothing
1536     --          No Previous Version 0.0
1537     --          Initial version 0.9
1538     -- Notes  : Note text
1539     -- END OF comments
1540     DECLARE
1541        --
1542        dummy integer;
1543     BEGIN
1544        -- SET the system quantity to 0
1545        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_CURRENT := 0;
1546        -- SET the NUMBER OF counts to 0
1547        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NUMBER_OF_COUNTS := 1;
1548        --SET the entry status code to completed
1549        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
1550        -- SET approval TYPE to automatic
1551        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_TYPE := 1;
1552        -- SET the employee id
1553        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_CURRENT :=
1554        MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID;
1555        -- SET the approval DATE
1556        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_DATE := SYSDATE;
1557        -- SET the COUNT TYPE CODE TO ZEROCOUNT
1558        MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_TYPE_CODE := 4;
1559        --
1560        MTL_CCEOI_PROCESS_PVT.Entry_to_Current
1561 	 (p_reference => p_reference
1562 	 , p_primary_uom_quantity => p_primary_uom_quantity );
1563        --
1564        MTL_CCEOI_PROCESS_PVT.Current_to_first
1565        (p_reference => p_reference
1566           , p_primary_uom_quantity => p_primary_uom_quantity
1567        );
1568        --
1569     END;
1570   END;
1571   --
1572   -- Calculates adjustments for Step 4
1573   PROCEDURE Calculate_Adjustment(
1574   p_api_version IN NUMBER ,
1575   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
1576   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
1577   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
1578   x_return_status OUT NOCOPY VARCHAR2 ,
1579   x_msg_count OUT NOCOPY NUMBER ,
1580   x_msg_data OUT NOCOPY VARCHAR2 ,
1581   x_errorcode OUT NOCOPY NUMBER ,
1582   p_inventory_item_id IN NUMBER ,
1583   p_organization_id IN NUMBER ,
1584   p_lpn_id IN NUMBER ,
1585   p_subinventory IN VARCHAR2 ,
1586   p_count_quantity IN NUMBER ,
1587   p_revision IN VARCHAR2 DEFAULT NULL,
1588   p_locator_id IN NUMBER DEFAULT NULL,
1589   p_lot_number IN VARCHAR2 DEFAULT NULL,
1590   p_serial_number IN VARCHAR2 DEFAULT NULL,
1591   p_serial_number_control_code IN NUMBER ,
1592   p_serial_count_option IN NUMBER ,
1593   p_system_quantity IN NUMBER DEFAULT NULL,
1594   p_secondary_system_quantity IN NUMBER DEFAULT NULL -- INVCONV
1595   )
1596   IS
1597     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1598   BEGIN
1599     -- Start OF comments
1600     -- API name  : Calculate_Adjustment
1601     -- TYPE      : Private
1602     -- Pre-reqs  : None
1603     -- FUNCTION  :
1604     -- This PROCEDURE calculates
1605     --  the Adjustment amount, Adjustment Variance percentage AND
1606     -- Adjustment quantity AND store the VALUES INTO the package
1607     -- variables G_ADJUSTMENT_AMOUNT,
1608     -- G_ADJUSTMENT_VARIANCE_PERCENTAGE,
1609     -- G_ADJUSTMENT_QUANTITY OF the package
1610     -- The system quantity IS stored INTO the package variable
1611     -- MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
1612     -- MTL_CCEOI_VAR_PVZ
1613     --
1614     -- Parameters:
1615     --     IN    :
1616     --  p_api_version      IN  NUMBER (required)
1617     --  API Version of this procedure
1618     --
1619     --  p_init_msg_list   IN  VARCHAR2 (optional)
1620     --    DEFAULT = FND_API.G_FALSE,
1621     --
1622     -- p_commit           IN  VARCHAR2 (optional)
1623     --     DEFAULT = FND_API.G_FALSE
1624     --
1625     --  p_validation_level IN  NUMBER (optional)
1626     --      DEFAULT = FND_API.G_VALID_LEVEL_FULL,
1627     --
1628     --  p_inventory_item_id IN NUMBER (required)
1629     --  ID OF the inventory item
1630     --
1631     --  p_organization_id IN NUMBER (required)
1632     --  ID OF the organization
1633     --
1634     --  p_subinventory IN VARCHAR2 (required)
1635     --
1636     --  p_revision IN VARCHAR2 (optional - defaulted)
1637     --  default = NULL
1638     --  revision code OF the item, required IF it IS under revision control
1639     --
1640     --  p_locator_id IN NUMBER (optional - defaulted)
1641     --  default = NULL
1642     --  ID OF the locator, required IF it IS under locator control
1643     --
1644     --  p_lot_number IN VARCHAR2 (optional - defaulted)
1645     --  default = NULL
1646     --  Lot NUMBER, required IF it IS under lot control
1647     --
1648     --  p_serial_number IN VARCHAR2 (optional - defaulted)
1649     --  default = NULL
1650     --  Serial NUMBER, required IF this item IN under serial control
1651     --
1652     --  p_count_quantity IN NUMBER (required)
1653     --  Quantity OF the current COUNT FOR teh specific item
1654     --
1655     --  p_serial_number_control_code IN NUMBER (required)
1656     --  FROM TABLE MTL_SYSTEM_ITEMS
1657     --
1658     --  p_serial_count_option IN NUMBER (required)
1659     --  FROM TABLE MTL_CYCLE_COUNT_HEADERS
1660     --
1661     --  p_system_quantity in number (required - defaulted)
1662     --  default null
1663     --
1664     --     OUT   :
1665     --  X_return_status    OUT NUMBER
1666     --  Result of all the operations
1667     --
1668     --   x_msg_count        OUT NUMBER,
1669     --
1670     --   x_msg_data         OUT VARCHAR2,
1671     --
1672     --   X_ErrorCode        OUT NUMBER
1673     --   18 = no system quantity FOR serial controlled item
1674     -- Version: Current Version 0.9
1675     --              Changed : Nothing
1676     --          No Previous Version 0.0
1677     --          Initial version 0.9
1678     -- Notes  : Note text
1679     -- END OF comments
1680     DECLARE
1681        --
1682        L_primary_uom_adj_qty NUMBER := 0;
1683        L_item_cost NUMBER := 0;
1684        L_counter integer := 0;
1685        L_system_quantity NUMBER:= 0;
1686        L_secondary_system_quantity NUMBER := 0; -- INVCONV
1687        --
1688        L_api_version CONSTANT NUMBER := 0.9;
1689        L_api_name CONSTANT VARCHAR2(30) := 'Calculate_Adjustment';
1690        l_cost_group_id NUMBER;
1691        l_cost_group VARCHAR2(10);
1692        l_return_status VARCHAR2(1);
1693        l_msg_count NUMBER;
1694        l_msg_data VARCHAR2(1000);
1695     BEGIN
1696        -- Standard start of API savepoint
1697        SAVEPOINT Calculate_Adjustment;
1698        --
1699        -- Standard Call to check for call compatibility
1700        IF NOT FND_API.Compatible_API_Call(l_api_version
1701              , p_api_version
1702              , l_api_name
1703              , G_PKG_NAME) THEN
1704           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1705        END IF;
1706        --
1707        -- Initialize message list if p_init_msg_list is set to true
1708        IF FND_API.to_Boolean(p_init_msg_list) THEN
1709           FND_MSG_PUB.initialize;
1710        END IF;
1711        --
1712        -- Initialisize API return status to access
1713        x_return_status := FND_API.G_RET_STS_SUCCESS;
1714        x_errorcode := 0;
1715        MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY := 0;
1716        MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY := 0; -- INVCONV
1717        --
1718 IF (l_debug = 1) THEN
1719    MDEBUG( 'Process-Inside Calc-Adj Qty');
1720    MDEBUG( 'Count Qty is = '||to_char(p_count_quantity));
1721 END IF;
1722        -- API body
1723        -- Get the system_quantity
1724        -- Calculate system quantity always even if you have the
1725        -- sys qty from entry table
1726        --if (p_system_quantity is NULL ) THEN
1727         --
1728 IF (l_debug = 1) THEN
1729    MDEBUG( 'Process-InsideAdjQty- SysQty is null');
1730    MDEBUG( 'Org '||to_char(p_organization_id));
1731    MDEBUG( 'item '||to_char(p_inventory_item_id));
1732    MDEBUG( 'lpnid'||to_char(p_lpn_id));
1733    MDEBUG( 'Sub '||p_subinventory);
1734    MDEBUG( 'Lot '||p_lot_number);
1735    MDEBUG( 'Locator '||to_char(p_locator_id));
1736    MDEBUG( 'SerlNo '||p_serial_number);
1737    MDEBUG( 'SerlNoCtrlCd '||to_char(p_serial_number_control_code));
1738    MDEBUG( 'SerlCntOption '||to_char(p_serial_count_option));
1739 END IF;
1740 
1741   /* Bug #2650761
1742    * If the cost_group_id is not stamped in the interface record, then
1743    * obtain cost group from the cost group API
1744   */
1745   IF MTL_CCEOI_VAR_PVT.G_COST_GROUP_ID IS NOT NULL THEN
1746     l_cost_group_id := MTL_CCEOI_VAR_PVT.G_COST_GROUP_ID;
1747   ELSE
1748     BEGIN
1749       inv_cost_group_pvt.get_cost_group(
1750           x_cost_group_id     =>  l_cost_group_id,
1751           x_cost_group        =>  l_cost_group,
1752           x_return_status     =>  l_return_status,
1753           x_msg_count         =>  l_msg_count,
1754           x_msg_data          =>  l_msg_data,
1755           p_organization_id   =>  p_organization_id,
1756           p_lpn_id            =>  p_lpn_id,
1757           p_inventory_item_id =>  p_inventory_item_id,
1758           p_revision          =>  p_revision,
1759           p_subinventory_code =>  p_subinventory,
1760           p_locator_id        =>  p_locator_id,
1761           p_lot_number        =>  p_lot_number,
1762           p_serial_number     =>  p_serial_number);
1763     EXCEPTION
1764       WHEN OTHERS THEN
1765         l_cost_group_id := NULL;
1766     END;
1767   END IF;
1768 
1769   IF (l_debug = 1) THEN
1770      mdebug('cost group id returned is: ' || l_cost_group_id);
1771   END IF;
1772 
1773 -- Bug 2823976
1774   IF (p_system_quantity is NULL ) THEN
1775 	IF p_lpn_id IS NOT NULL THEN
1776           IF p_inventory_item_id IS NOT NULL THEN
1777             -- Looking for a quanitity for an item withing a specific container.
1778             MTL_INV_UTIL_GRP.Get_LPN_Item_SysQty
1779 	 	(
1780 			p_api_version		=> 1.0
1781 		, 	p_init_msg_lst		=> fnd_api.g_true
1782 		,	p_commit		=> fnd_api.g_true
1783 		, 	x_return_status		=> x_return_status
1784 		, 	x_msg_count		=> x_msg_count
1785 		, 	x_msg_data		=> x_msg_data
1786 		,  	p_organization_id    	=> p_organization_id
1787 		,	p_lpn_id		=> p_lpn_id
1788 		,	p_inventory_item_id	=> p_inventory_item_id
1789 		,	p_lot_number		=> p_lot_number
1790 		,	p_revision		=> p_revision
1791 		,	p_serial_number		=> p_serial_number
1792     ,	p_cost_group_id		=> l_cost_group_id
1793 		--,	p_cost_group_id		=> MTL_CCEOI_VAR_PVT.G_COST_GROUP_ID
1794 		,	x_lpn_systemqty 	=> L_system_quantity
1795 		,       x_lpn_sec_systemqty     => L_secondary_system_quantity -- INVCONV
1796 		);
1797 	  ELSE
1798 	       -- No item id given, thus system quantity will be same as count quantity
1799 	       L_system_quantity := MTL_CCEOI_VAR_PVT.G_LPN_ITEM_SYSTEM_QTY;
1800 	       L_secondary_system_quantity := MTL_CCEOI_VAR_PVT.G_LPN_ITEM_SEC_SYSTEM_QTY; -- INVCONV
1801 	  END IF;
1802 	ELSE
1803 
1804 	-- No container given, regulare system quantity requested
1805         MTL_INV_UTIL_GRP.Calculate_Systemquantity
1806           (p_api_version => 0.9
1807           ,x_return_status => x_return_status
1808           ,x_msg_count => x_msg_count
1809           ,x_msg_data =>  x_msg_data
1810           ,p_organization_id =>  p_organization_id
1811           ,p_inventory_item_id => p_inventory_item_id
1812           ,p_subinventory => p_subinventory
1813           ,p_lot_number => p_lot_number
1814           ,p_revision => p_revision
1815           ,p_locator_id => p_locator_id
1816           ,	p_cost_group_id		=> l_cost_group_id
1817           --,p_cost_group_id => MTL_CCEOI_VAR_PVT.G_COST_GROUP_ID
1818           ,p_serial_number => p_serial_number
1819           ,p_serial_number_control =>  p_serial_number_control_code
1820           ,p_serial_count_option => p_serial_count_option
1821           ,x_system_quantity => L_system_quantity
1822 	  ,x_sec_system_quantity => L_secondary_system_quantity -- INVCONV
1823 	  );
1824 	END IF;
1825 
1826           -- in G_UOM_CODE UOM
1827           MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY :=
1828            L_system_quantity;
1829 
1830 	  MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY := L_secondary_system_quantity; -- INVCONV
1831   ELSE
1832 
1833          MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY := p_system_quantity;
1834          MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY := p_secondary_system_quantity; -- INVCONV
1835   END IF; --End Bug 2823976
1836 
1837   -- BEGIN INVCONV
1838   IF MTL_CCEOI_VAR_PVT.G_TRACKING_QUANTITY_IND <> 'PS' THEN
1839      MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY := NULL;
1840   END IF;
1841   -- END INVCONV
1842 
1843 IF (l_debug = 1) THEN
1844    MDEBUG( 'Process-InsideCSysQty '||to_char(MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY));
1845    MDEBUG( 'Process-CalQty '||to_char( L_system_quantity));
1846 END IF;
1847           --
1848 /* not reqd due to removal of if statement
1849        else
1850          --
1851           MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY :=
1852            p_system_quantity;
1853          --
1854 IF (l_debug = 1) THEN
1855    MDEBUG(
1856 END IF;
1857  'Process-InsidePSysQty '||to_char(MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY));
1858 
1859        END IF;
1860 */
1861        --
1862        -- Different UOMs THEN  convert
1863 IF (l_debug = 1) THEN
1864    MDEBUG( 'PUOM UOM '||MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE||' - '||MTL_CCEOI_VAR_PVT.G_UOM_CODE );
1865 END IF;
1866        IF MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE <>
1867           MTL_CCEOI_VAR_PVT.G_UOM_CODE THEN
1868           --
1869 IF (l_debug = 1) THEN
1870    MDEBUG( 'Process-Calc.PUOM AdjQty');
1871 END IF;
1872           -- Calculate the primary uom adjustement quantity
1873           -- changes made to convert system qty back to prim.uom qty
1874           L_primary_uom_adj_qty :=
1875           nvl(INV_CONVERT.inv_um_convert(
1876              item_id =>p_inventory_item_id
1877              , precision => 2
1878              , from_quantity => p_count_quantity
1879              , from_unit => MTL_CCEOI_VAR_PVT.G_UOM_CODE
1880              , to_unit => MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE
1881              , from_name => NULL
1882              , to_name => NULL
1883           ),0) -
1884             nvl( INV_CONVERT.inv_um_convert(
1885              item_id =>p_inventory_item_id
1886              , precision => 2
1887              , from_quantity => MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
1888              , from_unit => MTL_CCEOI_VAR_PVT.G_UOM_CODE
1889              , to_unit => MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE
1890              , from_name => NULL
1891              , to_name => NULL
1892           ),0);
1893 
1894           --
1895 IF (l_debug = 1) THEN
1896    MDEBUG( 'CalAdjQty : '||to_char(L_primary_uom_adj_qty));
1897    MDEBUG( 'Process-Calc.AdjQty in Count UOM ');
1898 END IF;
1899           -- Calculate Adjustment quantity IN count_UOM
1900 -- System qty is already calculated in Count UOM Code
1901 -- calculation of adjqty changed by suresh - 10/2/98
1902           MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY :=
1903           p_count_quantity - nvl(MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY,0);
1904             /*
1905             nvl( INV_CONVERT.inv_um_convert(
1906              item_id =>p_inventory_item_id
1907              , precision => 2
1908              , from_quantity => MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
1909              , from_unit => MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE
1910              , to_unit => MTL_CCEOI_VAR_PVT.G_UOM_CODE
1911              , from_name => NULL
1912              , to_name => NULL
1913           ),0);
1914           */
1915 IF (l_debug = 1) THEN
1916    MDEBUG( 'AdjQty-2 '||to_char(MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY));
1917 END IF;
1918           --
1919        ELSE
1920           -- Calculate the primary uom adjustement quantity
1921           L_primary_uom_adj_qty :=
1922           nvl(p_count_quantity,0) - nvl(MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY,0);
1923           --
1924           -- Calculate Adjustment quantity IN count_UOM
1925           MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY :=
1926           nvl(p_count_quantity,0) - nvl(MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY,0);
1927           --
1928 IF (l_debug = 1) THEN
1929    MDEBUG( 'AdjQty-3 '||to_char(L_primary_uom_adj_qty));
1930 END IF;
1931        END IF;
1932        --
1933 IF (l_debug = 1) THEN
1934    MDEBUG( 'Process-GetItemCost ');
1935 END IF;
1936 
1937   /* Bug 5409309 -Commenting out the following call to get the item cost.
1938                    Using the new local procedure get_item_cost
1939                    to fetch the item cost
1940        MTL_INV_UTIL_GRP.Get_Item_Cost(
1941           p_api_version => 0.9,
1942           x_return_status => x_return_status,
1943           x_msg_count => x_msg_count,
1944           x_msg_data => x_msg_data,
1945           p_organization_id => p_organization_id,
1946           p_inventory_item_id => p_inventory_item_id,
1947           p_locator_id => p_locator_id,
1948           x_item_cost => L_item_cost); */
1949 
1950        --Item Cost
1951 
1952           Get_Item_Cost(
1953            p_organization_id => p_organization_id,
1954            p_inventory_item_id => p_inventory_item_id,
1955            p_locator_id => p_locator_id,
1956            p_cost_group_id => l_cost_group_id,
1957            x_item_cost =>l_item_cost)  ;
1958 
1959    /* End of fix for Bug 5721960*/
1960 
1961 
1962        --
1963        -- Adjustment Amount
1964 IF (l_debug = 1) THEN
1965    MDEBUG( 'Process-GetItemCost U Cost'||to_char(L_item_cost));
1966    MDEBUG( 'Process-GetItemCost AdjQty'||to_char(L_primary_uom_adj_qty));
1967 END IF;
1968        MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_AMOUNT :=
1969        L_primary_uom_adj_qty * L_item_cost;
1970        --
1971        MTL_CCEOI_VAR_PVT.G_ITEM_COST :=   L_item_cost;
1972        --
1973        IF MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY > 0 THEN
1974           MTL_CCEOI_VAR_PVT.G_ADJ_VARIANCE_PERCENTAGE :=
1975           100 *(MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY/
1976              MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY);
1977        ELSE
1978           MTL_CCEOI_VAR_PVT.G_ADJ_VARIANCE_PERCENTAGE := NULL;
1979        END IF;
1980        --
1981 /*
1982        -- Commenting out by suresh to not to execute this code for testing
1983        -- item IS NOT under serial control
1984        -- AND system quantity IS 0 error OUT
1985        IF p_serial_number IS NOT NULL
1986           AND MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY = 0 THEN
1987           --
1988           x_errorcode := 17;
1989           FND_MESSAGE.SET_NAME('INV', 'INV_CCEOI_ADJCALC_NO_SERIAL');
1990           FND_MSG_PUB.Add;
1991           RAISE FND_API.G_EXC_ERROR;
1992           --
1993        END IF;
1994 */
1995        --
1996        --
1997        -- END of API body
1998        -- Standard check of p_commit
1999        IF FND_API.to_Boolean(p_commit) THEN
2000           COMMIT;
2001        END IF;
2002        -- Standard call to get message count and if count is 1, get message info
2003        FND_MSG_PUB.Count_And_Get
2004        (p_count => x_msg_count
2005           , p_data => x_msg_data);
2006     EXCEPTION
2007        WHEN FND_API.G_EXC_ERROR THEN
2008        --
2009        ROLLBACK TO Calculate_Adjustment;
2010        --
2011        x_return_status := FND_API.G_RET_STS_ERROR;
2012        --
2013        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
2014           , p_data => x_msg_data);
2015        --
2016        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2017        --
2018        ROLLBACK TO Calculate_Adjustment;
2019        --
2020        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2021        --
2022        x_errorcode := -1;
2023        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
2024           , p_data => x_msg_data);
2025        --
2026        WHEN OTHERS THEN
2027        --
2028        ROLLBACK TO Calculate_Adjustment;
2029        --
2030        x_errorcode := -1;
2031        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2032        --
2033        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2034           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2035        END IF;
2036        --
2037        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
2038           , p_data => x_msg_data);
2039     END;
2040   END;
2041   --
2042   -- Calculate Tolerance
2043   PROCEDURE Calculate_Tolerance(
2044   p_item_app_tol_pos IN NUMBER ,
2045   p_item_app_tol_neg IN NUMBER ,
2046   p_class_app_tol_pos IN NUMBER ,
2047    p_class_app_tol_neg IN NUMBER ,
2048   p_class_cost_tol_pos IN NUMBER ,
2049   p_class_cost_tol_neg IN NUMBER ,
2050   p_head_app_tol_pos IN NUMBER ,
2051   p_head_app_tol_neg IN NUMBER ,
2052    p_head_cost_tol_pos IN NUMBER ,
2053   p_head_cost_tol_neg IN NUMBER ,
2054   p_interface_rec IN MTL_CCEOI_VAR_PVT.INV_CCEOI_TYPE ,
2055   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE)
2056   IS
2057     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
2058   BEGIN
2059     -- Start OF comments
2060     -- API name  : Calculate_Tolerance
2061     -- TYPE      : Private
2062     -- Pre-reqs  : None
2063     -- FUNCTION  :
2064     -- this PROCEDURE get the pos AND neg approval tolerance
2065     -- AND currency tolerance according to the presedence WHERE
2066     -- it IS defined, begining with the highest level.
2067     -- ITEM > CLASS > HEADER
2068     --  After calculating the tolerances the tolerance logic IS called.
2069     -- Parameters:
2070     --     IN    :
2071     --
2072     -- p_item_app_tol_pos IN NUMBER (required)
2073     -- MTL_CYCLE_COUNT_ENTRIES_V.APPROVAL_TOLERANCE_POSITIVE
2074     --
2075     -- p_item_app_tol_neg IN NUMBER (required)
2076     -- MTL_CYCLE_COUNT_ENTRIES_V.APPROVAL_TOLERANCE_NEGATIVE
2077     --
2078     -- p_class_app_tol_pos IN NUMBER (required)
2079     -- MTL_CYCLE_COUNT_ENTRIES_V.CLASS_APP_TOL_POS
2080     --
2081     -- p_class_app_tol_neg IN NUMBER (required)
2082     -- MTL_CYCLE_COUNT_ENTRIES_V.CLASS_APP_TOL_NEG
2083     --
2084     -- p_class_cost_tol_pos IN NUMBER (required)
2085     -- MTL_CYCLE_COUNT_ENTRIES_V.CLASS_COST_TOL_POS
2086     --
2087     -- p_class_cost_tol_neg IN NUMBER (required)
2088     -- MTL_CYCLE_COUNT_ENTRIES_V.CLASS_COST_TOL_NEG
2089     --
2090     -- p_head_app_tol_pos IN NUMBER (required)
2091     -- MTL_CYCLE_COUNT_HEADERS.APPROVAL_TOLERANCE_POSITIVE
2092     --
2093     -- p_head_app_tol_neg IN NUMBER (required)
2094     -- MTL_CYCLE_COUNT_HEADERS.APPROVAL_TOLERANCE_NEGATIVE
2095     --
2096     -- p_head_cost_tol_pos IN NUMBER (required)
2097     -- MTL_CYCLE_COUNT_HEADERS.COST_TOLERANCE_POSITIVE
2098     --
2099     -- p_head_cost_tol_neg IN NUMBER (required)
2100     -- MTL_CYCLE_COUNT_HEADERS.COST_TOLERANCE_NEGATIVE
2101     --
2102     --  p_simulate NUMBER (default = FND_API.G_FALSE)
2103     --  G_FALSE = allow changes to tables other than interface tables
2104     --  G_TRUE = no changes will be made to any outside tables
2105     --     OUT   :
2106     --
2107     --
2108     -- Version: Current Version 0.9
2109     --              Changed : Nothing
2110     --          No Previous Version 0.0
2111     --          Initial version 0.9
2112     -- Notes  : Note text
2113     -- END OF comments
2114     DECLARE
2115        --
2116        CURSOR L_ItemErrMeas_Csr (itemid in number, org in number) is
2117        select
2118          positive_measurement_error
2119        , negative_measurement_error
2120        from mtl_system_items
2121        where inventory_item_id = itemid
2122        and organization_id = org;
2123        --
2124        L_positive_measurement_error number;
2125        L_negative_measurement_error number;
2126        L_app_tol_pos NUMBER;
2127        L_app_tol_neg NUMBER;
2128        L_cost_tol_pos NUMBER;
2129        L_cost_tol_neg NUMBER;
2130     BEGIN
2131    IF (l_debug = 1) THEN
2132       MDEBUG( 'Inside Calculate Tol ');
2133    END IF;
2134        --
2135        IF p_item_app_tol_pos IS NULL THEN
2136           --
2137           IF p_class_app_tol_pos IS NULL THEN
2138              --
2139              L_app_tol_pos := p_head_app_tol_pos;
2140              --
2141           ELSE
2142              --
2143              L_app_tol_pos := p_class_app_tol_pos;
2144              --
2145           END IF;
2146           --
2147        ELSE
2148           --
2149           L_app_tol_pos := p_item_app_tol_pos;
2150           --
2151        END IF;
2152        --
2153        IF p_item_app_tol_neg IS NULL THEN
2154           --
2155           IF p_class_app_tol_neg IS NULL THEN
2156              --
2157              L_app_tol_neg :=p_head_app_tol_neg;
2158              --
2159           ELSE
2160              --
2161              L_app_tol_neg := p_class_app_tol_neg;
2162              --
2163           END IF;
2164           --
2165        ELSE
2166           --
2167           L_app_tol_neg := p_item_app_tol_neg;
2168           --
2169        END IF;
2170        --
2171        IF p_class_cost_tol_pos IS NULL THEN
2172           --
2173           L_cost_tol_pos := p_head_cost_tol_pos;
2174           --
2175        ELSE
2176           --
2177           L_cost_tol_pos := p_class_cost_tol_pos;
2178           --
2179        END IF;
2180        --
2181        IF p_class_cost_tol_neg IS NULL THEN
2182           --
2183           L_cost_tol_neg := p_head_cost_tol_neg;
2184           --
2185        ELSE
2186           --
2187           L_cost_tol_neg := p_class_cost_tol_neg;
2188           --
2189        END IF;
2190        --
2191    IF (l_debug = 1) THEN
2192       MDEBUG( 'Inside Calculate Tol '|| to_char(MTL_CCEOI_VAR_PVT.G_inventory_item_id)||' - '||to_char(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORGANIZATION_ID));
2193    END IF;
2194 
2195 IF (l_debug = 1) THEN
2196    MDEBUG( 'Cal Tol-AdjQty '||to_char(MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY));
2197 END IF;
2198        for c_rec in   L_ItemErrMeas_Csr (
2199          MTL_CCEOI_VAR_PVT.G_inventory_item_id,
2200          MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORGANIZATION_ID) LOOP
2201 		 --
2202          L_positive_measurement_error := c_rec.positive_measurement_error;
2203          L_negative_measurement_error := c_rec.negative_measurement_error;
2204 		 --
2205        END LOOP;
2206        --
2207        Tolerance_Logic(
2208 	        p_pos_meas_err =>L_positive_measurement_error
2209           , p_neg_meas_err =>  L_negative_measurement_error
2210           , p_app_tol_pos => L_app_tol_pos
2211           , p_app_tol_neg => L_app_tol_neg
2212           , p_cost_tol_pos =>L_cost_tol_pos
2213           , p_cost_tol_neg => L_cost_tol_neg
2214           , p_adjustment_value => MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_AMOUNT
2215           --MTL_CCEOI_VAR_PVT.G_ADJ_VARIANCE_PERCENTAGE
2216           , p_adjustment_quantity =>
2217           MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY
2218           , p_system_quantity =>
2219           MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
2220           , p_approval_option_code =>
2221           MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.APPROVAL_OPTION_CODE
2222           , p_interface_rec => p_interface_rec
2223           , p_simulate => p_simulate
2224        );
2225        --
2226     END;
2227   END;
2228   --
2229   -- Deletes entries in the interface tables
2230   PROCEDURE Delete_CCIEntry(
2231   p_cc_entry_interface_id IN NUMBER )
2232   IS
2233     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
2234   BEGIN
2235     -- Start OF comments
2236     -- API name  : Delete_CCEOIEntry
2237     -- TYPE      : Private
2238     -- Pre-reqs  : None
2239     -- FUNCTION  :
2240     -- This PROCEDURE delete the entry from the interface table.
2241     -- Parameters:
2242     --     IN    :
2243     --  p_cc_entry_interface_id      IN  NUMBER (required)
2244     --  ID of the interface record/Entry
2245     --
2246     -- END OF comments
2247     DECLARE
2248        --
2249        dummy integer;
2250        --
2251     BEGIN
2252        --
2253        begin
2254          delete from mtl_cc_entries_interface
2255          where cc_entry_interface_id = p_cc_entry_interface_id;
2256        exception when others then
2257          null;
2258        end;
2259        --
2260     END;
2261   END;
2262   --
2263   -- Delete records from the cycle count interface error table
2264   PROCEDURE Delete_CCEOIError(
2265   p_cc_entry_interface_id IN NUMBER )
2266   IS
2267     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
2268   BEGIN
2269     -- Start OF comments
2270     -- API name  : Delete_CCEOIError
2271     -- TYPE      : Private
2272     -- Pre-reqs  : None
2273     -- FUNCTION  :
2274     -- This PROCEDURE delete the errors of an interface entry
2275     -- Parameters:
2276     --     IN    :
2277     --  p_cc_entry_interface_id      IN  NUMBER (required)
2278     --  ID of the interface record/Entry
2279     --
2280     -- END OF comments
2281     DECLARE
2282        --
2283        dummy integer;
2284        --
2285     BEGIN
2286        --
2287        begin
2288          delete from mtl_cc_interface_errors
2289          where cc_entry_interface_id = p_cc_entry_interface_id;
2290        exception when others then
2291          null;
2292        end;
2293        --
2294     END;
2295   END;
2296 
2297   --
2298   --
2299   -- Insert the record into the application tables
2300   /*
2301   Pre-reqs:
2302 
2303  INVENTORY_ITEM_ID		 NOT NULL
2304  SUBINVENTORY			 NOT NULL
2305  ORGANIZATION_ID		 NOT NULL
2306 
2307   */
2308   PROCEDURE Insert_CCEntry(
2309   p_interface_rec IN MTL_CCEOI_VAR_PVT.INV_CCEOI_TYPE)
2310   IS
2311     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
2312   BEGIN
2313     -- Start OF comments
2314     -- API name  : Insert_CCEntry
2315     -- TYPE      : Public
2316     -- Pre-reqs  : None
2317     -- FUNCTION  :
2318     -- inserts the RECORD INTO MTL_CYCLE_COUNT_ENTRIES TABLE
2319     -- Parameters:
2320     --     IN    :
2321     -- p_interface_rec    IN  CCEOI_Rec_Type (required)
2322     -- complete interface RECORD
2323     -- END OF comments
2324     DECLARE
2325        L_CCEntryId NUMBER;
2326        l_count_due_date DATE;
2327 
2328     BEGIN
2329        SELECT
2330           MTL_CYCLE_COUNT_ENTRIES_S.nextval
2331        INTO
2332           L_CCEntryId
2333        FROM
2334           dual;
2335        MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.CYCLE_COUNT_ENTRY_ID := L_CCEntryId;
2336        IF (l_debug = 1) THEN
2337           MDEBUG( 'New CCId :  '||to_char(L_CCEntryId));
2338        END IF;
2339 
2340        l_count_due_date := Compute_Count_Due_Date(sysdate);
2341        --
2342        IF (l_debug = 1) THEN
2343           mdebug('date due:'||to_char(l_count_due_date));
2344        END IF;
2345 
2346        INSERT INTO MTL_CYCLE_COUNT_ENTRIES
2347           (     COST_GROUP_ID
2348              ,  PARENT_LPN_ID
2349              , OUTERMOST_LPN_ID
2350              , CYCLE_COUNT_ENTRY_ID
2351              , LAST_UPDATE_DATE
2352              , LAST_UPDATED_BY
2353              , CREATION_DATE
2354              , CREATED_BY
2355              , LAST_UPDATE_LOGIN
2356              , COUNT_LIST_SEQUENCE
2357              , COUNT_DATE_FIRST
2358              , COUNT_DATE_CURRENT
2359              , COUNT_DATE_PRIOR
2360              , COUNT_DATE_DUMMY
2361              , COUNTED_BY_EMPLOYEE_ID_FIRST
2362              , COUNTED_BY_EMPLOYEE_ID_CURRENT
2363              , COUNTED_BY_EMPLOYEE_ID_PRIOR
2364              , COUNTED_BY_EMPLOYEE_ID_DUMMY
2365              , COUNT_UOM_FIRST
2366              , COUNT_UOM_CURRENT
2367              , COUNT_UOM_PRIOR
2368              , COUNT_QUANTITY_FIRST
2369              , COUNT_QUANTITY_CURRENT
2370              , COUNT_QUANTITY_PRIOR
2371              , INVENTORY_ITEM_ID
2372              , SUBINVENTORY
2373              , ENTRY_STATUS_CODE
2374              , COUNT_DUE_DATE
2375              , ORGANIZATION_ID
2376              , CYCLE_COUNT_HEADER_ID
2377              , NUMBER_OF_COUNTS
2378              , LOCATOR_ID
2379              , ADJUSTMENT_QUANTITY
2380              , ADJUSTMENT_DATE
2381              , ADJUSTMENT_AMOUNT
2382              , ITEM_UNIT_COST
2383              , INVENTORY_ADJUSTMENT_ACCOUNT
2384              , APPROVAL_DATE
2385              , APPROVER_EMPLOYEE_ID
2386              , REVISION
2387              , LOT_NUMBER
2388              , LOT_CONTROL
2389              , SYSTEM_QUANTITY_FIRST
2390              , SYSTEM_QUANTITY_CURRENT
2391              , SYSTEM_QUANTITY_PRIOR
2392              , REFERENCE_FIRST
2393              , REFERENCE_CURRENT
2394              , REFERENCE_PRIOR
2395              , PRIMARY_UOM_QUANTITY_FIRST
2396              , PRIMARY_UOM_QUANTITY_CURRENT
2397              , PRIMARY_UOM_QUANTITY_PRIOR
2398              , COUNT_TYPE_CODE
2399               , TRANSACTION_REASON_ID
2400              , REQUEST_ID
2401              , PROGRAM_APPLICATION_ID
2402              , PROGRAM_ID
2403              , PROGRAM_UPDATE_DATE
2404              , APPROVAL_TYPE
2405              , ATTRIBUTE_CATEGORY
2406              , ATTRIBUTE1
2407              , ATTRIBUTE2
2408              , ATTRIBUTE3
2409              , ATTRIBUTE4
2410              , ATTRIBUTE5
2411              , ATTRIBUTE6
2412              , ATTRIBUTE7
2413              , ATTRIBUTE8
2414              , ATTRIBUTE9
2415              , ATTRIBUTE10
2416              , ATTRIBUTE11
2417              , ATTRIBUTE12
2418              , ATTRIBUTE13
2419              , ATTRIBUTE14
2420              , ATTRIBUTE15
2421              , SERIAL_NUMBER
2422              , SERIAL_DETAIL
2423              , APPROVAL_CONDITION
2424              , NEG_ADJUSTMENT_QUANTITY
2425              , NEG_ADJUSTMENT_AMOUNT
2426              , EXPORT_FLAG
2427              -- BEGIN INVCONV
2428              , SECONDARY_UOM_QUANTITY_FIRST
2429              , SECONDARY_UOM_QUANTITY_CURRENT
2430              , SECONDARY_UOM_QUANTITY_PRIOR
2431              , COUNT_SECONDARY_UOM_FIRST
2432              , COUNT_SECONDARY_UOM_CURRENT
2433              , COUNT_SECONDARY_UOM_PRIOR
2434              , SECONDARY_SYSTEM_QTY_FIRST
2435              , SECONDARY_SYSTEM_QTY_CURRENT
2436              , SECONDARY_SYSTEM_QTY_PRIOR
2437              , SECONDARY_ADJUSTMENT_QUANTITY
2438              -- END INVCONV
2439           )
2440        VALUES
2441           (    NULL
2442              , NULL
2443              , NULL
2444              , L_CCEntryId
2445              , sysdate
2446              , MTL_CCEOI_VAR_PVT.G_UserID
2447              , sysdate
2448              , MTL_CCEOI_VAR_PVT.G_UserID
2449              , MTL_CCEOI_VAR_PVT.G_UserID
2450              , nvl(p_interface_rec.COUNT_LIST_SEQUENCE,MTL_CCEOI_VAR_PVT.G_Seq_No)
2451            --  , p_interface_rec.count_list_sequence
2452              , NULL -- MTL_CCEOI_VAR_PVT.G_COUNT_DATE
2453              , NULL -- MTL_CCEOI_VAR_PVT.G_COUNT_DATE
2454              , NULL
2455              , NULL
2456              , NULL -- MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID
2457              , NULL -- MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID
2458              , NULL
2459              , NULL
2460              , NULL -- MTL_CCEOI_VAR_PVT.G_UOM_CODE
2461              , NULL -- MTL_CCEOI_VAR_PVT.G_UOM_CODE
2462              , NULL
2463              , NULL -- MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY
2464              , NULL -- MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY
2465              , NULL
2466              , MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID
2467              , MTL_CCEOI_VAR_PVT.G_SUBINVENTORY
2468              , 1
2469              , l_count_due_date
2470              , p_interface_rec.ORGANIZATION_ID
2471              , MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID
2472 	     , NULL -- 0  XXX number of counts (null for new entries)
2473 	     , MTL_CCEOI_VAR_PVT.G_LOCATOR_ID
2474              , NULL
2475              , NULL
2476              , NULL
2477              , NULL
2478              , NULL --MTL_CCEOI_VAR_PVT.G_ADJUST_ACCOUNT_ID
2479              , NULL
2480              , NULL
2481              , MTL_CCEOI_VAR_PVT.G_SKU_REC.REVISION   -- NULL  --Revision
2482              , MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_NUMBER  -- NULL  --Lot Number
2483 	 , decode(MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_CONTROL_CODE, 1, null,
2484 	 MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_CONTROL_CODE)
2485              , NULL -- MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
2486              , NULL -- MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
2487              , NULL
2488              , NULL -- p_interface_rec.REFERENCE
2489              , NULL -- p_interface_rec.REFERENCE
2490              , NULL
2491              , NULL
2492              , NULL
2493              , NULL
2494              , 2     -- UNSCHEDULED COUNT
2495              , NULL
2496              , MTL_CCEOI_VAR_PVT.G_RequestID
2497              , MTL_CCEOI_VAR_PVT.G_ProgramAppID
2498              , MTL_CCEOI_VAR_PVT.G_ProgramID
2499              , sysdate
2500              , NULL -- DECODE(
2501               --  MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.APPROVAL_OPTION_CODE,
2502               --  1, 2, 2, 1, 3, 2, NULL)
2503              , p_interface_rec.ATTRIBUTE_CATEGORY
2504              , p_interface_rec.ATTRIBUTE1
2505              , p_interface_rec.ATTRIBUTE2
2506              , p_interface_rec.ATTRIBUTE3
2507              , p_interface_rec.ATTRIBUTE4
2508              , p_interface_rec.ATTRIBUTE5
2509              , p_interface_rec.ATTRIBUTE6
2510              , p_interface_rec.ATTRIBUTE7
2511              , p_interface_rec.ATTRIBUTE8
2512              , p_interface_rec.ATTRIBUTE9
2513              , p_interface_rec.ATTRIBUTE10
2514              , p_interface_rec.ATTRIBUTE11
2515              , p_interface_rec.ATTRIBUTE12
2516              , p_interface_rec.ATTRIBUTE13
2517              , p_interface_rec.ATTRIBUTE14
2518              , p_interface_rec.ATTRIBUTE15
2519              , p_interface_rec.SERIAL_NUMBER
2520              , NULL
2521              , NULL
2522              , NULL
2523              , NULL
2524              , 1 --  exported... do not forget to unexport
2525              -- BEGIN INVCONV
2526              , NULL
2527              , NULL
2528              , NULL
2529              , NULL
2530              , NULL
2531              , NULL
2532              , NULL
2533              , NULL
2534              , NULL
2535              , NULL
2536              -- END INVCONV
2537           );
2538 IF (l_debug = 1) THEN
2539    MDEBUG( 'End of New CCId :  '||to_char(L_CCEntryId));
2540 END IF;
2541     EXCEPTION
2542         when others then
2543 IF (l_debug = 1) THEN
2544    MDEBUG( 'Exception Error while Inserting..');
2545    	  MDEBUG( 'Error: ' || sqlerrm);
2546 END IF;
2547 	  raise fnd_api.g_exc_unexpected_error;
2548     END;
2549   END;
2550   --
2551   -- Insert the given record into MTL_CC_ENTRIES_INTERFACE
2552   PROCEDURE Insert_CCIEntry(
2553   p_interface_rec IN MTL_CCEOI_VAR_PVT.INV_CCEOI_TYPE ,
2554   x_return_status OUT NOCOPY VARCHAR2 )
2555   IS
2556     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
2557   BEGIN
2558     -- Start OF comments
2559     -- API name  : Insert_CCIEntry
2560     -- TYPE      : Public
2561     -- Pre-reqs  : None
2562     -- FUNCTION  :
2563     -- inserts the exported RECORD INTO MTL_CC_ENTRIESINTERFACE TABLE
2564     -- Parameters:
2565     --     IN    :
2566     -- p_interface_rec    IN  CCEOI_Rec_Type (required)
2567     -- complete interface RECORD
2568     --
2569     --  OUT :
2570     --  x_return_status VARCHAR2
2571     -- END OF comments
2572     DECLARE
2573        L_CCEOIId NUMBER :=  p_interface_rec.cc_entry_interface_id;
2574     BEGIN
2575        IF (l_debug = 1) THEN
2576           MDEBUG( 'Insert_CCIEntry: Before creation of new seq id');
2577        END IF;
2578 
2579        X_return_status := FND_API.G_RET_STS_SUCCESS;
2580        --
2581 
2582        IF p_interface_rec.cc_entry_interface_id IS NULL THEN
2583          BEGIN
2584           SELECT
2585              MTL_CC_ENTRIES_INTERFACE_S1.nextval
2586           INTO
2587              L_CCEOIId
2588           FROM
2589              dual;
2590         EXCEPTION
2591            WHEN OTHERS THEN
2592 	IF (l_debug = 1) THEN
2593    	mdebug('id creation failed failed');
2594 	END IF;
2595                 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2596         END;
2597        END IF;
2598        --
2599        BEGIN
2600        --
2601        -- Calculate the system quantity
2602        NULL;
2603        --
2604 	IF (l_debug = 1) THEN
2605    	mdebug('Insert_CCIEntry: ' || L_CCEOIId);
2606 	END IF;
2607        INSERT INTO MTL_CC_ENTRIES_INTERFACE
2608         (  cost_group_name
2609          , cost_group_id
2610          , parent_lpn_id
2611          , outermost_lpn_id
2612          , CC_ENTRY_INTERFACE_ID
2613          , organization_id
2614          , last_update_date
2615          , last_updated_by
2616          , creation_date
2617          , created_by
2618          , last_update_login
2619          , CC_ENTRY_INTERFACE_GROUP_ID
2620          , CYCLE_COUNT_ENTRY_ID
2621          , action_code
2622 	 , cycle_count_header_id
2623 	 , cycle_count_header_name
2624 	 , count_list_sequence
2625 	 , inventory_item_id
2626 	 , item_segment1
2627 	 , item_segment2
2628 	 , item_segment3
2629 	 , item_segment4
2630 	 , item_segment5
2631 	 , item_segment6
2632 	 , item_segment7
2633 	 , item_segment8
2634 	 , item_segment9
2635 	 , item_segment10
2636 	 , item_segment11
2637 	 , item_segment12
2638 	 , item_segment13
2639 	 , item_segment14
2640 	 , item_segment15
2641 	 , item_segment16
2642 	 , item_segment17
2643 	 , item_segment18
2644 	 , item_segment19
2645 	 , item_segment20
2646          , revision
2647          , subinventory
2648 	 , locator_id
2649 	 , locator_segment1
2650 	 , locator_segment2
2651 	 , locator_segment3
2652 	 , locator_segment4
2653 	 , locator_segment5
2654 	 , locator_segment6
2655 	 , locator_segment7
2656 	 , locator_segment8
2657 	 , locator_segment9
2658 	 , locator_segment10
2659 	 , locator_segment11
2660 	 , locator_segment12
2661 	 , locator_segment13
2662 	 , locator_segment14
2663 	 , locator_segment15
2664 	 , locator_segment16
2665 	 , locator_segment17
2666 	 , locator_segment18
2667 	 , locator_segment19
2668 	 , locator_segment20
2669          , lot_number
2670          , serial_number
2671          , primary_uom_quantity
2672 	 , count_uom
2673 	 , count_unit_of_measure
2674 	 , count_quantity
2675 	 , system_quantity
2676 	 , adjustment_account_id
2677 	 , account_segment1
2678 	 , account_segment2
2679 	 , account_segment3
2680 	 , account_segment4
2681 	 , account_segment5
2682 	 , account_segment6
2683 	 , account_segment7
2684 	 , account_segment8
2685 	 , account_segment9
2686 	 , account_segment10
2687 	 , account_segment11
2688 	 , account_segment12
2689 	 , account_segment13
2690 	 , account_segment14
2691 	 , account_segment15
2692 	 , account_segment16
2693 	 , account_segment17
2694 	 , account_segment18
2695 	 , account_segment19
2696 	 , account_segment20
2697 	 , account_segment21
2698 	 , account_segment22
2699 	 , account_segment23
2700 	 , account_segment24
2701 	 , account_segment25
2702 	 , account_segment26
2703 	 , account_segment27
2704 	 , account_segment28
2705 	 , account_segment29
2706 	 , account_segment30
2707 	 , count_date
2708 	 , employee_id
2709 	 , employee_full_name
2710 	 , reference
2711 	 , transaction_reason_id
2712 	 , transaction_reason
2713          , request_id
2714          , program_application_id
2715          , program_id
2716          , program_update_date
2717          , lock_flag
2718          , process_flag
2719          , process_mode
2720 	 , valid_flag
2721 	 , delete_flag
2722 	 , status_flag
2723 	 , error_flag
2724 	 , attribute_category
2725 	 , attribute1
2726 	 , attribute2
2727 	 , attribute3
2728 	 , attribute4
2729 	 , attribute5
2730 	 , attribute6
2731 	 , attribute7
2732 	 , attribute8
2733 	 , attribute9
2734 	 , attribute10
2735 	 , attribute11
2736 	 , attribute12
2737 	 , attribute13
2738 	 , attribute14
2739 	 , attribute15
2740 	 , project_id
2741 	 , task_id
2742 	 -- BEGIN INVCONV
2743 	 , secondary_uom
2744 	 , secondary_unit_of_measure
2745 	 , secondary_count_quantity
2746 	 , secondary_system_quantity
2747 	 -- END INVCONV
2748           )
2749          VALUES
2750         (  p_interface_rec.cost_group_name
2751          , p_interface_rec.cost_group_id
2752          , p_interface_rec.parent_lpn_id
2753          , p_interface_rec.outermost_lpn_id
2754          , L_CCEOIId
2755          , p_interface_rec.organization_id
2756          , sysdate
2757          , MTL_CCEOI_VAR_PVT.G_UserID
2758          , sysdate
2759          , MTL_CCEOI_VAR_PVT.G_UserID
2760          , MTL_CCEOI_VAR_PVT.G_LoginID
2761          , P_interface_rec.CC_ENTRY_INTERFACE_GROUP_ID
2762 	 , P_interface_rec.CYCLE_COUNT_ENTRY_ID
2763 	 --- was always insert g_process. BUG??
2764 	 , nvl(p_interface_rec.action_code, MTL_CCEOI_VAR_PVT.G_PROCESS)
2765 	 , p_interface_rec.cycle_count_header_id
2766 	 , p_interface_rec.cycle_count_header_name
2767 	 , nvl(p_interface_rec.COUNT_LIST_SEQUENCE,MTL_CCEOI_VAR_PVT.G_Seq_No)
2768 	 , p_interface_rec.inventory_item_id
2769 	 , p_interface_rec.item_segment1
2770 	 , p_interface_rec.item_segment2
2771 	 , p_interface_rec.item_segment3
2772 	 , p_interface_rec.item_segment4
2773 	 , p_interface_rec.item_segment5
2774 	 , p_interface_rec.item_segment6
2775 	 , p_interface_rec.item_segment7
2776 	 , p_interface_rec.item_segment8
2777 	 , p_interface_rec.item_segment9
2778 	 , p_interface_rec.item_segment10
2779 	 , p_interface_rec.item_segment11
2780 	 , p_interface_rec.item_segment12
2781 	 , p_interface_rec.item_segment13
2782 	 , p_interface_rec.item_segment14
2783 	 , p_interface_rec.item_segment15
2784 	 , p_interface_rec.item_segment16
2785 	 , p_interface_rec.item_segment17
2786 	 , p_interface_rec.item_segment18
2787 	 , p_interface_rec.item_segment19
2788 	 , p_interface_rec.item_segment20
2789          , p_interface_rec.revision
2790          , p_interface_rec.subinventory
2791 	 , p_interface_rec.locator_id
2792 	 , p_interface_rec.locator_segment1
2793 	 , p_interface_rec.locator_segment2
2794 	 , p_interface_rec.locator_segment3
2795 	 , p_interface_rec.locator_segment4
2796 	 , p_interface_rec.locator_segment5
2797 	 , p_interface_rec.locator_segment6
2798 	 , p_interface_rec.locator_segment7
2799 	 , p_interface_rec.locator_segment8
2800 	 , p_interface_rec.locator_segment9
2801 	 , p_interface_rec.locator_segment10
2802 	 , p_interface_rec.locator_segment11
2803 	 , p_interface_rec.locator_segment12
2804 	 , p_interface_rec.locator_segment13
2805 	 , p_interface_rec.locator_segment14
2806 	 , p_interface_rec.locator_segment15
2807 	 , p_interface_rec.locator_segment16
2808 	 , p_interface_rec.locator_segment17
2809 	 , p_interface_rec.locator_segment18
2810 	 , p_interface_rec.locator_segment19
2811 	 , p_interface_rec.locator_segment20
2812          , p_interface_rec.lot_number
2813          , p_interface_rec.serial_number
2814          , p_interface_rec.primary_uom_quantity
2815 	 , p_interface_rec.count_uom
2816 	 , p_interface_rec.count_unit_of_measure
2817 	 , p_interface_rec.count_quantity
2818 	 , p_interface_rec.system_quantity --MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY
2819 	 , p_interface_rec.adjustment_account_id
2820 	 , p_interface_rec.account_segment1
2821 	 , p_interface_rec.account_segment2
2822 	 , p_interface_rec.account_segment3
2823 	 , p_interface_rec.account_segment4
2824 	 , p_interface_rec.account_segment5
2825 	 , p_interface_rec.account_segment6
2826 	 , p_interface_rec.account_segment7
2827 	 , p_interface_rec.account_segment8
2828 	 , p_interface_rec.account_segment9
2829 	 , p_interface_rec.account_segment10
2830 	 , p_interface_rec.account_segment11
2831 	 , p_interface_rec.account_segment12
2832 	 , p_interface_rec.account_segment13
2833 	 , p_interface_rec.account_segment14
2834 	 , p_interface_rec.account_segment15
2835 	 , p_interface_rec.account_segment16
2836 	 , p_interface_rec.account_segment17
2837 	 , p_interface_rec.account_segment18
2838 	 , p_interface_rec.account_segment19
2839 	 , p_interface_rec.account_segment20
2840 	 , p_interface_rec.account_segment21
2841 	 , p_interface_rec.account_segment22
2842 	 , p_interface_rec.account_segment23
2843 	 , p_interface_rec.account_segment24
2844 	 , p_interface_rec.account_segment25
2845 	 , p_interface_rec.account_segment26
2846 	 , p_interface_rec.account_segment27
2847 	 , p_interface_rec.account_segment28
2848 	 , p_interface_rec.account_segment29
2849 	 , p_interface_rec.account_segment30
2850 	 , p_interface_rec.count_date
2851 	 , p_interface_rec.employee_id
2852 	 , p_interface_rec.employee_full_name
2853 	 , p_interface_rec.reference
2854 	 , p_interface_rec.transaction_reason_id
2855 	 , p_interface_rec.transaction_reason
2856          , MTL_CCEOI_VAR_PVT.G_RequestID
2857          , MTL_CCEOI_VAR_PVT.G_ProgramAppID
2858          , MTL_CCEOI_VAR_PVT.G_ProgramID
2859          , sysdate
2860          , p_interface_rec.lock_flag
2861          , 1 --p_interface_rec.process_flag
2862          , p_interface_rec.process_mode
2863 	 , p_interface_rec.valid_flag
2864 	 , p_interface_rec.delete_flag
2865 	 , p_interface_rec.status_flag
2866 	 , p_interface_rec.error_flag
2867 	 , p_interface_rec.ATTRIBUTE_CATEGORY
2868 	 , p_interface_rec.attribute1
2869 	 , p_interface_rec.attribute2
2870 	 , p_interface_rec.attribute3
2871 	 , p_interface_rec.attribute4
2872 	 , p_interface_rec.attribute5
2873 	 , p_interface_rec.attribute6
2874 	 , p_interface_rec.attribute7
2875 	 , p_interface_rec.attribute8
2876 	 , p_interface_rec.attribute9
2877 	 , p_interface_rec.attribute10
2878 	 , p_interface_rec.attribute11
2879 	 , p_interface_rec.attribute12
2880 	 , p_interface_rec.attribute13
2881 	 , p_interface_rec.attribute14
2882 	 , p_interface_rec.attribute15
2883 	 , p_interface_rec.project_id
2884 	 , p_interface_rec.task_id
2885 	 -- BEGIN INVCONV
2886 	 , p_interface_rec.secondary_uom
2887          , p_interface_rec.secondary_unit_of_measure
2888          , p_interface_rec.secondary_count_quantity
2889          , p_interface_rec.secondary_system_quantity
2890          -- END INVCONV
2891           );
2892 	IF (l_debug = 1) THEN
2893    	mdebug('Insert_CCIEntry: Entry Inserted' || L_CCEOIId);
2894 	END IF;
2895        	MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID := L_CCEOIId;
2896 	MTL_CCEOI_VAR_PVT.G_REC_IN_SYSTEM := TRUE;
2897         EXCEPTION
2898 	  WHEN OTHERS THEN
2899 	    if p_interface_rec.organization_id is null then
2900     	       x_return_status := fnd_api.g_ret_sts_error;
2901 	    else
2902 	       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2903 	    end if;
2904 	    IF (l_debug = 1) THEN
2905    	    mdebug('Insert_CCIEntry: ' || sqlerrm);
2906 	    END IF;
2907         END;
2908     END;
2909   END;
2910   --
2911   -- Insert record into Cycle Count Interface error table
2912   PROCEDURE Insert_CCEOIError(
2913   p_cc_entry_interface_id IN NUMBER ,
2914   p_error_column_name IN VARCHAR2 ,
2915   p_error_table_name IN VARCHAR2 ,
2916   p_message_name IN VARCHAR2 )
2917   IS
2918     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
2919   BEGIN
2920     -- Start OF comments
2921     -- API name  :insert_CCEOIError
2922     -- TYPE      : Private
2923     -- Pre-reqs  : None
2924     -- FUNCTION  :
2925     -- inserts error information INTO the interface error TABLE
2926     -- Parameters
2927     -- IN:
2928     -- p_cc_entry_interface_id IN NUMBER (required)
2929     -- ID OF the interface RECORD
2930     --
2931     -- p_error_column_name IN VARCHAR2 (required)
2932     -- Columnname OF the errorvalue
2933     --
2934     -- p_error_table_name IN VARCHAR2 (required)
2935     -- tablename OF the errorvalue
2936     --
2937     -- p_message_name IN VARCHAR2 (required)
2938     -- name OF the message
2939     --
2940     -- END OF COMMENT
2941     DECLARE
2942        L_interface_error_id NUMBER;
2943     BEGIN
2944        IF (l_debug = 1) THEN
2945           MDEBUG('Insert error: ' || FND_MESSAGE.GET_STRING('INV', p_message_name));
2946        END IF;
2947        --
2948        SELECT MTL_CC_INTERFACE_ERRORS_S.nextval
2949        INTO
2950           L_interface_error_id
2951        FROM
2952           dual;
2953        --
2954        INSERT INTO mtl_cc_interface_errors(
2955              interface_error_id,
2956              cc_entry_interface_id,
2957              last_update_date,
2958              last_updated_by,
2959              creation_date,
2960              created_by,
2961              last_update_login,
2962              request_id,
2963              program_application_id,
2964              program_id,
2965              program_update_date,
2966              error_message,
2967              error_column_name,
2968              error_table_name,
2969              message_name
2970           )
2971        VALUES
2972           (L_interface_error_id,
2973              p_cc_entry_interface_id,
2974              sysdate,
2975              MTL_CCEOI_VAR_PVT.G_UserID,
2976              sysdate,
2977              MTL_CCEOI_VAR_PVT.G_UserID,
2978              MTL_CCEOI_VAR_PVT.G_LoginID,
2979              MTL_CCEOI_VAR_PVT.G_RequestID,
2980              MTL_CCEOI_VAR_PVT.G_ProgramAppID,
2981              MTL_CCEOI_VAR_PVT.G_ProgramID,
2982              sysdate,
2983              FND_MESSAGE.GET_STRING('INV', p_message_name),
2984              p_error_column_name,
2985              p_error_table_name,
2986              p_message_name);
2987        --
2988     EXCEPTION
2989        WHEN OTHERS THEN
2990 	 IF (l_debug = 1) THEN
2991    	 MDEBUG('Insert_CCEOIError - Exception: ' || sqlerrm);
2992 	 END IF;
2993     END;
2994   END;
2995 
2996   --
2997   -- This code was derived from INVATCEN.pld and is full of strange stuff
2998   -- Needs thorough review/rewrite
2999   -- Existing Serial number - checks existance of serial number
3000   -- in a given location and then runs adjustment transaction if necessary
3001   PROCEDURE Existing_Serial_Number(
3002   p_reference IN VARCHAR2 DEFAULT NULL,
3003   p_primary_uom_quantity IN NUMBER ,
3004   p_count_uom IN VARCHAR2 ,
3005   p_serial_number IN VARCHAR2 ,
3006   p_subinventory IN VARCHAR2 ,
3007   p_lot_number IN VARCHAR2 ,
3008   p_lot_expiration IN date ,
3009   p_revision IN VARCHAR2 ,
3010   p_transaction_reason_id IN NUMBER ,
3011   p_transaction_process_mode IN NUMBER DEFAULT 3,
3012   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE)
3013   IS
3014     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
3015   BEGIN
3016     -- Start OF comments
3017     -- API name  : Existing_Serial_number
3018     -- TYPE      : Private
3019     -- Pre-reqs  : None
3020     -- FUNCTION  :
3021     -- Parameters:
3022     --     IN    :
3023     -- p_reference IN VARCHAR2 (optional)
3024     -- default NULL
3025     --
3026     -- p_primary_uom_quantity IN NUMBER
3027     --
3028     -- p_count_uom IN VARCHAR2 (required)
3029     --
3030     -- p_subinventory IN VARCHAR2(required)
3031     --
3032     -- p_lot_number IN VARCHAR2 (required)
3033     --
3034     -- p_lot_expiration_date DATE (required)
3035     --
3036     -- p_revision IN VARCHAR2(required)
3037     --
3038     -- p_transaction_reasion_id IN NUMBER (required)
3039     --
3040     -- p_serial_number IN VARCHAR2 (required)
3041     --
3042     -- p_transaction_process_mode IN NUMBER (required-defaulted)
3043     --  default = 3 (Background processing)
3044     --
3045     --  p_simulate IN VARCHAR2 (defaulted)
3046     --   default = FND_API.G_FALSE - may update data in any tables
3047     --    FND_API.G_TRUE - may only update data in the interface tables
3048     --     OUT   :
3049     -- Version: Current Version 0.9
3050     --              Changed : Nothing
3051     --          No Previous Version 0.0
3052     --          Initial version 0.9
3053     -- Notes  : Note text
3054     -- END OF comments
3055     DECLARE
3056        --
3057        L_success BOOLEAN;
3058        L_issue VARCHAR2(1) := 'I';
3059        L_Receipt VARCHAR2(1) := 'R';
3060        --
3061     BEGIN
3062        --
3063        --
3064        IF (l_debug = 1) THEN
3065           MDEBUG( 'Inside Existing_Serial_Number');
3066        END IF;
3067 
3068 
3069        -- XXX there used to be a check for serial detail being 2 (qty only)
3070        -- it is unclear what role serial_detail field plays in 1 serial/entry
3071        -- and therefore i am removing it
3072        -- if the s/n is shown on the system, but was count as missing
3073        IF(MTL_CCEOI_VAR_PVT.G_adjustment_quantity = -1) THEN
3074 	  -- Adjust if possible
3075 	  IF MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.serial_adjustment_option = 1 THEN
3076 	     --
3077 	     -- Issue
3078 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
3079 	     l_success := MTL_CCEOI_PROCESS_PVT.check_serial_location(L_issue);
3080 
3081 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NEG_ADJUSTMENT_QUANTITY := 1;
3082 	     --
3083 	     IF(L_success = FALSE) THEN
3084 		MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_CONDITION := 1;
3085 		MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
3086 	     END IF;
3087 	     --
3088 	     -- if serial adjustment option is "review all adjustments",
3089 	     -- THEN send to approval
3090 	  ELSIF
3091 	    (MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.serial_adjustment_option = 2) THEN
3092 
3093 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NEG_ADJUSTMENT_QUANTITY := 1;
3094 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_CONDITION := 3;
3095 
3096 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
3097 	     --
3098 	  END IF;
3099              -- if the s/n is missing on the system, but was count as present
3100        ELSIF
3101 	 (MTL_CCEOI_VAR_PVT.G_adjustment_quantity = 1) THEN
3102 	  --
3103 	  IF(
3104 	    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.serial_adjustment_option = 1) THEN
3105 	     -- Receipt
3106 	     L_success := MTL_CCEOI_PROCESS_PVT.check_serial_location(L_Receipt);
3107 	     --
3108 -- in case of failure just send for manual approval for now
3109 	     IF (L_success = TRUE) THEN
3110 
3111 		MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
3112 	     ELSE
3113 		-- send it for further manual approval
3114 		MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_CONDITION := 1;
3115 		MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
3116 	     END IF;
3117 
3118                 --
3119                 -- if serial adjustment option is "review all adjustments",
3120                 -- then send to approval
3121              ELSIF
3122 	       MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.serial_adjustment_option=2 THEN
3123 
3124 
3125                 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_CONDITION := 3;
3126                 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
3127                 --
3128              END IF;
3129              -- all other cases considered as no problem, no adjustment required
3130 	  ELSE
3131 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NEG_ADJUSTMENT_QUANTITY := NULL;
3132 	     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_CONDITION := NULL;
3133 
3134 
3135              MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 5;
3136              --
3137 		--
3138        END IF;
3139              Final_Preupdate_Logic(
3140                 p_reference => p_reference
3141                 , p_primary_uom_quantity => p_primary_uom_quantity
3142                 , p_count_uom => p_count_uom
3143                 , p_serial_number => p_serial_number
3144                 , p_subinventory => p_subinventory
3145                 , p_lot_number => p_lot_number
3146                 , p_lot_expiration => p_lot_expiration
3147                 , p_revision => p_revision
3148                 , p_transaction_reason_id => p_transaction_reason_id
3149                 , p_transaction_process_mode => p_transaction_process_mode
3150                 , p_simulate => p_simulate);
3151 
3152        --
3153     END;
3154   END;
3155   --
3156   -- Set the export flag in the table MTL_CYCLE_COUNT_ENTRIES
3157   PROCEDURE Set_CCExport(
3158   p_api_version IN NUMBER ,
3159   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3160   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3161   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
3162   x_return_status OUT NOCOPY VARCHAR2 ,
3163   x_msg_count OUT NOCOPY NUMBER ,
3164   x_msg_data OUT NOCOPY VARCHAR2 ,
3165   p_cycle_count_entry_id IN NUMBER ,
3166   p_export_flag IN NUMBER )
3167   IS
3168     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
3169   BEGIN
3170     -- Start OF comments
3171     -- API name  : Set_CCExport
3172     -- TYPE      : Private
3173     -- Pre-reqs  : None
3174     -- FUNCTION  :
3175     -- SET export flag to orginal RECORD IN the MTL_CYCLE_COUNT_ENTRIES TABLE
3176     -- Parameters:
3177     --     IN    :
3178     -- p_api_version      IN  NUMBER (required)
3179     -- API Version of this procedure
3180     --
3181     -- p_init_msg_list   IN  VARCHAR2 (optional)
3182     -- DEFAULT = FND_API.G_FALSE,
3183     --
3184     -- p_commit           IN  VARCHAR2 (optional)
3185     -- DEFAULT = FND_API.G_FALSE,
3186     --
3187     -- p_validation_level IN  NUMBER (optional)
3188     -- DEFAULT = FND_API.G_VALID_LEVEL_FULL,
3189     --
3190     -- p_cycle_count_entry_id    IN  NUMBER (required)
3191     -- cycle COUNT entry id
3192     --
3193     -- P_export_flag IN NUMBER (required)
3194     -- 1 = Yes it is exported
3195     -- 2 = No it is not exported
3196     --  value OF the export flag to be SET
3197     --     OUT   :
3198     -- X_return_status    OUT NUMBER
3199     -- Result of all the operations
3200     -- x_msg_count        OUT NUMBER,
3201     -- x_msg_data         OUT VARCHAR2,
3202     -- RETURN value OF the Error status
3203     --
3204     -- Version: Current Version 0.9
3205     --              Changed : Nothing
3206     --          No Previous Version 0.0
3207     --          Initial version 0.9
3208     -- Notes  : Note text
3209     -- END OF comments
3210     DECLARE
3211        L_api_version CONSTANT NUMBER := 0.9;
3212        L_api_name CONSTANT VARCHAR2(30) := 'Set_CCExport';
3213     BEGIN
3214        -- Standard start of API savepoint
3215        SAVEPOINT Set_CCExport;
3216        --
3217        -- Standard Call to check for call compatibility
3218 IF (l_debug = 1) THEN
3219    MDEBUG( 'SetCCExport : Before API');
3220 END IF;
3221        IF NOT FND_API.Compatible_API_Call(
3222              l_api_version, p_api_version
3223              , l_api_name
3224              , G_PKG_NAME) THEN
3225           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3226        END IF;
3227 IF (l_debug = 1) THEN
3228    MDEBUG( 'SetCCExport : After API');
3229 END IF;
3230        --
3231        -- Initialize message list if p_init_msg_list is set to true
3232        IF FND_API.to_Boolean(p_init_msg_list) THEN
3233           FND_MSG_PUB.initialize;
3234        END IF;
3235        --
3236 IF (l_debug = 1) THEN
3237    MDEBUG( 'SetCCExport : After Init');
3238 END IF;
3239        -- Initialisize API return status to access
3240        x_return_status := FND_API.G_RET_STS_SUCCESS;
3241        --
3242        -- API body
3243        --
3244 IF (l_debug = 1) THEN
3245    MDEBUG( 'SetCCExport : Before Update CCEId '||to_char(p_cycle_count_entry_id) ||' to '|| to_char(p_export_flag));
3246 END IF;
3247 
3248        UPDATE mtl_cycle_count_entries
3249        SET
3250           export_flag = p_export_flag
3251           , last_update_date = sysdate
3252           , last_updated_by = MTL_CCEOI_VAR_PVT.G_UserID
3253           , last_update_login = MTL_CCEOI_VAR_PVT.G_LoginID
3254           , request_id = MTL_CCEOI_VAR_PVT.G_RequestID
3255           , program_application_id = MTL_CCEOI_VAR_PVT.G_ProgramAppID
3256           , program_id = MTL_CCEOI_VAR_PVT.G_ProgramID
3257           , program_update_date = sysdate
3258        WHERE
3259           cycle_Count_entry_id = p_cycle_count_entry_id;
3260 IF (l_debug = 1) THEN
3261    MDEBUG( 'SetCCExport : After Update');
3262 END IF;
3263        --
3264        IF SQL%ROWCOUNT <> 1 THEN
3265 IF (l_debug = 1) THEN
3266    MDEBUG( 'SetCCExport : Error Update');
3267 END IF;
3268           FND_MESSAGE.SET_NAME('INV', 'INV_CCEOI_COULD_NOT_LOCK');
3269           FND_MSG_PUB.Add;
3270           RAISE FND_API.G_EXC_ERROR;
3271        END IF;
3272        --
3273        -- END of API body
3274        -- Standard check of p_commit
3275        IF FND_API.to_Boolean(p_commit) THEN
3276           COMMIT;
3277        END IF;
3278        --   --
3279        -- Standard call to get message count and if count is 1, get message info
3280        FND_MSG_PUB.Count_And_Get
3281        (p_count => x_msg_count
3282           , p_data => x_msg_data);
3283     EXCEPTION
3284        WHEN FND_API.G_EXC_ERROR THEN
3285        --
3286        ROLLBACK TO Set_CCExport;
3287        --
3288        x_return_status := FND_API.G_RET_STS_ERROR;
3289        --
3290        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3291           , p_data => x_msg_data);
3292        --
3293        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3294        --
3295        ROLLBACK TO Set_CCExport;
3296        --
3297        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3298        --
3299        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3300           , p_data => x_msg_data);
3301        --
3302        WHEN OTHERS THEN
3303        --
3304        ROLLBACK TO Set_CCExport;
3305        --
3306        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3307        --
3308        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3309           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3310        END IF;
3311        --
3312        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3313           , p_data => x_msg_data);
3314     END;
3315   END;
3316   --
3317   -- Set the Flags in the interface table.
3318   PROCEDURE Set_CCEOIFlags(
3319   p_api_version IN NUMBER ,
3320   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3321   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3322   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
3323   x_return_status OUT NOCOPY VARCHAR2 ,
3324   x_msg_count OUT NOCOPY NUMBER ,
3325   x_msg_data OUT NOCOPY VARCHAR2 ,
3326   p_cc_entry_interface_id IN NUMBER ,
3327   p_flags IN VARCHAR2 )
3328   IS
3329     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
3330   BEGIN
3331     -- Start OF comments
3332     -- API name  : Set_CCEOIFlags
3333     -- TYPE      : Private
3334     -- Pre-reqs  : None
3335     -- FUNCTION  :
3336     -- SET all the flags IN the interface TABLE
3337     -- mtl_cc_entries_interface
3338     -- Parameters:
3339     --     IN    :
3340     -- p_api_version      IN  NUMBER (required)
3341     -- API Version of this procedure
3342     --
3343     -- p_init_msg_list   IN  VARCHAR2 (optional)
3344     -- DEFAULT = FND_API.G_FALSE,
3345     --
3346     -- p_commit           IN  VARCHAR2 (optional)
3347     -- DEFAULT = FND_API.G_FALSE,
3348     --
3349     -- p_validation_level IN  NUMBER (optional)
3350     -- DEFAULT = FND_API.G_VALID_LEVEL_FULL,
3351     --
3352     -- p_cc_entry_interface_id    IN  NUMBER (required)
3353     -- cycle COUNT entry interface id
3354     --
3355     -- P_flags IN VARCHAR2(4) (required)
3356     --  value OF the flags. IF one letter IS $, this means
3357     --  that the value OF the column IS NOT changed
3358     --  1. Letter = Error_flag
3359     --  2. Letter = delete_flag
3360     --  3. Letter = status_flag
3361     --  4. Letter = valid_flag
3362     --
3363     --     OUT   :
3364     -- X_return_status    OUT NUMBER
3365     -- Result of all the operations
3366     -- x_msg_count        OUT NUMBER,
3367     -- x_msg_data         OUT VARCHAR2,
3368     -- RETURN value OF the Error status
3369     --
3370     -- Version: Current Version 0.9
3371     --              Changed : Nothing
3372     --          No Previous Version 0.0
3373     --          Initial version 0.9
3374     -- Notes  : Note text
3375     -- END OF comments
3376     DECLARE
3377        L_api_version CONSTANT NUMBER := 0.9;
3378        L_api_name CONSTANT VARCHAR2(30) := 'Set_CCEOIFlag';
3379        L_error NUMBER;
3380        L_valid NUMBER;
3381        L_status NUMBER;
3382        L_delete NUMBER;
3383     BEGIN
3384 
3385        -- Standard start of API savepoint
3386        SAVEPOINT SET_CCEOIVALID;
3387        --
3388        -- Standard Call to check for call compatibility
3389        IF NOT FND_API.Compatible_API_Call(
3390              l_api_version, p_api_version
3391              , l_api_name
3392              , G_PKG_NAME) THEN
3393           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3394        END IF;
3395 
3396        --
3397        -- Initialize message list if p_init_msg_list is set to true
3398        IF FND_API.to_Boolean(p_init_msg_list) THEN
3399           FND_MSG_PUB.initialize;
3400        END IF;
3401 
3402        --
3403        -- Initialisize API return status to access
3404        x_return_status := FND_API.G_RET_STS_SUCCESS;
3405        --
3406        -- API body
3407        --
3408        -- UPDATE the flags according to the parameter
3409        --
3410 
3411 --MDEBUG( 'Process:Setsflag : IFace ID'||to_char( p_cc_entry_interface_id));
3412 
3413 IF (l_debug = 1) THEN
3414    MDEBUG( 'Process:Setsflag-Delete '||p_flags);
3415 END IF;
3416 
3417        UPDATE mtl_cc_entries_interface
3418        SET
3419              last_update_date = sysdate
3420              , last_updated_by = MTL_CCEOI_VAR_PVT.G_UserID
3421              , last_update_login = MTL_CCEOI_VAR_PVT.G_LoginID
3422              , request_id = MTL_CCEOI_VAR_PVT.G_RequestID
3423              , program_application_id = MTL_CCEOI_VAR_PVT.G_ProgramAppID
3424              , program_id = MTL_CCEOI_VAR_PVT.G_ProgramID
3425              , program_update_date = sysdate
3426              , error_flag = DECODE(SUBSTR(p_flags, 1, 1), '$', error_flag, SUBSTR(p_flags, 1, 1))
3427              , delete_flag = DECODE(SUBSTR(p_flags, 2, 1), '$', delete_flag, SUBSTR(p_flags, 2, 1))
3428              , status_flag = DECODE(SUBSTR(p_flags, 3, 1), '$', status_flag, SUBSTR(p_flags, 3, 1))
3429              , valid_flag = decode ( SUBSTR(p_flags, 1, 1),'1','2',DECODE(SUBSTR(p_flags, 4, 1), '$', valid_flag, SUBSTR(p_flags, 4, 1)))
3430        --      , cycle_count_entry_id = nvl(cycle_count_entry_id,MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.CYCLE_COUNT_ENTRY_ID)
3431        WHERE
3432           cc_entry_interface_id = p_cc_entry_interface_id;
3433 
3434        --
3435        IF SQL%ROWCOUNT <> 1 THEN
3436           FND_MESSAGE.SET_NAME('INV', 'INV_CCEOI_COULD_NOT_LOCK');
3437           FND_MSG_PUB.Add;
3438           RAISE FND_API.G_EXC_ERROR;
3439        END IF;
3440        --
3441        -- END of API body
3442        -- Standard check of p_commit
3443        IF FND_API.to_Boolean(p_commit) THEN
3444           COMMIT;
3445        END IF;
3446        --   --
3447        -- Standard call to get message count and if count is 1, get message info
3448        FND_MSG_PUB.Count_And_Get
3449        (p_count => x_msg_count
3450           , p_data => x_msg_data);
3451     EXCEPTION
3452        WHEN FND_API.G_EXC_ERROR THEN
3453        --
3454 	IF (l_debug = 1) THEN
3455    	mdebug('Error in Set_CCEOIFlags');
3456 	END IF;
3457        ROLLBACK TO Set_CCEOIValid;
3458        --
3459        x_return_status := FND_API.G_RET_STS_ERROR;
3460        --
3461        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3462           , p_data => x_msg_data);
3463        --
3464        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3465        --
3466 	IF (l_debug = 1) THEN
3467    	mdebug('Unexpected Error in Set_CCEOIFlags');
3468 	END IF;
3469        ROLLBACK TO Set_CCEOIValid;
3470        --
3471        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3472        --
3473        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3474           , p_data => x_msg_data);
3475        --
3476        WHEN OTHERS THEN
3477        --
3478 	IF (l_debug = 1) THEN
3479    	mdebug('Other Error in Set_CCEOIFlags');
3480 	END IF;
3481        ROLLBACK TO SET_CCEOIVALID;
3482 	IF (l_debug = 1) THEN
3483    	mdebug('After Rollback for Other Error in Set_CCEOIFlags');
3484 	END IF;
3485        --
3486        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3487        --
3488        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3489           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3490        END IF;
3491        --
3492        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3493           , p_data => x_msg_data);
3494     END;
3495   END;
3496   --
3497   -- Validates the cycle count header
3498   PROCEDURE Validate_CHeader(
3499   p_api_version IN NUMBER ,
3500   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3501   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3502   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
3503   x_return_status OUT NOCOPY VARCHAR2 ,
3504   x_msg_count OUT NOCOPY NUMBER ,
3505   x_msg_data OUT NOCOPY VARCHAR2 ,
3506   x_errorcode OUT NOCOPY NUMBER ,
3507   p_cycle_count_header_id IN NUMBER ,
3508   p_cycle_count_header_name IN VARCHAR2 DEFAULT NULL)
3509   IS
3510     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
3511   BEGIN
3512     -- Start OF comments
3513     -- API name  : Validate_CHeader
3514     -- TYPE      : Private
3515     -- Pre-reqs  : None
3516     -- FUNCTION  :
3517     -- Validates the cycle COUNT header information.
3518     -- Parameters:
3519     --     IN    :
3520     --  p_api_version      IN  NUMBER (required)
3521     --  API Version of this procedure
3522     --
3523     --  p_init_msg_list   IN  VARCHAR2 (optional)
3524     --    DEFAULT = FND_API.G_FALSE,
3525     --
3526     -- p_commit           IN  VARCHAR2 (optional)
3527     --     DEFAULT = FND_API.G_FALSE
3528     --
3529     --  p_validation_level IN  NUMBER (optional)
3530     --      DEFAULT = FND_API.G_VALID_LEVEL_FULL,
3531     --
3532     -- p_cycle_count_header_id IN  NUMBER default NULL (required - defaulted NULL)
3533     --   Cycle COUNT header ID
3534     --
3535     --   p_cycle_count_header_name IN VARCHAR2 (optional)
3536     --   Default = NULL
3537     --   cycle COUNT header name, only IF ID IS missing
3538     --
3539     --     OUT   :
3540     --  X_return_status    OUT NUMBER
3541     --  Result of all the operations
3542     --
3543     --   x_msg_count        OUT NUMBER,
3544     --
3545     --   x_msg_data         OUT VARCHAR2,
3546     --
3547     --   X_ErrorCode        OUT NUMBER
3548     -- Version: Current Version 0.9
3549     --              Changed : Nothing
3550     --          No Previous Version 0.0
3551     --          Initial version 0.9
3552     -- Notes  : Note text
3553     -- END OF comments
3554     DECLARE
3555        --
3556        L_api_version CONSTANT NUMBER := 0.9;
3557        L_api_name CONSTANT VARCHAR2(30) := 'Validate_CHeader';
3558     BEGIN
3559        -- Standard start of API savepoint
3560        SAVEPOINT Validate_CHeader;
3561        --
3562        -- Standard Call to check for call compatibility
3563        IF NOT FND_API.Compatible_API_Call(l_api_version
3564              , p_api_version
3565              , l_api_name
3566              , G_PKG_NAME) THEN
3567           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3568        END IF;
3569        --
3570        -- Initialize message list if p_init_msg_list is set to true
3571        IF FND_API.to_Boolean(p_init_msg_list) THEN
3572           FND_MSG_PUB.initialize;
3573        END IF;
3574        --
3575        -- Initialisize API return status to access
3576        x_return_status := FND_API.G_RET_STS_SUCCESS;
3577        --
3578        -- API body
3579        IF (l_debug = 1) THEN
3580           mdebug('Process: In Validate_CHeader ' || to_char(p_cycle_count_header_id));
3581        END IF;
3582 
3583        -- Validate the cycle COUNT header
3584        MTL_INV_VALIDATE_GRP.Validate_CountHeader(
3585           p_api_version => 0.9,
3586           x_return_status => x_return_status,
3587           x_msg_count => x_msg_count,
3588           x_msg_data => x_msg_data,
3589           X_ErrorCode => x_errorcode,
3590           p_cycle_count_header_id => p_cycle_count_header_id,
3591           p_cycle_count_header_name => p_cycle_count_header_name
3592        );
3593 IF (l_debug = 1) THEN
3594    mdebug('Process: In Validate_CHeader return'||x_return_status);
3595 END IF;
3596        -- Write INTO interface error TABLE
3597        IF x_errorcode = 2 THEN
3598           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
3599              p_cc_entry_interface_id =>
3600              MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID, p_error_column_name =>
3601              'CYCLE_COUNT_HEADER_ID'
3602              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
3603              , p_message_name => 'INV_CCEOI_INVALID_HEADER'
3604           );
3605        ELSIF
3606           x_errorcode = 1 THEN
3607           -- Write INTO interface error TABLE
3608           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
3609              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
3610              , p_error_column_name => 'CYCLE_COUNT_HEADER_ID'
3611              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
3612              , p_message_name => 'INV_CCEOI_NO_HEADER'
3613           );
3614        ELSIF
3615           x_errorcode = 45 THEN
3616           -- Write INTO interface error TABLE
3617           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
3618              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
3619              , p_error_column_name => 'CYCLE_COUNT_HEADER_ID'
3620              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
3621              , p_message_name => 'INV_CCEOI_MULT_HEADER'
3622           );
3623        ELSIF x_errorcode = 0 THEN
3624           -- Get stock_locator_control
3625           MTL_INV_VALIDATE_GRP.Get_StockLocatorControlCode(
3626              MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.organization_id);
3627 	  IF (l_debug = 1) THEN
3628    	  mdebug('Process: In Validate_CHeader derive stock locator ='||to_char(MTL_CCEOI_VAR_PVT.G_STOCK_LOCATOR_CONTROL_CODE));
3629 	  END IF;
3630 
3631 	  -- derive adjustment account info
3632 	  MTL_CCEOI_VAR_PVT.G_ADJUST_ACCOUNT_ID :=
3633 	    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.INVENTORY_ADJUSTMENT_ACCOUNT;
3634        END IF;
3635        --
3636        -- END of API body
3637        -- Standard check of p_commit
3638        IF FND_API.to_Boolean(p_commit) THEN
3639           COMMIT;
3640        END IF;
3641        -- Standard call to get message count and if count is 1, get message info
3642        FND_MSG_PUB.Count_And_Get
3643        (p_count => x_msg_count
3644           , p_data => x_msg_data);
3645     EXCEPTION
3646        WHEN FND_API.G_EXC_ERROR THEN
3647        --
3648        --
3649        x_return_status := FND_API.G_RET_STS_ERROR;
3650        --
3651        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3652           , p_data => x_msg_data);
3653        --
3654        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3655        --
3656        --
3657        x_errorcode := -1;
3658        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3659        --
3660        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3661           , p_data => x_msg_data);
3662        --
3663        WHEN OTHERS THEN
3664        --
3665        --
3666        x_errorcode := -1;
3667        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3668        --
3669        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3670           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3671        END IF;
3672        --
3673        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3674           , p_data => x_msg_data);
3675     END;
3676   END;
3677   --
3678   -- Validate the count list sequence of the cycle count entry
3679   PROCEDURE Validate_CountListSeq(
3680   p_api_version IN NUMBER ,
3681   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3682   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3683   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
3684   x_return_status OUT NOCOPY VARCHAR2 ,
3685   x_msg_count OUT NOCOPY  NUMBER ,
3686   x_msg_data OUT NOCOPY VARCHAR2 ,
3687   x_errorcode OUT NOCOPY NUMBER ,
3688   p_cycle_count_header_id IN NUMBER ,
3689   p_cycle_count_entry_id IN NUMBER ,
3690   p_count_list_sequence IN NUMBER ,
3691   p_organization_id IN NUMBER )
3692   IS
3693     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
3694   BEGIN
3695     -- Start OF comments
3696     -- API name  : Validate_CountListSeq
3697     -- TYPE      : Private
3698     -- Pre-reqs  : None
3699     -- FUNCTION  :
3700     -- Validates the cycle COUNT list sequence for the specified
3701     -- header information.
3702     -- Parameters:
3703     --     IN    :
3704     --  p_api_version      IN  NUMBER (required)
3705     --  API Version of this procedure
3706     --
3707     --  p_init_msg_list   IN  VARCHAR2 (optional)
3708     --    DEFAULT = FND_API.G_FALSE,
3709     --
3710     -- p_commit           IN  VARCHAR2 (optional)
3711     --     DEFAULT = FND_API.G_FALSE
3712     --
3713     --  p_validation_level IN  NUMBER (optional)
3714     --      DEFAULT = FND_API.G_VALID_LEVEL_FULL,
3715     --      0 = FOR Export validation
3716     --
3717     --   p_cycle_count_header_id IN  NUMBER (required -)
3718     --   Cycle COUNT header ID
3719     --
3720     --   p_count_list_sequence IN NUMBER (required)
3721     --   COUNT list sequence
3722     --
3723     --  p_organization_id IN NUMBER (required)
3724     --
3725     --     OUT   :
3726     --  X_return_status    OUT NUMBER
3727     --  Result of all the operations
3728     --
3729     --   x_msg_count        OUT NUMBER,
3730     --
3731     --   x_msg_data         OUT VARCHAR2,
3732     --
3733     --   X_ErrorCode        OUT NUMBER
3734     -- Version: Current Version 0.9
3735     --              Changed : Nothing
3736     --          No Previous Version 0.0
3737     --          Initial version 0.9
3738     -- Notes  : Note text
3739     -- END OF comments
3740     DECLARE
3741        --
3742        L_api_version CONSTANT NUMBER := 0.9;
3743        L_api_name CONSTANT VARCHAR2(30) := 'Validate_CountListSeq';
3744     BEGIN
3745        -- Standard start of API savepoint
3746        SAVEPOINT Validate_CountListSeq;
3747        --
3748        -- Standard Call to check for call compatibility
3749        IF NOT FND_API.Compatible_API_Call(l_api_version
3750              , p_api_version
3751              , l_api_name
3752              , G_PKG_NAME) THEN
3753           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3754        END IF;
3755        --
3756        -- Initialize message list if p_init_msg_list is set to true
3757        IF FND_API.to_Boolean(p_init_msg_list) THEN
3758           FND_MSG_PUB.initialize;
3759        END IF;
3760        --
3761        -- Initialisize API return status to access
3762        x_return_status := FND_API.G_RET_STS_SUCCESS;
3763        --
3764        -- API body
3765        --
3766 IF (l_debug = 1) THEN
3767    mdebug('Process: In Validate_CountListSequence ' || to_char(p_count_list_sequence));
3768 END IF;
3769        MTL_INV_VALIDATE_GRP.Validate_CountListSequence(
3770           p_api_version => 0.9,
3771           x_return_status => x_return_status,
3772           x_msg_count => x_msg_count,
3773           x_msg_data => x_msg_data,
3774           X_ErrorCode => x_errorcode,
3775           p_cycle_count_header_id => p_cycle_count_header_id,
3776           p_cycle_count_entry_id => p_cycle_count_entry_id,
3777           p_count_list_sequence => p_count_list_sequence,
3778           p_organization_id =>  p_organization_id
3779        );
3780 IF (l_debug = 1) THEN
3781    mdebug('Process: In Validate_CountListSequence Return='||x_return_status || ' ' || to_char(x_errorcode));
3782 END IF;
3783        --
3784        IF x_errorcode = 46 THEN
3785           -- Write INTO interface error TABLE
3786           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
3787              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
3788              , p_error_column_name => 'CYCLE_COUNT_HEADER_ID'
3789              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
3790              , p_message_name => 'INV_CCEOI_UNMATCH_LISTSEQ'
3791           );
3792           RAISE FND_API.G_EXC_ERROR;
3793        ELSIF x_errorcode in (65,66) THEN
3794 IF (l_debug = 1) THEN
3795    MDEBUG( 'Validate Seq for Unsch.'||to_char(x_errorcode));
3796 END IF;
3797           -- Get all the item information to store IN package var
3798           MTL_INV_VALIDATE_GRP.Get_Item_SKU(
3799              MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC);
3800        ELSIF
3801           x_errorcode = 3 THEN
3802           -- Write INTO interface error TABLE
3803           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
3804              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
3805              , p_error_column_name => 'CYCLE_COUNT_HEADER_ID'
3806              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
3807              , p_message_name => 'INV_CCEOI_MULT_MATCH_REQ'
3808           );
3809           RAISE FND_API.G_EXC_ERROR;
3810        ELSIF
3811           x_errorcode = 0 THEN
3812           IF (l_debug = 1) THEN
3813              mdebug('Process: In Validate_CountListSequence Derive ItemSKU');
3814           END IF;
3815           -- Get all the item information to store IN package var
3816           MTL_INV_VALIDATE_GRP.Get_Item_SKU(
3817              MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC);
3818        END IF;
3819        --
3820        --
3821        -- END of API body
3822        -- Standard check of p_commit
3823        IF FND_API.to_Boolean(p_commit) THEN
3824           COMMIT;
3825        END IF;
3826        -- Standard call to get message count and if count is 1, get message info
3827        FND_MSG_PUB.Count_And_Get
3828        (p_count => x_msg_count
3829           , p_data => x_msg_data);
3830     EXCEPTION
3831        WHEN FND_API.G_EXC_ERROR THEN
3832        --
3833        --
3834        x_return_status := FND_API.G_RET_STS_ERROR;
3835        --
3836        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3837           , p_data => x_msg_data);
3838        --
3839        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3840        --
3841        --
3842        x_errorcode := -1;
3843        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3844        --
3845        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3846           , p_data => x_msg_data);
3847        --
3848        WHEN OTHERS THEN
3849        --
3850        --
3851        x_errorcode := -1;
3852        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3853        --
3854        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3855           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3856        END IF;
3857        --
3858        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
3859           , p_data => x_msg_data);
3860     END;
3861   END;
3862   --
3863   -- validate item and sku information
3864   PROCEDURE Validate_ItemSKU(
3865   p_api_version IN NUMBER ,
3866   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3867   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
3868   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
3869   x_return_status OUT NOCOPY VARCHAR2 ,
3870   x_msg_count OUT NOCOPY NUMBER ,
3871   x_msg_data OUT NOCOPY VARCHAR2 ,
3872   x_errorcode OUT NOCOPY NUMBER ,
3873   p_cycle_count_header_id IN NUMBER ,
3874   p_inventory_item_rec IN MTL_CCEOI_VAR_PVT.Inv_Item_rec_type ,
3875   p_sku_rec IN MTL_CCEOI_VAR_PVT.Inv_SKU_Rec_Type ,
3876   p_subinventory IN VARCHAR2 ,
3877   p_locator_rec IN MTL_CCEOI_VAR_PVT.INV_LOCATOR_REC_TYPE ,
3878   p_organization_id IN number,
3879   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE )
3880   IS
3881     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
3882   BEGIN
3883     -- Start OF comments
3884     -- API name  : Validate_ItemSKU
3885     -- TYPE      : Private
3886     -- Pre-reqs  : None
3887     -- FUNCTION  :
3888     -- Validates the item AND SKU information.
3889     -- Parameters:
3890     --     IN    :
3891     --  p_api_version      IN  NUMBER (required)
3892     --  API Version of this procedure
3893     --
3894     --  p_init_msg_list   IN  VARCHAR2 (optional)
3895     --    DEFAULT = FND_API.G_FALSE,
3896     --
3897     -- p_commit           IN  VARCHAR2 (optional)
3898     --     DEFAULT = FND_API.G_FALSE
3899     --
3900     --  p_validation_level IN  NUMBER (optional)
3901     --      DEFAULT = FND_API.G_VALID_LEVEL_FULL,
3902     --
3903     -- p_cycle_count_header_id IN NUMBER (required)
3904     -- Cycle COUNT header id
3905     --
3906     -- p_inventory_item_rec MTL_CCEOI_VAR_PVT.INV_ITEM_REC_TYPE (required)
3907     -- Item information with segements
3908     --
3909     -- p_sku_rec MTL_CCEOI_VAR_PVT.INV_SKU_REC_TYPE (required)
3910     -- Item SKU information
3911     --
3912     -- p_subinventory IN VARCHAR2 (required)
3913     -- Item Subinventory
3914     --
3915     -- p_locator_rec MTL_CCEOI_VAR_PVT.INV_LOCATOR_REC_TYPE (required)
3916     -- Item locator information
3917     --
3918     -- p_organization_id IN NUMBER (required)
3919     -- organization_id
3920     --
3921     --     OUT   :
3922     --  X_return_status    OUT NUMBER
3923     --  Result of all the operations
3924     --
3925     --   x_msg_count        OUT NUMBER,
3926     --
3927     --   x_msg_data         OUT VARCHAR2,
3928     --
3929     --   X_ErrorCode        OUT NUMBER
3930     -- Version: Current Version 0.9
3931     --              Changed : Nothing
3932     --          No Previous Version 0.0
3933     --          Initial version 0.9
3934     -- Notes  : Note text
3935     -- END OF comments
3936     DECLARE
3937        L_message_name VARCHAR2(100);
3938        L_table_name VARCHAR2(30);
3939        L_column_name VARCHAR2(32);
3940        L_counter integer := 0;
3941        L_P_inventory_item_id NUMBER ;
3942        L_P_locator_id NUMBER ;
3943        L_is_Unscheduled_Request boolean;
3944        --
3945        L_lot INV_Validate.LOT;
3946        L_org INV_Validate.ORG;
3947        L_item INV_Validate.ITEM;
3948        L_sub INV_Validate.SUB;
3949        L_serial INV_Validate.SERIAL;
3950        L_loc INV_Validate.LOCATOR;
3951        --
3952        --Begin changes 3904722
3953        l_ret_value NUMBER;
3954        l_to_serial VARCHAR2(30);
3955        l_msg_data  VARCHAR2(2000);
3956        l_serial_quantity NUMBER;
3957        --End changes 3904722
3958        CURSOR L_CCEntry_Csr(itemid IN NUMBER, lpnid IN NUMBER, subinv IN VARCHAR2,
3959              org IN NUMBER, header IN NUMBER, loc IN NUMBER, rev IN VARCHAR2,
3960              ser IN VARCHAR2, lot IN VARCHAR2, cost IN NUMBER)
3961           IS SELECT
3962           *
3963           FROM mtl_cycle_count_entries
3964        WHERE
3965           cycle_count_header_id = header
3966           AND organization_id = org
3967           AND inventory_item_id = itemid
3968           AND NVL(parent_lpn_id, -1) = NVL(lpnid, -1)
3969           AND NVL(cost_group_id, -1) = NVL(cost, -1)
3970           AND subinventory = subinv
3971           AND entry_status_code IN(1, 2, 3)
3972           AND(loc IS NULL OR
3973              locator_id = loc)
3974           AND(rev IS NULL OR
3975              revision = rev)
3976           AND(lot IS NULL OR
3977              lot_number = lot)
3978           AND(ser IS NULL OR
3979              serial_number =ser);
3980        --
3981        L_check_locator NUMBER;
3982        L_control_level NUMBER;
3983        --
3984        L_api_version CONSTANT NUMBER := 0.9;
3985        L_api_name CONSTANT VARCHAR2(30) := 'Validate_ItemSKU';
3986     BEGIN
3987        -- Standard start of API savepoint
3988        SAVEPOINT Validate_ItemSKU;
3989        --
3990        -- Standard Call to check for call compatibility
3991        IF NOT FND_API.Compatible_API_Call(l_api_version
3992              , p_api_version
3993              , l_api_name
3994              , G_PKG_NAME) THEN
3995           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3996        END IF;
3997        --
3998        -- Initialize message list if p_init_msg_list is set to true
3999        IF FND_API.to_Boolean(p_init_msg_list) THEN
4000           FND_MSG_PUB.initialize;
4001        END IF;
4002        --
4003        -- Initialisize API return status to access
4004        x_return_status := FND_API.G_RET_STS_SUCCESS;
4005        --
4006        -- API body
4007 IF (l_debug = 1) THEN
4008    mdebug('Process: In Validate_ItemSKU');
4009 END IF;
4010        --
4011      /* Validate  API Implementation for Item validation
4012         This is implemented in called function */
4013        MTL_INV_VALIDATE_GRP.Validate_Item(
4014           p_api_version => 0.9,
4015           x_return_status => x_return_status,
4016           x_msg_count => x_msg_count,
4017           x_msg_data => x_msg_data,
4018           x_errorcode => x_errorcode,
4019           p_inventory_item_rec => p_inventory_item_rec,
4020           p_organization_id => p_organization_id,
4021           p_cycle_count_header_id => p_cycle_count_header_id);
4022 
4023 IF (l_debug = 1) THEN
4024    MDEBUG( 'Validate_Item Return='||x_return_status);
4025    MDEBUG( 'Validate_Item Return x_errorcode='||x_errorcode);
4026    mdebug('Process: In Validate_ItemSKU Return='||x_return_status);	       --
4027 END IF;
4028        IF x_errorcode >0 THEN
4029           IF x_errorcode = 4 THEN
4030              L_message_name := 'INV_CCEOI_NO_ITEM';
4031              L_table_name := 'MTL_SYSTEM_ITEMS';
4032              L_column_name := 'INVENTORY_ITEM AND ITEM_SEGMENTS';
4033           ELSIF
4034              x_errorcode = 5 THEN
4035              L_message_name := 'INV_CCEOI_INVALID_ITEM';
4036              L_table_name := 'MTL_CYCLE_COUNT_ITEMS';
4037              L_column_name := 'INVENTORY_ITEM_ID';
4038 	  END IF;
4039 
4040           -- Write INTO interface error TABLE
4041           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4042              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4043              , p_error_column_name => L_column_name
4044              , p_error_table_name => L_table_name
4045              , p_message_name => L_message_name
4046 						 );
4047           --
4048           RAISE FND_API.G_EXC_ERROR;
4049        ELSIF
4050           x_errorcode < 0 THEN
4051           -- Write INTO interface error TABLE
4052           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4053              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4054              , p_error_column_name => 'unexpected error'
4055              , p_error_table_name => 'unexpected error'
4056              , p_message_name => 'unexpected error'
4057           );
4058           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4059        END IF;
4060        --
4061 IF (l_debug = 1) THEN
4062    mdebug('Process: In Validate_ItemSKU call Subinv ');
4063    MDEBUG( 'Validate_Sub Inv');
4064 END IF;
4065        -- Validate Subinventory
4066        /* Validate  API Implementation for Subinv validation
4067           This is introduced in called API */
4068        MTL_INV_VALIDATE_GRP.Validate_Subinv(
4069           p_api_version => 0.9,
4070           x_return_status => x_return_status,
4071           x_msg_count => x_msg_count,
4072           x_msg_data => x_msg_data,
4073           x_errorcode => x_errorcode,
4074           p_subinventory => p_subinventory,
4075           p_organization_id => p_organization_id,
4076           p_orientation_code =>
4077 	    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORIENTATION_CODE,
4078           p_cycle_count_header_id => p_cycle_count_header_id);
4079 
4080 IF (l_debug = 1) THEN
4081    MDEBUG( 'Validate_Item Subinv Return='||x_return_status);
4082 END IF;
4083 
4084        --
4085        IF x_errorcode >0 THEN
4086           IF x_errorcode = 7 THEN
4087              L_message_name := 'INV_CCEOI_INVALID_SUB';
4088              L_table_name := 'MTL_CC_SUBINVENTORIES';
4089              L_column_name := 'SUBINVENTORY';
4090           ELSIF
4091              x_errorcode = 6 THEN
4092              L_message_name := 'INV_CCEOI_NO_SUB';
4093              L_table_name := 'No TABLE';
4094              L_column_name := 'No column';
4095           ELSIF
4096              x_errorcode = 8 THEN
4097              L_message_name := 'INV_CCEOI_NON_QTY_TRKD_SUB';
4098              L_table_name := 'MTL_SECONDARY_INVENTORIES';
4099              L_column_name := 'QUANTITY_TRACKED';
4100           END IF;
4101           -- Write INTO interface error TABLE
4102           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4103              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4104              , p_error_column_name => L_column_name
4105              , p_error_table_name => L_table_name
4106              , p_message_name => L_message_name
4107           );
4108           --
4109           RAISE FND_API.G_EXC_ERROR;
4110        ELSIF
4111           x_errorcode < 0 THEN
4112           -- Write INTO interface error TABLE
4113           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4114              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4115              , p_error_column_name => 'unexpected error'
4116              , p_error_table_name => 'unexpected error'
4117              , p_message_name => 'unexpected error'
4118           );
4119           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4120        END IF;
4121        --
4122        -- IS item under locator control
4123 IF (l_debug = 1) THEN
4124    mdebug('Process: In Validate_ItemSKU call Locator Control');
4125 END IF;
4126        MTL_INV_VALIDATE_GRP.Locator_Control(
4127           p_api_version => 0.9,
4128           x_return_status => x_return_status,
4129           x_msg_count => x_msg_count,
4130           x_msg_data => x_msg_data,
4131           p_org_control => MTL_CCEOI_VAR_PVT.G_STOCK_LOCATOR_CONTROL_CODE,
4132           p_sub_control => MTL_CCEOI_VAR_PVT.G_SUB_LOCATOR_TYPE,
4133 	  p_item_control => MTL_CCEOI_VAR_PVT.G_SKU_REC.LOCATION_CONTROL_CODE,
4134 	 -- G_ITEM_LOCATOR_TYPE, -- XXX never set
4135           x_locator_control => L_check_locator,
4136           x_level => L_control_level
4137        );
4138 IF (l_debug = 1) THEN
4139    MDEBUG( 'Validate_Item  Locator Control Return='||x_return_status);
4140    MDEBUG( 'Validate_Ctrl Rev : '||p_sku_rec.revision);
4141    MDEBUG( 'Validate_Ctrl Loc : '||to_char(p_locator_rec.locator_id));
4142 END IF;
4143        --
4144 IF (l_debug = 1) THEN
4145    mdebug('Process: In Validate_ItemSKU call Val_Ctrol ');
4146 END IF;
4147        -- Validate Control information
4148        MTL_INV_VALIDATE_GRP.Validate_Ctrol(
4149           p_api_version => 0.9,
4150           x_return_status => x_return_status,
4151           x_msg_count => x_msg_count,
4152           x_msg_data => x_msg_data,
4153           x_errorcode => x_errorcode,
4154           p_inventory_item_id => MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID,
4155           p_organization_id => p_organization_id,
4156           p_locator_rec => p_locator_rec,
4157           p_lot_number => p_sku_rec.lot_number,
4158           p_revision => p_sku_rec.revision,
4159           p_serial_number => p_sku_rec.serial_number,
4160           p_locator_control => L_check_locator
4161        );
4162 IF (l_debug = 1) THEN
4163    MDEBUG( 'Validate_Item  call Val_Ctrol Return='||x_return_status);
4164    mdebug('Process: In Validate_ItemSKU call Val_Ctrol Return='||x_return_status);
4165 END IF;
4166        --
4167        IF x_errorcode >0 THEN
4168           L_table_name := 'MTL_SYSTEM_ITEMS';
4169           IF x_errorcode = 9 THEN
4170              L_message_name := 'INV_CCEOI_NO_LOC';
4171              L_column_name := 'LOCATION_CONTROL_CODE';
4172           ELSIF x_errorcode = 11 THEN
4173              L_message_name := 'INV_CCEOI_NO_REV';
4174              L_column_name := 'REVISION_QTY_CONTROL_CODE';
4175           ELSIF x_errorcode = 13 THEN
4176              L_message_name := 'INV_CCEOI_NO_LOT';
4177              L_column_name := 'LOT_CONTROL_CODE';
4178           ELSIF x_errorcode = 15 THEN
4179              L_message_name := 'INV_CCEOI_NO_SERIAL';
4180              L_column_name := 'SERIAL_NUMBER_CONTROL_CODE';
4181           END IF;
4182           -- Write INTO interface error TABLE
4183           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4184              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4185              , p_error_column_name => L_column_name
4186              , p_error_table_name => L_table_name
4187              , p_message_name => L_message_name
4188           );
4189           --
4190           RAISE FND_API.G_EXC_ERROR;
4191        ELSIF
4192           x_errorcode < 0 THEN
4193           -- Write INTO interface error TABLE
4194           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4195              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4196              , p_error_column_name => 'unexpected error'
4197              , p_error_table_name => 'unexpected error'
4198              , p_message_name => 'unexpected error'
4199           );
4200           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4201        END IF;
4202        --
4203 
4204        -- XXX big mess here (locator check should be based on a control level
4205        -- derived based on control code of org/sub/item not just item )
4206        -- we do not check restricted locator lists
4207        --
4208 IF (l_debug = 1) THEN
4209    MDEBUG( 'Validate Loc Chk: '||to_char(MTL_CCEOI_VAR_PVT.G_SKU_REC.LOCATION_CONTROL_CODE));
4210 END IF;
4211        IF L_check_locator IN(2, 3) THEN
4212 IF (l_debug = 1) THEN
4213    mdebug('Process: In Validate_ItemSKU call Val_Locator');
4214    MDEBUG( 'Validate Loc : '||to_char(p_locator_rec.locator_id));
4215 END IF;
4216           -- Validate Locator
4217           /* Validate  API Implementation done in called procedure
4218              since it has multiple call for Locator validation */
4219 
4220           MTL_INV_VALIDATE_GRP.Validate_Locator(
4221 	    p_api_version => 0.9,
4222 	    x_return_status => x_return_status,
4223 	    x_msg_count => x_msg_count,
4224 	    x_msg_data => x_msg_data,
4225 	    x_errorcode => x_errorcode,
4226 	    p_locator_rec => p_locator_rec,
4227 	    p_organization_id => p_organization_id,
4228 	    p_subinventory => p_subinventory,
4229 	    p_inventory_item_id => p_inventory_item_rec.inventory_item_id,
4230 	    p_locator_control => L_check_locator,
4231 	    p_control_level => L_control_level,
4232 	    p_restrict_control =>
4233 	    MTL_CCEOI_VAR_PVT.G_SKU_REC.RESTRICT_LOCATORS_CODE,
4234 	    p_simulate => p_simulate);
4235 IF (l_debug = 1) THEN
4236    mdebug('Process: In Validate_ItemSKU call Val_Locator Return='||x_return_status);
4237 END IF;
4238           --
4239           IF x_errorcode >0 THEN
4240              IF x_errorcode = 10 THEN
4241                 L_table_name := 'MTL_ITEM_LOCATIONS_KFV';
4242                 L_message_name := 'INV_CCEOI_INVALID_LOC';
4243                 L_column_name := 'INVENTORY_LOCATION_ID';
4244              ELSIF
4245                 x_errorcode = 47 THEN
4246                 L_table_name := 'MTL_SECONDARY_LOCATORS';
4247                 L_message_name := 'INV_CCEOI_LOC_NOT_IN_LIST';
4248                 L_column_name := 'SECONDARY_LOCATOR';
4249              END IF;
4250              -- Write INTO interface error TABLE
4251              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4252                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4253                 , p_error_column_name => L_column_name
4254                 , p_error_table_name => L_table_name
4255                 , p_message_name => L_message_name
4256 						    );
4257 		RAISE FND_API.G_EXC_ERROR;
4258           ELSIF
4259              x_errorcode < 0 THEN
4260              --
4261              -- Write INTO interface error TABLE
4262              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4263                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4264                 , p_error_column_name => 'unexpected error'
4265                 , p_error_table_name => 'unexpected error'
4266                 , p_message_name => 'unexpected error'
4267              );
4268              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4269 	  END IF;
4270 	  -- location contorl code is either no locator control, determined at
4271 	  -- subinv level or determined at item level
4272 	 ELSE
4273 	    MTL_CCEOI_VAR_PVT.G_LOCATOR_ID := NULL; -- XXX not sure about that
4274 	 END IF;
4275        --
4276        -- IS item under revision control
4277        IF MTL_CCEOI_VAR_PVT.G_SKU_REC.REVISION_QTY_CONTROL_CODE = 2 THEN
4278           -- Validate Revision
4279 IF (l_debug = 1) THEN
4280    mdebug('Process: In Validate_ItemSKU call Val_revision ');
4281 END IF;
4282           /* Validate  API Implementation for Revision validation */
4283           --
4284           l_org.organization_id := p_organization_id;
4285           l_item.inventory_item_id := MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID;
4286           --
4287           IF p_sku_rec.revision is null then
4288              x_errorcode := 12 ;
4289           ELSIF INV_Validate.Revision(p_sku_rec.revision,
4290                                         L_org,
4291                                         L_item
4292                                         ) = INV_Validate.T then
4293              MTL_CCEOI_VAR_PVT.G_SKU_REC.REVISION := p_sku_rec.revision;
4294              x_errorcode := 0;
4295           ELSE
4296              x_errorcode := 12;
4297           END IF;
4298 IF (l_debug = 1) THEN
4299    mdebug('Process: In Validate_ItemSKU call Val_revision Return='||x_return_status);
4300 END IF;
4301           --
4302           IF x_errorcode >0 THEN
4303              L_table_name := 'MTL_ITEM_REVISIONS';
4304              L_column_name := 'REVISION';
4305              IF x_errorcode = 11 THEN
4306                 L_message_name := 'INV_CCEOI_NO_REV';
4307              ELSIF x_errorcode = 12 THEN
4308                 L_message_name := 'INV_CCEOI_LOC_INVALID_REV';
4309              END IF;
4310              -- Write INTO interface error TABLE
4311              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4312                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4313                 , p_error_column_name => L_column_name
4314                 , p_error_table_name => L_table_name
4315                 , p_message_name => L_message_name
4316 						    );
4317 		RAISE FND_API.G_EXC_ERROR;
4318           ELSIF
4319              x_errorcode < 0 THEN
4320              --
4321              -- Write INTO interface error TABLE
4322              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4323                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4324                 , p_error_column_name => 'unexpected error'
4325                 , p_error_table_name => 'unexpected error'
4326                 , p_message_name => 'unexpected error'
4327              );
4328              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4329 	  END IF;
4330        END IF;
4331        --
4332        -- IS the item under lot control
4333        IF MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_CONTROL_CODE = 2 THEN
4334 IF (l_debug = 1) THEN
4335    mdebug('Process: In Validate_ItemSKU call Val_Lot');
4336    MDEBUG( 'Process: In Validate_ItemSKU call Val_Lot');
4337 END IF;
4338           /* Validate  API Implementation for lot validation */
4339           --
4340           l_org.organization_id := p_organization_id;
4341           l_sub.secondary_inventory_name := p_subinventory;
4342           l_item.inventory_item_id := MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID;
4343           l_loc.inventory_location_id := MTL_CCEOI_VAR_PVT.G_LOCATOR_ID;
4344           l_lot.lot_number := p_sku_rec.lot_number ;
4345           --
4346           IF p_sku_rec.lot_number is null then
4347              x_errorcode := 13 ;
4348           /* Bug 4735473-Calling the Lot_Number api passing only lot, org and item to
4349                            make the behaviour in sync with that on the desktop.
4350           ELSIF INV_Validate.Lot_Number(L_lot,
4351                                         L_org,
4352                                         L_item,
4353                                         L_sub,
4354                                         L_loc,
4355                                         p_sku_rec.revision
4356                                         ) = INV_Validate.T then */
4357 
4358              ELSIF INV_Validate.Lot_Number(L_lot,
4359                                            L_org,
4360                                            L_item
4361                                          ) = INV_Validate.T THEN
4362             /* End of fix for Bug 4735473 */
4363 
4364              MTL_CCEOI_VAR_PVT.G_SKU_REC.Lot_Number := l_lot.lot_number;
4365              MTL_CCEOI_VAR_PVT.G_SKU_REC.expiration_date := l_lot.expiration_date;
4366 
4367              x_errorcode := 0;
4368           ELSE
4369              x_errorcode := 14;
4370           END IF;
4371           -- Validate Lot
4372 IF (l_debug = 1) THEN
4373    MDEBUG( 'Process: In Validate_ItemSKU call Val_Lot Stat'||x_return_status||' - '||to_char(x_errorcode));
4374    mdebug('Process: In Validate_ItemSKU call Val_Lot Return='||x_return_status);
4375 END IF;
4376           --
4377           IF x_errorcode >0 THEN
4378 IF (l_debug = 1) THEN
4379    MDEBUG( 'Process: In Validate_ItemSKU call Val_Lot Error > 0');
4380 END IF;
4381              L_table_name := 'MTL_LOT_NUMBERS';
4382              L_column_name := 'LOT_NUMBER';
4383              IF x_errorcode = 13 THEN
4384                 L_message_name := 'INV_CCEOI_NO_LOT';
4385              ELSIF
4386 	       x_errorcode = 14 THEN
4387                 L_message_name := 'INV_CCEOI_INVALID_LOT'; --changes 3904722
4388              END IF;
4389              -- Write INTO interface error TABLE
4390 IF (l_debug = 1) THEN
4391    MDEBUG( 'Process: In Validate_ItemSKU call Val_Lot Msg '||L_message_name);
4392 END IF;
4393              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4394                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4395                 , p_error_column_name => L_column_name
4396                 , p_error_table_name => L_table_name
4397                 , p_message_name => L_message_name
4398 						    );
4399 	     RAISE FND_API.G_EXC_ERROR;
4400           ELSIF
4401              x_errorcode < 0 THEN
4402              --
4403 IF (l_debug = 1) THEN
4404    MDEBUG( 'Process: In Validate_ItemSKU call Val_Lot Error < 0');
4405 END IF;
4406              -- Write INTO interface error TABLE
4407              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4408                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4409                 , p_error_column_name => 'unexpected error'
4410                 , p_error_table_name => 'unexpected error'
4411                 , p_message_name => 'unexpected error'
4412              );
4413              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4414           END IF;
4415        END IF;
4416        --
4417        -- IS the item under serial control
4418 IF (l_debug = 1) THEN
4419    MDEBUG( 'Before call Validate_Serial-1');
4420 END IF;
4421        IF MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE IN (2,5) THEN
4422 IF (l_debug = 1) THEN
4423    MDEBUG( 'Before call Validate_Serial-2');
4424 END IF;
4425 --Begin changes 3904722
4426          SELECT COUNT_QUANTITY INTO l_serial_quantity
4427 	   FROM MTL_CC_ENTRIES_INTERFACE
4428           WHERE CC_ENTRY_INTERFACE_ID = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID;
4429 --End changes 3904722
4430           -- Validate Serial
4431          /* Validate  API Implementation for Serial validation */
4432           l_org.organization_id := p_organization_id;
4433           l_sub.secondary_inventory_name := p_subinventory;
4434           l_serial.serial_number := p_sku_rec.serial_number ;
4435           l_item.inventory_item_id := MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID;
4436           l_loc.inventory_location_id := MTL_CCEOI_VAR_PVT.G_LOCATOR_ID;
4437           l_lot.lot_number := p_sku_rec.lot_number ;
4438           --
4439           IF (MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.SERIAL_COUNT_OPTION = 3) THEN
4440               x_errorcode := 102;
4441           ELSIF (MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.SERIAL_COUNT_OPTION = 1) THEN
4442               x_errorcode := 103;
4443           ELSIF p_sku_rec.serial_number is null then
4444              x_errorcode := 15 ;
4445           ELSIF INV_Validate.validate_serial(l_serial,
4446                                              L_org,
4447                                              L_item,
4448                                              L_sub,
4449                                              L_lot,
4450                                              L_loc,
4451                                              p_sku_rec.revision
4452                                              ) = INV_Validate.T then
4453              -- needs to be checked whether we should store or not
4454              MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER := l_serial.serial_number;
4455              x_errorcode := 0;
4456 --Begin changes 3904722
4457           ELSIF MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE = 5 AND
4458 	        MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER IS NULL AND
4459 	        l_serial_quantity = 1 THEN
4460                 l_ret_value := inv_serial_number_pub.validate_serials(
4461                          p_org_id                     => p_organization_id
4462                        , p_item_id                    => p_inventory_item_rec.inventory_item_id
4463                        , p_qty                        => l_serial_quantity
4464                        , p_rev                        => p_sku_rec.revision
4465                        , p_lot                        => p_sku_rec.lot_number
4466                        , p_start_ser                  => p_sku_rec.serial_number
4467                        , p_trx_src_id                 => 9
4468                        , p_trx_action_id              => 4
4469                        , p_subinventory_code          => p_subinventory
4470                        , p_locator_id                 => MTL_CCEOI_VAR_PVT.G_LOCATOR_ID
4471                        , p_issue_receipt              => 'R'
4472                        , x_end_ser                    => l_to_serial
4473                        , x_proc_msg                   => l_msg_data);
4474                 IF l_ret_value = 1 THEN
4475                        x_errorcode := 16;
4476                 ELSE
4477 		   MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER := l_to_serial;
4478 		   x_errorcode := 0;
4479                 END IF;
4480           ELSIF MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE in (2,5) THEN
4481              x_errorcode := 16;
4482           END IF;
4483 --End changes 3904722
4484 IF (l_debug = 1) THEN
4485    MDEBUG( 'After Serial Validation Cd-Stat '||to_char(x_errorcode)||x_return_status);
4486 END IF;
4487           --
4488           IF x_errorcode >0 THEN
4489              L_table_name := 'MTL_SERIAL_NUMBERS';
4490              L_column_name := 'SERIAL_NUMBER';
4491              IF x_errorcode = 15 THEN
4492                 L_message_name := 'INV_CCEOI_NO_SERIAL';
4493              ELSIF x_errorcode = 16 THEN
4494 		L_message_name := 'INV_CCEOI_INVALID_SERIAL';
4495 	     ELSIF x_errorcode = 102 THEN
4496 		L_message_name := 'INV_CCEOI_MULT_COUNT_SERIAL';
4497 	     ELSIF x_errorcode = 103 THEN
4498 	        L_message_name := 'INV_CCEOI_SERIAL_NOT_ALLOWED';
4499 	     END IF;
4500              --
4501              FND_MESSAGE.SET_NAME('INV',L_message_name);
4502              FND_MSG_PUB.Add;
4503              -- Write INTO interface error TABLE
4504              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4505                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4506                 , p_error_column_name => L_column_name
4507                 , p_error_table_name => L_table_name
4508                 , p_message_name => L_message_name
4509 						    );
4510 		RAISE FND_API.G_EXC_ERROR;
4511           ELSIF
4512              x_errorcode < 0 THEN
4513              --
4514              -- Write INTO interface error TABLE
4515              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4516                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4517                 , p_error_column_name => 'unexpected error'
4518                 , p_error_table_name => 'unexpected error'
4519                 , p_message_name => 'unexpected error'
4520              );
4521              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4522           END IF;
4523 IF (l_debug = 1) THEN
4524    MDEBUG( 'After call Validate_Serial Error Routine');
4525 END IF;
4526        END IF;
4527 
4528        -- deduce whether this is a new unscheduled count request or not
4529        -- by knowing the fact that validate_countlistseq would find this
4530        -- record already
4531        l_is_Unscheduled_Request := FALSE;
4532        if MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.CYCLE_COUNT_ENTRY_ID is null then
4533 	  l_is_Unscheduled_Request := TRUE;
4534        end if;
4535        --
4536        -- IS there an OPEN request
4537 
4538 IF (l_debug = 1) THEN
4539    MDEBUG( 'item : '||to_char(MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID));
4540    MDEBUG( 'lpnid: '||to_char(MTL_CCEOI_VAR_PVT.G_LPN_ID));
4541    MDEBUG( 'Subinv : '||p_subinventory);
4542    MDEBUG( 'Org :'||to_char(p_organization_id));
4543    MDEBUG( 'Header :'||to_char(p_cycle_count_header_id));
4544    MDEBUG( 'Locator :'||to_char(MTL_CCEOI_VAR_PVT.G_LOCATOR_ID));
4545    MDEBUG( 'Rev :'||p_sku_rec.revision);
4546    MDEBUG( 'Serial :'||p_sku_rec.serial_number);
4547    MDEBUG( 'Lot :'||p_sku_rec.lot_number);
4548    MDEBUG( 'costid: '||to_char(MTL_CCEOI_VAR_PVT.G_COST_GROUP_ID));
4549 END IF;
4550        L_P_locator_id := MTL_CCEOI_VAR_PVT.G_LOCATOR_ID;
4551        L_P_inventory_item_id := MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID;
4552        MTL_CCEOI_VAR_PVT.G_OPEN_REQUEST := FALSE;
4553        FOR c_rec IN L_CCEntry_Csr(
4554              L_P_inventory_item_id, MTL_CCEOI_VAR_PVT.G_LPN_ID,
4555              p_subinventory, p_organization_id, p_cycle_count_header_id,
4556              L_P_locator_id, p_sku_rec.revision,
4557              p_sku_rec.serial_number, p_sku_rec.lot_number, MTL_CCEOI_VAR_PVT.G_COST_GROUP_ID) LOOP
4558           --
4559 IF (l_debug = 1) THEN
4560    MDEBUG( 'Process: In Validate_ItemSKU call-1 Open Request');
4561 END IF;
4562           MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC := c_rec;
4563           MTL_CCEOI_VAR_PVT.G_OPEN_REQUEST := TRUE;
4564           L_counter := L_counter + 1;
4565 IF (l_debug = 1) THEN
4566    MDEBUG( 'Process: In Validate_ItemSKU call-2 Open Request');
4567    mdebug('Process: In Validate_ItemSKU call Open Request');
4568 END IF;
4569           --
4570        END LOOP;
4571         IF (l_debug = 1) THEN
4572            mdebug(' l_counter: ' || to_char(l_counter));
4573    MDEBUG( 'Process: In Validate_ItemSKU call-3 ');
4574         END IF;
4575        --
4576        IF L_counter < 1 AND MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.UNSCHEDULED_COUNT_ENTRY=2 THEN
4577 IF (l_debug = 1) THEN
4578    MDEBUG('Process: In Validate_ItemSKU Unsched not Allowed');
4579 END IF;
4580           x_errorcode := 48;
4581           FND_MESSAGE.SET_NAME('INV', 'INV_CCEOI_NO_CCENTRY');
4582           FND_MSG_PUB.Add;
4583           -- Write INTO interface error TABLE
4584           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4585              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4586              , p_error_column_name => '*'
4587              , p_error_table_name => 'MTL_CYCLE_COUNT_ENTRIES'
4588              , p_message_name => 'INV_CCEOI_NO_CCENTRY'
4589           );
4590           RAISE FND_API.G_EXC_ERROR;
4591        ELSIF
4592 	 L_counter > 1 OR (L_counter = 1 AND l_is_Unscheduled_Request) THEN
4593 	  -- XXX it is impossible to have multiple open
4594 	  -- requests existing for the same item/location
4595 	  -- it feels that we should have checked presense of request
4596 	  -- with a different count list sequence in case of 1 count (err=27)
4597           x_errorcode := 49;
4598 
4599 IF (l_debug = 1) THEN
4600    MDEBUG( 'Process: In Validate_ItemSKU call-4 ');
4601 END IF;
4602           FND_MESSAGE.SET_NAME('INV', 'INV_CCEOI_MULT_REQUESTS');
4603           FND_MSG_PUB.Add;
4604           -- Write INTO interface error TABLE
4605           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4606              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4607              , p_error_column_name => '*'
4608              , p_error_table_name => 'MTL_CYCLE_COUNT_ENTRIES'
4609              , p_message_name => 'INV_CCEOI_MULT_REQUESTS'
4610           );
4611           RAISE FND_API.G_EXC_ERROR;
4612        END IF;
4613        --
4614 IF (l_debug = 1) THEN
4615    MDEBUG( 'Process: In Validate_ItemSKU call-5 ');
4616 END IF;
4617        -- END of API body
4618        -- Standard check of p_commit
4619        IF FND_API.to_Boolean(p_commit) THEN
4620           COMMIT;
4621        END IF;
4622 IF (l_debug = 1) THEN
4623    MDEBUG( 'Process: In Validate_ItemSKU call-6 ');
4624 END IF;
4625        -- Standard call to get message count and if count is 1, get message info
4626        FND_MSG_PUB.Count_And_Get
4627        (p_count => x_msg_count
4628           , p_data => x_msg_data);
4629 IF (l_debug = 1) THEN
4630    MDEBUG( 'Process: In Validate_ItemSKU call-7 ');
4631 END IF;
4632     EXCEPTION
4633        WHEN FND_API.G_EXC_ERROR THEN
4634        --
4635        x_return_status := FND_API.G_RET_STS_ERROR;
4636        --
4637 IF (l_debug = 1) THEN
4638    MDEBUG( 'ItemSKU-Error');
4639 END IF;
4640        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
4641           , p_data => x_msg_data);
4642        --
4643        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4644        --
4645        x_errorcode := -1;
4646        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4647 IF (l_debug = 1) THEN
4648    MDEBUG( 'ItemSKU-Unexp Error');
4649 END IF;
4650        --
4651        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
4652           , p_data => x_msg_data);
4653        --
4654        WHEN OTHERS THEN
4655        --
4656        x_errorcode := -1;
4657        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4658 IF (l_debug = 1) THEN
4659    MDEBUG( 'ItemSKU-Others Error');
4660 END IF;
4661        --
4662        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4663           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
4664        END IF;
4665        --
4666        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
4667           , p_data => x_msg_data);
4668     END;
4669   END;
4670   --
4671   -- Validate the UOM and quantity information
4672   PROCEDURE Validate_UOMQuantity(
4673   p_api_version IN NUMBER ,
4674   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
4675   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
4676   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
4677   x_return_status OUT NOCOPY VARCHAR2 ,
4678   x_msg_count OUT NOCOPY NUMBER ,
4679   x_msg_data OUT NOCOPY VARCHAR2 ,
4680   x_errorcode OUT NOCOPY NUMBER ,
4681   p_primary_uom_quantity IN NUMBER DEFAULT NULL,
4682   p_count_uom IN VARCHAR2 DEFAULT NULL,
4683   p_count_unit_of_measure IN VARCHAR2 DEFAULT NULL,
4684   p_organization_id IN NUMBER ,
4685   p_lpn_id IN NUMBER DEFAULT NULL,
4686   p_inventory_item_id IN NUMBER ,
4687   p_count_quantity IN NUMBER ,
4688   p_serial_number IN VARCHAR2 DEFAULT NULL,
4689   p_subinventory IN VARCHAR2 ,
4690   p_revision IN VARCHAR2 DEFAULT NULL,
4691   p_lot_number IN VARCHAR2 ,
4692   p_system_quantity IN NUMBER,
4693   p_secondary_system_quantity IN NUMBER -- INVCONV
4694   )
4695   IS
4696     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
4697   BEGIN
4698     -- Start OF comments
4699     -- API name  : Validate_UOMQuantity
4700     -- TYPE      : Private
4701     -- Pre-reqs  : G_PRIMARY_UOM_CODE, G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE
4702     -- FUNCTION  :
4703     -- Parameters:
4704     --     IN    :
4705     --  p_api_version      IN  NUMBER (required)
4706     --  API Version of this procedure
4707     --
4708     --  p_init_msg_list   IN  VARCHAR2 (optional)
4709     --    DEFAULT = FND_API.G_FALSE,
4710     --
4711     -- p_commit           IN  VARCHAR2 (optional)
4712     --     DEFAULT = FND_API.G_FALSE
4713     --
4714     --  p_validation_level IN  NUMBER (optional)
4715     --      DEFAULT = FND_API.G_VALID_LEVEL_FULL,
4716     --
4717     -- p_primary_uom_quantity IN NUMBER (required - default)
4718     --  default NULL
4719     --  Quantity within the primary unit OF measure OF the item
4720     --
4721     --  p_count_uom IN VARCHAR2 (required - default)
4722     --  default = NULL
4723     --  Unit OF measure OF the current cycle COUNT entry
4724     --
4725     --  p_count_unit_of_measure IN VARCHAR2 (optional - defaulted)
4726     --  default = NULL
4727     --  unit OF measure name OF the current COUNT
4728     --
4729     --  p_organization_id IN NUMBER (required)
4730     -- ID OF the organization
4731     --
4732     --  p_inventory_item_id IN NUMBER (required)
4733     --  ID OF the current inventory item
4734     --
4735     --  p_count_quantity IN NUMBER (required)
4736     --  COUNT quantity
4737     --
4738     --  p_serial_number IN NUMBER (required - defaulted)
4739     --  default = NULL
4740     --  Serial NUMBER, IF the item IS under serial control
4741     --
4742     -- p_subinventory in number (required)
4743     -- subinventory of the item
4744     --
4745     -- p_revision in varchar2 (required- defaulted)
4746     -- default = null
4747     --  revision of the item
4748     --
4749     -- p_lot_number in varchar2 (required- defaulted)
4750     -- default = null
4751     --  lot number
4752     --
4753     -- p_system_quantity in number (required- defaulted)
4754     -- default = null
4755     --
4756     --     OUT   :
4757     --  X_return_status    OUT NUMBER
4758     --  Result of all the operations
4759     --
4760     --
4761     --   x_msg_count        OUT NUMBER,
4762     --
4763     --   x_msg_data         OUT VARCHAR2,
4764     --
4765     --   X_ErrorCode        OUT NUMBER
4766     -- Version: Current Version 0.9
4767     --              Changed : Nothing
4768     --          No Previous Version 0.0
4769     --          Initial version 0.9
4770   -- Notes  :
4771   -- this function validates presense of count quantity and uom info
4772   -- it also computes adjustment quantity, adjustment amount, item cost,
4773   -- and adjustment variance percentage
4774   -- Sets: G_UOM_CODE (count unit of measure), G_COUNT_QUANTITY (in count UOM)
4775   -- G_ADJUSTMENT_QUANTITY, G_ADJUSTMENT_AMOUNT, G_ITEM_COST,
4776   -- G_ADJ_VARIANCE_PERCENTAGE, G_SYSTEM_QUANTITY
4777     -- END OF comments
4778     DECLARE
4779        L_table_name VARCHAR2(100);
4780        L_column_name VARCHAR2(100);
4781        L_message_name VARCHAR2(30);
4782        --
4783        L_api_version CONSTANT NUMBER := 0.9;
4784        L_api_name CONSTANT VARCHAR2(30) := 'Validate_UOMQuantity';
4785     BEGIN
4786        -- Standard start of API savepoint
4787        SAVEPOINT Validate_UOMQuantity;
4788        --
4789        -- Standard Call to check for call compatibility
4790        IF NOT FND_API.Compatible_API_Call(l_api_version
4791              , p_api_version
4792              , l_api_name
4793              , G_PKG_NAME) THEN
4794           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4795        END IF;
4796        --
4797        -- Initialize message list if p_init_msg_list is set to true
4798        IF FND_API.to_Boolean(p_init_msg_list) THEN
4799           FND_MSG_PUB.initialize;
4800        END IF;
4801        --
4802        -- Initialisize API return status to access
4803        x_return_status := FND_API.G_RET_STS_SUCCESS;
4804        x_errorcode := 0;
4805        --
4806        -- API body
4807        --
4808        IF (l_debug = 1) THEN
4809           MDEBUG( 'Validate_UOMQuantity call. count_type_code ='||nvl(to_char(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE), 'NULL'));
4810        END IF;
4811        --
4812        -- comment released by suresh for testing
4813 
4814        -- count type code 4 means dummy count - ignore it
4815        IF MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE = 4 THEN
4816 	  -- todo: reset count and uom globals to null ? (put 0's ?)
4817 	  MTL_CCEOI_VAR_PVT.G_UOM_CODE := NULL;
4818 	  MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY := NULL;
4819 	  MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY := NULL;
4820 	  MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY := NULL;
4821 	  MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_AMOUNT := NULL;
4822 	  MTL_CCEOI_VAR_PVT.G_ADJ_VARIANCE_PERCENTAGE := NULL;
4823 	  MTL_CCEOI_VAR_PVT.G_ITEM_COST := NULL;
4824 
4825        -- if scheduled(1), unscheduled(2), control(3) count derive UOM/Qty
4826        ELSIF MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE
4827 	 IN (1, 2, 3)
4828 	 OR
4829 	 MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE IS NULL
4830        THEN
4831 
4832 	  IF (l_debug = 1) THEN
4833    	  mdebug('Process: In Validate_UOMQuantity call Validate_PrimaryUOMQty');
4834 	  END IF;
4835 	  MTL_INV_VALIDATE_GRP.Validate_PrimaryUomQuantity
4836 	    (p_api_version => 0.9,
4837 	    x_return_status => x_return_status,
4838 	    x_msg_count => x_msg_count,
4839 	    x_msg_data => x_msg_data,
4840 	    x_errorcode => x_errorcode,
4841 	    p_primary_uom_quantity => p_primary_uom_quantity,
4842 	    p_primary_uom_code => MTL_CCEOI_VAR_PVT.G_PRIMARY_UOM_CODE);
4843 
4844 	  IF (l_debug = 1) THEN
4845    	  mdebug('Process: In Validate_UOMQuantity call Validate_PrimaryUOMQty Return='||x_return_status);
4846    	  mdebug('Errorcode :'||to_char(x_errorcode));
4847 	  END IF;
4848 
4849 	  IF x_errorcode < 0 THEN
4850 
4851 	     MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4852 	       p_cc_entry_interface_id =>
4853 	         MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4854 	       , p_error_column_name => 'unexpected error'
4855 	       , p_error_table_name => 'unexpected error'
4856 	       , p_message_name => 'unexpected error');
4857 	     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4858 
4859 	  ELSIF x_errorcode = 22 THEN
4860 	     MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4861 	       p_cc_entry_interface_id =>
4862 	         MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4863 	       , p_error_column_name => 'COUNT_QUANTITY'
4864 	       , p_error_table_name => 'MTL_CYCLE_COUNT_ENTRIES'
4865 	       , p_message_name => 'INV_CCEOI_NEG_QTY');
4866 	     RAISE FND_API.G_EXC_ERROR;
4867 
4868 	  ELSIF  x_errorcode = 60 THEN
4869 	     MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4870 	       p_cc_entry_interface_id =>
4871 	         MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4872 	       , p_error_column_name => 'COUNT_QUANTITY'
4873 	       , p_error_table_name => 'MTL_CYCLE_COUNT_ENTRIES'
4874 	       , p_message_name =>  'INV_SERIAL_QTY_MUST_BE_1');
4875 	     RAISE FND_API.G_EXC_ERROR;
4876 
4877 	  ELSIF  x_errorcode = 61 THEN
4878 	     MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4879 	       p_cc_entry_interface_id =>
4880 	         MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4881 	       , p_error_column_name => 'COUNT_QUANTITY'
4882 	       , p_error_table_name => 'MTL_CYCLE_COUNT_ENTRIES'
4883 	       , p_message_name =>  'INV_GREATER_EQUAL_ZERO');
4884 	     RAISE FND_API.G_EXC_ERROR;
4885 
4886 	     --
4887        -- primary uom quantity IS NOT populated, THEN validate COUNT uom
4888 	  ELSIF x_errorcode = 19 THEN
4889 	     IF (l_debug = 1) THEN
4890    	     mdebug('Process: In Validate_UOMQuantity call Validate_CountUOM: ' || p_count_uom);
4891 	     END IF;
4892 
4893 	     MTL_INV_VALIDATE_GRP.Validate_CountUOM(p_api_version => 0.9
4894 	       , x_msg_count => x_msg_count
4895 	       , x_msg_data => x_msg_data
4896 	       , x_return_status => x_return_status
4897 	       , x_errorcode => x_errorcode
4898 	       , p_count_uom => p_count_uom
4899 	       , p_count_unit_of_measure => p_count_unit_of_measure
4900 	       , p_organization_id => p_organization_id
4901 	       , p_inventory_item_id => p_inventory_item_id );
4902 
4903 	     IF (l_debug = 1) THEN
4904    	     MDEBUG( 'After Validate CntUOM Stat '||to_char(x_errorcode)||' - '||x_return_status);
4905 	     END IF;
4906 
4907              IF x_errorcode = 19 THEN
4908 
4909                 -- Write INTO interface error TABLE
4910                 MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4911                    p_cc_entry_interface_id =>
4912                    MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4913                    , p_error_column_name =>
4914                    'UOM_CODE/UNIT_OF_MEASURE'
4915                    , p_error_table_name => 'MTL_ITEM_UOMS_VIEW'
4916                    , p_message_name => 'INV_CCEOI_NO_UOM'
4917                 );
4918 		RAISE FND_API.G_EXC_ERROR;
4919 
4920 	     ELSIF x_errorcode = 20 THEN
4921                 MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4922                    p_cc_entry_interface_id =>
4923                    MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4924                    , p_error_column_name =>
4925                    'UOM_CODE/UNIT_OF_MEASURE'
4926                    , p_error_table_name => 'MTL_ITEM_UOMS_VIEW'
4927                    , p_message_name => 'INV_CCEOI_INVALID_UOM'
4928                 );
4929 		RAISE FND_API.G_EXC_ERROR;
4930 
4931 	     ELSIF x_errorcode < 0 THEN
4932 
4933 		MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4934 		  p_cc_entry_interface_id =>
4935   		    MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4936 		  , p_error_column_name => 'unexpected error'
4937 		  , p_error_table_name => 'unexpected error'
4938 		  , p_message_name => 'unexpected error');
4939 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4940 
4941 	     END IF;
4942 
4943 	     --mdebug('Process: In Validate_UOMQuantity call Validate_CountQty ');
4944 	     MTL_INV_VALIDATE_GRP.Validate_CountQuantity(p_api_version => 0.9
4945 	       , x_return_status => x_return_status
4946 	       , x_msg_count => x_msg_count
4947 	       , x_msg_data => x_msg_data
4948 	       , x_errorcode => x_errorcode
4949 	       , p_count_quantity => p_count_quantity
4950 							);
4951 	     --MDEBUG( 'ValidateCQty :Stat= '||x_errorcode);
4952 	     --MDEBUG( 'ValidateCQty :Ctype= '||to_char(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE));
4953 
4954 	     --mdebug('Process: In Validate_UOMQuantity call Validate_CountQty Return='||x_return_status);
4955 
4956 
4957              IF x_errorcode = 22 THEN
4958 
4959 		MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4960 		  p_cc_entry_interface_id =>
4961                     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4962 		  , p_error_column_name => 'COUNT_QUANTITY'
4963 		  , p_error_table_name => 'MTL_CYCLE_COUNT_ENTRIES'
4964 		  , p_message_name => 'INV_CCEOI_NEG_QTY');
4965 
4966                 RAISE FND_API.G_EXC_ERROR;
4967              ELSIF x_errorcode = 60 THEN
4968 
4969                 MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4970                    p_cc_entry_interface_id =>
4971                      MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4972                    , p_error_column_name => 'COUNT_QUANTITY'
4973                    , p_error_table_name => 'MTL_CC_ENTRIES_INTERFACE'
4974                    , p_message_name => 'INV_SERIAL_QTY_MUST_BE_1');
4975 
4976                 RAISE FND_API.G_EXC_ERROR;
4977              ELSIF x_errorcode = 61 THEN
4978 
4979                 MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4980 		  p_cc_entry_interface_id =>
4981                     MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4982 		  , p_error_column_name => 'COUNT_QUANTITY'
4983 		  , p_error_table_name => 'MTL_CC_ENTRIES_INTERFACE'
4984 		  , p_message_name => 'INV_GREATER_EQUAL_ZERO');
4985 
4986                 RAISE FND_API.G_EXC_ERROR;
4987 
4988 	     ELSIF x_errorcode < 0 THEN
4989                 -- Write INTO interface error TABLE
4990 		MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
4991 		  p_cc_entry_interface_id =>
4992 		    MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
4993 		  , p_error_column_name => 'unexpected error'
4994 		  , p_error_table_name => 'unexpected error'
4995 		  , p_message_name => 'unexpected error');
4996 
4997 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4998 	     END IF;
4999 
5000 	  END IF;
5001 
5002 
5003 	  IF (l_debug = 1) THEN
5004    	  mdebug('Process: In Validate_UOMQuantity call Validate_Calculate_Adj');
5005 	  END IF;
5006           MTL_CCEOI_PROCESS_PVT.Calculate_Adjustment
5007           (p_api_version => 0.9
5008              , x_return_status => x_return_status
5009              , x_msg_count => x_msg_count
5010              , x_msg_data => x_msg_data
5011              , x_errorcode => x_errorcode
5012              , p_inventory_item_id => p_inventory_item_id
5013              , p_organization_id => p_organization_id
5014              , p_lpn_id => p_lpn_id
5015              , p_subinventory => p_subinventory
5016              , p_revision => p_revision
5017              , p_locator_id => MTL_CCEOI_VAR_PVT.G_LOCATOR_ID
5018              , p_lot_number => p_lot_number
5019              , p_serial_number => p_serial_number
5020              , p_count_quantity => MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY
5021              , p_serial_number_control_code =>
5022              MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE
5023             , p_serial_count_option =>
5024            MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.SERIAL_COUNT_OPTION
5025             , p_system_quantity => p_system_quantity
5026 	    , p_secondary_system_quantity => p_secondary_system_quantity -- INVCONV
5027           );
5028           IF (l_debug = 1) THEN
5029              mdebug('Process: In Validate_UOMQuantity call Validate_Calculate_Adj Return='||x_return_status);
5030           END IF;
5031           --
5032           IF x_errorcode = 17 THEN   -- XXX this code is disabled in CalcAdj()
5033              -- Write INTO interface error TABLE
5034              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5035                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5036                 , p_error_column_name => 'TRANSACTION_QUANTITY'
5037                 , p_error_table_name => 'MTL_ONHAND_QUANTITIES'
5038                 , p_message_name => 'INV_CCEOI_ADJCALC_NO_SERIAL'
5039              );
5040              --
5041              RAISE FND_API.G_EXC_ERROR;
5042           ELSIF
5043              x_errorcode < 0 THEN
5044              -- Write INTO interface error TABLE
5045              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5046                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5047                 , p_error_column_name => 'unexpected error'
5048                 , p_error_table_name => 'unexpected error'
5049                 , p_message_name => 'unexpected error'
5050              );
5051              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5052 	  END IF;
5053 
5054        ELSE -- XXX this is just a precaution (should never happen)
5055 	  IF (l_debug = 1) THEN
5056    	  MDEBUG('Invalid count_type_code');
5057 	  END IF;
5058              MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5059                 p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5060                 , p_error_column_name => 'unexpected error'
5061                 , p_error_table_name => 'unexpected error'
5062                 , p_message_name => 'unexpected error'
5063              );
5064              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5065        END IF;
5066        --
5067        -- END of API body
5068        -- Standard check of p_commit
5069        IF FND_API.to_Boolean(p_commit) THEN
5070           COMMIT;
5071        END IF;
5072        -- Standard call to get message count and if count is 1, get message info
5073        FND_MSG_PUB.Count_And_Get
5074        (p_count => x_msg_count
5075           , p_data => x_msg_data);
5076     EXCEPTION
5077        WHEN FND_API.G_EXC_ERROR THEN
5078        --
5079        x_return_status := FND_API.G_RET_STS_ERROR;
5080        --
5081        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5082           , p_data => x_msg_data);
5083        --
5084        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5085        --
5086        x_errorcode := -1;
5087        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5088        --
5089        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5090           , p_data => x_msg_data);
5091        --
5092        WHEN OTHERS THEN
5093        --
5094        x_errorcode := -1;
5095        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5096        --
5097        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5098           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
5099        END IF;
5100        --
5101        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5102           , p_data => x_msg_data);
5103     END;
5104   END;
5105   --
5106   -- Validate count date and counter
5107   PROCEDURE Validate_CDate_Counter(
5108   p_api_version IN NUMBER ,
5109   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
5110   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
5111   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
5112   x_return_status OUT NOCOPY VARCHAR2 ,
5113   x_msg_count OUT NOCOPY NUMBER ,
5114   x_msg_data OUT NOCOPY VARCHAR2 ,
5115   x_errorcode OUT NOCOPY NUMBER ,
5116   p_employee_id IN NUMBER ,
5117   p_employee_name IN VARCHAR2 DEFAULT NULL,
5118   p_count_date IN DATE )
5119   IS
5120     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
5121   BEGIN
5122     -- Start OF comments
5123     -- API name  : Validate_CDate_Counter
5124     -- TYPE      : Private
5125     -- Pre-reqs  : None
5126     -- FUNCTION  :
5127     -- Parameters:
5128     --     IN    :
5129     --  p_api_version      IN  NUMBER (required)
5130     --  API Version of this procedure
5131     --
5132     --  p_init_msg_list   IN  VARCHAR2 (optional)
5133     --    DEFAULT = FND_API.G_FALSE,
5134     --
5135     -- p_commit           IN  VARCHAR2 (optional)
5136     --     DEFAULT = FND_API.G_FALSE
5137     --
5138     --  p_validation_level IN  NUMBER (optional)
5139     --      DEFAULT = FND_API.G_VALID_LEVEL_FULL,
5140     --
5141     --  p_employee_id IN NUMBER (required)
5142     --  EmployeeID OF the counter
5143     --
5144     --  p_employee_name IN VARCHAR2 (optional - defaulted)
5145     --  default = NULL
5146     --  Name OF the counter
5147     --
5148     --  p_count_date IN DATE (required)
5149     --  DATE OF the COUNT
5150     --
5151     --     OUT   :
5152     --  X_return_status    OUT NUMBER
5153     --  Result of all the operations
5154     --
5155     --   x_msg_count        OUT NUMBER,
5156     --
5157     --   x_msg_data         OUT VARCHAR2,
5158     --
5159     --   X_ErrorCode        OUT NUMBER
5160     -- Version: Current Version 0.9
5161     --              Changed : Nothing
5162     --          No Previous Version 0.0
5163     --          Initial version 0.9
5164     -- Notes  : Note text
5165     -- END OF comments
5166     DECLARE
5167        --
5168        L_message_name VARCHAR2(100);
5169        --
5170        L_org INV_Validate.ORG;
5171        L_api_version CONSTANT NUMBER := 0.9;
5172        L_api_name CONSTANT VARCHAR2(30) := 'Validate_CDate_Counter';
5173        L_emp_id NUMBER := p_employee_id;
5174        L_emp_name VARCHAR2(60) := p_employee_name;
5175     BEGIN
5176        -- Standard start of API savepoint
5177        SAVEPOINT Validate_CDate_Counter;
5178        --
5179        -- Standard Call to check for call compatibility
5180        IF NOT FND_API.Compatible_API_Call(l_api_version
5181              , p_api_version
5182              , l_api_name
5183              , G_PKG_NAME) THEN
5184           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5185        END IF;
5186        --
5187        -- Initialize message list if p_init_msg_list is set to true
5188        IF FND_API.to_Boolean(p_init_msg_list) THEN
5189           FND_MSG_PUB.initialize;
5190        END IF;
5191        --
5192        -- Initialisize API return status to access
5193        x_return_status := FND_API.G_RET_STS_SUCCESS;
5194        x_errorcode := 0;
5195        --
5196        -- API body
5197        --
5198 IF (l_debug = 1) THEN
5199    mdebug('Process: In Validate_CDate_Counter call Validate Countdate');
5200 END IF;
5201        MTL_INV_VALIDATE_GRP.Validate_CountDate
5202        -- Prozedur
5203        (p_api_version => 0.9
5204           , x_return_status => x_return_status
5205           , x_msg_count => x_msg_count
5206           , x_msg_data => x_msg_data
5207           , x_errorcode => x_errorcode
5208           , p_count_date => p_count_date
5209        );
5210 IF (l_debug = 1) THEN
5211    MDEBUG( 'ValidateDate Stat '||to_char(x_errorcode)||'-'||x_return_status);
5212    mdebug('Process: In Validate_CDate_Counter call Validate Countdate Return='||x_return_status);
5213 END IF;
5214        --
5215        IF x_errorcode = 23 THEN
5216           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5217              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5218              , p_error_column_name => 'COUNT_DATE'
5219              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
5220              , p_message_name => 'INV_CCEOI_COUNT_DATE_FUTURE'
5221           );
5222           --
5223           RAISE FND_API.G_EXC_ERROR;
5224           --
5225        ELSIF x_errorcode = 59 THEN   -- New errorcode ( existing one )
5226           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5227              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5228              , p_error_column_name => 'COUNT_DATE'
5229              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
5230              , p_message_name => 'INV_COUNT_DATE_FUTURE'
5231           );
5232           --
5233 	  RAISE FND_API.G_EXC_ERROR;
5234        ELSIF x_errorcode = 24 THEN
5235           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5236              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5237              , p_error_column_name => 'COUNT_DATE'
5238              , p_error_table_name => 'MTL_CYCLE_COUNT_HEADERS'
5239              , p_message_name => 'INV_CCEOI_NO_OPEN_ADJ_PRD'
5240           );
5241           --
5242 	  RAISE FND_API.G_EXC_ERROR;
5243 
5244        ELSIF
5245           x_errorcode < 0 THEN
5246           -- Write INTO interface error TABLE
5247           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5248              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5249              , p_error_column_name => 'unexpected error'
5250              , p_error_table_name => 'unexpected error'
5251              , p_message_name => 'unexpected error'
5252           );
5253           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5254        END IF;
5255        --
5256 IF (l_debug = 1) THEN
5257    mdebug('Process: In Validate_CDate_Counter call Validate_Employee');
5258 END IF;
5259 /* Validate  API Implementation for Empoloyee validation */
5260           l_org.organization_id := MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.organization_id;
5261           --
5262           IF l_emp_id is null and l_emp_name is null then
5263              IF (l_debug = 1) THEN
5264                 mdebug('all null');
5265              END IF;
5266              x_errorcode := 25 ;
5267           ELSIF INV_Validate.Employee(l_emp_id,
5268                                       l_emp_name,
5269                                       l_emp_name,
5270                                       l_org
5271                                       ) = INV_Validate.T then
5272              MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID := l_emp_id;
5273              x_errorcode := 0;
5274           ELSE
5275              x_errorcode := 26;
5276           END IF;
5277 IF (l_debug = 1) THEN
5278    mdebug('Process: In Validate_CDate_Counter call Validate_Employee Return='||x_return_status);
5279    mdebug('Process: In Validate_CDate_Counter call Validate_Employee Code='||x_errorcode);
5280 END IF;
5281        --
5282        IF x_errorcode > 0 THEN
5283           IF x_errorcode = 25 THEN
5284              L_message_name := 'INV_CCEOI_NO_COUNTER';
5285           ELSIF
5286              x_errorcode = 26 THEN
5287 	     L_message_name := 'INV_CCEOI_INVALID_COUNTER';
5288 	  ELSIF x_errorcode = 101 THEN
5289 	     L_message_name := 'INV_CCEOI_NOT_UNIQUE_COUNTER';
5290           END IF;
5291           -- Write INTO interface error TABLE
5292           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5293              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5294              , p_error_column_name => 'EMPLOYEE_ID/NAME'
5295              , p_error_table_name => 'MTL_EMPLOYEES_CURRENT_VIEW'
5296              , p_message_name => L_message_name
5297           );
5298           --
5299           RAISE FND_API.G_EXC_ERROR;
5300        ELSIF
5301           x_errorcode < 0 THEN
5302           -- Write INTO interface error TABLE
5303           MTL_CCEOI_PROCESS_PVT.Insert_CCEOIError(
5304              p_cc_entry_interface_id => MTL_CCEOI_VAR_PVT.G_CC_ENTRY_INTERFACE_ID
5305              , p_error_column_name => 'unexpected error'
5306              , p_error_table_name => 'unexpected error'
5307              , p_message_name => 'unexpected error'
5308           );
5309           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5310        END IF;
5311        --
5312        -- END of API body
5313        -- Standard check of p_commit
5314        IF FND_API.to_Boolean(p_commit) THEN
5315           COMMIT;
5316        END IF;
5317        -- Standard call to get message count and if count is 1, get message info
5318        FND_MSG_PUB.Count_And_Get
5319        (p_count => x_msg_count
5320           , p_data => x_msg_data);
5321     EXCEPTION
5322        WHEN FND_API.G_EXC_ERROR THEN
5323        --
5324        x_return_status := FND_API.G_RET_STS_ERROR;
5325        --
5326        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5327           , p_data => x_msg_data);
5328        --
5329        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5330        --
5331        x_errorcode := -1;
5332        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5333        --
5334        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5335           , p_data => x_msg_data);
5336        --
5337        WHEN OTHERS THEN
5338        --
5339        x_errorcode := -1;
5340        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5341        --
5342        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5343           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
5344        END IF;
5345        --
5346        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5347           , p_data => x_msg_data);
5348     END;
5349   END;
5350   --
5351   -- .
5352   --
5353   -- Updates the application tables
5354   PROCEDURE Update_CCEntry(
5355   p_cycle_count_entry_id IN NUMBER )
5356   IS
5357     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
5358   BEGIN
5359     -- Start OF comments
5360     -- API name  : Update_CCEntry
5361     -- TYPE      : Public
5362     -- Pre-reqs  : None
5363     -- FUNCTION  :
5364     -- UPDATES THE CYCLE COUNT ENTRIES TABLE
5365     -- ITH VALUES FROM THE GLOBAL VARIABLES
5366     -- Parameters:
5367     --     IN    :
5368     -- p_cycle_count_entry_idc    IN  NUMBER (required)
5369     -- END OF comments
5370     DECLARE
5371       l_count_due_date DATE;
5372     BEGIN
5373 IF (l_debug = 1) THEN
5374    MDEBUG( 'Updating CC Entry Id '||to_char(p_cycle_count_entry_id));
5375    MDEBUG( 'Updating CC Entry Stat Cd'||to_char(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE));
5376    MDEBUG( 'Updating CC Entry emp id'||to_char(MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID));
5377    MDEBUG( 'Updating CC Entry CntDt'||to_char(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_CURRENT));
5378    MDEBUG( 'Updating CC Entry CntQty'||to_char(MTL_CCEOI_VAR_PVT.G_COUNT_Quantity));
5379    MDEBUG( 'Updating CC Entry CntQtyPrior'||to_char(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_QUANTITY_PRIOR));
5380 END IF;
5381 
5382 l_count_due_date :=
5383   nvl(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DUE_DATE,
5384   nvl(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_DUE_DATE,
5385   compute_count_due_date(sysdate)));
5386 
5387        UPDATE MTL_CYCLE_COUNT_ENTRIES
5388        SET
5389 	 last_update_date =
5390 	 sysdate
5391 	 , last_updated_by =
5392 	 MTL_CCEOI_VAR_PVT.G_UserID
5393 	 , last_update_login =
5394 	 MTL_CCEOI_VAR_PVT.G_LoginID
5395 	 , count_date_first =
5396 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_FIRST
5397 	 ,count_date_prior =
5398 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_PRIOR
5399           , count_date_current =
5400 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_DATE_CURRENT
5401 	 , counted_by_employee_id_first =
5402 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_FIRST
5403           , counted_by_employee_id_current=
5404 	 MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID
5405 	 , counted_by_employee_id_prior =
5406 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_PRIOR
5407 	  , counted_by_employee_id_dummy=
5408 	 MTL_CCEOI_VAR_PVT.G_EMPLOYEE_ID
5409 	  , count_uom_first =
5410 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_UOM_FIRST
5411 	 , count_uom_current=
5412 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_UOM_CURRENT
5413 	 , count_uom_prior=
5414 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_UOM_PRIOR
5415 	 , count_quantity_first =
5416 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_QUANTITY_FIRST
5417 	 , count_quantity_current=
5418 	 MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY
5419 	 , count_quantity_prior=
5420 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_QUANTITY_PRIOR
5421 	 , entry_status_code =
5422 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE
5423 	 , count_due_date =
5424 	    l_count_due_date
5425 	 , number_of_counts=
5426 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NUMBER_OF_COUNTS
5427 	 , locator_id =
5428 	 MTL_CCEOI_VAR_PVT.G_LOCATOR_ID
5429 	 , adjustment_quantity =
5430 	 --MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ADJUSTMENT_QUANTITY
5431 	 MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_QUANTITY
5432 	 , adjustment_date =
5433 	 MTL_CCEOI_VAR_PVT.G_COUNT_DATE
5434 	 , adjustment_amount =
5435 	 MTL_CCEOI_VAR_PVT.G_ADJUSTMENT_AMOUNT
5436           , inventory_adjustment_account=
5437             decode(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE, 5, MTL_CCEOI_VAR_PVT.G_ADJUST_ACCOUNT_ID, NULL)
5438           , approval_date =
5439            MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_DATE
5440           , approver_employee_id = null
5441 --	 decode( MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_DATE, null,
5442 --	 null,
5443 --	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNTED_BY_EMPLOYEE_ID_CURRENT)
5444           , revision=
5445           MTL_CCEOI_VAR_PVT.G_SKU_REC.revision
5446           , lot_number=
5447           MTL_CCEOI_VAR_PVT.G_SKU_REC.lot_number
5448           , lot_control =
5449 	 decode(MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_CONTROL_CODE, 1, null,
5450 	 MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_CONTROL_CODE)
5451 	 , system_quantity_first =
5452 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_FIRST
5453           , system_quantity_current=
5454           MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_CURRENT,
5455           system_quantity_prior=
5456 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SYSTEM_QUANTITY_PRIOR
5457 	 , reference_first =
5458 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.REFERENCE_FIRST
5459           , reference_current=
5460           MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.REFERENCE_CURRENT
5461           , reference_prior=
5462 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.REFERENCE_PRIOR
5463 	 , primary_uom_quantity_first =
5464 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.PRIMARY_UOM_QUANTITY_FIRST
5465           , primary_uom_quantity_prior=
5466          MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.PRIMARY_UOM_QUANTITY_PRIOR
5467           , primary_uom_quantity_current=
5468          MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.PRIMARY_UOM_QUANTITY_CURRENT
5469           , count_type_code =
5470           MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_TYPE_CODE
5471           , transaction_reason_id=
5472           MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.TRANSACTION_REASON_ID
5473           , request_id =
5474           MTL_CCEOI_VAR_PVT.G_RequestID
5475           , program_application_id=
5476           MTL_CCEOI_VAR_PVT.G_ProgramAppID
5477           , program_id =
5478           MTL_CCEOI_VAR_PVT.G_ProgramID
5479           , program_update_date =
5480           sysdate
5481           , approval_type =
5482           MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_TYPE
5483           , serial_number =
5484           MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER
5485           , serial_detail =
5486 	 decode(MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER, NULL,
5487 	 0,  -- put 0 instead of NULL to be comliant with existing form
5488 	 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SERIAL_DETAIL)
5489           , approval_condition =
5490 	 nvl(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_CONDITION,0)
5491 	 -- added nvl(x,0) to have the same output as forms
5492           , neg_adjustment_quantity=
5493           MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NEG_ADJUSTMENT_QUANTITY
5494           , neg_adjustment_amount =
5495           MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.NEG_ADJUSTMENT_AMOUNT
5496           , ITEM_UNIT_COST =
5497           MTL_CCEOI_VAR_PVT.G_ITEM_COST
5498 	  -- BEGIN INVCONV
5499 	  , Count_Secondary_Uom_First      = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Count_Secondary_Uom_First
5500 	  , Count_Secondary_Uom_Current    = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Count_Secondary_Uom_Current
5501 	  , Count_Secondary_Uom_Prior      = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Count_Secondary_Uom_Prior
5502 	  , Secondary_Uom_Quantity_First   = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Secondary_Uom_Quantity_First
5503 	  , Secondary_Uom_Quantity_Current = MTL_CCEOI_VAR_PVT.G_SECONDARY_COUNT_QUANTITY
5504 	  , Secondary_Uom_Quantity_Prior   = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Secondary_Uom_Quantity_Prior
5505 	  , Secondary_System_Qty_First     = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Secondary_System_Qty_First
5506 	  , Secondary_System_Qty_Current   = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Secondary_System_Qty_Current
5507 	  , Secondary_System_Qty_Prior     = MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.Secondary_System_Qty_Prior
5508 	  , Secondary_Adjustment_Quantity  = MTL_CCEOI_VAR_PVT.G_SEC_ADJUSTMENT_QUANTITY
5509 	  -- END INVCONV
5510        WHERE
5511           cycle_count_entry_id = P_cycle_count_entry_id;
5512 IF (l_debug = 1) THEN
5513    MDEBUG( 'End of Update CC entry');
5514 END IF;
5515     END;
5516   END;
5517 
5518   -- Processed the interface record
5519   -- This function will prepare record for being updated into
5520   -- mtl_cycle_count_entries and will also perform a transaction
5521   -- if necessary
5522   -- The logic which handles serial numbers is copied from INVATCEN.pld
5523   -- and will need further review/rewrite
5524   PROCEDURE Process_Data(
5525   p_api_version IN NUMBER ,
5526   p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
5527   p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
5528   p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
5529   x_return_status OUT NOCOPY VARCHAR2 ,
5530   x_msg_count OUT NOCOPY NUMBER ,
5531   x_msg_data OUT NOCOPY VARCHAR2 ,
5532   x_errorcode OUT NOCOPY NUMBER ,
5533   p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE,
5534   p_interface_rec IN MTL_CCEOI_VAR_PVT.INV_CCEOI_TYPE )
5535   IS
5536     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
5537   BEGIN
5538     -- Start OF comments
5539     -- API name  : Process_Data
5540     -- TYPE      : Private
5541     -- Pre-reqs  : None
5542     -- FUNCTION  :
5543     -- process data porcessed the interface RECORD according to the
5544     -- cycle COUNT entries form. this PROCEDURE can only be called
5545     -- BY the PROCEDURE MTL_CCEOI_PROCESS_PVT.Process_Data
5546     -- Parameters:
5547     --     IN    :
5548     --  p_api_version      IN  NUMBER (required)
5549     --  API Version of this procedure
5550     --
5551     --  p_init_msg_list   IN  VARCHAR2 (optional)
5552     --    DEFAULT = FND_API.G_FALSE,
5553     --
5554     -- p_commit           IN  VARCHAR2 (optional)
5555     --
5556     --     DEFAULT = FND_API.G_FALSE
5557     -- p_validation_level IN NUMBER (optional)
5558     --     DEFAULT = FND_API.G_VALID_LEVEL_FULL
5559     --  currently unused
5560     --
5561     --  p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE
5562     --  G_TRUE - skip any updates/inserts to any non-cc-interface tables
5563     --  G_FALSE - update any tables necessary
5564     --
5565     --  p_interface_rec MTL_CC_ENTRIES_INTERFACE%rowtype (required)
5566     --  interface RECORD parameter
5567     --
5568     --     OUT   :
5569     --  X_return_status    OUT NUMBER
5570     --  Result of all the operations
5571     --
5572     --   x_msg_count        OUT NUMBER,
5573     --
5574     --   x_msg_data         OUT VARCHAR2,
5575     --
5576     --   X_ErrorCode        OUT NUMBER
5577     -- Version: Current Version 0.9
5578     --              Changed : Nothing
5579     --          No Previous Version 0.0
5580     --          Initial version 0.9
5581     -- Notes  : Note text
5582     -- END OF comments
5583     DECLARE
5584        --
5585 
5586        L_success NUMBER := 1;
5587        --
5588        --
5589         CURSOR L_TolItemClass_Csr(cheader IN NUMBER,
5590                                   item in number) IS
5591            select
5592             i.APPROVAL_TOLERANCE_POSITIVE ITEM_TOL_POS
5593            ,i.APPROVAL_TOLERANCE_NEGATIVE ITEM_TOL_NEG
5594            ,c.APPROVAL_TOLERANCE_POSITIVE CLASS_TOL_POS
5595            ,c.APPROVAL_TOLERANCE_NEGATIVE CLASS_TOL_NEG
5596            ,c.COST_TOLERANCE_POSITIVE CLASS_COST_POS
5597            ,c.COST_TOLERANCE_NEGATIVE CLASS_COST_NEG
5598            FROM MTL_CYCLE_COUNT_ITEMS i
5599               , MTL_CYCLE_COUNT_CLASSES c
5600            WHERE i.cycle_count_Header_id = cheader
5601            AND i.inventory_item_id = item
5602            AND c.abc_class_id = i.abc_class_id
5603            AND c.cycle_count_header_id = i.cycle_count_Header_id;
5604        --
5605        L_api_version CONSTANT NUMBER := 0.9;
5606        L_api_name CONSTANT VARCHAR2(30) := 'Process_Data';
5607     BEGIN
5608 
5609        IF (l_debug = 1) THEN
5610           MDEBUG( 'Begin process:Count Qty '|| to_char(p_interface_rec.count_quantity));
5611        END IF;
5612 
5613        IF (l_debug = 1) THEN
5614           MDEBUG( 'Process Data: Begin ');
5615    MDEBUG( 'Item-CC header -> '||to_char(MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID)|| ' - '||to_char(MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID));
5616        END IF;
5617 
5618        -- Standard start of API savepoint
5619        SAVEPOINT Process_Data;
5620        --
5621        -- Standard Call to check for call compatibility
5622        IF NOT FND_API.Compatible_API_Call(l_api_version
5623              , p_api_version
5624              , l_api_name
5625              , G_PKG_NAME) THEN
5626           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5627        END IF;
5628        --
5629        -- Initialize message list if p_init_msg_list is set to true
5630        IF FND_API.to_Boolean(p_init_msg_list) THEN
5631           FND_MSG_PUB.initialize;
5632        END IF;
5633        --
5634        -- Initialisize API return status to access
5635        x_return_status := FND_API.G_RET_STS_SUCCESS;
5636        x_errorcode := 0;
5637        --
5638        -- API body
5639 IF (l_debug = 1) THEN
5640    MDEBUG('Process: In Process_Data');
5641 END IF;
5642 
5643        --
5644        -- zero cycle COUNT
5645        -- SET the current RECORD AND the first to current
5646        -- AND THEN SET the entr_status_code to =5 (completed)
5647        IF MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE = 4 THEN
5648           --
5649 IF (l_debug = 1) THEN
5650    MDEBUG( 'Process Data:  call Zero count');
5651 END IF;
5652           Zero_Count_Logic(
5653              p_reference => p_interface_rec.reference
5654              , p_primary_uom_quantity => p_interface_rec.primary_uom_quantity
5655           );
5656 
5657 
5658        ELSE
5659 	  -- non zero-count logic
5660 
5661 	  -- propagate count type code
5662 	  MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.COUNT_TYPE_CODE :=
5663 	    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.COUNT_TYPE_CODE;
5664 
5665           -- without serial control
5666           IF MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE
5667              IN(1, 6) THEN
5668 IF (l_debug = 1) THEN
5669    MDEBUG( 'Process Data: without serial');
5670    MDEBUG( to_char(MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID)||' - '||to_char(MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID));
5671 END IF;
5672              --
5673 
5674                 For c_rec in L_TolItemClass_Csr (
5675                     MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID,
5676                     MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID)
5677                 LOOP
5678 
5679                    --
5680 IF (l_debug = 1) THEN
5681    MDEBUG( 'Process Data: W/o Sl# Calculate_tol ');
5682 END IF;
5683 
5684                    Calculate_Tolerance(
5685                     p_item_app_tol_pos => c_rec.ITEM_TOL_POS
5686                    , p_item_app_tol_neg => c_rec.ITEM_TOL_NEG
5687                    , p_class_app_tol_pos => c_rec.CLASS_TOL_POS
5688                    , p_class_app_tol_neg => c_rec.CLASS_TOL_NEG
5689                    , p_class_cost_tol_pos => c_rec.CLASS_COST_POS
5690                    , p_class_cost_tol_neg => c_rec.CLASS_COST_NEG
5691                    , p_head_app_tol_pos =>
5692                    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.APPROVAL_TOLERANCE_POSITIVE
5693                    , p_head_app_tol_neg =>
5694                    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.APPROVAL_TOLERANCE_NEGATIVE
5695                    , p_head_cost_tol_pos =>
5696                    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.COST_TOLERANCE_POSITIVE
5697                    , p_head_cost_tol_neg =>
5698                    MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.COST_TOLERANCE_NEGATIVE
5699                    , p_interface_rec => p_interface_rec
5700                    , p_simulate =>  p_simulate
5701                    );
5702                END LOOP;
5703              --
5704              -- with serial control
5705 	  ELSIF MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE IN(2, 5)
5706 	  THEN
5707 	     IF (l_debug = 1) THEN
5708    	     MDEBUG( 'Process Data: with serial'||mtl_cceoi_var_pvt.g_sku_rec.serial_number);
5709 	     END IF;
5710 
5711              --
5712              -- One ROW per request
5713 
5714              IF(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.serial_count_option = 2)
5715              THEN
5716 IF (l_debug = 1) THEN
5717    MDEBUG( 'Process Data: with serial one per request');
5718 END IF;
5719 
5720                 --
5721                 MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SERIAL_DETAIL:= 2;
5722                 --
5723 
5724 		IF MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY <> MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY THEN
5725 		   IF (l_debug = 1) THEN
5726    		   MDEBUG( 'Process Data: Not equal sys and count qties');
5727    		   MDEBUG( 'Process Data: level '||to_char(p_validation_level));
5728 		   END IF;
5729       --
5730 		   IF NOT FND_API.to_Boolean(p_simulate) THEN
5731 		      --
5732 		      IF (l_debug = 1) THEN
5733    		      MDEBUG( 'Process Data:  mark RECORD as locked ');
5734    		      MDEBUG( 'Process Data: Sl# '||p_interface_rec.serial_number);
5735    		      MDEBUG( 'Process Data: Item# '||to_char(MTL_CCEOI_VAR_PVT.G_inventory_item_id));
5736    		      MDEBUG( 'Process Data: Org '|| to_char(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORGANIZATION_ID));
5737    		      MDEBUG( 'Process Data: CCHid '|| to_char(MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID));
5738    		      MDEBUG( 'Process Data: CCEid '|| to_char(MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.CYCLE_COUNT_ENTRY_ID));
5739 		      END IF;
5740 
5741 		      -- mark RECORD as locked
5742 		      serial_check.inv_mark_serial(
5743 			from_serial_number => p_interface_rec.serial_number
5744 			, to_serial_number => p_interface_rec.serial_number
5745 			, item_id => MTL_CCEOI_VAR_PVT.G_inventory_item_id
5746 			, org_id =>  MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORGANIZATION_ID
5747 			, hdr_id => MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID
5748 			, temp_id => MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.CYCLE_COUNT_ENTRY_ID
5749 			, lot_temp_id => NULL
5750 			, success => L_success);
5751 		      --
5752 		      IF(L_success < 0) THEN
5753                       --
5754 			 IF (l_debug = 1) THEN
5755    			 MDEBUG( 'Process Data: INV_SERIAL_UNAVAILABLE ');
5756 			 END IF;
5757 			 FND_MESSAGE.SET_NAME('INV', 'INV_SERIAL_UNAVAILABLE');
5758 			 FND_MESSAGE.SET_TOKEN('FIRST-SERIAL',
5759 			   p_interface_rec.serial_number);
5760 			 FND_MSG_PUB.Add;
5761 			 --x_errorcode := -1;
5762 			 x_errorcode := 70;
5763 			 --RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5764 			 RAISE FND_API.G_EXC_ERROR;
5765                       --
5766 		      END IF;
5767 		   END IF;
5768                    --
5769                 END IF;
5770                 --
5771 		IF (l_debug = 1) THEN
5772    		MDEBUG( 'Process Data:serial one per request call Existing_Serial');
5773    		mdebug('Process: In Process_Data with serial one per request call Existing_Serial');
5774 		END IF;
5775                 Existing_Serial_Number(
5776                    p_reference => p_interface_rec.reference
5777                    , p_primary_uom_quantity=> p_interface_rec.primary_uom_quantity
5778                    , p_count_uom => p_interface_rec.count_uom
5779                    , p_subinventory =>p_interface_rec.subinventory
5780                    , p_lot_number => p_interface_rec.lot_number
5781                    , p_lot_expiration => MTL_CCEOI_VAR_PVT.G_SKU_REC.EXPIRATION_DATE
5782 				   , p_revision =>  p_interface_rec.revision
5783                    , p_transaction_reason_id => p_interface_rec.transaction_reason_id
5784                    , p_serial_number => p_interface_rec.serial_number
5785                    , p_transaction_process_mode => p_interface_rec.process_mode
5786                    , p_simulate => p_simulate
5787                 );
5788 
5789                 --
5790                 -- IF RECORD completed processed OR marked FOR recounting
5791                 IF(MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE
5792                       IN(3, 5)) THEN
5793                    --
5794 IF (l_debug = 1) THEN
5795    MDEBUG( 'Process : with serial one per request Completed');
5796 END IF;
5797 
5798 IF (l_debug = 1) THEN
5799    mdebug('Process: In Process_Data with serial one per request Completed');
5800 END IF;
5801 
5802                 --   if p_validation_level = 1 THEN
5803                    if p_simulate = FND_API.G_FALSE THEN
5804                    serial_check.inv_unmark_serial(
5805                       from_serial_number => p_interface_rec.serial_number
5806                       , to_serial_number => p_interface_rec.serial_number
5807                       , serial_code => MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE
5808                       , hdr_id => MTL_CCEOI_VAR_PVT.G_CC_HEADER_ID
5809                       , temp_id =>  MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.CYCLE_COUNT_ENTRY_ID
5810 		      , lot_temp_id => NULL);
5811                       --
5812 
5813                    END IF;
5814                    --
5815                 END IF;
5816              END IF;
5817           END IF;
5818        END IF;
5819        --
5820        -- END of API body
5821        -- Standard check of p_commit
5822        IF FND_API.to_Boolean(p_commit) THEN
5823           COMMIT;
5824        END IF;
5825        -- Standard call to get message count and if count is 1, get message info
5826        FND_MSG_PUB.Count_And_Get
5827        (p_count => x_msg_count
5828           , p_data => x_msg_data);
5829     EXCEPTION
5830        WHEN FND_API.G_EXC_ERROR THEN
5831        --
5832        ROLLBACK TO Process_Data;
5833        --
5834        x_return_status := FND_API.G_RET_STS_ERROR;
5835        --
5836        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5837           , p_data => x_msg_data);
5838        --
5839        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5840        --
5841        ROLLBACK TO Process_Data;
5842        --
5843        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5844        --
5845        x_errorcode := -1;
5846        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5847           , p_data => x_msg_data);
5848        --
5849        WHEN OTHERS THEN
5850        --
5851        ROLLBACK TO Process_Data;
5852        --
5853        x_errorcode := -1;
5854        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5855        --
5856        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5857           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
5858        END IF;
5859        --
5860        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count
5861           , p_data => x_msg_data);
5862     END;
5863   END;
5864   --
5865   --
5866   -- updates interface record information
5867   PROCEDURE Update_CCIEntry(
5868   p_interface_rec IN MTL_CCEOI_VAR_PVT.INV_CCEOI_TYPE ,
5869   x_return_status OUT NOCOPY VARCHAR2 )
5870   IS
5871     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
5872   BEGIN
5873     -- Start OF comments
5874     -- API name  : Update_CCIEntry
5875     -- TYPE      : Private
5876     -- Pre-reqs  : None
5877     -- FUNCTION  :
5878     -- this PROCEDURE will UPDATE all columns OF the interface TABLE
5879     -- with the VALUES OF the parameter p_interface_rec. IF this RECORD
5880     -- have p_interface_rec.cycle_count_entry_id IS NOT NULL that means
5881     -- that the RECORD IS exported, THEN only the unexported columns
5882     -- can be updated.
5883     -- Parameters:
5884     --     IN    :
5885     --  p_interface_rec MTL_CC_ENTRIES_INTERFACE%ROWTYPE (required)
5886     --  the interface RECORD
5887     --
5888     --     OUT   :
5889     --  X_return_status    OUT NUMBER
5890     --  Result of all the operations
5891     --
5892     -- Version: Current Version 0.9
5893     --              Changed : Nothing
5894     --          No Previous Version 0.0
5895     --          Initial version 0.9
5896     -- Notes  : Note text
5897     -- END OF comments
5898     DECLARE
5899        dummy integer;
5900 
5901     BEGIN
5902        X_return_status := FND_API.G_RET_STS_SUCCESS;
5903        -- update RECORD to be successful
5904        --
5905     BEGIN
5906        --
5907        -- An exported RECORD
5908        IF (l_debug = 1) THEN
5909           mdebug('updating iface rcord with cc_entry_interface_id='||p_interface_rec.cc_entry_interface_id);
5910        END IF;
5911        IF p_interface_rec.cycle_count_entry_id IS NOT NULL THEN
5912           --
5913           --
5914           UPDATE MTL_CC_ENTRIES_INTERFACE
5915           SET
5916              last_update_date = sysdate
5917              , last_updated_by = MTL_CCEOI_VAR_PVT.G_UserID
5918              , last_update_login = MTL_CCEOI_VAR_PVT.G_LoginID
5919              , request_id = MTL_CCEOI_VAR_PVT.G_RequestID
5920              , program_application_id = MTL_CCEOI_VAR_PVT.G_ProgramAppID
5921              , program_id = MTL_CCEOI_VAR_PVT.G_ProgramID
5922              , program_update_date = sysdate
5923              , primary_uom_quantity = p_interface_rec.primary_uom_quantity
5924              , count_uom = p_interface_rec.count_uom
5925              , count_unit_of_measure = p_interface_rec.count_unit_of_measure
5926              , count_quantity = p_interface_rec.count_quantity
5927              , count_date =p_interface_rec.count_date
5928              , employee_id = p_interface_rec.employee_id
5929              , employee_full_name = p_interface_rec.employee_full_name
5930              , reference = p_interface_rec.reference
5931              , transaction_reason_id = p_interface_rec.transaction_reason_id
5932              , transaction_reason = p_interface_rec.transaction_reason
5933              , project_id = p_interface_rec.project_id
5934              , task_id = p_interface_rec.task_id
5935              --This code modification done for the bug2311404 by aapaul
5936 	     , system_quantity = decode(MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY,NULL,
5937                                         system_quantity,MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY)
5938 	     , lock_flag = p_interface_rec.lock_flag
5939              -- BEGIN INVCONV
5940              , secondary_uom = p_interface_rec.secondary_uom
5941              , secondary_unit_of_measure = p_interface_rec.secondary_unit_of_measure
5942              , secondary_count_quantity = p_interface_rec.secondary_count_quantity
5943 	     , secondary_system_quantity = decode(MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY,NULL,
5944                              secondary_system_quantity,MTL_CCEOI_VAR_PVT.G_SECONDARY_SYSTEM_QUANTITY)
5945              -- END INVCONV
5946           WHERE
5947              cc_entry_interface_id = p_interface_rec.cc_entry_interface_id;
5948           --
5949        ELSE
5950 	  --
5951           UPDATE MTL_CC_ENTRIES_INTERFACE
5952           SET  cost_group_name = p_interface_rec.cost_group_name
5953              , cost_group_id = p_interface_rec.cost_group_id
5954              , parent_lpn_id = p_interface_rec.parent_lpn_id
5955              , outermost_lpn_id = p_interface_rec.outermost_lpn_id
5956              , organization_id = p_interface_rec.organization_id
5957              , last_update_date = sysdate
5958              , last_updated_by = MTL_CCEOI_VAR_PVT.G_UserID
5959              , last_update_login = MTL_CCEOI_VAR_PVT.G_LoginID
5960              , action_code = p_interface_rec.action_code
5961              , cycle_count_header_id = p_interface_rec.cycle_count_header_id
5962              , cycle_count_header_name = p_interface_rec.cycle_count_header_name
5963              , count_list_sequence = p_interface_rec.count_list_sequence
5964              , inventory_item_id = p_interface_rec.inventory_item_id
5965     --         , inventory_item = p_interface_rec.inventory_item
5966              , item_segment1 = p_interface_rec.item_segment1
5967              , item_segment2 = p_interface_rec.item_segment2
5968              , item_segment3 = p_interface_rec.item_segment3
5969              , item_segment4 = p_interface_rec.item_segment4
5970              , item_segment5 = p_interface_rec.item_segment5
5971              , item_segment6 = p_interface_rec.item_segment6
5972              , item_segment7 = p_interface_rec.item_segment7
5973              , item_segment8 = p_interface_rec.item_segment8
5974              , item_segment9 = p_interface_rec.item_segment9
5975              , item_segment10 = p_interface_rec.item_segment10
5976              , item_segment11 = p_interface_rec.item_segment11
5977              , item_segment12 = p_interface_rec.item_segment12
5978              , item_segment13 = p_interface_rec.item_segment13
5979              , item_segment14 = p_interface_rec.item_segment14
5980              , item_segment15 = p_interface_rec.item_segment15
5981              , item_segment16 = p_interface_rec.item_segment16
5982              , item_segment17 = p_interface_rec.item_segment17
5983              , item_segment18 =p_interface_rec.item_segment18
5984              , item_segment19 = p_interface_rec.item_segment19
5985              , item_segment20 = p_interface_rec.item_segment20
5986              , revision = p_interface_rec.revision
5987              , subinventory = p_interface_rec.subinventory
5988              , locator_id = p_interface_rec.locator_id
5989     --         , locator = p_interface_rec.locator
5990              , locator_segment1 = p_interface_rec.locator_segment1
5991              , locator_segment2 = p_interface_rec.locator_segment2
5992              , locator_segment3 = p_interface_rec.locator_segment3
5993              , locator_segment4 = p_interface_rec.locator_segment4
5994              , locator_segment5 = p_interface_rec.locator_segment5
5995              , locator_segment6 = p_interface_rec.locator_segment6
5996              , locator_segment7 = p_interface_rec.locator_segment7
5997              , locator_segment8 = p_interface_rec.locator_segment8
5998              , locator_segment9 = p_interface_rec.locator_segment9
5999              , locator_segment10 = p_interface_rec.locator_segment10
6000              , locator_segment11 = p_interface_rec.locator_segment11
6001              , locator_segment12 = p_interface_rec.locator_segment12
6002              , locator_segment13 = p_interface_rec.locator_segment13
6003              , locator_segment14 = p_interface_rec.locator_segment14
6004              , locator_segment15 = p_interface_rec.locator_segment15
6005              , locator_segment16 = p_interface_rec.locator_segment16
6006              , locator_segment17 = p_interface_rec.locator_segment17
6007              , locator_segment18 = p_interface_rec.locator_segment18
6008              , locator_segment19 = p_interface_rec.locator_segment19
6009              , locator_segment20 = p_interface_rec.locator_segment20
6010              , lot_number = p_interface_rec.lot_number
6011              , serial_number = p_interface_rec.serial_number
6012              , primary_uom_quantity = p_interface_rec.primary_uom_quantity
6013              , count_uom = p_interface_rec.count_uom
6014              , count_unit_of_measure = p_interface_rec.count_unit_of_measure
6015              , count_quantity = p_interface_rec.count_quantity
6016              , adjustment_account_id = p_interface_rec.adjustment_account_id
6017     --         , adjustment_account = p_interface_rec.adjustment_account
6018              , account_segment1 = p_interface_rec.account_segment1
6019              , account_segment2 = p_interface_rec.account_segment2
6020              , account_segment3 = p_interface_rec.account_segment3
6021              , account_segment4 = p_interface_rec.account_segment4
6022              , account_segment5 = p_interface_rec.account_segment5
6023              , account_segment6 = p_interface_rec.account_segment6
6024              , account_segment7 = p_interface_rec.account_segment7
6025              , account_segment8 = p_interface_rec.account_segment8
6026              , account_segment9 = p_interface_rec.account_segment9
6027              , account_segment10 = p_interface_rec.account_segment10
6028              , account_segment11 = p_interface_rec.account_segment11
6029              , account_segment12 = p_interface_rec.account_segment12
6030              , account_segment13 = p_interface_rec.account_segment13
6031              , account_segment14 = p_interface_rec.account_segment14
6032              , account_segment15 = p_interface_rec.account_segment15
6033              , account_segment16 = p_interface_rec.account_segment16
6034              , account_segment17 = p_interface_rec.account_segment17
6035              , account_segment18 = p_interface_rec.account_segment18
6036              , account_segment19 = p_interface_rec.account_segment19
6037              , account_segment20 = p_interface_rec.account_segment20
6038              , account_segment21 = p_interface_rec.account_segment21
6039              , account_segment22 = p_interface_rec.account_segment22
6040              , account_segment23 = p_interface_rec.account_segment23
6041              , account_segment24 = p_interface_rec.account_segment24
6042              , account_segment25 = p_interface_rec.account_segment25
6043              , account_segment26 = p_interface_rec.account_segment26
6044              , account_segment27 = p_interface_rec.account_segment27
6045              , account_segment28 = p_interface_rec.account_segment28
6046              , account_segment29 = p_interface_rec.account_segment29
6047              , account_segment30 = p_interface_rec.account_segment30
6048              , count_date =p_interface_rec.count_date
6049              , employee_id = p_interface_rec.employee_id
6050              , employee_full_name = p_interface_rec.employee_full_name
6051              , reference = p_interface_rec.reference
6052              , transaction_reason_id = p_interface_rec.transaction_reason_id
6053              , transaction_reason = p_interface_rec.transaction_reason
6054              , request_id = MTL_CCEOI_VAR_PVT.G_RequestID
6055              , program_application_id = MTL_CCEOI_VAR_PVT.G_ProgramAppID
6056              , program_id = MTL_CCEOI_VAR_PVT.G_ProgramID
6057              , program_update_date = sysdate
6058              , attribute_category = p_interface_rec.attribute_category
6059              , attribute1 = p_interface_rec.attribute1
6060              , attribute2 = p_interface_rec.attribute2
6061              , attribute3 = p_interface_rec.attribute3
6062              , attribute4 = p_interface_rec.attribute4
6063              , attribute5 = p_interface_rec.attribute5
6064              , attribute6 = p_interface_rec.attribute6
6065              , attribute7 = p_interface_rec.attribute7
6066              , attribute8 = p_interface_rec.attribute8
6067              , attribute9 = p_interface_rec.attribute9
6068              , attribute10 = p_interface_rec.attribute10
6069              , attribute11 = p_interface_rec.attribute11
6070              , attribute12 = p_interface_rec.attribute12
6071              , attribute13 = p_interface_rec.attribute13
6072              , attribute14 = p_interface_rec.attribute14
6073              , attribute15 = p_interface_rec.attribute15
6074              , project_id = p_interface_rec.project_id
6075              , task_id = p_interface_rec.task_id
6076 	    , lock_flag = p_interface_rec.lock_flag
6077              -- BEGIN INVCONV
6078              , secondary_uom = p_interface_rec.secondary_uom
6079              , secondary_unit_of_measure = p_interface_rec.secondary_unit_of_measure
6080              , secondary_count_quantity = p_interface_rec.secondary_count_quantity
6081              -- END INVCONV
6082           WHERE
6083              cc_entry_interface_id = p_interface_rec.cc_entry_interface_id;
6084           --
6085        END IF;
6086     EXCEPTION
6087        WHEN OTHERS THEN
6088        X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6089     END;
6090     END;
6091   END;
6092 
6093 
6094 
6095 
6096   --
6097   -- calls mtl_serial_check.inv_qtybetwn
6098   -- to validate serial location and check whether a serial number
6099   -- can be issued or received
6100   --
6101   -- pre: it is necessary to call all validation routines that would have
6102   -- computed system quantity, count quantity and derive internal variables
6103   -- containing item, org, subinv, locator, etc.
6104   --
6105   -- post:
6106   --
6107        FUNCTION check_serial_location(
6108 				      P_issue_receipt IN VARCHAR2,
6109 				      p_simulate IN VARCHAR2 DEFAULT FND_API.G_FALSE )
6110 				      return BOOLEAN
6111   IS
6112      l_return_status VARCHAR2(1);
6113      l_errorcode NUMBER;
6114      l_msg_data VARCHAR2(240);
6115      l_msg_count NUMBER;
6116      l_serial_number_type NUMBER;
6117      l_prefix VARCHAR2(30);
6118      l_quantity NUMBER;
6119 
6120     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6121   BEGIN
6122      SELECT SERIAL_NUMBER_TYPE
6123        INTO l_serial_number_type
6124        FROM  MTL_PARAMETERS
6125        WHERE organization_id = MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORGANIZATION_ID;
6126 
6127      mtl_serial_check.inv_qtybetwn(
6128        p_api_version => 0.9,
6129        x_errorcode => l_errorcode,
6130        x_return_status => l_return_status,
6131        x_msg_count => l_msg_count,
6132        x_msg_data => l_msg_data,
6133        p_item_id => MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID,
6134        p_organization_id => MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORGANIZATION_ID,
6135        p_subinventory => MTL_CCEOI_VAR_PVT.G_SUBINVENTORY,
6136        p_locator_id => MTL_CCEOI_VAR_PVT.G_LOCATOR_ID,
6137        p_revision => MTL_CCEOI_VAR_PVT.G_SKU_REC.REVISION,
6138        p_lot_number =>  MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_NUMBER,
6139        p_from_serial_number => MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER,
6140        p_to_serial_number => MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER,
6141        p_serial_control => MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE,
6142        p_serial_number_type => l_serial_number_type,
6143        p_transaction_action_id => 4,
6144        p_transaction_source_type_id => 9,
6145        x_prefix => l_prefix,
6146        x_quantity => l_quantity,
6147        p_receipt_issue_flag => p_issue_receipt,
6148        p_simulate => p_simulate);
6149 
6150 
6151      if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
6152 	return (FALSE);
6153      end if;
6154 
6155 
6156      return (TRUE);
6157   end;
6158 
6159        /*
6160        u1 VARCHAR2(30);
6161       u2 VARCHAR2(30);
6162       u3 NUMBER;
6163       u4 VARCHAR2(30);
6164       u5 NUMBER;
6165       u6 NUMBER;
6166       u7  NUMBER;
6167       u8 NUMBER;
6168       u9 NUMBER;
6169       u10 NUMBER;
6170       u11 VARCHAR2(3);
6171       u12 VARCHAR2(30);
6172       u13 VARCHAR2(10);
6173       u14 NUMBER;
6174       u15 VARCHAR2(1);
6175       L_serial_count    NUMBER;
6176       --
6177       v_serial_count_option number  := MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.SERIAL_COUNT_OPTION ;
6178       v_serial_number_type number := 1;
6179       v_org_id number := MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.ORGANIZATION_ID;
6180       v_serial_number VARCHAR2(30):= MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER ;
6181 
6182       v_serial_detail number := MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.SERIAL_DETAIL;
6183       v_serial_discrepancy number := MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.SERIAL_DISCREPANCY_OPTION;
6184       v_item_id number := MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID ;
6185       v_subinv varchar2(10):= MTL_CCEOI_VAR_PVT.G_SUBINVENTORY;
6186       v_revision varchar2(3) := MTL_CCEOI_VAR_PVT.G_SKU_REC.REVISION;
6187 -- Increased lot size to 80 Char - Mercy Thomas - B4625329
6188       v_lot_number VARCHAR2(80):= MTL_CCEOI_VAR_PVT.G_SKU_REC.LOT_NUMBER;
6189       v_msn_serial_number varchar2(30);
6190       v_msn_item_id number;
6191       v_msn_org_id number;
6192       v_msn_subinv varchar2(10);
6193       v_msn_lot_number number;
6194       v_msn_locator_id number;
6195       v_msn_revision varchar2(3);
6196       v_current_status number;
6197       --
6198       P_api_version NUMBER := 0.9;
6199       P_INIT_MSG_LIST               VARCHAR2(30) DEFAULT FND_API.G_FALSE;
6200       P_COMMIT                      VARCHAR2(30) DEFAULT FND_API.G_FALSE;
6201       P_VALIDATION_LEVEL            NUMBER := 1;
6202     --  P_VALIDATION_LEVEL            NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL;
6203       X_RETURN_STATUS               VARCHAR2(90);
6204       X_MSG_COUNT                   NUMBER;
6205       X_MSG_DATA                    VARCHAR2(90);
6206       X_ERRORCODE                   NUMBER;
6207       --
6208       L_serial_status BOOLEAN := TRUE;
6209       L_ret_value BOOLEAN := TRUE ;
6210   BEGIN
6211 IF (l_debug = 1) THEN
6212    MDEBUG( 'Process- witihin check-serial');
6213 END IF;
6214    IF  (MTL_CCEOI_VAR_PVT.G_SYSTEM_QUANTITY  = 1 AND MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY = 1
6215        AND  MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.SERIAL_COUNT_OPTION = 2) then
6216         L_ret_value := TRUE;
6217    else
6218         if(v_org_id IS NOT NULL) then
6219              SELECT SERIAL_NUMBER_TYPE
6220                INTO v_serial_number_type
6221                FROM  MTL_PARAMETERS
6222               WHERE  ORGANIZATION_ID = v_org_id;
6223         end if;
6224         u1 := v_serial_number ;
6225         u2 := v_serial_number ;
6226         u3 := MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.SYSTEM_QUANTITY_CURRENT;
6227         u4 := NULL;
6228         u5 := v_item_id;
6229         u6 := v_org_id;
6230         u7 := v_serial_number_type;
6231         u8 := MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_ENTRY_REC.CYCLE_COUNT_ENTRY_ID;
6232         u9 := to_char(9);
6233         u10:= MTL_CCEOI_VAR_PVT.G_SKU_REC.SERIAL_NUMBER_CONTROL_CODE;
6234         u11:= v_revision;
6235         u12:= v_lot_number;
6236         u13:= v_subinv;
6237         u14:= MTL_CCEOI_VAR_PVT.G_LOCATOR_ID;
6238         u15:= P_issue_receipt;
6239         --
6240 IF (l_debug = 1) THEN
6241    MDEBUG( 'Process- within serial no type ='||to_char(u7));
6242    MDEBUG( 'Process- within item ='||to_char(u5));
6243    MDEBUG( 'Process- within org ='||to_char(u6));
6244    MDEBUG( 'Process- within SerlNoCtrlCd ='||to_char(u10));
6245    MDEBUG( 'Process- within Locator ='||to_char(u14));
6246    MDEBUG( 'Process- within serial  ='||u1);
6247    MDEBUG( 'Process- within Lot  ='||u12);
6248    MDEBUG( 'Process- within rev  ='||u11);
6249    MDEBUG( 'Process- within Rec-Issue  ='||u15);
6250    MDEBUG( 'Process- within subinv  ='||u13);
6251    MDEBUG( 'Process- within check-serial before call qtybetwn');
6252 END IF;
6253 --
6254 --
6255         MTL_SERIAL_CHECK.INV_QTYBETWN
6256           ( P_API_VERSION=>p_api_version ,
6257             P_INIT_MSG_LIST =>p_init_msg_list,
6258             P_COMMIT        =>p_commit,
6259             P_VALIDATION_LEVEL =>p_validation_level,
6260             X_RETURN_STATUS    =>x_return_status,
6261             X_MSG_COUNT        =>x_msg_count,
6262             X_MSG_DATA         =>x_msg_data,
6263             X_ERRORCODE       =>x_errorcode,
6264             P_FROM_SERIAL_NUMBER=>u1,
6265             P_TO_SERIAL_NUMBER =>u2,
6266             P_QUANTITY         =>u3,
6267             P_PREFIX           =>u4,
6268             P_ITEM_ID          =>u5,
6269             P_ORGANIZATION_ID  =>u6,
6270             P_SERIAL_NUMBER_TYPE=>u7,
6271             P_TRANSACTION_ACTION_ID =>u8,
6272             P_TRANSACTION_SOURCE_TYPE_ID=>u9,
6273             P_SERIAL_CONTROL           =>u10,
6274             P_REVISION                 =>u11,
6275             P_LOT_NUMBER               =>u12,
6276             P_SUBINVENTORY             =>u13,
6277             P_LOCATOR_ID               =>u14,
6278             P_RECEIPT_ISSUE_FLAG       =>u15,
6279             P_VALIDATE => 'Y'
6280          );
6281       --L_serial_status := MTL_INV_UTIL_GRP.CHECK_SERIAL_NUMBER_LOCATION (u1,u5,u6,u7,u10,u11,u12,u13,u14,u15);
6282 --
6283 
6284 IF (l_debug = 1) THEN
6285    MDEBUG( 'Process- within check-serial after call qtybetwn='||x_return_status);
6286 END IF;
6287 
6288           if (x_return_status <> 'S' AND P_issue_receipt = 'R') then
6289             SELECT COUNT(*)
6290               INTO L_serial_count
6291               FROM MTL_SERIAL_NUMBERS
6292              WHERE SERIAL_NUMBER = v_serial_number AND
6293                    INVENTORY_ITEM_ID = v_item_id   AND
6294                    CURRENT_ORGANIZATION_ID = v_org_id   AND
6295                    CURRENT_STATUS = 3;
6296             if(L_serial_count = 1 AND v_serial_discrepancy = 1 ) then
6297                MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.APPROVAL_CONDITION := 1;
6298                MTL_CCEOI_VAR_PVT.G_CC_ENTRY_REC_TMP.ENTRY_STATUS_CODE := 2;
6299 	       fnd_message.set_name('INV', 'INV_CC_SERIAL_MULTI_TRANSACT2');
6300 	       fnd_message.set_token('SERIAL', v_serial_number);
6301 	       fnd_msg_pub.add;
6302 
6303 	       L_ret_value := TRUE;
6304             else
6305 	       IF (l_debug = 1) THEN
6306    	       MDEBUG( 'Process- within check-serial-1-INV_CC_SERIAL_DISCREPANCY' );
6307 	       END IF;
6308 	       fnd_message.set_name('INV', 'INV_CC_SERIAL_DISCREPANCY');
6309 	       fnd_msg_pub.add;
6310 
6311 	       L_ret_value := FALSE;
6312             end if;
6313          elsif x_return_status <> 'S' then
6314 IF (l_debug = 1) THEN
6315    MDEBUG( 'Process- within check-serial-2-INV_CC_SERIAL_DISCREPANCY' );
6316 END IF;
6317 	    fnd_message.set_name('INV', 'INV_CC_SERIAL_DISCREPANCY');
6318 	    fnd_msg_pub.add;
6319            L_ret_value := FALSE;
6320          end if;
6321     end if;
6322     return (L_ret_value);
6323   END ;
6324   --
6325   */
6326 
6327 
6328 PROCEDURE DELETE_RESERVATION (
6329   p_subinventory IN VARCHAR2 ,
6330   p_lot_number IN VARCHAR2 ,
6331   p_revision IN VARCHAR2
6332 )
6333 IS
6334   l_mtl_reservation_rec     INV_RESERVATION_GLOBAL.MTL_RESERVATION_REC_TYPE
6335                             :=INV_CC_RESERVATIONS_PVT.Define_Reserv_Rec_Type;
6336   l_init_msg_lst            varchar2(1);
6337   l_error_code              NUMBER;
6338   l_return_status           VARCHAR2(1);
6339   l_msg_count               NUMBER;
6340   l_msg_data                VARCHAR2(240);
6341   lmsg                      varchar2(2000);
6342     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
6343 BEGIN
6344   /* passing input variable */
6345   /* delete only cycle count reservation */
6346    l_mtl_reservation_rec.demand_source_type_id := 9;
6347    l_mtl_reservation_rec.organization_id := MTL_CCEOI_VAR_PVT.G_CYCLE_COUNT_HEADER_REC.organization_id;
6348    l_mtl_reservation_rec.inventory_item_id := MTL_CCEOI_VAR_PVT.G_INVENTORY_ITEM_ID;
6349    l_mtl_reservation_rec.subinventory_code := p_subinventory;
6350    l_mtl_reservation_rec.revision := p_revision;
6351    l_mtl_reservation_rec.locator_id := MTL_CCEOI_VAR_PVT.G_LOCATOR_ID;
6352    l_mtl_reservation_rec.lot_number := p_lot_number;
6353    l_mtl_reservation_rec.lpn_id := MTL_CCEOI_VAR_PVT.G_LPN_ID;
6354    --
6355    INV_CC_RESERVATIONS_PVT.Delete_All_Reservation
6356    (
6357       p_api_version_number    => 1.0
6358    ,  p_init_msg_lst          => l_init_msg_lst
6359    ,  p_mtl_reservation_rec   => l_mtl_reservation_rec
6360    ,  x_error_code            => l_error_code
6361    ,  x_return_status         => l_return_status
6362    ,  x_msg_count             => l_msg_count
6363    ,  x_msg_data              => l_msg_data
6364    );
6365   IF l_return_status <> 'S' then
6366      IF (l_debug = 1) THEN
6367         mdebug('error in delete all reservations');
6368      END IF;
6369      --FND_MESSAGE.ERROR;
6370      --RAISE FORM_TRIGGER_FAILURE;
6371   END IF;
6372 END DELETE_RESERVATION;
6373 
6374 -- BEGIN INVCONV
6375 PROCEDURE validate_secondaryuomqty (
6376    p_api_version                 IN         NUMBER
6377  , p_init_msg_list               IN         VARCHAR2 DEFAULT fnd_api.g_false
6378  , p_commit                      IN         VARCHAR2 DEFAULT fnd_api.g_false
6379  , p_validation_level            IN         NUMBER DEFAULT fnd_api.g_valid_level_full
6380  , x_return_status               OUT NOCOPY VARCHAR2
6381  , x_msg_count                   OUT NOCOPY NUMBER
6382  , x_msg_data                    OUT NOCOPY VARCHAR2
6383  , x_errorcode                   OUT NOCOPY NUMBER
6384  , p_organization_id             IN         NUMBER
6385  , p_inventory_item_id           IN         NUMBER
6386  , p_lpn_id                      IN         NUMBER DEFAULT NULL
6387  , p_serial_number               IN         VARCHAR2 DEFAULT NULL
6388  , p_subinventory                IN         VARCHAR2
6389  , p_revision                    IN         VARCHAR2 DEFAULT NULL
6390  , p_lot_number                  IN         VARCHAR2
6391  , p_secondary_uom               IN         VARCHAR2
6392  , p_secondary_unit_of_measure   IN         VARCHAR2
6393  , p_secondary_count_quantity    IN         NUMBER
6394  , p_secondary_system_quantity   IN         NUMBER
6395  , p_tracking_quantity_ind       IN         VARCHAR2
6396  , p_secondary_default_ind       IN         VARCHAR2) IS
6397    --
6398    l_debug                  NUMBER         := NVL (fnd_profile.VALUE ('INV_DEBUG_TRACE'), 0);
6399    l_api_version   CONSTANT NUMBER         := 0.9;
6400    l_api_name      CONSTANT VARCHAR2 (30)  := 'Validate_SecondaryUOMQty';
6401    l_table_name             VARCHAR2 (100);
6402    l_column_name            VARCHAR2 (100);
6403    l_message_name           VARCHAR2 (30);
6404 BEGIN
6405    -- Standard start of API savepoint
6406    SAVEPOINT validate_uomquantity;
6407 
6408    -- Standard Call to check for call compatibility
6409    IF NOT fnd_api.compatible_api_call (l_api_version
6410                                      , p_api_version
6411                                      , l_api_name
6412                                      , g_pkg_name) THEN
6413       RAISE fnd_api.g_exc_unexpected_error;
6414    END IF;
6415 
6416    -- Initialize message list if p_init_msg_list is set to true
6417    IF fnd_api.to_boolean (p_init_msg_list) THEN
6418       fnd_msg_pub.initialize;
6419    END IF;
6420 
6421    -- Initialisize API return status to success
6422    x_return_status := fnd_api.g_ret_sts_success;
6423    x_errorcode := 0;
6424 
6425    --
6426    IF (l_debug = 1) THEN
6427       mdebug (   'Validate_SecondaryUOMQty call. count_type_code = '
6428               || NVL (TO_CHAR (mtl_cceoi_var_pvt.g_cycle_count_entry_rec.count_type_code), 'NULL'));
6429       mdebug ('Tracking Quantity Ind ' || p_tracking_quantity_ind);
6430       mdebug ('Secondary Default Ind ' || p_secondary_default_ind);
6431    END IF;
6432 
6433    IF    mtl_cceoi_var_pvt.g_cycle_count_entry_rec.count_type_code = 4
6434       OR p_tracking_quantity_ind <> 'PS' THEN
6435       mtl_cceoi_var_pvt.g_secondary_count_uom := NULL;
6436       mtl_cceoi_var_pvt.g_secondary_count_quantity := NULL;
6437       mtl_cceoi_var_pvt.g_secondary_system_quantity := NULL;
6438       mtl_cceoi_var_pvt.g_lpn_item_sec_system_qty := NULL;
6439       mtl_cceoi_var_pvt.g_sec_adjustment_quantity := NULL;
6440    ELSIF     (   mtl_cceoi_var_pvt.g_cycle_count_entry_rec.count_type_code IN (1, 2, 3)
6441               OR mtl_cceoi_var_pvt.g_cycle_count_entry_rec.count_type_code IS NULL)
6442          AND p_tracking_quantity_ind = 'PS' THEN
6443       IF (l_debug = 1) THEN
6444          mdebug (   'Process: In Validate_SecondaryUOMQty call Validate_SecondaryCountUOM: '
6445                  || p_secondary_uom);
6446       END IF;
6447 
6448       mtl_inv_validate_grp.validate_secondarycountuom
6449                                         (p_api_version => 0.9
6450                                        , x_msg_count => x_msg_count
6451                                        , x_msg_data => x_msg_data
6452                                        , x_return_status => x_return_status
6453                                        , x_errorcode => x_errorcode
6454                                        , p_organization_id => p_organization_id
6455                                        , p_inventory_item_id => p_inventory_item_id
6456                                        , p_secondary_uom => p_secondary_uom
6457                                        , p_secondary_unit_of_measure => p_secondary_unit_of_measure
6458                                        , p_tracking_quantity_ind => p_tracking_quantity_ind);
6459 
6460       IF (l_debug = 1) THEN
6461          mdebug ('After Validate Secondary UOM ' || TO_CHAR (x_errorcode) || ' - '
6462                  || x_return_status);
6463       END IF;
6464 
6465       IF x_errorcode = 20 THEN
6466          -- Write INTO interface error TABLE
6467          mtl_cceoi_process_pvt.insert_cceoierror
6468                              (p_cc_entry_interface_id => mtl_cceoi_var_pvt.g_cc_entry_interface_id
6469                             , p_error_column_name => 'SECONDARY_UOM_CODE'
6470                             , p_error_table_name => 'MTL_SYSTEM_ITEMS'
6471                             , p_message_name => 'INV_INCORRECT_SECONDARY_UOM');
6472          RAISE fnd_api.g_exc_error;
6473       END IF;
6474 
6475       IF (l_debug = 1) THEN
6476          mdebug (   'Process: In Validate_SecondaryUOMQty call Validate_SecondaryCountQty: '
6477                  || p_secondary_count_quantity);
6478       END IF;
6479 
6480       -- Validate Secondary count quantity
6481       -- Need to handle conversions and defaulting
6482       mtl_inv_validate_grp.validate_secondarycountqty
6483                                            (p_api_version => 0.9
6484                                           , x_return_status => x_return_status
6485                                           , x_msg_count => x_msg_count
6486                                           , x_msg_data => x_msg_data
6487                                           , x_errorcode => x_errorcode
6488                                           , p_organization_id => p_organization_id
6489                                           , p_inventory_item_id => p_inventory_item_id
6490 					  , p_lot_number => p_lot_number
6491 					  , p_count_uom => MTL_CCEOI_VAR_PVT.G_UOM_CODE
6492 					  , p_count_quantity => MTL_CCEOI_VAR_PVT.G_COUNT_QUANTITY
6493 					  , p_secondary_uom => MTL_CCEOI_VAR_PVT.g_secondary_count_uom
6494                                           , p_secondary_quantity => p_secondary_count_quantity
6495                                           , p_tracking_quantity_ind => p_tracking_quantity_ind
6496 					  , p_secondary_default_ind => p_secondary_default_ind
6497 					  );
6498 
6499       IF (l_debug = 1) THEN
6500          mdebug ('After Validate Secondary Qty ' || TO_CHAR (x_errorcode) || ' - '
6501                  || x_return_status);
6502       END IF;
6503 
6504       IF x_errorcode = 50 THEN
6505          -- Write INTO interface error TABLE
6506          mtl_cceoi_process_pvt.insert_cceoierror
6507                              (p_cc_entry_interface_id => mtl_cceoi_var_pvt.g_cc_entry_interface_id
6508                             , p_error_column_name => 'SECONDARY_COUNT_QUANTITY'
6509                             , p_error_table_name => 'MTL_CC_ENTRIES_INTERFACE'
6510                             , p_message_name => 'INV_NO_CONVERSION_ERR');
6511          RAISE fnd_api.g_exc_error;
6512       ELSIF x_errorcode = 51 THEN
6513          -- Write INTO interface error TABLE
6514          mtl_cceoi_process_pvt.insert_cceoierror
6515                              (p_cc_entry_interface_id => mtl_cceoi_var_pvt.g_cc_entry_interface_id
6516                             , p_error_column_name => 'SECONDARY_COUNT_QUANTITY'
6517                             , p_error_table_name => 'MTL_CC_ENTRIES_INTERFACE'
6518                             , p_message_name => 'INV_DEVIATION_CHECK_ERR');
6519          RAISE fnd_api.g_exc_error;
6520       ELSIF x_errorcode = 52 THEN
6521          -- Write INTO interface error TABLE
6522          mtl_cceoi_process_pvt.insert_cceoierror
6523                              (p_cc_entry_interface_id => mtl_cceoi_var_pvt.g_cc_entry_interface_id
6524                             , p_error_column_name => 'SECONDARY_COUNT_QUANTITY'
6525                             , p_error_table_name => 'MTL_CC_ENTRIES_INTERFACE'
6526                             , p_message_name => 'INV_CCEOI_NEG_QTY');
6527          RAISE fnd_api.g_exc_error;
6528       END IF;
6529 
6530       -- Calculate secondary adjustment quantity
6531       MTL_CCEOI_VAR_PVT.g_sec_adjustment_quantity :=
6532           nvl(MTL_CCEOI_VAR_PVT.g_secondary_count_quantity,0) - nvl(MTL_CCEOI_VAR_PVT.g_secondary_system_quantity,0);
6533 
6534    ELSE   -- count type code
6535       IF (l_debug = 1) THEN
6536          mdebug ('Invalid count_type_code');
6537       END IF;
6538 
6539       mtl_cceoi_process_pvt.insert_cceoierror
6540                               (p_cc_entry_interface_id => mtl_cceoi_var_pvt.g_cc_entry_interface_id
6541                              , p_error_column_name => 'unexpected error'
6542                              , p_error_table_name => 'unexpected error'
6543                              , p_message_name => 'unexpected error');
6544       RAISE fnd_api.g_exc_unexpected_error;
6545    END IF;   -- count type code
6546 
6547    -- Standard check of p_commit
6548    IF fnd_api.to_boolean (p_commit) THEN
6549       COMMIT;
6550    END IF;
6551 
6552    -- Standard call to get message count and if count is 1, get message info
6553    fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
6554 EXCEPTION
6555    WHEN fnd_api.g_exc_error THEN
6556       ROLLBACK TO validate_secondarycountuom;
6557       x_return_status := fnd_api.g_ret_sts_error;
6558       fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
6559    WHEN fnd_api.g_exc_unexpected_error THEN
6560       ROLLBACK TO validate_secondarycountuom;
6561       x_return_status := fnd_api.g_ret_sts_unexp_error;
6562       x_errorcode := -1;
6563       fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
6564    WHEN OTHERS THEN
6565       ROLLBACK TO validate_secondarycountuom;
6566       x_errorcode := -1;
6567       x_return_status := fnd_api.g_ret_sts_unexp_error;
6568 
6569       IF fnd_msg_pub.check_msg_level (fnd_msg_pub.g_msg_lvl_unexp_error) THEN
6570          fnd_msg_pub.add_exc_msg (g_pkg_name, l_api_name);
6571       END IF;
6572 
6573       fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
6574 END validate_secondaryuomqty;
6575 -- END INVCONV
6576 
6577 END MTL_CCEOI_PROCESS_PVT;