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