[Home] [Help]
PACKAGE BODY: APPS.XDP_ORDER
Source
1 PACKAGE BODY XDP_ORDER AS
2 /* $Header: XDPORDRB.pls 120.1 2005/06/09 00:23:06 appldev $ */
3
4 --===========================================================
5 -- Declaration of Procedures and functions implementation
6 --===========================================================
7
8 PROCEDURE Validate_Order(
9 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
10 P_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
11 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST);
12
13 PROCEDURE Validate_Order_Header(
14 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
15 P_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
16 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST);
17
18 PROCEDURE Populate_Order(
19 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
20 P_ORDER_PARAMETER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_PARAM_LIST,
21 P_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
22 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST);
23
24 PROCEDURE Populate_Order_Header(
25 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
26 P_ORDER_PARAMETER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_PARAM_LIST
27 ) ;
28
29 PROCEDURE VALIDATE_ORDER_LINE(
30 p_order_header IN XDP_TYPES.SERVICE_ORDER_HEADER,
31 p_service_order_line_list IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST);
32
33 PROCEDURE POPULATE_ORDER_LINES(
34 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
35 P_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
36 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST,
37 P_SERVICE_ORDER_LINE_LIST OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
38 P_ORDER_LINE_REL_LIST OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
39 P_SERVICE_LINE_ATTRIB_LIST OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST
40 );
41
42 PROCEDURE CREATE_LINE_DETAILS(
43 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
44 P_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
45 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST,
46 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
47 P_ORDER_LINE_REL_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
48 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
49 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
50 );
51
52 PROCEDURE Fetch_Line_details(p_line_item in XDP_TYPES.SERVICE_LINE_ITEM,
53 p_line_parameter_list in XDP_TYPES.SERVICE_LINE_PARAM_LIST,
54 p_order_line_det_list in OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST,
55 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST);
56
57 PROCEDURE EXPLODE_PACKAGE(
58 P_ORDER_LINE IN XDP_TYPES.SERVICE_LINE_ITEM,
59 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
60 P_ORDER_LINE_REL_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
61 P_LINE_PARAMETER_LIST_IN IN XDP_TYPES.SERVICE_LINE_PARAM_LIST,
62 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
63 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
64 );
65
66 PROCEDURE EXPLODE_TXN_IB(
67 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
68 P_SERVICE_ORDER_LINE IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ITEM,
69 P_ORDER_LINE_REL_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
70 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST
71 );
72
73 PROCEDURE IB_CSI_LINE(
74 P_SERVICE_LINE IN XDP_TYPES.SERVICE_LINE_ITEM,
75 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
76 P_LINE_PARAMETER_LIST IN XDP_TYPES.SERVICE_LINE_PARAM_LIST,
77 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
78 );
79
80 PROCEDURE POPULATE_LINES(
81 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
82 P_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
83 P_ORDER_LINE_REL_LIST IN XDP_TYPES.SERVICE_LINE_REL_LIST,
84 P_LINE_PARAMETER_LIST IN XDP_TYPES.SERVICE_LINE_PARAM_LIST,
85 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
86 );
87
88 PROCEDURE POPULATE_FULFILL_WORKLIST_LIST(
89 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
90 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
91 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
92 P_FULFILL_WORKLIST_LIST IN OUT NOCOPY XDP_TYPES.FULFILL_WORKLIST_LIST
93 );
94
95 PROCEDURE CREATE_FULFILL_WORKLIST(
96 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
97 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
98 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
99 P_FULFILL_WORKLIST_LIST OUT NOCOPY XDP_TYPES.FULFILL_WORKLIST_LIST
100 );
101
102 PROCEDURE POPULATE_FULFILL_WORKLIST(
103 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
104 P_FULFILL_WORKLIST_LIST IN OUT NOCOPY XDP_TYPES.FULFILL_WORKLIST_LIST);
105
106 PROCEDURE VALIDATE_WI_PARAM_CONFIG (
107 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
108 P_SERVICE_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
109 P_FULFILL_WORKLIST_LIST IN XDP_TYPES.FULFILL_WORKLIST_LIST,
110 P_SERVICE_LINE_ATTRIB_LIST_IN IN XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
111 P_SERVICE_LINE_ATTRIB_LIST_OUT OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
112 P_WORKITEM_EVAL_PARAM_LIST_OUT OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST );
113
114 PROCEDURE POPULATE_WORKLIST_DETAILS (
115 P_SERVICE_LINE_ATTRIB_LIST IN XDP_TYPES.SERVICE_LINE_ATTRIB_LIST);
116
117 PROCEDURE EVALUATE_WORKITEM_PARAMS(
118 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
119 P_WORKITEM_EVAL_PARAM_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST);
120
121 PROCEDURE VALIDATE_LINE_ITEM (
122 P_ORGANIZATION_ID IN NUMBER ,
123 P_ITEM_NUMBER IN OUT NOCOPY VARCHAR2,
124 P_INVENTORY_ITEM_ID IN OUT NOCOPY NUMBER ,
125 P_ACTIVATION_FLAG OUT NOCOPY VARCHAR2);
126
127 PROCEDURE Validate_Workitem(
128 P_ORDER_ID IN NUMBER
129 ,P_LINE_ITEM_ID IN NUMBER
130 ,P_WI_INSTANCE_ID IN NUMBER
131 ,P_PROCEDURE_NAME IN VARCHAR2
132 ,X_ERROR_CODE OUT NOCOPY NUMBER
133 ,X_ERROR_MESSAGE OUT NOCOPY VARCHAR2);
134
135 PROCEDURE RUNTIME_VALIDATION(
136 P_FULFILL_WORKLIST_LIST IN XDP_TYPES.FULFILL_WORKLIST_LIST
137 ,P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER);
138
139
140 FUNCTION VALIDATE_ORGANIZATION (
141 P_ORGANIZATION_ID IN NUMBER ,
142 P_ORGANIZATION_CODE IN VARCHAR2,
143 P_SETUP_ORGANIZATION_ID IN NUMBER ) RETURN NUMBER ;
144
145 FUNCTION Get_Workitem_ID(
146 P_WORKITEM_NAME VARCHAR2,
147 P_VERSION VARCHAR2)
148 RETURN NUMBER;
149
150 FUNCTION Is_Product_Package(
151 P_ORGANIZATION_ID NUMBER,
152 P_INVENTORY_ITEM_ID NUMBER)
153 RETURN VARCHAR2;
154
155 FUNCTION IS_SERVICE_ACTION_VALID(
156 p_organization_id IN NUMBER,
157 p_inventory_item_id IN NUMBER,
158 p_action IN VARCHAR2,
159 p_action_source IN VARCHAR2 DEFAULT 'XDP')
160 RETURN VARCHAR2;
161
162 FUNCTION IS_ORDER_TYPE_MAINT_AVAIL (
163 P_ORDER_TYPE IN VARCHAR2 )
164 RETURN BOOLEAN ;
165
166 dbg_msg VARCHAR2(4000);
167 -------------------------------------------------------------------------------
168 -- Function Implementations:-
169 -------------------------------------------------------------------------------
170 --================================================================================
171 -- Function to Get Workitem Id for a given Workitem Name and Version
172 --================================================================================
173 FUNCTION GET_WORKITEM_ID
174 (P_WORKITEM_NAME VARCHAR2,
175 P_VERSION VARCHAR2)
176 RETURN NUMBER IS
177 lv_wi_id NUMBER := NULL;
178 lv_wi_name VARCHAR2(80) := UPPER(p_workitem_name);
179 lv_wi_version VARCHAR2(80) := UPPER(p_version);
180 e_wi_no_unique_match EXCEPTION ;
181 e_wi_no_config EXCEPTION ;
182 -- Cursor to select workitem id from xdp_workitems --
183 CURSOR lc_wi IS
184 SELECT workitem_id
185 FROM xdp_workitems
186 WHERE workitem_name = lv_wi_name
187 AND sysdate >= valid_date
188 AND sysdate <= NVL(invalid_date,sysdate);
189 BEGIN
190 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
191 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.GET_WORKITEM_ID')) THEN
192 dbg_msg := ('Workitem Name is :'||lv_wi_name||' Version is :'||lv_wi_version);
193 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
194 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.GET_WORKITEM_ID', dbg_msg);
195 END IF;
196 END IF;
197 END IF;
198
199 IF p_version IS NOT NULL THEN
200 BEGIN
201 SELECT workitem_id into lv_wi_id
202 FROM xdp_workitems
203 WHERE Workitem_name = lv_wi_name
204 AND version = lv_wi_version
205 AND sysdate >= valid_date
206 AND sysdate <= NVL(invalid_date,sysdate + 1);
207 EXCEPTION
208 WHEN no_data_found THEN
209 lv_wi_id := NULL;
210
211 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
212 dbg_msg := ('Workitem Id is null');
213 IF (FND_LOG.TEST(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.GET_WORKITEM_ID')) THEN
214 FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.GET_WORKITEM_ID', dbg_msg);
215 END IF;
216 END IF;
217
218 END;
219 ELSE
220 FOR lv_wi_rec IN lc_wi
221 LOOP
222 IF lv_wi_id IS NOT NULL THEN
223 lv_wi_id := -100;
224 EXIT;
225 END IF;
226 lv_wi_id := lv_wi_rec.workitem_id;
227 END LOOP;
228 END IF;
229 IF lv_wi_id > 0 THEN
230 RETURN lv_wi_id;
231 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
232 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.GET_WORKITEM_ID')) THEN
233 dbg_msg := ('Workitem Id is :'||lv_wi_id);
234 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
235 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.GET_WORKITEM_ID', dbg_msg);
236 END IF;
237 END IF;
238 END IF;
239
240 ELSIF lv_wi_id < 0 THEN
241 RAISE e_wi_no_unique_match ;
242 ELSIF lv_wi_id IS NULL THEN
243 RAISE e_wi_no_config ;
244 END IF;
245 EXCEPTION
246 WHEN e_wi_no_unique_match THEN
247 FND_MESSAGE.SET_NAME('XDP', 'XDP_WI_NO_UNIQUE_MATCH');--Done
248 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
249 FND_MESSAGE.SET_TOKEN('SERVICE_ITEM_NAME', lv_wi_name);
250 FND_MESSAGE.SET_TOKEN('VERSION', lv_wi_version);
251 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.GET_WORKITEM_ID');
252
253 WHEN e_wi_no_config THEN
254 FND_MESSAGE.SET_NAME('XDP', 'XDP_WI_NO_CONFIG'); -- Done
255 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
256 FND_MESSAGE.SET_TOKEN('SERVICE_ITEM_NAME', lv_wi_name);
257 FND_MESSAGE.SET_TOKEN('VERSION', lv_wi_version);
258 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.GET_WORKITEM_ID');
259
260 WHEN others THEN
261 XDP_UTILITIES.GENERIC_ERROR('XDP_ORDER.GET_WORKITEM_ID'
262 ,G_external_order_reference
263 ,sqlcode
264 ,sqlerrm);
265 END GET_WORKITEM_ID;
266 -- ------------------------------------------
267 -- check if the service is a product package
268 -- in product catalog
269 -- ------------------------------------------
270 FUNCTION IS_PRODUCT_PACKAGE
271 ( p_organization_id IN NUMBER,
272 p_inventory_item_id IN NUMBER )
273 RETURN VARCHAR2 IS
274 lv_package_flag VARCHAR2(1) := 'N' ;
275
276 /*** Cursor to check if the passed inventory_item_id is a package ? ***/
277
278 CURSOR c_items IS
279 SELECT msi.inventory_item_id
280 FROM mtl_system_items_b msi,
281 bom_bill_of_materials bom,
282 bom_inventory_components bic
283 WHERE msi.organization_id = p_organization_id
284 AND msi.inventory_item_id = p_inventory_item_id
285 AND NVL(msi.start_date_active,sysdate)<= sysdate
286 AND NVL(msi.end_date_active,sysdate) >= sysdate
287 AND bom.organization_id = msi.organization_id
288 AND bom.assembly_item_id = msi.inventory_item_id
289 AND bic.bill_sequence_id = bom.bill_sequence_id
290 AND NVL(bic.disable_date,sysdate) >= sysdate
291 AND NVL(bic.effectivity_date,sysdate) <= sysdate
292 AND EXISTS(SELECT 'Y'
293 FROM mtl_system_items msib
294 WHERE msib.organization_id = p_organization_id
295 AND msib.inventory_item_id = bic.component_item_id
296 AND msib.comms_activation_reqd_flag = 'Y');
297 BEGIN
298 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
299 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IS_PRODUCT_PACKAGE')) THEN
300 dbg_msg := ('Organization Id is : '||p_organization_id||' Inventory Id is : '||p_inventory_item_id);
301 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
302 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IS_PRODUCT_PACKAGE', dbg_msg);
303 END IF;
304 END IF;
305 END IF;
306
307 FOR c_items_rec in c_items
308 LOOP
309 lv_package_flag := 'Y' ;
310 END LOOP;
311 RETURN lv_package_flag ;
312
313 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
314 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IS_PRODUCT_PACKAGE')) THEN
315 dbg_msg := ('Package Flag is : '||lv_package_flag);
316 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
317 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IS_PRODUCT_PACKAGE', dbg_msg);
318 END IF;
319 END IF;
320 END IF;
321
322 EXCEPTION
323 WHEN others THEN
324 XDP_UTILITIES.GENERIC_ERROR('XDP_ORDER.IS_PRODUCT_PACKAGE'
325 ,G_external_order_reference
326 ,sqlcode
327 ,sqlerrm);
328 END IS_PRODUCT_PACKAGE;
329 --================================================================================
330 -- Function to Validate Organization
331 --================================================================================
332 FUNCTION VALIDATE_ORGANIZATION (P_ORGANIZATION_ID IN NUMBER ,
333 P_ORGANIZATION_CODE IN VARCHAR2,
334 P_SETUP_ORGANIZATION_ID IN NUMBER )
335 RETURN NUMBER IS
336 lv_organization_id NUMBER ;
337 e_invalid_organization EXCEPTION;
338 e_invalid_organization_code EXCEPTION;
339 e_invalid_organization_id EXCEPTION;
340
341 BEGIN
342
343 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
344 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION')) THEN
345 dbg_msg := ('Organization Id is : '||P_ORGANIZATION_ID||' Organization Code is : '||P_ORGANIZATION_CODE||
346 ' Setup Organization Id is : '||P_SETUP_ORGANIZATION_ID);
347 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
348 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION', dbg_msg);
349 END IF;
350 END IF;
351 END IF;
352
353 IF ((P_ORGANIZATION_ID IS NULL) AND (P_ORGANIZATION_CODE IS NULL) AND (P_SETUP_ORGANIZATION_ID IS NULL)) THEN
354 RAISE e_invalid_organization ;
355
356 ELSIF P_ORGANIZATION_ID IS NOT NULL THEN
357
358 BEGIN
359 SELECT organization_id
360 INTO lv_organization_id
361 FROM mtl_parameters
362 WHERE organization_id = p_organization_id ;
363 EXCEPTION
364 WHEN no_data_found THEN
365 RAISE e_invalid_organization_id ;
366 END ;
367
368 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
369 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION')) THEN
370 dbg_msg := ('Organization Id Exists');
371 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
372 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION', dbg_msg);
373 END IF;
374 END IF;
375 END IF;
376
377 ELSIF P_ORGANIZATION_CODE IS NOT NULL THEN
378
379 BEGIN
380 SELECT organization_id
381 INTO lv_organization_id
382 FROM mtl_parameters
383 WHERE organization_code = p_organization_code ;
384 EXCEPTION
385 WHEN no_data_found THEN
386 RAISE e_invalid_organization_code ;
387 END ;
388
389 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
390 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION')) THEN
391 dbg_msg := ('Organization Code exists');
392 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
393 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION', dbg_msg);
394 END IF;
395 END IF;
396 END IF;
397
398 ELSE lv_organization_id := p_setup_organization_id ;
399 END IF ;
400 RETURN lv_organization_id ;
401
402 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
403 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION')) THEN
404 dbg_msg := ('Organization Id is : '||lv_organization_id );
405 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
406 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORGANIZATION', dbg_msg);
407 END IF;
408 END IF;
409 END IF;
410
411 EXCEPTION
412 WHEN e_invalid_organization THEN
413 FND_MESSAGE.SET_NAME('XDP', 'XDP_INVALID_ORGANIZATION'); -- Created -191370
414 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
415 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORGANIZATION');
416
417 WHEN e_invalid_organization_id THEN
418 FND_MESSAGE.SET_NAME('XDP', 'XDP_INVALID_ORGANIZATION_ID'); -- Created -191370
419 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
420 FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_organization_id);
421 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORGANIZATION');
422
423 WHEN e_invalid_organization_code THEN
424 FND_MESSAGE.SET_NAME('XDP', 'XDP_INVALID_ORGANIZATION_CODE'); -- Created -191370
425 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
426 FND_MESSAGE.SET_TOKEN('ORGANIZATION_CODE',p_organization_code);
427 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORGANIZATION');
428
429 WHEN others THEN
430 XDP_UTILITIES.GENERIC_ERROR('XDP_ORDER.VALIDATE_ORGANIZATION'
431 ,G_external_order_reference
432 ,sqlcode
433 ,sqlerrm);
434 END VALIDATE_ORGANIZATION ;
435 -- --------------------------------------------------------
436 -- check if the action is valid for the service
437 -- ---------------------------------------------------------
438 FUNCTION IS_SERVICE_ACTION_VALID
439 (p_organization_id IN NUMBER,
440 p_inventory_item_id IN NUMBER,
441 p_action IN VARCHAR2,
442 p_action_source IN VARCHAR2 DEFAULT 'XDP')
443 RETURN VARCHAR2 IS
444 lv_exists_flag VARCHAR2(1) := 'N' ;
445 lv_action_code varchar2(80) := UPPER(p_action);
446
447 /*** Cursor to check valid Service Action combination ***/
448
449 CURSOR c_srv_action (p_action_code IN VARCHAR2) IS
450 SELECT service_val_act_id
451 FROM xdp_service_val_acts
452 WHERE organization_id = p_organization_id
453 AND inventory_item_id = p_inventory_item_id
454 AND action_source = p_action_source
455 AND action_code = p_action_code
456 AND NVL(valid_date,sysdate) <= sysdate
457 AND NVL(invalid_date,sysdate) >= sysdate ;
458 BEGIN
459
460 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
461 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IS_SERVICE_ACTION_VALID')) THEN
462 dbg_msg := ('Organization Id is: '||p_organization_id||' Inventory Item Id is: '||p_inventory_item_id
463 ||' Action is: '||p_action);
464 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
465 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IS_SERVICE_ACTION_VALID', dbg_msg);
466 END IF;
467 END IF;
468 END IF;
469
470 FOR c_srv_action_rec IN c_srv_action (lv_action_code)
471 LOOP
472 lv_exists_flag := 'Y' ;
473 END LOOP ;
474 RETURN lv_exists_flag;
475 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
476 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IS_SERVICE_ACTION_VALID')) THEN
477 dbg_msg := ('Service Action is valid');
478 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
479 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IS_SERVICE_ACTION_VALID', dbg_msg);
480 END IF;
481 END IF;
482 END IF;
483
484 EXCEPTION
485 WHEN others THEN
486 XDP_UTILITIES.GENERIC_ERROR('XDP_ORDER.IS_SERVICE_ACTION_VALID'
487 ,G_external_order_reference
488 ,sqlcode
489 ,sqlerrm);
490 END IS_SERVICE_ACTION_VALID;
491 -- --------------------------------------------------------
492 -- check if the action is valid for the package
493 -- ---------------------------------------------------------
494 FUNCTION IS_PACKAGE_ACTION_VALID(
495 p_organization_id IN NUMBER,
496 p_inventory_item_id IN NUMBER,
497 p_action IN VARCHAR2 ,
498 p_action_source IN VARCHAr2 DEFAULT 'XDP')
499 RETURN VARCHAR2 IS
500 /*** Cursor to determine components of a package ***/
501 CURSOR c_comp IS
502 SELECT bic.component_item_id,
503 msi.concatenated_segments item_number
504 FROM bom_bill_of_materials bom,
505 bom_inventory_components bic ,
506 mtl_system_items_vl msi
507 WHERE bom.organization_id = p_organization_id
508 AND bom.assembly_item_id = p_inventory_item_id
509 AND bic.bill_sequence_id = bom.bill_sequence_id
510 AND NVL(bic.disable_date,sysdate) >= sysdate
511 AND NVL(bic.effectivity_date,sysdate) <= sysdate
512 AND msi.organization_id = p_organization_id
513 AND msi.inventory_item_id = bic.component_item_id
514 AND msi.comms_activation_reqd_flag = 'Y';
515
516 e_invalid_action_package EXCEPTION;
517 l_package_action_valid_flag VARCHAR2(1) := 'Y' ;
518 l_item_number VARCHAR2(240) ;
519
520 BEGIN
521
522 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
523 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IS_PACKAGE_ACTION_VALID')) THEN
524 dbg_msg := ('Organization Id is: '||p_organization_id||' Inventory Item Id is: '||p_inventory_item_id
525 ||' Action is: '||p_action);
526 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
527 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IS_PACKAGE_ACTION_VALID', dbg_msg);
528 END IF;
529 END IF;
530 END IF;
531
532 FOR c_comp_rec IN c_comp
533 LOOP
534 IF
535 IS_SERVICE_ACTION_VALID( p_organization_id => p_organization_id ,
536 p_inventory_item_id => c_comp_rec.component_item_id,
537 p_action_source => p_action_source ,
538 p_action => p_action) = 'N' THEN
539 l_package_action_valid_flag := 'N' ;
540 l_item_number := c_comp_rec.item_number ;
541 RAISE e_invalid_action_package ;
542 END IF ;
543 END LOOP;
544 RETURN l_package_action_valid_flag ;
545
546 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
547 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IS_PACKAGE_ACTION_VALID')) THEN
548 dbg_msg := ('Package Action is valid');
549 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
550 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IS_PACKAGE_ACTION_VALID', dbg_msg);
551 END IF;
552 END IF;
553 END IF;
554
555 EXCEPTION
556 WHEN e_invalid_action_package THEN
557 FND_MESSAGE.SET_NAME('XDP', 'XDP_INVALID_ACTION_PACKAGE');--Done 191271
558 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
559 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inventory_item_id);
560 FND_MESSAGE.SET_TOKEN('SERVICE_NAME', l_item_number);
561 FND_MESSAGE.SET_TOKEN('ACTION', p_action);
562 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.IS_PACKAGE_ACTION_VALID');
563
564 WHEN others THEN
565 XDP_UTILITIES.GENERIC_ERROR('XDP_ORDER.IS_PACKAGE_ACTION_VALID'
566 ,G_external_order_reference
567 ,sqlcode
568 ,sqlerrm);
569 END IS_PACKAGE_ACTION_VALID;
570
571
572 -- -------------------------------------------------------------------
573 -- check to see whether order type is available during maintenance mode
574 -- -------------------------------------------------------------------
575 FUNCTION IS_ORDER_TYPE_MAINT_AVAIL (
576 p_order_type in varchar2 )
577 RETURN BOOLEAN IS
578 l_count NUMBER;
579
580 BEGIN
581
582 SELECT count(*)
583 INTO l_count
584 FROM FND_LOOKUP_VALUES
585 WHERE UPPER(lookup_code) = UPPER(p_order_type)
586 AND lookup_type = 'XDP_HA_ORDER_TYPES';
587
588 IF l_count < 1 THEN
589 return false;
590 ELSE
591 return true;
592 END IF;
593
594 EXCEPTION
595 WHEN OTHERS THEN
596 XDP_UTILITIES.GENERIC_ERROR('XDP_ORDER.IS_ORDER_TYPE_MAINT_AVAIL'
597 ,G_external_order_reference
598 ,sqlcode
599 ,sqlerrm);
600
601 END IS_ORDER_TYPE_MAINT_AVAIL;
602
603
604 --***************************************************
605 -- API for upstream ordering system to submit
606 -- a service activation order
607 -- Definition of Process_order API
608 --**************************************************
609 PROCEDURE Process_Order(
610 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
611 P_ORDER_PARAMETER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_PARAM_LIST,
612 P_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
613 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST,
614 P_ORDER_ID OUT NOCOPY NUMBER,
615 RETURN_CODE OUT NOCOPY NUMBER,
616 ERROR_DESCRIPTION OUT NOCOPY VARCHAR2)
617 IS
618 lv_item_type varchar2(80);
619 lv_item_key varchar2(300);
620 BEGIN
621
622 savepoint start_process_order ;
623
624 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
625 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER')) THEN
626 dbg_msg := ('Procedure Process_Order begins.');
627 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
628 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER', dbg_msg);
629 END IF;
630 END IF;
631 END IF;
632
633 G_external_order_reference:= P_ORDER_HEADER.ORDER_NUMBER||'('||P_ORDER_HEADER.ORDER_VERSION||')';
634 -------------------------------------------
635 -- Call to Validate_order_header
636 -------------------------------------------
637
638 Validate_Order(
639 P_ORDER_HEADER,
640 P_ORDER_LINE_LIST,
641 P_LINE_PARAMETER_LIST
642 );
643
644 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
645 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER')) THEN
646 dbg_msg := ('Completed Validation of Order');
647 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
648 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER', dbg_msg);
649 END IF;
650 END IF;
651 END IF;
652 ----------------------------------
653 -- Call to Populate_order
654 -----------------------------------
655 Populate_Order(
656 P_ORDER_HEADER ,
657 P_ORDER_PARAMETER ,
658 P_ORDER_LINE_LIST ,
659 P_LINE_PARAMETER_LIST
660 );
661
662
663 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
664 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER')) THEN
665 dbg_msg := ('Completed Population of Order');
666 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
667 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER', dbg_msg);
668 END IF;
669 END IF;
670 END IF;
671
672 p_order_id := P_ORDER_HEADER.order_id;
673
674 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
675 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER')) THEN
676 dbg_msg := ('Order Id for the Order Number: '||p_order_header.order_number||' is: '|| P_ORDER_HEADER.order_id);
677 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
678 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER', dbg_msg);
679 END IF;
680 END IF;
681 END IF;
682
683 ------------------------------
684 -- Add order to QUEUE
685 ------------------------------
686 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
687 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER')) THEN
688 dbg_msg := ('Enqueueing Order');
689 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
690 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER', dbg_msg);
691 END IF;
692 END IF;
693 END IF;
694 XDPCORE.CreateOrderProcess(
695 p_order_header.order_id
696 ,lv_item_type
697 ,lv_item_key);
698
699 IF(UPPER(P_ORDER_HEADER.execution_mode) = 'ASYNC') THEN
700 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
701 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER')) THEN
702 dbg_msg := ('Order is in Asynchronous Mode');
703 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
704 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER', dbg_msg);
705 END IF;
706 END IF;
707 END IF;
708
709 /* Update the XDP_ORDER_HEADERS table with the User defined Workitem Item Type and Item Key */
710
711 update XDP_ORDER_HEADERS
712 set WF_ITEM_TYPE = lv_item_type,
713 WF_ITEM_KEY = lv_item_key,
714 LAST_UPDATE_DATE = sysdate, LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
715 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
716 where ORDER_ID = p_order_header.order_id;
717
718
719
720 XDP_AQ_UTILITIES.Add_OrderToProcessorQ(P_ORDER_ID => p_order_header.order_id
721 ,P_ORDER_TYPE => p_order_header.order_type
722 ,P_PRIORITY => p_order_header.priority
723 ,P_PROV_DATE => p_order_header.required_fulfillment_date
724 ,P_WF_ITEM_TYPE => lv_item_type
725 ,P_WF_ITEM_KEY => lv_item_key);
726 ELSE -- Do it now
727
728 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
729 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER')) THEN
730 dbg_msg := ('Order is in Synchronous Mode');
731 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
732 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.PROCESS_ORDER', dbg_msg);
733 END IF;
734 END IF;
735 END IF;
736
737 XDP_ORDER_SYNC.Execute_Order_Sync(
738 p_order_header.order_id,
739 Return_Code,
740 Error_Description);
741 END IF;
742
743 EXCEPTION
744 WHEN OTHERS THEN
745 RETURN_CODE:=SQLCODE;
746 ERROR_DESCRIPTION:=SQLERRM;
747 rollback to start_process_order ;
748
749 END Process_Order;
750 ---------------------------------------------------------------------
751 --==========================================================================
752 --Definition of Procedure Validate_Order:-Calls Validate_Order_Header
753 --and Validate_Order_Lines
754 --===========================================================================
755 PROCEDURE Validate_Order(
756 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
757 P_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
758 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST)
759 IS
760 BEGIN
761
762 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
763 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER')) THEN
764 dbg_msg := ('Procedure Validate_Order begins.');
765 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
766 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER', dbg_msg);
767 END IF;
768 END IF;
769 END IF;
770
771 Validate_Order_Header(
772 P_ORDER_HEADER,
773 P_ORDER_LINE_LIST,
774 P_LINE_PARAMETER_LIST);
775
776 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
777 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER')) THEN
778 dbg_msg := ('Completed Validating Order Header');
779 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
780 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER', dbg_msg);
781 END IF;
782 END IF;
783 END IF;
784
785 VALIDATE_ORDER_LINE
786 (P_ORDER_HEADER,
787 P_ORDER_LINE_LIST
788 );
789
790 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
791 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER')) THEN
792 dbg_msg := ('Completed Validating Order Lines');
793 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
794 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER', dbg_msg);
795 END IF;
796 END IF;
797 END IF;
798
799
800 EXCEPTION
801 WHEN OTHERS THEN
802 XDP_UTILITIES.generic_error('XDP_ORDER.VALIDATE_ORDER'
803 ,G_external_order_reference
804 ,SQLCODE
805 ,SQLERRM);
806 END Validate_Order;
807 -------------------------------------------------------------------------------
808 --*********************************************************************
809 -- Definition of Procedure Validate_Order_Header:-validates Order Number
810 --Validates Customer Account Id, Argument null Conditions
811 -- and calls Service Validation
812 --Note:- Order Id validation is checked during insert in XDP_ORDER_HEADERS
813 --************************************************************************
814
815 PROCEDURE Validate_Order_Header(
816 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
817 P_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
818 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
819 )
820 IS
821 lv_cust_present VARCHAR2(1);
822 lv_mode VARCHAR2(8); -- maintenance mode profile
823
824 -- Declare Exceptions
825 e_order_number_null EXCEPTION;
826 e_order_line_list_null EXCEPTION;
827 e_order_line_list_count EXCEPTION;
828 e_line_parameter_list_null EXCEPTION;
829 e_cust_acc_num_invalid EXCEPTION;
830 e_cust_acc_id_invalid EXCEPTION;
831 e_execution_mode_invalid EXCEPTION;
832 e_due_date_null EXCEPTION;
833 e_order_type_not_reg EXCEPTION;
834
835 BEGIN
836
837 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
838 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER')) THEN
839 dbg_msg := ('Procedure Validate_Order_Header begins.');
840 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
841 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER', dbg_msg);
842 END IF;
843 END IF;
844 END IF;
845
846 --============================================================
847 -- Validate Order Type in High Availability Maintenance Mode
848 --============================================================
849 FND_PROFILE.GET('APPS_MAINTENANCE_MODE', lv_mode);
850
851 IF lv_mode = 'MAINT' THEN
852
853 IF IS_ORDER_TYPE_MAINT_AVAIL(p_order_header.order_type) = false THEN
854 raise e_order_type_not_reg;
855 END IF;
856
857 END IF;
858
859 --=====================================
860 -- Validate Order Number
861 --======================================
862
863 IF p_order_header.order_number IS NULL THEN
864 RAISE e_order_number_null;
865 END IF;
866
867 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
868 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER')) THEN
869 dbg_msg := ('Order Number is: '||p_order_header.order_number);
870 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
871 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER', dbg_msg);
872 END IF;
873 END IF;
874 END IF;
875
876 --=====================================
877 -- Validate Required Fulfillment Date and priority
878 --=====================================
879 IF p_order_header.required_fulfillment_date is NULL then
880 p_order_header.required_fulfillment_date := sysdate;
881 END IF;
882
883 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
884 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER')) THEN
885 dbg_msg := ('Required Fulfillment Date is: '||p_order_header.required_fulfillment_date);
886 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
887 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER', dbg_msg);
888 END IF;
889 END IF;
890 END IF;
891
892
893 --=====================================
894 -- Validate execution mode for the order
895 --=====================================
896
897 IF p_order_header.execution_mode IS NULL then
898 p_order_header.execution_mode := 'ASYNC';
899 ELSIF UPPER(p_order_header.execution_mode) NOT IN ('SYNC','ASYNC') THEN
900 RAISE e_execution_mode_invalid ;
901 END IF;
902
903 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
904 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER')) THEN
905 dbg_msg := ('Execution mode is: '||p_order_header.execution_mode );
906 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
907 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER', dbg_msg);
908 END IF;
909 END IF;
910 END IF;
911
912
913 -- Code Added to fix bug # 2109062 - mviswana
914 --===================================
915 -- Validate Due_Date
916 --===================================
917 IF NVL(p_order_header.jeopardy_enabled_flag, 'N') = 'Y' AND
918 p_order_header.due_date IS NULL THEN
919 RAISE e_due_date_null;
920 END IF;
921
922
923 --===================================
924 -- Validate Account ID
925 --===================================
926 IF p_order_header.cust_account_id IS NOT NULL THEN
927 BEGIN
928 SELECT '1' INTO lv_cust_present
929 FROM HZ_CUST_ACCOUNTS_ALL CUST
930 WHERE CUST.CUST_ACCOUNT_ID = p_order_header.cust_account_id;
931 EXCEPTION
932 WHEN NO_DATA_FOUND THEN
933 RAISE e_cust_acc_id_invalid;
934 WHEN OTHERS THEN
935 XDP_UTILITIES.generic_error('XDP_ORDER.VALIDATE_ORDER_HEADER'
936 ,G_external_order_reference
937 ,SQLCODE
938 ,SQLERRM);
939 END;
940 ELSIF p_order_header.CUST_ACCOUNT_ID IS NULL
941 AND p_order_header.account_number IS NOT NULL THEN
942 BEGIN
943 SELECT CUST.CUST_ACCOUNT_ID INTO p_order_header.cust_account_id
944 FROM HZ_CUST_ACCOUNTS_ALL CUST
945 WHERE CUST.ACCOUNT_NUMBER = p_order_header.account_number;
946 EXCEPTION
947 WHEN NO_DATA_FOUND THEN
948 RAISE e_cust_acc_num_invalid;
949 WHEN OTHERS THEN
950 XDP_UTILITIES.generic_error('XDP_ORDER.VALIDATE_ORDER_HEADER'
951 ,G_external_order_reference
952 ,SQLCODE
953 ,SQLERRM);
954 END;
955
956 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
957 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER')) THEN
958 dbg_msg := ('Customer Account Id is: '||p_order_header.cust_account_id);
959 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
960 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER', dbg_msg);
961 END IF;
962 END IF;
963 END IF;
964
965 END IF;
966 --====================================
967 -- Validate Argument NULL condition
968 --===================================
969 IF p_order_line_list IS NULL THEN
970 RAISE e_order_line_list_null;
971 ELSIF p_order_line_list.COUNT = 0 THEN
972 RAISE e_order_line_list_count;
973 ELSIF p_line_parameter_list IS NULL THEN
974 RAISE e_line_parameter_list_null;
975 END IF;
976
977 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
978 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER')) THEN
979 dbg_msg := ('Number of records in Order Line List: '||p_order_line_list.COUNT);
980 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
981 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER', dbg_msg);
982 END IF;
983 END IF;
984 END IF;
985
986 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
987 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER')) THEN
988 dbg_msg := ('Number of records in Line Parameter List: '||p_line_parameter_list.COUNT);
989 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
990 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_HEADER', dbg_msg);
991 END IF;
992 END IF;
993 END IF;
994
995 EXCEPTION
996 WHEN e_order_number_null THEN
997 FND_MESSAGE.SET_NAME('XDP', 'XDP_ORDERNUM_NOT_NULL'); -- Done 191251
998 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
999
1000 WHEN e_execution_mode_invalid THEN
1001 FND_MESSAGE.SET_NAME('XDP','XDP_ORD_EXECUTION_MODE_INVALID');
1002 FND_MESSAGE.SET_TOKEN('ORDNUM',G_external_order_reference);
1003 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
1004
1005 WHEN e_order_line_list_null THEN
1006 FND_MESSAGE.SET_NAME('XDP', 'XDP_ORDLINELIST_NOTNULL'); -- Done 191253
1007 FND_MESSAGE.SET_TOKEN('ORDNUM',G_external_order_reference);
1008 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER');
1009
1010 WHEN e_order_line_list_count THEN
1011 FND_MESSAGE.SET_NAME('XDP', 'XDP_ORDLINELIST_NOT_EMPTY'); -- Done 191254
1012 FND_MESSAGE.SET_TOKEN('ORDNUM',G_external_order_reference);
1013 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
1014
1015 WHEN e_line_parameter_list_null THEN
1016 FND_MESSAGE.SET_NAME('XDP', 'XDP_PARAMLIST_NOTNULL'); -- Done -191255
1017 FND_MESSAGE.SET_TOKEN('ORDNUM',G_external_order_reference);
1018 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
1019
1020 WHEN e_cust_acc_id_invalid THEN
1021 FND_MESSAGE.SET_NAME('XDP', 'XDP_ACCOUNTID_INVALID'); --Done -191371
1022 FND_MESSAGE.SET_TOKEN('ORDNUM',G_external_order_reference);
1023 FND_MESSAGE.SET_TOKEN('ACCOUNT_ID', p_order_header.cust_account_id);
1024 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
1025
1026 WHEN e_cust_acc_num_invalid THEN
1027 FND_MESSAGE.SET_NAME('XDP','XDP_ACCOUNTNUM_INVALID');-- Done -191372
1028 FND_MESSAGE.SET_TOKEN('ORDNUM',G_external_order_reference);
1029 FND_MESSAGE.SET_TOKEN('ACCOUNT_NUMBER',p_order_header.account_number);
1030 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
1031
1032 WHEN e_due_date_null THEN
1033 FND_MESSAGE.SET_NAME('XDP', 'XDP_DUE_DATE_NULL');
1034 FND_MESSAGE.SET_TOKEN('ORDNUM',G_external_order_reference);
1035 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
1036
1037 WHEN e_order_type_not_reg THEN
1038 FND_MESSAGE.SET_NAME('XDP', 'XDP_ORDER_TYPE_NOT_AVAILABLE');
1039 FND_MESSAGE.SET_TOKEN('ORDNUM', G_external_order_reference);
1040 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_HEADER');
1041
1042 WHEN OTHERS THEN
1043 XDP_UTILITIES.generic_error('XDP_ORDER.VALIDATE_ORDER_HEADER'
1044 ,p_order_header.order_number
1045 ,SQLCODE
1046 ,SQLERRM);
1047 END VALIDATE_ORDER_HEADER;
1048
1049 --================================================================================
1050 -- validation procedure which checks if the services are valid
1051 --================================================================================
1052
1053 PROCEDURE VALIDATE_ORDER_LINE
1054 (p_order_header IN XDP_TYPES.SERVICE_ORDER_HEADER,
1055 p_service_order_line_list IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST
1056 )
1057 IS
1058 lv_index NUMBER ;
1059 lv_id NUMBER ;
1060 lv_site_use_id NUMBER;
1061 lv_srv_organization_id NUMBER ;
1062 lv_organization_id NUMBER ;
1063 l_line_number NUMBER;
1064 l_site_use_id NUMBER;
1065 lv_activation_flag VARCHAR2(1) ;
1066 l_service_item_name VARCHAR2(40);
1067 l_action_code VARCHAR2(40);
1068 l_action_source VARCHAR2(40);
1069
1070 e_line_number_null EXCEPTION;
1071 e_lineitem_name_null EXCEPTION;
1072 e_act_invalid_service_li EXCEPTION;
1073 e_invalid_action_package EXCEPTION;
1074 e_unknown_service_name EXCEPTION;
1075 e_pkg_no_unique_match EXCEPTION;
1076 e_svc_no_unique_match EXCEPTION;
1077 e_ibsource_null EXCEPTION;
1078 e_ibsource_invalid EXCEPTION;
1079 e_ordsource_notnull EXCEPTION;
1080 e_site_use_id_invalid EXCEPTION;
1081 e_unknown_package_name EXCEPTION;
1082
1083 BEGIN
1084
1085 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1086 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1087 dbg_msg := ('Procedure Validate_Order_Line begins.');
1088 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1089 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1090 END IF;
1091 END IF;
1092 END IF;
1093
1094 /*** Get the Organization from the Profile Option ***/
1095 lv_srv_organization_id := FND_PROFILE.VALUE('CS_INV_VALIDATION_ORG');
1096 lv_index := p_service_order_line_list.FIRST ;
1097
1098 LOOP
1099
1100 /**** Check NULL condition ****/
1101 IF p_service_order_line_list(lv_index).line_number IS NULL THEN
1102 RAISE e_line_number_null ;
1103
1104 ELSIF ((p_service_order_line_list(lv_index).service_item_name IS NULL) AND
1105 (p_service_order_line_list(lv_index).inventory_item_id IS NULL )) THEN
1106 RAISE e_lineitem_name_null ;
1107 END IF;
1108
1109 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1110 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1111 dbg_msg := ('Validated Line Number is: '||p_service_order_line_list(lv_index).line_number);
1112 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1113 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1114 END IF;
1115 END IF;
1116 END IF;
1117
1118 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1119 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1120 dbg_msg := ('Validated Service Item Name is: '||p_service_order_line_list(lv_index).service_item_name||' Inventory Item Id is: '||
1121 p_service_order_line_list(lv_index).inventory_item_id);
1122 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1123 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1124 END IF;
1125 END IF;
1126 END IF;
1127
1128 /**** IB Validation ****/
1129
1130 IF p_service_order_line_list(lv_index).ib_source IS NULL THEN
1131 l_line_number := p_service_order_line_list(lv_index).line_number ;
1132 RAISE e_ibsource_null ;
1133
1134 ELSIF p_service_order_line_list(lv_index).ib_source NOT IN ('TXN', 'CSI', 'NONE') THEN
1135 l_line_number := p_service_order_line_list(lv_index).line_number ;
1136 RAISE e_ibsource_invalid ;
1137 ELSIF p_service_order_line_list(lv_index).ib_source IN('CSI','TXN') THEN
1138 IF p_order_header.order_source IS NULL THEN
1139 l_line_number := p_service_order_line_list(lv_index).line_number ;
1140 RAISE e_ordsource_notnull ;
1141 END IF;
1142 END IF;
1143
1144 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1145 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1146 dbg_msg := ('Validated IB Source is: '||p_service_order_line_list(lv_index).ib_source);
1147 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1148 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1149 END IF;
1150 END IF;
1151 END IF;
1152
1153
1154 /**** Validate Site Use Id ****/
1155
1156 IF p_service_order_line_list(lv_index).site_use_id IS NOT NULL THEN
1157 BEGIN
1158 SELECT 1 INTO lv_site_use_id from HZ_CUST_SITE_USES_ALL SITES
1159 WHERE SITES.SITE_USE_ID = p_service_order_line_list(lv_index).site_use_id;
1160
1161 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1162 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1163 dbg_msg := ('Validated Site Use Id is: '||p_service_order_line_list(lv_index).site_use_id);
1164 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1165 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1166 END IF;
1167 END IF;
1168 END IF;
1169
1170 EXCEPTION
1171 WHEN NO_DATA_FOUND THEN
1172 l_line_number := p_service_order_line_list(lv_index).line_number ;
1173 l_site_use_id := p_service_order_line_list(lv_index).site_use_id ;
1174 RAISE e_site_use_id_invalid;
1175
1176 WHEN OTHERS THEN
1177 XDP_UTILITIES.GENERIC_ERROR('XDP_PROCESS_ORDER.VALIDATE_ORDER_LINE'
1178 ,G_external_order_reference
1179 , sqlcode
1180 , sqlerrm);
1181
1182 END;
1183 END IF;
1184
1185 /**** check if provisioning is required ****/
1186
1187 IF NVL(p_service_order_line_list(lv_index).fulfillment_required_flag,'Y') <> 'Y'
1188 THEN
1189 null;
1190 ELSE
1191 /*** Change Action code , Line Item Name and Version to UPPER ***/
1192
1193 IF p_service_order_line_list(lv_index).action_code IS NOT NULL THEN
1194 p_service_order_line_list(lv_index).action_code :=
1195 UPPER(p_service_order_line_list(lv_index).action_code);
1196 END IF;
1197
1198 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1199 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1200 dbg_msg := ('Action Code is: '||p_service_order_line_list(lv_index).action_code);
1201 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1202 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1203 END IF;
1204 END IF;
1205 END IF;
1206 /**
1207 IF p_service_order_line_list(lv_index).service_item_name IS NOT NULL THEN
1208 p_service_order_line_list(lv_index).service_item_name :=
1209 UPPER(p_service_order_line_list(lv_index).service_item_name);
1210 END IF;
1211
1212 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1213 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1214 dbg_msg := ('Service Item Name is: '||p_service_order_line_list(lv_index).service_item_name);
1215 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1216 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1217 END IF;
1218 END IF;
1219 END IF;
1220 **/
1221 IF p_service_order_line_list(lv_index).version IS NOT NULL THEN
1222 p_service_order_line_list(lv_index).version :=
1223 UPPER(p_service_order_line_list(lv_index).version);
1224 END IF;
1225
1226 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1227 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1228 dbg_msg := ('Version is: '||p_service_order_line_list(lv_index).version);
1229 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1230 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1231 END IF;
1232 END IF;
1233 END IF;
1234
1235 /*** Set Provisioning Date , Due Date , Cust. Reqd. Date , Bundle Id , Prov. Reqd. Flag ***/
1236
1237 IF p_service_order_line_list(lv_index).required_fulfillment_date IS NULL then
1238 p_service_order_line_list(lv_index).required_fulfillment_date :=
1239 p_order_header.required_fulfillment_date;
1240 END IF;
1241
1242 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1243 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1244 dbg_msg := ('Required Fulfillment Date is: '||p_service_order_line_list(lv_index).required_fulfillment_date);
1245 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1246 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1247 END IF;
1248 END IF;
1249 END IF;
1250
1251
1252 IF p_service_order_line_list(lv_index).due_date IS NULL then
1253 p_service_order_line_list(lv_index).due_date := p_order_header.due_date;
1254 END IF;
1255
1256 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1257 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1258 dbg_msg := ('Due Date is: '||p_service_order_line_list(lv_index).due_date);
1259 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1260 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1261 END IF;
1262 END IF;
1263 END IF;
1264
1265 IF p_service_order_line_list(lv_index).customer_required_date IS NULL then
1266 p_service_order_line_list(lv_index).customer_required_date :=
1267 p_order_header.customer_required_date;
1268 END IF;
1269
1270 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1271 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1272 dbg_msg := ('Customer Required Date is: '||p_service_order_line_list(lv_index).customer_required_date);
1273 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1274 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1275 END IF;
1276 END IF;
1277 END IF;
1278
1279 IF p_service_order_line_list(lv_index).fulfillment_sequence IS NULL then
1280 p_service_order_line_list(lv_index).fulfillment_sequence := 0;
1281 END IF;
1282
1283 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1284 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1285 dbg_msg := ('Fulfillment Sequence is: '||p_service_order_line_list(lv_index).fulfillment_sequence);
1286 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1287 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1288 END IF;
1289 END IF;
1290 END IF;
1291
1292 IF p_service_order_line_list(lv_index).bundle_id IS NULL then
1293 p_service_order_line_list(lv_index).bundle_sequence := NULL;
1294 END IF;
1295
1296 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1297 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1298 dbg_msg := ('Bundle Id is: '||p_service_order_line_list(lv_index).bundle_sequence);
1299 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1300 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1301 END IF;
1302 END IF;
1303 END IF;
1304
1305 IF p_service_order_line_list(lv_index).fulfillment_required_flag IS NULL then
1306 p_service_order_line_list(lv_index).fulfillment_required_flag := 'Y';
1307 END IF;
1308
1309 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1310 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1311 dbg_msg := ('Fulfillment Required Flag is: '||p_service_order_line_list(lv_index).fulfillment_required_flag);
1312 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1313 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1314 END IF;
1315 END IF;
1316 END IF;
1317
1318 /**** Check if the line is a workitem OR a Service OR a Package ****/
1319
1320 IF p_service_order_line_list(lv_index).action_code IS NULL THEN
1321 p_service_order_line_list(lv_index).workitem_id := GET_WORKITEM_ID
1322 (p_service_order_line_list(lv_index).service_item_name,
1323 p_service_order_line_list(lv_index).version) ;
1324
1325
1326 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1327 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1328 dbg_msg := ('Workitem Id is: '||p_service_order_line_list(lv_index).workitem_id );
1329 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1330 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1331 END IF;
1332 END IF;
1333 END IF;
1334
1335 ELSIF p_service_order_line_list(lv_index).action_code IS NOT NULL THEN
1336
1337 /*** Validate Validation Organization Id ***/
1338
1339 lv_organization_id := VALIDATE_ORGANIZATION
1340 (p_service_order_line_list(lv_index).organization_id,
1341 p_service_order_line_list(lv_index).organization_code,
1342 lv_srv_organization_id );
1343 p_service_order_line_list(lv_index).organization_id := lv_organization_id ;
1344
1345 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1346 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1347 dbg_msg := ('Valid Organization Id is: '||p_service_order_line_list(lv_index).organization_id);
1348 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1349 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1350 END IF;
1351 END IF;
1352 END IF;
1353
1354 /*** Validate Inventory_item_id and service_item_name ***/
1355
1356 VALIDATE_LINE_ITEM(p_service_order_line_list(lv_index).organization_id,
1357 p_service_order_line_list(lv_index).service_item_name,
1358 p_service_order_line_list(lv_index).inventory_item_id,
1359 lv_activation_flag );
1360
1361 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1362 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1363 dbg_msg := ('Valid Line Item is: '||p_service_order_line_list(lv_index).service_item_name);
1364 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1365 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1366 END IF;
1367 END IF;
1368 END IF;
1369
1370 IF lv_activation_flag = 'Y' THEN
1371
1372 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1373 dbg_msg := ('Product is a Service');
1374 IF (FND_LOG.TEST(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1375 FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1376 END IF;
1377 END IF;
1378
1379 IF p_order_header.order_ref_name = 'SALES' THEN
1380 l_action_source := p_order_header.order_ref_name ;
1381 ELSE
1382 l_action_source := 'XDP';
1383 END IF ;
1384
1385 IF IS_SERVICE_ACTION_VALID
1386 (p_organization_id => p_service_order_line_list(lv_index).organization_id,
1387 p_inventory_item_id => p_service_order_line_list(lv_index).inventory_item_id,
1388 p_action_source => l_action_source ,
1389 p_action => p_service_order_line_list(lv_index).action_code) = 'N' THEN
1390
1391 l_line_number := p_service_order_line_list(lv_index).line_number ;
1392 l_action_code := p_service_order_line_list(lv_index).action_code;
1393 l_service_item_name := p_service_order_line_list(lv_index).service_item_name;
1394
1395 RAISE e_act_invalid_service_li ;
1396
1397 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1398 dbg_msg := ('Service Action Not Valid');
1399 IF (FND_LOG.TEST(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1400 FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1401 END IF;
1402 END IF;
1403
1404 ELSE
1405 p_service_order_line_list(lv_index).is_package_flag := 'N';
1406
1407 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1408 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1409 dbg_msg := ('Service Action Valid');
1410 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1411 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1412 END IF;
1413 END IF;
1414 END IF;
1415 END IF;
1416
1417 ELSE
1418 IF IS_PRODUCT_PACKAGE
1419 (p_service_order_line_list(lv_index).organization_id,
1420 p_service_order_line_list(lv_index).inventory_item_id) = 'Y' THEN
1421
1422 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1423 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1424 dbg_msg := ('Product is a Package');
1425 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1426 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1427 END IF;
1428 END IF;
1429 END IF;
1430
1431 IF IS_PACKAGE_ACTION_VALID
1432 (p_organization_id => p_service_order_line_list(lv_index).organization_id,
1433 p_inventory_item_id => p_service_order_line_list(lv_index).inventory_item_id,
1434 p_action_source => NVL(p_order_header.order_ref_name,'XDP') ,
1435 p_action => p_service_order_line_list(lv_index).action_code) = 'Y' THEN
1436
1437 p_service_order_line_list(lv_index).is_package_flag := 'Y';
1438
1439 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1440 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1441 dbg_msg := ('Package Action is Valid');
1442 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1443 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1444 END IF;
1445 END IF;
1446 END IF;
1447 END IF;
1448 ELSE
1449 l_service_item_name := p_service_order_line_list(lv_index).service_item_name;
1450 l_line_number := p_service_order_line_list(lv_index).line_number ;
1451
1452 RAISE e_unknown_package_name;
1453
1454 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1455 dbg_msg := ('Unknown Package Name');
1456 IF (FND_LOG.TEST(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE')) THEN
1457 FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION, 'xdp.plsql.XDP_ORDER.VALIDATE_ORDER_LINE', dbg_msg);
1458 END IF;
1459 END IF;
1460 END IF;
1461 END IF;
1462 END IF;
1463 END IF;
1464 EXIT WHEN lv_index = p_service_order_line_list.LAST ;
1465 lv_index := p_service_order_line_list.NEXT(lv_index);
1466 END LOOP ;
1467
1468 EXCEPTION
1469 WHEN e_line_number_null THEN
1470 FND_MESSAGE.SET_NAME('XDP', 'XDP_LINENUM_NOTNULL'); --Done -191257
1471 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1472 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1473
1474 WHEN e_lineitem_name_null THEN
1475 FND_MESSAGE.SET_NAME('XDP', 'XDP_LINEITEM_NAME_NOTNULL'); --Done 191258
1476 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1477 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1478
1479 WHEN e_act_invalid_service_li THEN
1480 FND_MESSAGE.SET_NAME('XDP', 'XDP_ACTION_INVALID_SERVICE_LI'); -- Done
1481 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1482 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1483 FND_MESSAGE.SET_TOKEN('SERVICE_ITEM_NAME', l_service_item_name);
1484 FND_MESSAGE.SET_TOKEN('ACTION', l_action_code);
1485 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1486
1487 WHEN e_unknown_package_name THEN
1488 FND_MESSAGE.SET_NAME('XDP', 'XDP_UNKNOWN_PACKAGE_NAME'); --Done -191387
1489 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1490 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1491 FND_MESSAGE.SET_TOKEN('SERVICE_ITEM_NAME', l_service_item_name);
1492 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1493
1494 WHEN e_pkg_no_unique_match THEN
1495 FND_MESSAGE.SET_NAME('XDP', 'XDP_PKG_NO_UNIQUE_MATCH');--Done 191264
1496 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1497 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1498 FND_MESSAGE.SET_TOKEN('SERVICE_ITEM_NAME', l_service_item_name);
1499 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1500
1501 WHEN e_svc_no_unique_match THEN
1502 FND_MESSAGE.SET_NAME('XDP', 'XDP_SVC_NO_UNIQUE_MATCH');--Done 191265
1503 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1504 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1505 FND_MESSAGE.SET_TOKEN('SERVICE_ITEM_NAME', l_service_item_name);
1506 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1507
1508 WHEN e_ibsource_null THEN
1509 FND_MESSAGE.SET_NAME('XDP', 'XDP_IBSOURCE_NOTNULL'); --Done 191373
1510 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1511 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1512 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1513
1514 WHEN e_ibsource_invalid THEN
1515 FND_MESSAGE.SET_NAME('XDP', 'XDP_IBSOURCE_INVALID');--Done 191374
1516 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1517 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1518 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1519
1520 WHEN e_ordsource_notnull THEN
1521 FND_MESSAGE.SET_NAME('XDP', 'XDP_ORDSOURCE_NOTNULL');--Done 191375
1522 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1523 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1524 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_ORDER_LINE');
1525
1526 WHEN e_site_use_id_invalid THEN
1527 FND_MESSAGE.SET_NAME('XDP','XDP_SITE_USE_ID_INVALID');--Done 191376
1528 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1529 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
1530 FND_MESSAGE.SET_TOKEN('SITE_USE_ID',l_site_use_id);
1531 XDP_UTILITIES.raise_exception('XDP_ORDER.VALIDATE_ORDER_LINES');
1532
1533 WHEN OTHERS THEN
1534 XDP_UTILITIES.GENERIC_ERROR('XDP_PROCESS_ORDER.VALIDATE_ORDER_LINE'
1535 ,G_external_order_reference
1536 , sqlcode
1537 , sqlerrm);
1538 END VALIDATE_ORDER_LINE;
1539 --================================================================================
1540 -- Procedure to Validate Line Item and item_id and comms_activation_flag
1541 --================================================================================
1542 PROCEDURE VALIDATE_LINE_ITEM (P_ORGANIZATION_ID IN NUMBER ,
1543 P_ITEM_NUMBER IN OUT NOCOPY VARCHAR2,
1544 P_INVENTORY_ITEM_ID IN OUT NOCOPY NUMBER ,
1545 P_ACTIVATION_FLAG OUT NOCOPY VARCHAR2) IS
1546 lv_inventory_item_id NUMBER ;
1547 lv_activation_flag VARCHAR2(1);
1548 lv_item_number VARCHAR2(81);
1549 l_inventory_item_id NUMBER;
1550 l_item_number VARCHAR2(40);
1551 e_unknown_service_name EXCEPTION;
1552 e_invalid_inventory_item_id EXCEPTION;
1553 e_invalid_service_item_name EXCEPTION;
1554
1555 BEGIN
1556
1557 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1558 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_LINE_ITEM')) THEN
1559 dbg_msg := ('Procedure Validate_Line_Item begins.');
1560 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1561 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_LINE_ITEM', dbg_msg);
1562 END IF;
1563 END IF;
1564 END IF;
1565
1566 IF ((p_inventory_item_id IS NULL) AND (p_item_number IS NULL )) THEN
1567 RAISE e_unknown_service_name ;
1568 END IF ;
1569 IF p_inventory_item_id IS NOT NULL THEN
1570
1571 BEGIN
1572 SELECT inventory_item_id ,
1573 comms_activation_reqd_flag,
1574 concatenated_segments
1575 INTO lv_inventory_item_id,
1576 lv_activation_flag,
1577 lv_item_number
1578 FROM mtl_system_items_vl
1579 WHERE organization_id = p_organization_id
1580 AND inventory_item_id = p_inventory_item_id
1581 AND NVL(start_date_active,sysdate) <= sysdate
1582 AND NVL(end_date_active,sysdate) >= sysdate ;
1583
1584 p_inventory_item_id := lv_inventory_item_id ;
1585 p_activation_flag := lv_activation_flag ;
1586 p_item_number := lv_item_number ;
1587
1588 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1589 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_LINE_ITEM')) THEN
1590 dbg_msg := ('Inventory Id is: '||p_inventory_item_id||' Comms Activation Req Flag is: '||p_activation_flag);
1591 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1592 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_LINE_ITEM', dbg_msg);
1593 END IF;
1594 END IF;
1595 END IF;
1596
1597 EXCEPTION
1598 WHEN no_data_found THEN
1599 RAISE e_invalid_inventory_item_id;
1600 END ;
1601 ELSE
1602 BEGIN
1603 SELECT inventory_item_id,
1604 comms_activation_reqd_flag
1605 INTO lv_inventory_item_id,
1606 lv_activation_flag
1607 FROM mtl_system_items_vl
1608 WHERE organization_id = p_organization_id
1609 AND concatenated_segments = p_item_number
1610 AND NVL(start_date_active,sysdate) <= sysdate
1611 AND NVL(end_date_active,sysdate) >= sysdate ;
1612
1613 p_inventory_item_id := lv_inventory_item_id ;
1614 p_activation_flag := lv_activation_flag ;
1615 p_item_number := p_item_number ;
1616
1617 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1618 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_LINE_ITEM')) THEN
1619 dbg_msg := ('Inventory Id is: '||p_inventory_item_id||' Comms Activation Req Flag is: '||p_activation_flag);
1620 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1621 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_LINE_ITEM', dbg_msg);
1622 END IF;
1623 END IF;
1624 END IF;
1625
1626 EXCEPTION
1627 WHEN no_data_found THEN
1628 RAISE e_invalid_service_item_name ;
1629 END ;
1630 END IF;
1631 EXCEPTION
1632 WHEN e_unknown_service_name THEN
1633 FND_MESSAGE.SET_NAME('XDP','XDP_UNKNOWN_SERVICE_NAME');--191263
1634 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1635 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_LINE_ITEM');
1636
1637 --Fixed Bug # 2110849 - mviswana 11/19/2001
1638 WHEN e_invalid_service_item_name THEN
1639 FND_MESSAGE.SET_NAME('XDP','XDP_INVALID_SERVICE_ITEM_NAME');--191388
1640 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1641 FND_MESSAGE.SET_TOKEN('SERVICE_ITEM_NAME',p_item_number);
1642 FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_organization_id);
1643 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_LINE_ITEM');
1644
1645 WHEN e_invalid_inventory_item_id THEN
1646 FND_MESSAGE.SET_NAME('XDP','XDP_INVALID_INVENTORY_ITEM_ID');--191389
1647 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID',p_inventory_item_id );
1648 FND_MESSAGE.SET_TOKEN('ORGANIZATION',p_organization_id);
1649 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
1650 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.VALIDATE_LINE_ITEM');
1651
1652 WHEN others THEN
1653 XDP_UTILITIES.GENERIC_ERROR('XDP_ORDER.VALIDATE_LINE_ITEM'
1654 ,G_external_order_reference
1655 ,sqlcode
1656 ,sqlerrm);
1657
1658 END VALIDATE_LINE_ITEM ;
1659 -------------------------------------------------------------------------------
1660 --***********************************************************************
1661 -- Definition of Procedure Populate Order: calls Populate Order Header,
1662 --Populate Order_Lines,Populate Fulfill Worklist
1663 --and Populate Worklist Deatils
1664 --***********************************************************************
1665
1666 PROCEDURE Populate_Order(
1667 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
1668 P_ORDER_PARAMETER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_PARAM_LIST,
1669 P_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
1670 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
1671 )
1672 IS
1673 lv_service_order_line_list XDP_TYPES.SERVICE_ORDER_LINE_LIST;
1674 lv_service_line_attrib_list XDP_TYPES.SERVICE_LINE_ATTRIB_LIST;
1675 lv_service_line_rel_list XDP_TYPES.SERVICE_LINE_REL_LIST;
1676 lv_fulfill_worklist_list XDP_TYPES.FULFILL_WORKLIST_LIST;
1677 lv_order_header XDP_TYPES.SERVICE_ORDER_HEADER;
1678 lv_service_line_attrib_list1 XDP_TYPES.SERVICE_LINE_ATTRIB_LIST;
1679 lv_workitem_eval_param_list XDP_TYPES.SERVICE_LINE_ATTRIB_LIST;
1680
1681 BEGIN
1682
1683 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1684 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER')) THEN
1685 dbg_msg := ('Procedure Populate_Order begins');
1686 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1687 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER', dbg_msg);
1688 END IF;
1689 END IF;
1690 END IF;
1691 /**********************************
1692 populate order header
1693 ***********************************/
1694
1695 Populate_Order_Header(
1696 P_ORDER_HEADER,
1697 P_ORDER_PARAMETER
1698 );
1699
1700 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1701 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER')) THEN
1702 dbg_msg := ('Completed Populating Order Header');
1703 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1704 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER', dbg_msg);
1705 END IF;
1706 END IF;
1707 END IF;
1708
1709 /**********************************
1710 populate order line details
1711 ***********************************/
1712
1713 POPULATE_ORDER_LINES(
1714 P_ORDER_HEADER => populate_order.p_order_header,
1715 P_ORDER_LINE_LIST => populate_order.p_order_line_list,
1716 P_LINE_PARAMETER_LIST => populate_order.p_line_parameter_list,
1717 P_SERVICE_ORDER_LINE_LIST => lv_service_order_line_list,
1718 P_ORDER_LINE_REL_LIST => lv_service_line_rel_list,
1719 P_SERVICE_LINE_ATTRIB_LIST => lv_service_line_attrib_list
1720 );
1721
1722 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1723 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER')) THEN
1724 dbg_msg := ('Completed Populating Order Lines');
1725 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1726 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER', dbg_msg);
1727 END IF;
1728 END IF;
1729 END IF;
1730
1731 /**********************************
1732 populate fulfill worklist
1733 ***********************************/
1734
1735 POPULATE_FULFILL_WORKLIST_LIST(
1736 P_ORDER_HEADER => populate_order.p_order_header,
1737 P_SERVICE_ORDER_LINE_LIST => lv_service_order_line_list,
1738 P_SERVICE_LINE_ATTRIB_LIST => lv_service_line_attrib_list,
1739 P_FULFILL_WORKLIST_LIST => lv_fulfill_worklist_list
1740 );
1741
1742 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1743 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER')) THEN
1744 dbg_msg := ('Completed Populating Fulfill Worklist');
1745 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1746 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER', dbg_msg);
1747 END IF;
1748 END IF;
1749 END IF;
1750 /****************************************
1751 validate workitem parameter configuration
1752 ****************************************/
1753
1754 VALIDATE_WI_PARAM_CONFIG (
1755 P_ORDER_HEADER => populate_order.p_order_header,
1756 P_SERVICE_ORDER_LINE_LIST => lv_service_order_line_list,
1757 P_FULFILL_WORKLIST_LIST => lv_fulfill_worklist_list ,
1758 P_SERVICE_LINE_ATTRIB_LIST_IN => lv_service_line_attrib_list,
1759 P_SERVICE_LINE_ATTRIB_LIST_OUT => lv_service_line_attrib_list1,
1760 P_WORKITEM_EVAL_PARAM_LIST_OUT => lv_workitem_eval_param_list
1761 );
1762
1763 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1764 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER')) THEN
1765 dbg_msg := ('Validated Workitem Parameter Configuration');
1766 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1767 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER', dbg_msg);
1768 END IF;
1769 END IF;
1770 END IF;
1771
1772
1773 /***********************************
1774 populate worklist details
1775 ************************************/
1776
1777 POPULATE_WORKLIST_DETAILS (
1778 P_SERVICE_LINE_ATTRIB_LIST =>lv_service_line_attrib_list1
1779 );
1780
1781 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1782 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER')) THEN
1783 dbg_msg := ('Completed Populating Worklist Details');
1784 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1785 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER', dbg_msg);
1786 END IF;
1787 END IF;
1788 END IF;
1789
1790 --- Call a procedure eveluate and insert parameters into worklist details
1791
1792 /***********************************
1793 Evaluate workitem parameters
1794 ************************************/
1795
1796 EVALUATE_WORKITEM_PARAMS(
1797 P_ORDER_HEADER => populate_order.p_order_header,
1798 P_WORKITEM_EVAL_PARAM_LIST => lv_workitem_eval_param_list
1799 );
1800
1801 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1802 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EVALUATE_WORKITEM_PARAMS')) THEN
1803 dbg_msg := ('Completed evaluating workitem parameters');
1804 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1805 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EVALUATE_WORKITEM_PARAMS', dbg_msg);
1806 END IF;
1807 END IF;
1808 END IF;
1809
1810
1811
1812 --------------------------------------------
1813 -- Added by sxbanerj -08/01/2001-- RVU call
1814 --------------------------------------------
1815 RUNTIME_VALIDATION(
1816 P_FULFILL_WORKLIST_LIST => lv_fulfill_worklist_list
1817 ,P_ORDER_HEADER => populate_order.p_order_header
1818 );
1819
1820 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1821 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER')) THEN
1822 dbg_msg := ('Runtime Validation Successful');
1823 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1824 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER', dbg_msg);
1825 END IF;
1826 END IF;
1827 END IF;
1828
1829 EXCEPTION
1830 WHEN OTHERS THEN
1831 XDP_UTILITIES.generic_error('XDP_ORDER.POPULATE_ORDER'
1832 ,G_external_order_reference
1833 ,SQLCODE
1834 ,SQLERRM);
1835 END Populate_Order;
1836 -------------------------------------------------------------------------------
1837 --**********************************************
1838 --Definition of Procedure Populate_Order_Header
1839 --***********************************************
1840 PROCEDURE Populate_Order_Header(
1841 P_ORDER_HEADER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_HEADER,
1842 P_ORDER_PARAMETER IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_PARAM_LIST
1843 )
1844 IS
1845 -- Local Variables
1846 lv_date DATE;
1847 lv_index BINARY_INTEGER;
1848 lv_tmp_id number;
1849 lv_temp number;
1850 lv_prov_required_flag varchar2(1);
1851 lv_org_id NUMBER;
1852 l_status_param_found BOOLEAN := FALSE ;
1853 l_result_param_found BOOLEAN := FALSE ;
1854 lv_name_tab XDP_TYPES.VARCHAR2_40_TAB;
1855 lv_val_tab XDP_TYPES.VARCHAR2_4000_TAB;
1856
1857 -- Declare Exceptions
1858 e_order_num_duplicate EXCEPTION;
1859
1860 BEGIN
1861
1862 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1863 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER')) THEN
1864 dbg_msg := ('Procedure Populate_Order_Header begins.');
1865 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1866 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER', dbg_msg);
1867 END IF;
1868 END IF;
1869 END IF;
1870
1871 -- Validate Required Fulfillment Date
1872 IF P_ORDER_HEADER.required_fulfillment_date IS NULL THEN
1873 lv_date := sysdate;
1874 ELSE
1875 lv_date := P_ORDER_HEADER.required_fulfillment_date ;
1876 END IF;
1877 -- Validate Order Priority
1878 IF p_order_header.priority is null then
1879 p_order_header.priority := 100;
1880 END IF;
1881 -- Get the org Id
1882 lv_org_id := FND_PROFILE.VALUE('ORG_ID');
1883
1884 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1885 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER')) THEN
1886 dbg_msg := ('Required Fulfillment Date is: '||lv_date||' Order Priority is: '||p_order_header.priority
1887 ||' Operating Unit is: '||lv_org_id);
1888 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
1889 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER', dbg_msg);
1890 END IF;
1891 END IF;
1892 END IF;
1893
1894 BEGIN
1895 insert into xdp_order_headers
1896 (
1897 order_id,
1898 external_order_number,
1899 status_code,
1900 date_received,
1901 provisioning_date,
1902 due_date,
1903 customer_required_date,
1904 external_order_version,
1905 order_source,
1906 customer_id,
1907 customer_name,
1908 org_id,
1909 telephone_number,
1910 priority,
1911 related_order_id,
1912 order_type,
1913 previous_order_id,
1914 next_order_id,
1915 jeopardy_enabled_flag,
1916 order_ref_name,
1917 order_ref_value,
1918 cust_account_id,
1919 ATTRIBUTE_CATEGORY,
1920 ATTRIBUTE1,
1921 ATTRIBUTE2,
1922 ATTRIBUTE3,
1923 ATTRIBUTE4,
1924 ATTRIBUTE5,
1925 ATTRIBUTE6,
1926 ATTRIBUTE7,
1927 ATTRIBUTE8,
1928 ATTRIBUTE9,
1929 ATTRIBUTE10,
1930 ATTRIBUTE11,
1931 ATTRIBUTE12,
1932 ATTRIBUTE13,
1933 ATTRIBUTE14,
1934 ATTRIBUTE15,
1935 ATTRIBUTE16,
1936 ATTRIBUTE17,
1937 ATTRIBUTE18,
1938 ATTRIBUTE19,
1939 ATTRIBUTE20,
1940 created_by,
1941 creation_date,
1942 last_updated_by,
1943 last_update_date,
1944 last_update_login
1945 )
1946 values
1947 (
1948 XDP_ORDER_HEADERS_S.NEXTVAL,
1949 p_order_header.order_number,
1950 'STANDBY',
1951 sysdate,
1952 lv_date,
1953 p_order_header.due_date,
1954 p_order_header.customer_required_date ,
1955 NVL(p_order_header.order_version,'1'),
1956 p_order_header.order_source ,
1957 p_order_header.customer_id ,
1958 (p_order_header.customer_name),
1959 lv_org_id ,
1960 p_order_header.telephone_number,
1961 p_order_header.priority ,
1962 p_order_header.related_order_id ,
1963 p_order_header.order_type,
1964 p_order_header.previous_order_id,
1965 p_order_header.next_order_id,
1966 p_order_header.jeopardy_enabled_flag,
1967 p_order_header.order_ref_name,
1968 p_order_header.order_ref_value,
1969 p_order_header.cust_account_id,
1970 p_order_header.ATTRIBUTE_CATEGORY,
1971 p_order_header.ATTRIBUTE1,
1972 p_order_header.ATTRIBUTE2,
1973 p_order_header.ATTRIBUTE3,
1974 p_order_header.ATTRIBUTE4,
1975 p_order_header.ATTRIBUTE5,
1976 p_order_header.ATTRIBUTE6,
1977 p_order_header.ATTRIBUTE7,
1978 p_order_header.ATTRIBUTE8,
1979 p_order_header.ATTRIBUTE9,
1980 p_order_header.ATTRIBUTE10,
1981 p_order_header.ATTRIBUTE11,
1982 p_order_header.ATTRIBUTE12,
1983 p_order_header.ATTRIBUTE13,
1984 p_order_header.ATTRIBUTE14,
1985 p_order_header.ATTRIBUTE15,
1986 p_order_header.ATTRIBUTE16,
1987 p_order_header.ATTRIBUTE17,
1988 p_order_header.ATTRIBUTE18,
1989 p_order_header.ATTRIBUTE19,
1990 p_order_header.ATTRIBUTE20,
1991 fnd_global.user_id,
1992 sysdate,
1993 fnd_global.user_id,
1994 sysdate,
1995 fnd_global.login_id
1996 ) RETURNING ORDER_ID INTO P_order_header.order_id;
1997
1998 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
1999 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER')) THEN
2000 dbg_msg := ('Successfully inserted record in Order Headers');
2001 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2002 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER', dbg_msg);
2003 END IF;
2004 END IF;
2005 END IF;
2006
2007 EXCEPTION
2008 WHEN DUP_VAL_ON_INDEX THEN
2009 IF INSTR(SQLERRM,'XDP_ORDER_HEADERS_U2')>0 THEN
2010 RAISE e_order_num_duplicate;
2011 END IF;
2012
2013 WHEN OTHERS THEN
2014 XDP_UTILITIES.generic_error('XDP_ORDER.POPULATE_ORDER_HEADER'
2015 ,G_external_order_reference
2016 ,SQLCODE
2017 ,SQLERRM);
2018
2019 END ;
2020 --******************************
2021 --Populate Order Parameter table
2022 --*****************************
2023
2024 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2025 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER')) THEN
2026 dbg_msg := ('Number of records in Order Param List is: '||p_order_parameter.COUNT);
2027 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2028 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER', dbg_msg);
2029 END IF;
2030 END IF;
2031 END IF;
2032
2033 l_status_param_found := FALSE;
2034 l_result_param_found := FALSE;
2035
2036 IF p_order_parameter.COUNT > 0 THEN
2037
2038 lv_index := p_order_parameter.FIRST;
2039 FOR lv_temp IN 1..p_order_parameter.COUNT LOOP
2040
2041 IF p_order_parameter(lv_index).parameter_name = 'FULFILLMENT_STATUS' THEN
2042 l_status_param_found := TRUE ;
2043 ELSIF p_order_parameter(lv_index).parameter_name = 'FULFILLMENT_RESULT' THEN
2044 l_result_param_found := TRUE;
2045 END IF ;
2046
2047 lv_name_tab(lv_temp) := p_order_parameter(lv_index).parameter_name;
2048 lv_val_tab(lv_temp) := p_order_parameter(lv_index).parameter_value;
2049 lv_index := p_order_parameter.NEXT(lv_index);
2050
2051 END LOOP;
2052
2053 IF l_status_param_found THEN
2054 null;
2055 ELSE lv_name_tab(lv_name_tab.COUNT+1) := 'FULFILLMENT_STATUS' ;
2056 lv_val_tab(lv_val_tab.COUNT+1) := null;
2057 END IF ;
2058
2059 IF l_result_param_found THEN
2060 null;
2061 ELSE lv_name_tab(lv_name_tab.COUNT+1) := 'FULFILLMENT_RESULT' ;
2062 lv_val_tab(lv_val_tab.COUNT+1) := null;
2063 END IF ;
2064 ELSE
2065 lv_name_tab(1) := 'FULFILLMENT_STATUS' ;
2066 lv_val_tab(1) := null;
2067 lv_name_tab(2) := 'FULFILLMENT_RESULT' ;
2068 lv_val_tab(2) := null;
2069 END IF ;
2070
2071
2072 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2073 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER')) THEN
2074 dbg_msg := ('Number of records to be inserted in Order Parameters: '||p_order_parameter.COUNT);
2075 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2076 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER', dbg_msg);
2077 END IF;
2078 END IF;
2079 END IF;
2080
2081 --FORALL lv_temp IN lv_name_tab.FIRST..lv_name_tab.LAST
2082 FORALL lv_temp IN 1..lv_name_tab.COUNT
2083 insert into xdp_order_parameters
2084 (
2085 order_id,
2086 order_parameter_name,
2087 order_parameter_value,
2088 created_by,
2089 creation_date,
2090 last_updated_by,
2091 last_update_date,
2092 last_update_login
2093 )
2094 values
2095 (
2096 p_order_header.order_id,
2097 lv_name_tab(lv_temp),
2098 lv_val_tab(lv_temp),
2099 fnd_global.user_id,
2100 sysdate,
2101 fnd_global.user_id,
2102 sysdate,
2103 fnd_global.login_id
2104 );
2105
2106 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2107 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER')) THEN
2108 dbg_msg := ('Records successfully Inserted in Order Parameters');
2109 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2110 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_HEADER', dbg_msg);
2111 END IF;
2112 END IF;
2113 END IF;
2114
2115 -- Release the Memory so that we can reuse;
2116 lv_name_tab.DELETE;
2117 lv_val_tab.DELETE;
2118 EXCEPTION
2119 WHEN e_order_num_duplicate THEN
2120 FND_MESSAGE.SET_NAME('XDP','XDP_ORDERNUM_EXISTS'); --191252
2121 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
2122 XDP_UTILITIES.raise_exception('XDP_ORDER.POPULATE_ORDER_HEADER');
2123
2124 WHEN OTHERS THEN
2125 XDP_UTILITIES.generic_error('XDP_ORDER.POPULATE_ORDER_HEADER'
2126 ,G_external_order_reference
2127 ,SQLCODE
2128 ,SQLERRM);
2129 END Populate_Order_Header;
2130
2131
2132 -- ---------------------------------------------------------------------------
2133 -- populate order lines
2134 -- ---------------------------------------------------------------------------
2135
2136 PROCEDURE POPULATE_ORDER_LINES
2137 (P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
2138 P_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
2139 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST,
2140 P_SERVICE_ORDER_LINE_LIST OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
2141 P_ORDER_LINE_REL_LIST OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
2142 P_SERVICE_LINE_ATTRIB_LIST OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST
2143 ) IS
2144
2145 p_order_line_det_list XDP_TYPES.SERVICE_LINE_PARAM_LIST;
2146 lv_param_index NUMBER;
2147 lv_line_index NUMBER ;
2148 l_line_number NUMBER;
2149 lv_line_exists_flag VARCHAR2(1);
2150 l_parameter_name VARCHAR2(2000);
2151 e_xdp_ordlist_no_linenum EXCEPTION;
2152
2153 BEGIN
2154
2155 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2156 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES')) THEN
2157 dbg_msg := ('Procedure Populate_Order_Lines begins.');
2158 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2159 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES', dbg_msg);
2160 END IF;
2161 END IF;
2162 END IF;
2163
2164 /*********************************************
2165 Check if the line param list contains the right line number
2166 ************************************************/
2167
2168 IF P_LINE_PARAMETER_LIST.COUNT > 0 THEN
2169
2170 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2171 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES')) THEN
2172 dbg_msg := ('Number of records in Line Parameter List is: '||P_LINE_PARAMETER_LIST.COUNT);
2173 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2174 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES', dbg_msg);
2175 END IF;
2176 END IF;
2177 END IF;
2178
2179 lv_param_index := p_line_parameter_list.first;
2180 loop
2181 lv_line_index := p_order_line_list.FIRST;
2182 LOOP
2183 IF p_line_parameter_list(lv_param_index).line_number =
2184 p_order_line_list(lv_line_index).line_number THEN
2185 lv_line_exists_flag := 'Y';
2186 EXIT ;
2187 ELSE lv_line_exists_flag := 'N';
2188 END IF ;
2189 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2190 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES')) THEN
2191 dbg_msg := ('Record: '||lv_line_index||' has the line_exists_flag set to: '||lv_line_exists_flag);
2192 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2193 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES', dbg_msg);
2194 END IF;
2195 END IF;
2196 END IF;
2197
2198 exit when lv_line_index = p_order_line_list.last;
2199 lv_line_index := p_order_line_list.next(lv_line_index);
2200
2201 END LOOP ;
2202
2203 IF lv_line_exists_flag = 'N' THEN
2204 l_line_number := p_line_parameter_list(lv_param_index).line_number ;
2205 l_parameter_name := p_line_parameter_list(lv_param_index).parameter_name ;
2206 RAISE e_xdp_ordlist_no_linenum ;
2207 END IF;
2208
2209 exit when lv_param_index = p_line_parameter_list.last;
2210 lv_param_index := p_line_parameter_list.next(lv_param_index);
2211 end loop;
2212 END IF;
2213
2214 /**********************************
2215 create line details
2216 ***********************************/
2217
2218 CREATE_LINE_DETAILS
2219 (P_ORDER_HEADER ,
2220 P_ORDER_LINE_LIST ,
2221 P_LINE_PARAMETER_LIST ,
2222 P_SERVICE_ORDER_LINE_LIST ,
2223 P_ORDER_LINE_REL_LIST ,
2224 P_SERVICE_LINE_ATTRIB_LIST ,
2225 P_ORDER_LINE_DET_LIST
2226 );
2227
2228 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2229 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES')) THEN
2230 dbg_msg := ('Successfully Created Line Details');
2231 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2232 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES', dbg_msg);
2233 END IF;
2234 END IF;
2235 END IF;
2236
2237 /**********************************
2238 populate_line_details
2239 *********************************/
2240
2241 POPULATE_LINES(
2242 P_ORDER_HEADER,
2243 P_SERVICE_ORDER_LINE_LIST,
2244 P_ORDER_LINE_REL_LIST,
2245 P_LINE_PARAMETER_LIST,
2246 P_ORDER_LINE_DET_LIST
2247 );
2248
2249 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2250 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES')) THEN
2251 dbg_msg := ('Completed Populating Order Lines');
2252 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2253 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_ORDER_LINES', dbg_msg);
2254 END IF;
2255 END IF;
2256 END IF;
2257 EXCEPTION
2258 WHEN e_xdp_ordlist_no_linenum THEN
2259 FND_MESSAGE.SET_NAME('XDP','XDP_ORDLIST_NO_LINENUM');
2260 FND_MESSAGE.SET_TOKEN('LINE_NUMBER',l_line_number);
2261 FND_MESSAGE.SET_TOKEN('PARAM_NAME',l_parameter_name);
2262 XDP_UTILITIES.raise_exception('XDP_ORDER.POPULATE_ORDER_LINES');
2263
2264 WHEN others THEN
2265
2266 xdp_utilities.generic_error('XDP_ORDER.POPULATE_ORDER_LINES'
2267 ,G_external_order_reference
2268 , sqlcode
2269 , sqlerrm );
2270 END POPULATE_ORDER_LINES;
2271
2272 -- ===========================================================================
2273 -- create line details
2274 -- ===========================================================================
2275
2276 PROCEDURE CREATE_LINE_DETAILS
2277 (P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
2278 P_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
2279 P_LINE_PARAMETER_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST,
2280 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
2281 P_ORDER_LINE_REL_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
2282 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
2283 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
2284 ) IS
2285
2286 lv_index BINARY_INTEGER;
2287 lv_temp NUMBER;
2288 lv_temp2 NUMBER;
2289 l_max_line_num NUMBER;
2290 lv_max_line_num NUMBER;
2291 lv_temp_counter NUMBER := 0;
2292 l_line_item_id NUMBER;
2293 l_order_line_rec XDP_TYPES.LINE_ITEM;
2294 lv_fnd_count NUMBER := 0;
2295 l_param_exist VARCHAR2(5) :='FALSE';
2296 l_max NUMBER;
2297 l_param_line_list_counter NUMBER:=0;
2298
2299 BEGIN
2300
2301 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2302 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2303 dbg_msg := ('Procedure Create_Line_Details begins.');
2304 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2305 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2306 END IF;
2307 END IF;
2308 END IF;
2309
2310 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2311 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2312 dbg_msg := ('Number of records in Order Line List: '||p_order_line_list.COUNT);
2313 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2314 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2315 END IF;
2316 END IF;
2317 END IF;
2318
2319
2320 lv_index := p_order_line_list.FIRST;
2321
2322 /*
2323 --begin new stuff
2324 FOR lv_line_counter IN 1..p_order_line_list.COUNT LOOP
2325 l_param_exist := 'FALSE';
2326 FOR lv_temp2 IN 1..p_line_parameter_list.COUNT LOOP
2327 IF ((p_line_parameter_list(lv_temp2).line_number = p_order_line_list(lv_line_counter-1).line_number) AND
2328 (p_line_parameter_list(lv_temp2).parameter_name = 'FULFILLMENT_STATUS')) THEN
2329 l_param_exist := 'TRUE';
2330 END IF;
2331 END LOOP;
2332
2333 IF l_param_exist = 'FALSE' THEN
2334 l_param_line_list_counter := p_line_parameter_list.COUNT;
2335 p_line_parameter_list(l_param_line_list_counter + 1).parameter_name := 'FULFILLMENT_STATUS';
2336 p_line_parameter_list(l_param_line_list_counter + 1).parameter_value := '';
2337 p_line_parameter_list(l_param_line_list_counter + 1).parameter_ref_value := '';
2338 p_line_parameter_list(l_param_line_list_counter + 1).line_number := p_order_line_list(lv_index).line_number;
2339 END IF;
2340 lv_index := lv_index + 1;
2341 END LOOP;
2342
2343 -- End New Stuff
2344 */
2345
2346
2347 lv_index := p_order_line_list.FIRST;
2348 FOR lv_temp IN 1..p_order_line_list.COUNT LOOP
2349
2350 --increment the lv_temp_counter
2351 lv_temp_counter := p_service_order_line_list.COUNT + 1;
2352
2353 --select the sequence from xdp_order_line_s
2354 select xdp_order_line_items_s.nextval
2355 into l_line_item_id
2356 from dual;
2357
2358 --increment the lv_fnd_counter
2359 lv_fnd_count := lv_fnd_count + 1;
2360
2361 -- insert into the new record structure p_service_order_line_list
2362
2363 p_service_order_line_list(lv_temp_counter) := p_order_line_list(lv_index);
2364 p_service_order_line_list(lv_temp_counter).line_item_id := l_line_item_id;
2365 p_service_order_line_list(lv_temp_counter).is_virtual_line_flag := 'N';
2366
2367 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2368 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2369 dbg_msg := ('IB Source is: '||p_service_order_line_list(lv_temp_counter).ib_source||' for record: '||lv_temp_counter);
2370 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2371 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2372 END IF;
2373 END IF;
2374 END IF;
2375
2376 IF p_order_line_list(lv_index).ib_source = 'NONE' AND p_order_line_list(lv_index).is_package_flag = 'Y' THEN
2377 p_service_order_line_list(lv_temp_counter).is_package_flag := 'Y' ;
2378
2379 EXPLODE_PACKAGE(
2380 P_SERVICE_ORDER_LINE_LIST(lv_temp_counter), -- P_ORDER_LINE_LIST(lv_index),
2381 P_SERVICE_ORDER_LINE_LIST,
2382 P_ORDER_LINE_REL_LIST,
2383 P_LINE_PARAMETER_LIST,
2384 P_SERVICE_LINE_ATTRIB_LIST,
2385 P_ORDER_LINE_DET_LIST
2386 );
2387
2388 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2389 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2390 dbg_msg := ('Completed Exploding Package successfully');
2391 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2392 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2393 END IF;
2394 END IF;
2395 END IF;
2396
2397 ELSIF p_order_line_list(lv_index).ib_source = 'TXN' THEN
2398
2399 EXPLODE_TXN_IB(
2400 P_SERVICE_ORDER_LINE_LIST,
2401 P_SERVICE_ORDER_LINE_LIST(lv_temp_counter),
2402 P_ORDER_LINE_REL_LIST,
2403 P_SERVICE_LINE_ATTRIB_LIST );
2404
2405 IF P_SERVICE_ORDER_LINE_LIST(lv_temp_counter).IB_SOURCE = 'NONE' THEN
2406
2407 Fetch_Line_details(p_service_order_line_list(lv_temp_counter),
2408 p_line_parameter_list,
2409 p_order_line_det_list,
2410 P_SERVICE_LINE_ATTRIB_LIST);
2411
2412
2413 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2414 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2415 dbg_msg := ('Completed building Parameter List for Service');
2416 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2417 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2418 END IF;
2419 END IF;
2420 END IF;
2421
2422 END IF ;
2423
2424 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2425 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2426 dbg_msg := ('Completed Exploding Transaction Details successfully');
2427 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2428 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2429 END IF;
2430 END IF;
2431 END IF;
2432
2433 ELSIF p_order_line_list(lv_index).ib_source = 'CSI' THEN
2434 IB_CSI_LINE(
2435 P_SERVICE_ORDER_LINE_LIST(lv_temp_counter),
2436 P_SERVICE_LINE_ATTRIB_LIST,
2437 P_LINE_PARAMETER_LIST,
2438 P_ORDER_LINE_DET_LIST
2439 );
2440
2441 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2442 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2443 dbg_msg := ('Completed Processing Install Base Line');
2444 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2445 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2446 END IF;
2447 END IF;
2448 END IF;
2449
2450 ELSE
2451
2452 --- Need to check on type of paramtere etc....
2453
2454 Fetch_Line_details(p_service_order_line_list(lv_temp_counter),
2455 p_line_parameter_list,
2456 p_order_line_det_list,
2457 P_SERVICE_LINE_ATTRIB_LIST);
2458
2459
2460 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2461 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS')) THEN
2462 dbg_msg := ('Completed building Parameter List for Service');
2463 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2464 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_LINE_DETAILS', dbg_msg);
2465 END IF;
2466 END IF;
2467 END IF;
2468 END IF;
2469 lv_index := p_order_line_list.NEXT(lv_index);
2470 END LOOP;
2471
2472 EXCEPTION
2473
2474 WHEN OTHERS THEN
2475 xdp_utilities.generic_error('XDP_ORDER.CREATE_LINE_DETAILS'
2476 , G_external_order_reference
2477 , SQLCODE
2478 , SQLERRM);
2479 END CREATE_LINE_DETAILS;
2480
2481 Procedure Fetch_Line_details(p_line_item in XDP_TYPES.SERVICE_LINE_ITEM,
2482 p_line_parameter_list in XDP_TYPES.SERVICE_LINE_PARAM_LIST,
2483 p_order_line_det_list in OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST,
2484 p_service_line_attrib_list in OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST)
2485 is
2486 lv_line_number number;
2487 lv_line_id number;
2488 lv_count number;
2489 lv_svc_count number;
2490 lv_fnd_count NUMBER := 0;
2491 begin
2492
2493 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2494 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS')) THEN
2495 dbg_msg := ('Procedure Fetch_Line_Details begins.');
2496 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2497 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS', dbg_msg);
2498 END IF;
2499 END IF;
2500 END IF;
2501
2502 lv_line_number := p_line_item.line_number;
2503 lv_line_id := p_line_item.line_item_id;
2504
2505 if p_order_line_det_list.count = 0 then
2506 lv_count := 1;
2507 else
2508 lv_count := p_order_line_det_list.last + 1;
2509 end if;
2510
2511 if p_service_line_attrib_list.count = 0 then
2512 lv_svc_count := 1;
2513 else
2514 lv_svc_count := p_service_line_attrib_list.last + 1;
2515 end if;
2516
2517 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2518 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS')) THEN
2519 dbg_msg := ('Number of records in Line Parameter List: '||p_line_parameter_list.count);
2520 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2521 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS', dbg_msg);
2522 END IF;
2523 END IF;
2524 END IF;
2525
2526 for lv_index in 1..p_line_parameter_list.count loop
2527
2528 if p_line_parameter_list(lv_index).line_number = lv_line_number then
2529 p_order_line_det_list(lv_count).line_number :=
2530 lv_line_id;
2531
2532 p_order_line_det_list(lv_count).parameter_name :=
2533 p_line_parameter_list(lv_index).parameter_name;
2534 p_order_line_det_list(lv_count).parameter_value :=
2535 p_line_parameter_list(lv_index).parameter_value;
2536 p_order_line_det_list(lv_count).parameter_ref_value :=
2537 p_line_parameter_list(lv_index).parameter_ref_value;
2538
2539 lv_count := lv_count + 1;
2540
2541 p_service_line_attrib_list(lv_svc_count).line_item_id :=
2542 lv_line_id;
2543
2544 p_service_line_attrib_list(lv_svc_count).line_number :=
2545 lv_line_id;
2546
2547 p_service_line_attrib_list(lv_svc_count).parameter_name :=
2548 p_line_parameter_list(lv_index).parameter_name;
2549 p_service_line_attrib_list(lv_svc_count).parameter_value :=
2550 p_line_parameter_list(lv_index).parameter_value;
2551 p_service_line_attrib_list(lv_svc_count).parameter_ref_value :=
2552 p_line_parameter_list(lv_index).parameter_ref_value;
2553
2554 lv_svc_count := lv_svc_count + 1;
2555
2556 -- increment lv_fnd_count
2557 lv_fnd_count := lv_fnd_count + 1;
2558 end if;
2559 end loop;
2560
2561 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2562 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS')) THEN
2563 dbg_msg := ('Number of records Transferred to Order Line Det List: '||lv_fnd_count);
2564 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2565 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS', dbg_msg);
2566 END IF;
2567 END IF;
2568 END IF;
2569
2570 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2571 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS')) THEN
2572 dbg_msg := ('Number of records Transferred to Service Line Attrib List: '||lv_svc_count);
2573 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2574 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.FETCH_LINE_DETAILS', dbg_msg);
2575 END IF;
2576 END IF;
2577 END IF;
2578
2579 end Fetch_Line_details;
2580
2581 --================================================================================
2582 -- Procedure to explode Package and get Bill of Materials (Services)
2583 --================================================================================
2584
2585 PROCEDURE EXPLODE_PACKAGE
2586 ( P_ORDER_LINE IN XDP_TYPES.SERVICE_LINE_ITEM,
2587 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
2588 P_ORDER_LINE_REL_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
2589 P_LINE_PARAMETER_LIST_IN IN XDP_TYPES.SERVICE_LINE_PARAM_LIST,
2590 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
2591 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
2592 ) IS
2593 lv_index1 NUMBER := 0 ;
2594 lv_index2 NUMBER := 0 ;
2595 lv_index3 NUMBER := 0 ;
2596 lv_index4 NUMBER := 0 ;
2597 lv_count NUMBER := 0 ;
2598 l_line_item_id NUMBER ;
2599 lv_fnd_count NUMBER := 0;
2600 lv_fnd_count1 NUMBER := 0;
2601 i INTEGER ;
2602 l_activation_flag VARCHAR2(1) ;
2603 l_item_number VARCHAR2(240);
2604 l_inventory_item_id NUMBER ;
2605
2606 CURSOR c_bom (p_organization_id IN NUMBER,
2607 p_inventory_item_id IN NUMBER ) IS
2608 SELECT bom.assembly_item_id ,
2609 bic.component_item_id ,
2610 bic.component_quantity ,
2611 bic.item_num ,
2612 bic.operation_seq_num,
2613 msi.concatenated_segments item_number
2614 FROM bom_bill_of_materials bom,
2615 bom_inventory_components bic,
2616 mtl_system_items_vl msi
2617 WHERE bom.organization_id = p_organization_id
2618 AND bom.assembly_item_id = p_inventory_item_id
2619 AND bic.bill_sequence_id = bom.bill_sequence_id
2620 AND NVL(bic.effectivity_date,sysdate) <= sysdate
2621 AND NVL(bic.disable_date,sysdate) >= sysdate
2622 AND msi.organization_id = p_organization_id
2623 AND msi.inventory_item_id = bic.component_item_id
2624 AND msi.comms_activation_reqd_flag = 'Y' ;
2625
2626 BEGIN
2627
2628 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2629 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE')) THEN
2630 dbg_msg := ('Procedure Explode_Package begins.');
2631 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2632 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE', dbg_msg);
2633 END IF;
2634 END IF;
2635 END IF;
2636
2637 lv_count := 0 ;
2638
2639 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2640 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE')) THEN
2641 dbg_msg := ('Line Number to explode is: '||p_order_line.line_number||' Master Line Item ID is: '
2642 ||p_order_line.line_item_id);
2643 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2644 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE', dbg_msg);
2645 END IF;
2646 END IF;
2647 END IF;
2648
2649 FOR c_bom_rec IN c_bom(p_order_line.organization_id ,
2650 p_order_line.inventory_item_id )
2651 LOOP
2652 lv_index1 := p_service_order_line_list.COUNT + 1 ;
2653 lv_count := lv_count + 1 ;
2654 lv_fnd_count := lv_fnd_count + 1;
2655 l_inventory_item_id := c_bom_rec.component_item_id ;
2656
2657 VALIDATE_LINE_ITEM (P_ORGANIZATION_ID => p_order_line.organization_id,
2658 P_ITEM_NUMBER => l_item_number ,
2659 P_INVENTORY_ITEM_ID => l_inventory_item_id ,
2660 P_ACTIVATION_FLAG => l_activation_flag );
2661
2662 SELECT XDP_ORDER_LINE_ITEMS_S.nextval
2663 INTO l_line_item_id
2664 FROM dual ;
2665
2666 /*** Add Exploded component line of service to p_service_order_line_list ***/
2667
2668 p_service_order_line_list(lv_index1).line_item_Id := l_line_item_id ;
2669 p_service_order_line_list(lv_index1).line_status := p_order_line.line_status;
2670 p_service_order_line_list(lv_index1).line_number := TO_NUMBER(TO_CHAR(p_order_line.line_number)||'.'||TO_CHAR(lv_count)||'1');
2671 p_service_order_line_list(lv_index1).line_source := p_order_line.line_source ;
2672 p_service_order_line_list(lv_index1).service_item_name := c_bom_rec.item_number;
2673 p_service_order_line_list(lv_index1).fulfillment_required_flag := p_order_line.fulfillment_required_flag;
2674 p_service_order_line_list(lv_index1).priority := p_order_line.priority ;
2675 p_service_order_line_list(lv_index1).action_code := p_order_line.action_code;
2676 p_service_order_line_list(lv_index1).version := p_order_line.version;
2677 p_service_order_line_list(lv_index1).bundle_id := p_order_line.bundle_id;
2678 p_service_order_line_list(lv_index1).bundle_sequence := p_order_line.bundle_sequence;
2679 p_service_order_line_list(lv_index1).fulfillment_sequence := c_bom_rec.item_num;
2680 p_service_order_line_list(lv_index1).required_fulfillment_date := p_order_line.required_fulfillment_date;
2681 p_service_order_line_list(lv_index1).actual_fulfillment_date := p_order_line.actual_fulfillment_date;
2682 p_service_order_line_list(lv_index1).completion_date := p_order_line.completion_date;
2683 p_service_order_line_list(lv_index1).due_date := p_order_line.due_date;
2684 p_service_order_line_list(lv_index1).customer_required_date := p_order_line.customer_required_date;
2685 p_service_order_line_list(lv_index1).workitem_id := p_order_line.workitem_id ;
2686 p_service_order_line_list(lv_index1).jeopardy_enabled_flag := p_order_line.jeopardy_enabled_flag;
2687 p_service_order_line_list(lv_index1).starting_number := p_order_line.starting_number;
2688 p_service_order_line_list(lv_index1).ending_number := p_order_line.ending_number;
2689 p_service_order_line_list(lv_index1).inventory_item_id := c_bom_rec.component_item_id;
2690 p_service_order_line_list(lv_index1).organization_id := p_order_line.organization_id;
2691 p_service_order_line_list(lv_index1).ib_source := p_order_line.ib_source;
2692 p_service_order_line_list(lv_index1).ib_source_id := p_order_line.ib_source_id;
2693 p_service_order_line_list(lv_index1).site_use_id := p_order_line.site_use_id;
2694 p_service_order_line_list(lv_index1).is_package_flag := 'N' ;
2695 p_service_order_line_list(lv_index1).is_virtual_line_flag := 'Y' ;
2696 p_service_order_line_list(lv_index1).parent_line_number := p_order_line.line_number ;
2697 p_service_order_line_list(lv_index1).attribute_category := p_order_line.attribute_category;
2698 p_service_order_line_list(lv_index1).attribute1 := p_order_line.attribute1;
2699 p_service_order_line_list(lv_index1).attribute2 := p_order_line.attribute2;
2700 p_service_order_line_list(lv_index1).attribute3 := p_order_line.attribute3;
2701 p_service_order_line_list(lv_index1).attribute4 := p_order_line.attribute4;
2702 p_service_order_line_list(lv_index1).attribute5 := p_order_line.attribute5;
2703 p_service_order_line_list(lv_index1).attribute6 := p_order_line.attribute6;
2704 p_service_order_line_list(lv_index1).attribute7 := p_order_line.attribute7;
2705 p_service_order_line_list(lv_index1).attribute9 := p_order_line.attribute9;
2706 p_service_order_line_list(lv_index1).attribute10 := p_order_line.attribute10;
2707 p_service_order_line_list(lv_index1).attribute12 := p_order_line.attribute12;
2708 p_service_order_line_list(lv_index1).attribute14 := p_order_line.attribute14;
2709 p_service_order_line_list(lv_index1).attribute16 := p_order_line.attribute16;
2710 p_service_order_line_list(lv_index1).attribute17 := p_order_line.attribute17;
2711 p_service_order_line_list(lv_index1).attribute18 := p_order_line.attribute18;
2712 p_service_order_line_list(lv_index1).attribute19 := p_order_line.attribute19;
2713 p_service_order_line_list(lv_index1).attribute20 := p_order_line.attribute20 ;
2714
2715 /*** Add Line Relationship for the service component line to p_order_line_rel_list ***/
2716
2717 lv_index2 := p_order_line_rel_list.COUNT + 1 ;
2718
2719 p_order_line_rel_list(lv_index2).line_item_id := l_line_item_id ;
2720 p_order_line_rel_list(lv_index2).related_line_item_id := p_order_line.line_item_id ;
2721 p_order_line_rel_list(lv_index2).line_relationship := 'IS_PART_OF_PACKAGE';
2722
2723 /*** Add Component Line Parameters to Line Parameter List ***/
2724
2725 lv_index3 := p_service_line_attrib_list.COUNT + 1 ;
2726 lv_index4 := p_order_line_det_list.COUNT + 1 ;
2727
2728 FOR i IN 1..p_line_parameter_list_in.COUNT
2729 LOOP
2730 IF p_line_parameter_list_in(i).line_number = p_order_line.line_number THEN
2731 p_service_line_attrib_list(lv_index3).line_item_id := l_line_item_id ;
2732 p_service_line_attrib_list(lv_index3).line_number := p_service_order_line_list(lv_index1).line_number;
2733 p_service_line_attrib_list(lv_index3).parameter_name := p_line_parameter_list_in(i).parameter_name;
2734 p_service_line_attrib_list(lv_index3).parameter_value := p_line_parameter_list_in(i).parameter_value;
2735 p_service_line_attrib_list(lv_index3).parameter_ref_value := p_line_parameter_list_in(i).parameter_ref_value;
2736
2737 lv_index3 := lv_index3 + 1 ;
2738
2739 p_order_line_det_list(lv_index4).line_number := l_line_item_id ;
2740 p_order_line_det_list(lv_index4).parameter_name := p_line_parameter_list_in(i).parameter_name;
2741 p_order_line_det_list(lv_index4).parameter_value := p_line_parameter_list_in(i).parameter_value;
2742 p_order_line_det_list(lv_index4).parameter_ref_value := p_line_parameter_list_in(i).parameter_ref_value;
2743
2744 lv_index4 := lv_index4 + 1 ;
2745
2746 lv_fnd_count1 := lv_fnd_count1 + 1;
2747
2748 ELSE NULL;
2749 END IF ;
2750 END LOOP ;
2751 END LOOP;
2752
2753 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2754 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE')) THEN
2755 dbg_msg := ('Number of records exploded: '||lv_fnd_count);
2756 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2757 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE', dbg_msg);
2758 END IF;
2759 END IF;
2760 END IF;
2761
2762 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2763 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE')) THEN
2764 dbg_msg := ('Number of relationships created: '||lv_fnd_count);
2765 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2766 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE', dbg_msg);
2767 END IF;
2768 END IF;
2769 END IF;
2770
2771 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2772 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE')) THEN
2773 dbg_msg := ('Number of Line Parameters added to Service Line Attrib List: '||lv_fnd_count1);
2774 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2775 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE', dbg_msg);
2776 END IF;
2777 END IF;
2778 END IF;
2779
2780 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2781 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE')) THEN
2782 dbg_msg := ('Number of Line Parameters added to Order Line Det List: '||lv_fnd_count1);
2783 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2784 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_PACKAGE', dbg_msg);
2785 END IF;
2786 END IF;
2787 END IF;
2788 EXCEPTION
2789 WHEN OTHERS THEN
2790 xdp_utilities.generic_error('XDP_ORDER.EXPLODE_PACKAGE'
2791 , G_external_order_reference
2792 , SQLCODE
2793 , SQLERRM);
2794
2795 END EXPLODE_PACKAGE;
2796
2797 -- ==============================================================================
2798 -- Explode Transaction Details for Installed Base
2799 -- ==============================================================================
2800
2801
2802 PROCEDURE EXPLODE_TXN_IB(
2803 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
2804 P_SERVICE_ORDER_LINE IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ITEM,
2805 P_ORDER_LINE_REL_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_REL_LIST,
2806 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST
2807 ) IS
2808
2809 lv_txn_line_query_rec CSI_T_DATASTRUCTURES_GRP.TXN_LINE_QUERY_REC;
2810 lv_txn_line_detail_query_rec CSI_T_DATASTRUCTURES_GRP.TXN_LINE_DETAIL_QUERY_REC;
2811 lv_txn_line_detail_tbl CSI_T_DATASTRUCTURES_GRP.TXN_LINE_DETAIL_TBL;
2812 lv_txn_ii_rltns_tbl CSI_T_DATASTRUCTURES_GRP.TXN_II_RLTNS_TBL;
2813 lv_txn_party_detail_tbl CSI_T_DATASTRUCTURES_GRP.TXN_PARTY_DETAIL_TBL;
2814 lv_txn_pty_acct_detail_tbl CSI_T_DATASTRUCTURES_GRP.TXN_PTY_ACCT_DETAIL_TBL;
2815 lv_txn_org_assgn_tbl CSI_T_DATASTRUCTURES_GRP.TXN_ORG_ASSGN_TBL;
2816 lv_txn_ext_attrib_vals_tbl CSI_T_DATASTRUCTURES_GRP.TXN_EXT_ATTRIB_VALS_TBL;
2817 lv_csi_ext_attribs_tbl CSI_T_DATASTRUCTURES_GRP.CSI_EXT_ATTRIBS_TBL;
2818 lv_extend_attrib_values_tbl CSI_T_DATASTRUCTURES_GRP.CSI_EXT_ATTRIB_VALS_TBL;
2819 lv_txn_systems_tbl CSI_T_DATASTRUCTURES_GRP.TXN_SYSTEMS_TBL;
2820 lv_return_status VARCHAR2(1);
2821 lv_msg_count NUMBER := 0 ;
2822 lv_msg_data VARCHAR2(1000);
2823 lv_txn_index BINARY_INTEGER;
2824 lv_temp NUMBER := 0;
2825 lv_temp1 NUMBER := 0 ;
2826 lv_temp2 NUMBER := 0 ;
2827 lv_temp3 NUMBER := 0 ;
2828 lv_temp_counter NUMBER := 0;
2829 lv_rel_counter NUMBER := 0 ;
2830 lv_count NUMBER := 0;
2831 lv_det_id NUMBER;
2832 lv_attrib_counter NUMBER := 0;
2833 lv_api_version NUMBER := 1;
2834 lv_fnd_count NUMBER := 0;
2835 lv_fnd_count1 NUMBER := 0;
2836
2837 lv_config_session_key CSI_UTILITY_GRP.config_session_key ;
2838 lv_return_message VARCHAR2(2000);
2839
2840 e_txn_det_zero_count EXCEPTION;
2841 e_txn_det_error_status EXCEPTION;
2842 e_txn_config_key_exception EXCEPTION ;
2843
2844
2845 BEGIN
2846
2847 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2848 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2849 dbg_msg := ('Procedure Explode_TXN_IB begins.');
2850 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2851 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2852 END IF;
2853 END IF;
2854 END IF;
2855
2856 -- This code is added as a part of MACD Service project to get tuple of a CTO item OR its component and
2857 -- pass to IB to retrieve TXN dtls -- spusegao/maya 07/29/2002
2858
2859 CSI_UTILITY_GRP.get_config_key_for_om_line( p_line_id => p_service_order_line.line_number ,
2860 x_config_session_key => lv_config_session_key ,
2861 x_return_status => lv_return_status ,
2862 x_return_message => lv_return_message );
2863
2864 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2865 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2866 dbg_msg := ('Config Keys : '||lv_config_session_key.session_hdr_id||'/'||
2867 lv_config_session_key.session_rev_num||'/'||lv_config_session_key.session_item_id);
2868 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2869 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2870 END IF;
2871 END IF;
2872 END IF;
2873
2874 IF lv_return_status ='S' AND (lv_config_session_key.session_hdr_id IS NOT NULL AND
2875 lv_config_session_key.session_rev_num IS NOT NULL AND
2876 lv_config_session_key.session_item_id IS NOT NULL ) THEN
2877 lv_txn_line_query_rec.config_session_hdr_id := lv_config_session_key.session_hdr_id ;
2878 lv_txn_line_query_rec.config_session_rev_num := lv_config_session_key.session_rev_num ;
2879 lv_txn_line_query_rec.config_session_item_id := lv_config_session_key.session_item_id ;
2880 ELSIF lv_return_status ='S' AND (lv_config_session_key.session_hdr_id IS NULL AND
2881 lv_config_session_key.session_rev_num IS NULL AND
2882 lv_config_session_key.session_item_id IS NULL ) THEN
2883 -- Create the record for the IN Parameter that is passed to TXN's API get_transaction_details
2884 lv_txn_line_query_rec.source_transaction_id := p_service_order_line.line_number;
2885 lv_txn_line_query_rec.source_transaction_table := p_service_order_line.line_source;
2886 END IF ;
2887
2888 -- Set lv_txn_line_detail_query_rec.source_transaction_flag = 'Y' so that get txn details returns only the rows
2889 -- which are created as source for related OM order line
2890
2891 lv_txn_line_detail_query_rec.source_transaction_flag := 'Y' ;
2892
2893 -- Call Transaction Details API get_transaction_dtls
2894
2895 csi_t_txn_details_grp.get_transaction_details(
2896 p_api_version => lv_api_version
2897 ,p_commit => null
2898 ,p_init_msg_list => null
2899 ,p_validation_level => null
2900 ,p_txn_line_query_rec => lv_txn_line_query_rec
2901 ,p_txn_line_detail_query_rec => lv_txn_line_detail_query_rec
2902 ,x_txn_line_detail_tbl => lv_txn_line_detail_tbl
2903 ,p_get_parties_flag => 'F'
2904 ,x_txn_party_detail_tbl => lv_txn_party_detail_tbl
2905 ,p_get_pty_accts_flag => 'F'
2906 ,x_txn_pty_acct_detail_tbl => lv_txn_pty_acct_detail_tbl
2907 ,p_get_ii_rltns_flag => 'F'
2908 ,x_txn_ii_rltns_tbl => lv_txn_ii_rltns_tbl
2909 ,p_get_org_assgns_flag => 'F'
2910 ,x_txn_org_assgn_tbl => lv_txn_org_assgn_tbl
2911 ,p_get_ext_attrib_vals_flag => 'T'
2912 ,x_txn_ext_attrib_vals_tbl => lv_txn_ext_attrib_vals_tbl
2913 ,p_get_csi_attribs_flag => 'T'
2914 ,x_csi_ext_attribs_tbl => lv_csi_ext_attribs_tbl
2915 ,p_get_csi_iea_values_flag => 'T'
2916 ,x_csi_iea_values_tbl => lv_extend_attrib_values_tbl
2917 ,p_get_txn_systems_flag => 'F'
2918 ,x_txn_systems_tbl => lv_txn_systems_tbl
2919 ,x_return_status => lv_return_status
2920 ,x_msg_count => lv_msg_count
2921 ,x_msg_data => lv_msg_data);
2922
2923 -- return error if the count of records in lv_txn_line_detail_tbl is 0
2924
2925 IF lv_txn_line_detail_tbl.COUNT = 0 THEN
2926 p_service_order_line.ib_source := 'NONE' ;
2927 p_service_order_line.ib_source_id := null ;
2928 -- RAISE e_txn_det_zero_count;
2929 ELSIF lv_return_status = 'E' THEN
2930 RAISE e_txn_det_error_status;
2931 END IF;
2932
2933 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2934 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2935 dbg_msg := ('Call to Transaction Details API successful');
2936 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2937 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2938 END IF;
2939 END IF;
2940 END IF;
2941
2942 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2943 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2944 dbg_msg := ('Number of records in Txn Line Detail List: '||lv_txn_line_detail_tbl.COUNT);
2945 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2946 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2947 END IF;
2948 END IF;
2949 END IF;
2950
2951 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2952 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2953 dbg_msg := ('Number of records in Txn Ext Attrib Vals List: '||lv_txn_ext_attrib_vals_tbl.COUNT);
2954 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2955 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2956 END IF;
2957 END IF;
2958 END IF;
2959
2960 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2961 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2962 dbg_msg := ('Number of records in Csi Ext Attribs List: '||lv_csi_ext_attribs_tbl.COUNT);
2963 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2964 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2965 END IF;
2966 END IF;
2967 END IF;
2968
2969 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2970 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2971 dbg_msg := ('Number of records in Csi Extend Attrib Values List: '||lv_extend_attrib_values_tbl.COUNT);
2972 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2973 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2974 END IF;
2975 END IF;
2976 END IF;
2977
2978 -- initialize the variables
2979 lv_txn_index := lv_txn_line_detail_tbl.FIRST;
2980
2981 IF lv_txn_line_detail_tbl.COUNT = 1 THEN
2982
2983 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2984 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2985 dbg_msg := ('Updating Line: '||p_service_order_line.Line_item_id);
2986 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2987 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
2988 END IF;
2989 END IF;
2990 END IF;
2991
2992 --update the p_service_order_line with the transaction detail id
2993 p_service_order_line.ib_source_id := lv_txn_line_detail_tbl(lv_txn_index).txn_line_detail_id;
2994
2995 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
2996 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
2997 dbg_msg := ('Successfully updated ib_source to: '||p_service_order_line.ib_source_id);
2998 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
2999 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
3000 END IF;
3001 END IF;
3002 END IF;
3003
3004 -- create the service_attrib_list for the line
3005 IF p_service_order_line.ib_source_id IS NOT NULL THEN
3006
3007 FOR lv_temp IN 1..lv_csi_ext_attribs_tbl.COUNT LOOP
3008 lv_attrib_counter := p_service_line_attrib_list.COUNT + 1;
3009 lv_fnd_count := lv_fnd_count + 1;
3010
3011 IF ((lv_txn_line_detail_tbl(lv_txn_index).txn_line_detail_id = p_service_order_line.ib_source_id) AND
3012 (lv_txn_line_detail_tbl(lv_txn_index).inventory_item_id = lv_csi_ext_attribs_tbl(lv_temp).inventory_item_id )) THEN
3013
3014 --set the values of the p_service_line_attrib_list
3015
3016 p_service_line_attrib_list(lv_attrib_counter).line_item_id := p_service_order_line.line_item_id;
3017 p_service_line_attrib_list(lv_attrib_counter).line_number := p_service_order_line.line_number;
3018 p_service_line_attrib_list(lv_attrib_counter).parameter_name := lv_csi_ext_attribs_tbl(lv_temp).attribute_code;
3019
3020
3021
3022 --get the values for the attributes from transaction details
3023
3024 FOR lv_temp1 IN 1..lv_txn_ext_attrib_vals_tbl.COUNT
3025
3026 LOOP
3027
3028 IF ((lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_line_detail_id = p_service_order_line.ib_source_id) AND
3029 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table = 'CSI_I_EXTENDED_ATTRIBS') AND
3030 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_csi_ext_attribs_tbl(lv_temp).attribute_id)) THEN
3031
3032
3033 -- the attribute does not have any value in IB
3034
3035 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_value;
3036 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := null;
3037 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_attrib_detail_id;
3038 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table;
3039 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id;
3040
3041 EXIT WHEN ((lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_line_detail_id = p_service_order_line.ib_source_id) AND
3042 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table = 'CSI_I_EXTENDED_ATTRIBS') AND
3043 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_csi_ext_attribs_tbl(lv_temp).attribute_id));
3044
3045 ELSIF
3046 lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_line_detail_id = p_service_order_line.ib_source_id AND
3047 lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table = 'CSI_IEA_VALUES' THEN
3048
3049 -- the attribute has value in IB
3050
3051 FOR lv_temp2 IN 1..lv_extend_attrib_values_tbl.COUNT
3052 LOOP
3053 IF lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_extend_attrib_values_tbl(lv_temp2).attribute_value_id THEN
3054 IF lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_value IS NOT NULL THEN
3055
3056 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_value;
3057 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_temp2).attribute_value;
3058 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_attrib_detail_id;
3059 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table;
3060 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id;
3061
3062 ELSE
3063
3064 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_extend_attrib_values_tbl(lv_temp2).attribute_value;
3065 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_temp2).attribute_value;
3066 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_attrib_detail_id;
3067 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table;
3068 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id;
3069
3070 END IF;
3071 EXIT WHEN lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_extend_attrib_values_tbl(lv_temp2).attribute_value_id;
3072 END IF;
3073 END LOOP;
3074 ELSE
3075 p_service_line_attrib_list(lv_attrib_counter).parameter_value := null;
3076 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := null;
3077 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := null;
3078 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := 'CSI_I_EXTENDED_ATTRIBS';
3079 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_csi_ext_attribs_tbl(lv_temp).attribute_id;
3080
3081 END IF;
3082 END LOOP;
3083
3084 END IF;
3085 END LOOP;
3086 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3087 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
3088 dbg_msg := ('Number of Parameters added to Service Line Attrib List: '||lv_fnd_count);
3089 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3090 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
3091 END IF;
3092 END IF;
3093 END IF;
3094
3095 END IF;
3096
3097 ELSE --if txn_line_detail_tbl.COUNT > 1
3098
3099 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3100 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
3101 dbg_msg := ('Exploding Transaction Details');
3102 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3103 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
3104 END IF;
3105 END IF;
3106 END IF;
3107
3108 FOR lv_temp2 IN 1..lv_txn_line_detail_tbl.COUNT LOOP
3109
3110 lv_rel_counter := p_order_line_rel_list.COUNT + 1;
3111 lv_temp_counter := p_service_order_line_list.COUNT + 1;
3112 lv_count := lv_count + 1;
3113 lv_fnd_count := lv_fnd_count + 1;
3114
3115 -- select the sequence from xdp_order_line_s
3116
3117 select xdp_order_line_items_s.nextval
3118 into lv_det_id
3119 from dual;
3120
3121 -- explode the detail lines in p_service_order_line_list
3122
3123 p_service_order_line_list(lv_temp_counter).line_item_id := lv_det_id;
3124 p_service_order_line_list(lv_temp_counter).line_number := to_number(to_char(p_service_order_line.line_number)||'.'||to_char(lv_count)||'0');
3125 p_service_order_line_list(lv_temp_counter).service_item_name := p_service_order_line.service_item_name;
3126 p_service_order_line_list(lv_temp_counter).version := p_service_order_line.version;
3127 p_service_order_line_list(lv_temp_counter).action_code := p_service_order_line.action_code;
3128 p_service_order_line_list(lv_temp_counter).required_fulfillment_date := p_service_order_line.required_fulfillment_date;
3129 p_service_order_line_list(lv_temp_counter).fulfillment_required_flag := p_service_order_line.fulfillment_required_flag;
3130 p_service_order_line_list(lv_temp_counter).fulfillment_sequence := p_service_order_line.fulfillment_sequence;
3131 p_service_order_line_list(lv_temp_counter).bundle_id := p_service_order_line.bundle_id;
3132 p_service_order_line_list(lv_temp_counter).bundle_sequence := p_service_order_line.bundle_sequence;
3133 p_service_order_line_list(lv_temp_counter).priority := p_service_order_line.priority;
3134 p_service_order_line_list(lv_temp_counter).due_date := p_service_order_line.due_date;
3135 p_service_order_line_list(lv_temp_counter).customer_required_date := p_service_order_line.customer_required_date;
3136 p_service_order_line_list(lv_temp_counter).line_status := p_service_order_line.line_status;
3137 p_service_order_line_list(lv_temp_counter).completion_date := p_service_order_line.completion_date;
3138 p_service_order_line_list(lv_temp_counter).workitem_id := p_service_order_line.workitem_id;
3139 p_service_order_line_list(lv_temp_counter).jeopardy_enabled_flag := p_service_order_line.jeopardy_enabled_flag;
3140 p_service_order_line_list(lv_temp_counter).starting_number := p_service_order_line.starting_number;
3141 p_service_order_line_list(lv_temp_counter).ending_number := p_service_order_line.ending_number;
3142 p_service_order_line_list(lv_temp_counter).organization_id := p_service_order_line.organization_id;
3143 p_service_order_line_list(lv_temp_counter).inventory_item_id := p_service_order_line.inventory_item_id;
3144 p_service_order_line_list(lv_temp_counter).line_source := p_service_order_line.line_source;
3145 p_service_order_line_list(lv_temp_counter).ib_source := p_service_order_line.ib_source;
3146 p_service_order_line_list(lv_temp_counter).ib_source_id := lv_txn_line_detail_tbl(lv_txn_index).txn_line_detail_id;
3147 p_service_order_line_list(lv_temp_counter).parent_line_number := p_service_order_line.line_number;
3148 p_service_order_line_list(lv_temp_counter).site_use_id := p_service_order_line.site_use_id;
3149 p_service_order_line_list(lv_temp_counter).is_package_flag := 'N' ;
3150 p_service_order_line_list(lv_temp_counter).is_virtual_line_flag := 'Y' ;
3151 p_service_order_line_list(lv_temp_counter).attribute_category := p_service_order_line.attribute_category;
3152 p_service_order_line_list(lv_temp_counter).attribute1 := p_service_order_line.attribute1;
3153 p_service_order_line_list(lv_temp_counter).attribute2 := p_service_order_line.attribute2;
3154 p_service_order_line_list(lv_temp_counter).attribute3 := p_service_order_line.attribute3;
3155 p_service_order_line_list(lv_temp_counter).attribute4 := p_service_order_line.attribute4;
3156 p_service_order_line_list(lv_temp_counter).attribute5 := p_service_order_line.attribute5;
3157 p_service_order_line_list(lv_temp_counter).attribute6 := p_service_order_line.attribute6;
3158 p_service_order_line_list(lv_temp_counter).attribute7 := p_service_order_line.attribute7;
3159 p_service_order_line_list(lv_temp_counter).attribute8 := p_service_order_line.attribute8;
3160 p_service_order_line_list(lv_temp_counter).attribute9 := p_service_order_line.attribute9;
3161 p_service_order_line_list(lv_temp_counter).attribute10 := p_service_order_line.attribute10;
3162 p_service_order_line_list(lv_temp_counter).attribute11 := p_service_order_line.attribute11;
3163 p_service_order_line_list(lv_temp_counter).attribute12 := p_service_order_line.attribute12;
3164 p_service_order_line_list(lv_temp_counter).attribute13 := p_service_order_line.attribute13;
3165 p_service_order_line_list(lv_temp_counter).attribute14 := p_service_order_line.attribute14;
3166 p_service_order_line_list(lv_temp_counter).attribute15 := p_service_order_line.attribute15;
3167 p_service_order_line_list(lv_temp_counter).attribute16 := p_service_order_line.attribute16;
3168 p_service_order_line_list(lv_temp_counter).attribute17 := p_service_order_line.attribute17;
3169 p_service_order_line_list(lv_temp_counter).attribute18 := p_service_order_line.attribute18;
3170 p_service_order_line_list(lv_temp_counter).attribute19 := p_service_order_line.attribute19;
3171 p_service_order_line_list(lv_temp_counter).attribute20 := p_service_order_line.attribute20 ;
3172
3173 -- build the relationship in p_order_line_rel_list
3174
3175 p_order_line_rel_list(lv_rel_counter).line_item_id := lv_det_id ;
3176 p_order_line_rel_list(lv_rel_counter).related_line_item_id := p_service_order_line.line_item_id;
3177 p_order_line_rel_list(lv_rel_counter).line_relationship := 'IS_PART_OF_IB_EXPLOSION';
3178
3179 -- create the service_attrib_list for the line
3180
3181 IF p_service_order_line_list(lv_temp_counter).is_virtual_line_flag = 'Y' AND
3182 p_service_order_line_list(lv_temp_counter).ib_source_id is not null THEN
3183
3184 FOR lv_temp IN 1..lv_csi_ext_attribs_tbl.COUNT LOOP
3185
3186 lv_attrib_counter := p_service_line_attrib_list.COUNT + 1;
3187 lv_fnd_count1 := lv_fnd_count1 + 1;
3188
3189 IF ((lv_txn_line_detail_tbl(lv_txn_index).txn_line_detail_id = p_service_order_line_list(lv_temp_counter).ib_source_id) AND
3190 (lv_txn_line_detail_tbl(lv_txn_index).inventory_item_id = lv_csi_ext_attribs_tbl(lv_temp).inventory_item_id )) THEN
3191
3192
3193 --set the values of the p_service_line_attrib_list
3194
3195 p_service_line_attrib_list(lv_attrib_counter).line_item_id := p_service_order_line_list(lv_temp_counter).line_item_id;
3196 p_service_line_attrib_list(lv_attrib_counter).line_number := p_service_order_line_list(lv_temp_counter).line_number;
3197 p_service_line_attrib_list(lv_attrib_counter).parameter_name := lv_csi_ext_attribs_tbl(lv_temp).attribute_code;
3198
3199
3200 --get the values for the attributes from transaction details
3201
3202 FOR lv_temp1 IN 1..lv_txn_ext_attrib_vals_tbl.COUNT
3203 LOOP
3204
3205 IF ((lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_line_detail_id = p_service_order_line_list(lv_temp_counter).ib_source_id) AND
3206 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table = 'CSI_I_EXTENDED_ATTRIBS') AND
3207 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_csi_ext_attribs_tbl(lv_temp).attribute_id)) THEN
3208
3209
3210 -- the attribute does not have any value in IB
3211 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_value;
3212 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := null;
3213 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_attrib_detail_id;
3214 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table;
3215 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id;
3216
3217 EXIT WHEN ((lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_line_detail_id = p_service_order_line_list(lv_temp_counter).ib_source_id) AND
3218 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table = 'CSI_I_EXTENDED_ATTRIBS') AND
3219 (lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_csi_ext_attribs_tbl(lv_temp).attribute_id));
3220 ELSIF
3221 lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_line_detail_id = p_service_order_line_list(lv_temp_counter).ib_source_id AND
3222 lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table = 'CSI_IEA_VALUES' THEN
3223
3224 -- the attribute has value in IB
3225
3226 FOR lv_temp2 IN 1..lv_extend_attrib_values_tbl.COUNT
3227 LOOP
3228
3229 IF lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_extend_attrib_values_tbl(lv_temp2).attribute_value_id THEN
3230 IF lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_value IS NOT NULL THEN
3231
3232 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_value;
3233 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_temp2).attribute_value;
3234 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_attrib_detail_id;
3235 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table;
3236 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id;
3237
3238 ELSE
3239
3240 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_extend_attrib_values_tbl(lv_temp2).attribute_value;
3241 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_temp2).attribute_value;
3242 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).txn_attrib_detail_id;
3243 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := lv_txn_ext_attrib_vals_tbl(lv_temp1).attrib_source_table;
3244 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id;
3245
3246 END IF;
3247 EXIT WHEN lv_txn_ext_attrib_vals_tbl(lv_temp1).attribute_source_id = lv_extend_attrib_values_tbl(lv_temp2).attribute_value_id;
3248 END IF;
3249 END LOOP;
3250 ELSE
3251 p_service_line_attrib_list(lv_attrib_counter).parameter_value := null;
3252 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := null;
3253 p_service_line_attrib_list(lv_attrib_counter).txn_ext_attrib_detail_id := null;
3254 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := 'CSI_I_EXTENDED_ATTRIBS';
3255 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_csi_ext_attribs_tbl(lv_temp).attribute_id;
3256
3257 END IF;
3258 END LOOP;
3259 END IF;
3260 END LOOP;
3261 END IF;
3262 EXIT WHEN lv_txn_index = lv_txn_line_detail_tbl.LAST;
3263 lv_txn_index := lv_txn_line_detail_tbl.NEXT(lv_txn_index);
3264 END LOOP;
3265
3266 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3267 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
3268 dbg_msg := ('Number of records exploded: '||lv_fnd_count);
3269 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3270 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
3271 END IF;
3272 END IF;
3273 END IF;
3274
3275 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3276 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
3277 dbg_msg := ('Number of relationships created: '||lv_fnd_count);
3278 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3279 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
3280 END IF;
3281 END IF;
3282 END IF;
3283
3284 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3285 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB')) THEN
3286 dbg_msg := ('Number of Line Parameters added to Service Line Attrib List: '||lv_fnd_count1);
3287 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3288 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.EXPLODE_TXN_IB', dbg_msg);
3289 END IF;
3290 END IF;
3291 END IF;
3292 END IF;
3293
3294 EXCEPTION
3295
3296 WHEN e_txn_det_zero_count THEN
3297 FND_MESSAGE.SET_NAME('XDP', 'XDP_TXNDET_NOTEMPTY');-- Done 191377
3298 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
3299 FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_service_order_line.line_number);
3300 FND_MESSAGE.SET_TOKEN('LINE_SOURCE',p_service_order_line.line_source);
3301 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.EXPLODE_TXN_IB');
3302
3303 WHEN e_txn_det_error_status THEN
3304 FND_MESSAGE.SET_NAME('XDP', 'XDP_TXNDET_ERROR_STATUS'); --Done 191380
3305 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
3306 FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_service_order_line.line_number);
3307 FND_MESSAGE.SET_TOKEN('LINE_SOURCE',p_service_order_line.line_source);
3308 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.EXPLODE_TXN_IB');
3309
3310 WHEN OTHERS THEN
3311 xdp_utilities.generic_error('XDP_ORDER.EXPLODE_TXN_IB'
3312 , G_external_order_reference
3313 , SQLCODE
3314 , SQLERRM);
3315 END EXPLODE_TXN_IB;
3316
3317 -- ===================================================================================
3318 -- Get parameters for IB if IB_SOURCE = 'CSI'
3319 -- ===================================================================================
3320
3321
3322 PROCEDURE IB_CSI_LINE(
3323 P_SERVICE_LINE IN XDP_TYPES.SERVICE_LINE_ITEM,
3324 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
3325 P_LINE_PARAMETER_LIST IN XDP_TYPES.SERVICE_LINE_PARAM_LIST,
3326 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
3327 )IS
3328 lv_ext_attrib_def_tbl CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_TBL;
3329 lv_ext_attribs_query_rec CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_QUERY_REC;
3330 lv_extend_attrib_values_tbl CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_VALUES_TBL;
3331 lv_attrib_counter NUMBER := 0; -- Index for Service_line_attrib_list
3332 lv_det_counter NUMBER := 0; -- Index for Order_line_detail_list
3333 lv_attrib_index BINARY_INTEGER; -- Index for attribute values list from IB
3334 lv_param_index BINARY_INTEGER; -- Index for incoming line parameter list
3335 lv_attrib_def_index BINARY_INTEGER; -- Index for attribute definition list
3336 lv_return_status VARCHAR2(1);
3337 lv_msg_count NUMBER;
3338 lv_msg_data VARCHAR2(1000);
3339 e_csi_zero_count EXCEPTION;
3340 e_csi_error_status EXCEPTION;
3341 lv_fnd_count NUMBER := 0;
3342 lv_match_not_found BOOLEAN := TRUE;
3343 lv_line_match_not_found BOOLEAN := TRUE;
3344
3345 BEGIN
3346
3347 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3348 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3349 dbg_msg := ('Procedure IB_CSI_LINE begins.');
3350 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3351 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3352 END IF;
3353 END IF;
3354 END IF;
3355
3356 -- Create the record for the IN Parameter that is passed to CSI's API get_extended_attrib_values
3357 lv_ext_attribs_query_rec.instance_id := p_service_line.ib_source_id;
3358
3359 -- Call Installed Base get_extended_attrib_values API
3360
3361 csi_item_instance_pub.get_extended_attrib_values
3362 (p_api_version => 1.0
3363 ,p_commit => null
3364 ,p_init_msg_list => null
3365 ,p_validation_level => null
3366 ,p_ext_attribs_query_rec => lv_ext_attribs_query_rec
3367 ,p_time_stamp => SYSDATE
3368 ,x_ext_attrib_tbl => lv_extend_attrib_values_tbl
3369 ,x_ext_attrib_def_tbl => lv_ext_attrib_def_tbl
3370 ,x_return_status => lv_return_status
3371 ,x_msg_count => lv_msg_count
3372 ,x_msg_data => lv_msg_data);
3373
3374 IF lv_ext_attrib_def_tbl.COUNT = 0 THEN
3375 RAISE e_csi_zero_count;
3376 ELSIF lv_return_status = 'E' THEN
3377 RAISE e_csi_error_status;
3378 END IF;
3379
3380 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3381 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3382 dbg_msg := ('Number of records in Csi Ext Attrib Def List: '||lv_ext_attrib_def_tbl.COUNT);
3383 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3384 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3385 END IF;
3386 END IF;
3387 END IF;
3388
3389 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3390 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3391 dbg_msg := ('Number of records in Csi Extend Attrib Values List: '||lv_extend_attrib_values_tbl.COUNT);
3392 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3393 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3394 END IF;
3395 END IF;
3396 END IF;
3397
3398 IF p_service_line.is_virtual_line_flag = 'N' AND
3399 p_service_line.ib_source_id is not null THEN
3400
3401 -- Initialize the index for the definition list
3402 lv_attrib_def_index := lv_ext_attrib_def_tbl.FIRST;
3403
3404 --Increase the counter for Service_line_attrib_list
3405 lv_attrib_counter := p_service_line_attrib_list.COUNT + 1;
3406
3407
3408 FOR lv_temp IN 1..lv_ext_attrib_def_tbl.COUNT LOOP
3409
3410 lv_attrib_index := lv_extend_attrib_values_tbl.FIRST;
3411 lv_fnd_count := lv_fnd_count + 1;
3412
3413 IF (
3414 (lv_ext_attrib_def_tbl(lv_attrib_def_index).instance_id = p_service_line.ib_source_id)
3415 OR
3416 ((lv_ext_attrib_def_tbl(lv_attrib_def_index).inventory_item_id = p_service_line.inventory_item_id)
3417 AND(lv_ext_attrib_def_tbl(lv_attrib_def_index).master_organization_id = p_service_line.organization_id)
3418 )
3419 ) THEN
3420
3421
3422 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3423 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3424 dbg_msg := ('Instance ID: '||lv_ext_attrib_def_tbl(lv_attrib_def_index).instance_id||' Inventory ID is: '||
3425 lv_ext_attrib_def_tbl(lv_attrib_def_index).inventory_item_id||' Organization ID is: '||
3426 lv_ext_attrib_def_tbl(lv_attrib_def_index).master_organization_id);
3427 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3428 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3429 END IF;
3430 END IF;
3431 END IF;
3432
3433 p_service_line_attrib_list(lv_attrib_counter).line_item_id := p_service_line.line_item_id;
3434 p_service_line_attrib_list(lv_attrib_counter).line_number := p_service_line.line_number;
3435 p_service_line_attrib_list(lv_attrib_counter).parameter_name := lv_ext_attrib_def_tbl(lv_attrib_def_index).attribute_code;
3436
3437
3438 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3439 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3440 dbg_msg := ('Line_item_id is : '|| p_service_line_attrib_list(lv_attrib_counter).line_item_id||
3441 ' Line_number is: '||p_service_line_attrib_list(lv_attrib_counter).line_number||
3442 ' Parameter_Name is: '||p_service_line_attrib_list(lv_attrib_counter).parameter_name);
3443 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3444 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3445 END IF;
3446 END IF;
3447 END IF;
3448
3449
3450 lv_match_not_found := TRUE ;
3451
3452 FOR lv_temp1 IN 1..lv_extend_attrib_values_tbl.COUNT LOOP
3453
3454
3455 IF lv_extend_attrib_values_tbl(lv_attrib_index).instance_id = p_service_line.ib_source_id AND
3456 lv_extend_attrib_values_tbl(lv_attrib_index).attribute_id = lv_ext_attrib_def_tbl(lv_attrib_def_index).attribute_id THEN
3457
3458
3459 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3460 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3461 dbg_msg := ('instance_id is: '||lv_extend_attrib_values_tbl(lv_attrib_index).instance_id
3462 ||' attribute_id is: '||lv_extend_attrib_values_tbl(lv_attrib_index).attribute_id);
3463 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3464 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3465 END IF;
3466 END IF;
3467 END IF;
3468
3469 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := 'CSI_IEA_VALUES';
3470 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_value_id;
3471
3472 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3473 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3474 dbg_msg := ('attrib_source_table: '||p_service_line_attrib_list(lv_attrib_counter).attrib_source_table||
3475 ' attrib_source_id: '||p_service_line_attrib_list(lv_attrib_counter).attrib_source_id);
3476 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3477 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3478 END IF;
3479 END IF;
3480 END IF;
3481
3482
3483 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3484 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3485 dbg_msg := ('Number of records in Line Parameter List: '||p_line_parameter_list.COUNT);
3486 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3487 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3488 END IF;
3489 END IF;
3490 END IF;
3491
3492 --check if line has any parameters
3493 IF p_line_parameter_list.COUNT > 0 THEN
3494
3495 --Intialize the index for the incoming line parameter list
3496 lv_param_index := p_line_parameter_list.FIRST;
3497
3498 --Increase the count for the order line detail list
3499 lv_det_counter := p_order_line_det_list.COUNT + 1;
3500
3501 lv_line_match_not_found := TRUE;
3502
3503 FOR lv_temp2 in 1..p_line_parameter_list.COUNT
3504 LOOP
3505
3506 IF p_line_parameter_list(lv_param_index).line_number = p_service_line.line_number AND
3507 p_line_parameter_list(lv_param_index).parameter_name = lv_extend_attrib_values_tbl(lv_attrib_index).attribute_code THEN
3508
3509 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3510 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3511 dbg_msg := ('Line Parameter exists for parameter: '||lv_extend_attrib_values_tbl(lv_attrib_index).attribute_code);
3512 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3513 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3514 END IF;
3515 END IF;
3516 END IF;
3517
3518 p_service_line_attrib_list(lv_attrib_counter).parameter_value := p_line_parameter_list(lv_param_index).parameter_value;
3519 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_value;
3520
3521 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3522 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3523 dbg_msg := ('line parameter value is: '|| p_service_line_attrib_list(lv_attrib_counter).parameter_value||
3524 ' line parameter ref value is: '||p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value);
3525 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3526 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3527 END IF;
3528 END IF;
3529 END IF;
3530
3531 -- set the index for the p_order_line_det_list
3532
3533 p_order_line_det_list(lv_det_counter).line_number := p_service_line.line_item_id;
3534 p_order_line_det_list(lv_det_counter).parameter_name := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_code;
3535 p_order_line_det_list(lv_det_counter).parameter_value := p_line_parameter_list(lv_param_index).parameter_value;
3536 p_order_line_det_list(lv_det_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_value;
3537
3538 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3539 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3540 dbg_msg := ('line number in Order line detail list: '||p_order_line_det_list(lv_det_counter).line_number||
3541 'parameter name is: '||p_order_line_det_list(lv_det_counter).parameter_name||
3542 ' parameter value is: '||p_order_line_det_list(lv_det_counter).parameter_value||
3543 ' parameter ref value is: '||p_order_line_det_list(lv_det_counter).parameter_ref_value);
3544 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3545 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3546 END IF;
3547 END IF;
3548 END IF;
3549
3550
3551 lv_det_counter := lv_det_counter + 1;
3552 lv_line_match_not_found := FALSE ;
3553 END IF;
3554 exit when lv_param_index = p_line_parameter_list.LAST;
3555 lv_param_index := p_line_parameter_list.NEXT(lv_param_index);
3556 END LOOP;
3557
3558 IF lv_line_match_not_found THEN
3559 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_value;
3560 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_value;
3561
3562 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3563 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3564 dbg_msg := ('parameter_value : '||p_service_line_attrib_list(lv_attrib_counter).parameter_value||
3565 ' parameter_ref_value : '||p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value);
3566 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3567 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3568 END IF;
3569 END IF;
3570 END IF;
3571 END IF ;
3572
3573
3574 ELSE
3575 p_service_line_attrib_list(lv_attrib_counter).parameter_value := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_value;
3576 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := lv_extend_attrib_values_tbl(lv_attrib_index).attribute_value;
3577
3578 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3579 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3580 dbg_msg := ('parameter_value : '||p_service_line_attrib_list(lv_attrib_counter).parameter_value||
3581 ' parameter_ref_value : '||p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value);
3582 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3583 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3584 END IF;
3585 END IF;
3586 END IF ;
3587
3588 END IF;
3589 lv_match_not_found := FALSE ;
3590 END IF;
3591 exit when lv_attrib_index = lv_extend_attrib_values_tbl.last;
3592 lv_attrib_index := lv_extend_attrib_values_tbl.NEXT(lv_attrib_index);
3593 END LOOP;
3594
3595 IF lv_match_not_found THEN
3596
3597 p_service_line_attrib_list(lv_attrib_counter).attrib_source_table := 'CSI_I_EXTENDED_ATTRIBS';
3598 p_service_line_attrib_list(lv_attrib_counter).attrib_source_id := lv_ext_attrib_def_tbl(lv_attrib_def_index).attribute_id;
3599
3600
3601 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3602 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3603 dbg_msg := ('attrib_source_table: '||p_service_line_attrib_list(lv_attrib_counter).attrib_source_table||
3604 ' attrib_source_id: '||p_service_line_attrib_list(lv_attrib_counter).attrib_source_id);
3605 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3606 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3607 END IF;
3608 END IF;
3609 END IF;
3610
3611 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3612 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3613 dbg_msg := ('Number of records in Line Parameter List: '||p_line_parameter_list.COUNT);
3614 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3615 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3616 END IF;
3617 END IF;
3618 END IF;
3619 --check if the line has any line parameters
3620 IF p_line_parameter_list.COUNT > 0 THEN
3621
3622 -- Initialize the index for the incoming parameter list
3623 lv_param_index := p_line_parameter_list.FIRST;
3624 lv_det_counter := p_order_line_det_list.COUNT + 1;
3625 lv_line_match_not_found := TRUE;
3626
3627 FOR lv_temp2 in 1..p_line_parameter_list.COUNT LOOP
3628
3629 IF p_line_parameter_list(lv_param_index).line_number = p_service_line.line_number AND
3630 p_line_parameter_list(lv_param_index).parameter_name = lv_ext_attrib_def_tbl(lv_attrib_def_index).attribute_code THEN
3631
3632 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3633 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3634 dbg_msg := ('Line Parameter exists for parameter: '||lv_ext_attrib_def_tbl(lv_attrib_def_index).attribute_code);
3635 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3636 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3637 END IF;
3638 END IF;
3639 END IF;
3640
3641 p_service_line_attrib_list(lv_attrib_counter).parameter_value := p_line_parameter_list(lv_param_index).parameter_value;
3642 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := null;
3643
3644 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3645 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3646 dbg_msg := ('parameter value is: '|| p_service_line_attrib_list(lv_attrib_counter).parameter_value||
3647 ' parameter ref value is: '||p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value);
3648 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3649 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3650 END IF;
3651 END IF;
3652 END IF;
3653
3654
3655 p_order_line_det_list(lv_det_counter).line_number := p_service_line.line_item_id;
3656 p_order_line_det_list(lv_det_counter).parameter_name := lv_ext_attrib_def_tbl(lv_attrib_def_index).attribute_id;
3657 p_order_line_det_list(lv_det_counter).parameter_value := p_line_parameter_list(lv_param_index).parameter_value;
3658 p_order_line_det_list(lv_det_counter).parameter_ref_value := null;
3659
3660 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3661 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3662 dbg_msg := ('line number in Order line detail list: '||p_order_line_det_list(lv_det_counter).line_number||
3663 ' parameter name: '||p_order_line_det_list(lv_det_counter).parameter_name||
3664 ' parameter value: '||p_order_line_det_list(lv_det_counter).parameter_value||
3665 ' parameter ref value: '||p_order_line_det_list(lv_det_counter).parameter_ref_value);
3666 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3667 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3668 END IF;
3669 END IF;
3670 END IF;
3671
3672
3673 lv_det_counter := lv_det_counter + 1;
3674 lv_line_match_not_found := FALSE;
3675 END IF;
3676 exit when lv_param_index = p_line_parameter_list.LAST;
3677 lv_param_index := p_line_parameter_list.NEXT(lv_param_index);
3678 END LOOP;
3679 IF lv_line_match_not_found THEN
3680 p_service_line_attrib_list(lv_attrib_counter).parameter_value := null;
3681 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := null;
3682
3683 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3684 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3685 dbg_msg := ('parameter value is: '|| p_service_line_attrib_list(lv_attrib_counter).parameter_value||
3686 ' parameter ref value is: '||p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value);
3687 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3688 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3689 END IF;
3690 END IF;
3691 END IF;
3692 END IF;
3693 ELSE
3694 p_service_line_attrib_list(lv_attrib_counter).parameter_value := null;
3695 p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value := null;
3696
3697 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3698 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3699 dbg_msg := ('parameter value is: '|| p_service_line_attrib_list(lv_attrib_counter).parameter_value||
3700 ' parameter ref value is: '||p_service_line_attrib_list(lv_attrib_counter).parameter_ref_value);
3701 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3702 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3703 END IF;
3704 END IF;
3705 END IF;
3706 END IF;
3707
3708 END IF ;
3709 lv_attrib_counter := lv_attrib_counter + 1;
3710 END IF;
3711 exit when lv_attrib_def_index = lv_ext_attrib_def_tbl.last;
3712 lv_attrib_def_index := lv_ext_attrib_def_tbl.NEXT(lv_attrib_def_index);
3713 END LOOP;
3714
3715 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3716 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE')) THEN
3717 dbg_msg := ('Number of Parameters added to Service Line Attrib List: '||lv_fnd_count);
3718 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3719 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.IB_CSI_LINE', dbg_msg);
3720 END IF;
3721 END IF;
3722 END IF;
3723 END IF;
3724
3725 EXCEPTION
3726
3727 WHEN e_csi_zero_count THEN
3728 FND_MESSAGE.SET_NAME('XDP', 'XDP_CSI_ATTRIBVAL_NOTEMPTY');--Done 191381
3729 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
3730 FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_service_line.line_number);
3731 FND_MESSAGE.SET_TOKEN('IB_SOURCE_ID', p_service_line.ib_source_id);
3732 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.IB_CSI_LINE');
3733
3734 WHEN e_csi_error_status THEN
3735 FND_MESSAGE.SET_NAME('XDP', 'XDP_CSI_ERROR_STATUS'); --done 191382
3736 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
3737 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_service_line.line_number);
3738 FND_MESSAGE.SET_TOKEN('IB_SOURCE_ID', p_service_line.ib_source_id);
3739 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.IB_CSI_LINE');
3740
3741 WHEN OTHERS THEN
3742
3743 xdp_utilities.generic_error('XDP_ORDER.IB_CSI_LINE'
3744 , G_external_order_reference
3745 , SQLCODE
3746 , SQLERRM);
3747
3748 END IB_CSI_LINE;
3749
3750 -- ==========================================================================================
3751 -- populate XDP_ORDER_LINES, XDP_LINE_RELATIONSHIPS, XDP_ORDER_LINE_DETS
3752 -- ==========================================================================================
3753
3754 PROCEDURE POPULATE_LINES
3755 (P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
3756 P_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
3757 P_ORDER_LINE_REL_LIST IN XDP_TYPES.SERVICE_LINE_REL_LIST,
3758 P_LINE_PARAMETER_LIST IN XDP_TYPES.SERVICE_LINE_PARAM_LIST,
3759 P_ORDER_LINE_DET_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_PARAM_LIST
3760 ) IS
3761
3762
3763
3764 lv_temp NUMBER;
3765 lv_temp1 NUMBER;
3766 lv_temp_counter NUMBER;
3767 lv_rel_counter NUMBER;
3768 lv_count NUMBER;
3769 lv_master_id NUMBER;
3770 lv_det_id NUMBER;
3771 lv_wi_index NUMBER;
3772 lv_index NUMBER ;
3773 lv_fnd_count NUMBER := 0;
3774 lv_index2 NUMBER;
3775
3776 /*** declare variables for bulk inserts ***/
3777
3778 TYPE LV_NUMBER_TAB IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3779 lv_line_id_tab LV_NUMBER_TAB;
3780 lv_line_num_tab LV_NUMBER_TAB;
3781 lv_priority_tab LV_NUMBER_TAB;
3782 lv_bundle_id_tab LV_NUMBER_TAB;
3783 lv_workitem_id_tab LV_NUMBER_TAB;
3784 lv_starting_num_tab LV_NUMBER_TAB;
3785 lv_ending_num_tab LV_NUMBER_TAB;
3786 lv_ib_source_id_tab LV_NUMBER_TAB;
3787 lv_inventory_item_id_tab LV_NUMBER_TAB;
3788 lv_organization_id_tab LV_NUMBER_TAB;
3789 lv_rel_line_item_id_tab LV_NUMBER_TAB;
3790 lv_bundle_seq_tab LV_NUMBER_TAB;
3791 lv_prov_seq_tab LV_NUMBER_TAB;
3792 lv_item_id_tab LV_NUMBER_TAB;
3793 lv_rel_item_id_tab LV_NUMBER_TAB;
3794 lv_line_item_id_tab LV_NUMBER_TAB;
3795 lv_site_use_id_tab LV_NUMBER_TAB;
3796 lv_seq_in_package_tab LV_NUMBER_TAB;
3797
3798 TYPE LV_DATE_TAB IS TABLE OF DATE INDEX BY BINARY_INTEGER ;
3799 lv_prov_date_tab LV_DATE_TAB;
3800 lv_due_date_tab LV_DATE_TAB;
3801 lv_cust_req_date_tab LV_DATE_TAB;
3802
3803 TYPE VARCHAR2_1_TAB IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER ;
3804 lv_pro_req_tab VARCHAR2_1_TAB;
3805 lv_pack_flag_tab VARCHAR2_1_TAB;
3806 lv_jeopardy_flag_tab VARCHAR2_1_TAB;
3807 lv_virtual_flag_tab VARCHAR2_1_TAB;
3808
3809 TYPE VARCHAR2_20_TAB IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER ;
3810 lv_ib_source_tab VARCHAR2_20_TAB;
3811
3812 TYPE VARCHAR2_30_TAB IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER ;
3813 lv_action_tab VARCHAR2_30_TAB;
3814 lv_line_source_tab VARCHAR2_30_TAB;
3815 lv_attribute_category_tab VARCHAR2_30_TAB;
3816
3817 TYPE VARCHAR2_40_TAB IS TABLE OF VARCHAR2(40) INDEX BY BINARY_INTEGER ;
3818 lv_name_tab VARCHAR2_40_TAB;
3819 lv_version_tab VARCHAR2_40_TAB;
3820 lv_relationship_tab VARCHAR2_40_TAB;
3821 lv_line_status_tab VARCHAR2_40_TAB;
3822
3823 TYPE VARCHAR2_240_TAB IS TABLE OF VARCHAR2(240) INDEX BY BINARY_INTEGER ;
3824 lv_attribute1_tab VARCHAR2_240_TAB;
3825 lv_attribute2_tab VARCHAR2_240_TAB;
3826 lv_attribute3_tab VARCHAR2_240_TAB;
3827 lv_attribute4_tab VARCHAR2_240_TAB;
3828 lv_attribute5_tab VARCHAR2_240_TAB;
3829 lv_attribute6_tab VARCHAR2_240_TAB;
3830 lv_attribute7_tab VARCHAR2_240_TAB;
3831 lv_attribute8_tab VARCHAR2_240_TAB;
3832 lv_attribute9_tab VARCHAR2_240_TAB;
3833 lv_attribute10_tab VARCHAR2_240_TAB;
3834 lv_attribute11_tab VARCHAR2_240_TAB;
3835 lv_attribute12_tab VARCHAR2_240_TAB;
3836 lv_attribute13_tab VARCHAR2_240_TAB;
3837 lv_attribute14_tab VARCHAR2_240_TAB;
3838 lv_attribute15_tab VARCHAR2_240_TAB;
3839 lv_attribute16_tab VARCHAR2_240_TAB;
3840 lv_attribute17_tab VARCHAR2_240_TAB;
3841 lv_attribute18_tab VARCHAR2_240_TAB;
3842 lv_attribute19_tab VARCHAR2_240_TAB;
3843 lv_attribute20_tab VARCHAR2_240_TAB;
3844
3845 TYPE VARCHAR2_4000_TAB IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER ;
3846 lv_val_tab VARCHAR2_4000_TAB;
3847 lv_ref_val_tab VARCHAR2_4000_TAB;
3848
3849 BEGIN
3850
3851 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3852 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
3853 dbg_msg := ('Procedure Populate_Lines begins.');
3854 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3855 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
3856 END IF;
3857 END IF;
3858 END IF;
3859
3860 --======================================================================================================
3861 --Loop through all the lines and asign the columns to variables for bulk inserts in XDP_ORDER_LINE_ITEMS
3862 --===================================================================================================
3863
3864
3865 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3866 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
3867 dbg_msg := ('Number of records in Order Line List: '||p_order_line_list.COUNT);
3868 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3869 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
3870 END IF;
3871 END IF;
3872 END IF;
3873
3874 lv_index := p_order_line_list.FIRST;
3875 FOR lv_temp IN 1.. p_order_line_list.COUNT LOOP
3876 lv_fnd_count := lv_fnd_count + 1;
3877
3878 lv_line_item_id_tab(lv_temp) := p_order_line_list(lv_index).line_item_Id;
3879 lv_line_status_tab(lv_temp) := p_order_line_list(lv_index).line_status;
3880 lv_line_num_tab(lv_temp) := p_order_line_list(lv_index).line_number;
3881 lv_name_tab(lv_temp) := p_order_line_list(lv_index).service_item_name;
3882 lv_pro_req_tab(lv_temp) := p_order_line_list(lv_index).fulfillment_required_flag;
3883 lv_priority_tab(lv_temp) := p_order_line_list(lv_index).priority;
3884 lv_action_tab(lv_temp) := p_order_line_list(lv_index).action_code;
3885 lv_version_tab(lv_temp) := p_order_line_list(lv_index).version;
3886 lv_bundle_id_tab(lv_temp) := p_order_line_list(lv_index).bundle_id;
3887 lv_prov_seq_tab(lv_temp) := p_order_line_list(lv_index).fulfillment_sequence;
3888 lv_bundle_seq_tab(lv_temp) := p_order_line_list(lv_index).bundle_sequence;
3889 lv_prov_date_tab(lv_temp) := p_order_line_list(lv_index).required_fulfillment_date;
3890 lv_due_date_tab(lv_temp) := p_order_line_list(lv_index).due_date;
3891 lv_cust_req_date_tab(lv_temp) := p_order_line_list(lv_index).customer_required_date;
3892 lv_workitem_id_tab(lv_temp) := p_order_line_list(lv_index).workitem_id;
3893 lv_jeopardy_flag_tab(lv_temp) := p_order_line_list(lv_index).jeopardy_enabled_flag;
3894 lv_starting_num_tab(lv_temp) := p_order_line_list(lv_index).starting_number;
3895 lv_ending_num_tab(lv_temp) := p_order_line_list(lv_index).ending_number;
3896 lv_inventory_item_id_tab(lv_temp) := p_order_line_list(lv_index).inventory_item_id;
3897 lv_organization_id_tab(lv_temp) := p_order_line_list(lv_index).organization_id;
3898 lv_line_source_tab(lv_temp) := p_order_line_list(lv_index).line_source;
3899 lv_ib_source_tab(lv_temp) := p_order_line_list(lv_index).ib_source;
3900 lv_ib_source_id_tab(lv_temp) := p_order_line_list(lv_index).ib_source_id;
3901 lv_site_use_id_tab(lv_temp) := p_order_line_list(lv_index).site_use_id;
3902 lv_seq_in_package_tab(lv_temp) := p_order_line_list(lv_index).fulfillment_sequence;
3903 lv_pack_flag_tab(lv_temp) := p_order_line_list(lv_index).is_package_flag;
3904 lv_virtual_flag_tab(lv_temp) := p_order_line_list(lv_index).is_virtual_line_flag;
3905 lv_attribute_category_tab(lv_temp):= p_order_line_list(lv_index).attribute_category ;
3906 lv_attribute1_tab(lv_temp) := p_order_line_list(lv_index).attribute1 ;
3907 lv_attribute2_tab(lv_temp) := p_order_line_list(lv_index).attribute2 ;
3908 lv_attribute3_tab(lv_temp) := p_order_line_list(lv_index).attribute3 ;
3909 lv_attribute4_tab(lv_temp) := p_order_line_list(lv_index).attribute4 ;
3910 lv_attribute5_tab(lv_temp) := p_order_line_list(lv_index).attribute5 ;
3911 lv_attribute6_tab(lv_temp) := p_order_line_list(lv_index).attribute6 ;
3912 lv_attribute7_tab(lv_temp) := p_order_line_list(lv_index).attribute7 ;
3913 lv_attribute8_tab(lv_temp) := p_order_line_list(lv_index).attribute8 ;
3914 lv_attribute9_tab(lv_temp) := p_order_line_list(lv_index).attribute9 ;
3915 lv_attribute10_tab(lv_temp) := p_order_line_list(lv_index).attribute10;
3916 lv_attribute11_tab(lv_temp) := p_order_line_list(lv_index).attribute11;
3917 lv_attribute12_tab(lv_temp) := p_order_line_list(lv_index).attribute12;
3918 lv_attribute13_tab(lv_temp) := p_order_line_list(lv_index).attribute13;
3919 lv_attribute14_tab(lv_temp) := p_order_line_list(lv_index).attribute14;
3920 lv_attribute15_tab(lv_temp) := p_order_line_list(lv_index).attribute15;
3921 lv_attribute16_tab(lv_temp) := p_order_line_list(lv_index).attribute16;
3922 lv_attribute17_tab(lv_temp) := p_order_line_list(lv_index).attribute17;
3923 lv_attribute18_tab(lv_temp) := p_order_line_list(lv_index).attribute18;
3924 lv_attribute19_tab(lv_temp) := p_order_line_list(lv_index).attribute19;
3925 lv_attribute20_tab(lv_temp) := p_order_line_list(lv_index).attribute20;
3926
3927 lv_index := p_order_line_list.NEXT(lv_index);
3928
3929 END LOOP;
3930
3931 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
3932 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
3933 dbg_msg := ('Number of records to be inserted in Order lines: '||lv_fnd_count);
3934 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
3935 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
3936 END IF;
3937 END IF;
3938 END IF;
3939
3940 --========================================================================================================
3941 --Insert into XDP_ORDER_LINE_ITEMS
3942 --========================================================================================================
3943 -- TODO!! MAKE SITE USE IS NOT NULL
3944 -- TODO REMOVE STATE
3945 FORALL lv_temp IN 1..p_order_line_list.COUNT
3946
3947 INSERT INTO XDP_ORDER_LINE_ITEMS
3948 (LINE_ITEM_ID ,
3949 ORDER_ID ,
3950 LINE_NUMBER ,
3951 STATUS_CODE ,
3952 LINE_ITEM_NAME ,
3953 PROVISIONING_REQUIRED_FLAG ,
3954 PRIORITY ,
3955 LINE_ITEM_ACTION_CODE ,
3956 VERSION ,
3957 BUNDLE_ID ,
3958 LINE_SEQUENCE ,
3959 BUNDLE_SEQUENCE ,
3960 PROVISIONING_DATE ,
3961 DUE_DATE ,
3962 CUSTOMER_REQUIRED_DATE ,
3963 IS_PACKAGE_FLAG ,
3964 IS_VIRTUAL_LINE_FLAG ,
3965 WORKITEM_ID ,
3966 JEOPARDY_ENABLED_FLAG ,
3967 STARTING_NUMBER ,
3968 ENDING_NUMBER ,
3969 ORGANIZATION_ID ,
3970 INVENTORY_ITEM_ID ,
3971 LINE_SOURCE ,
3972 IB_SOURCE ,
3973 IB_SOURCE_ID ,
3974 SITE_USE_ID ,
3975 SEQ_IN_PACKAGE ,
3976 ATTRIBUTE_CATEGORY ,
3977 ATTRIBUTE1 ,
3978 ATTRIBUTE2 ,
3979 ATTRIBUTE3 ,
3980 ATTRIBUTE4 ,
3981 ATTRIBUTE5 ,
3982 ATTRIBUTE6 ,
3983 ATTRIBUTE7 ,
3984 ATTRIBUTE8 ,
3985 ATTRIBUTE9 ,
3986 ATTRIBUTE10 ,
3987 ATTRIBUTE11 ,
3988 ATTRIBUTE12 ,
3989 ATTRIBUTE13 ,
3990 ATTRIBUTE14 ,
3991 ATTRIBUTE15 ,
3992 ATTRIBUTE16 ,
3993 ATTRIBUTE17 ,
3994 ATTRIBUTE18 ,
3995 ATTRIBUTE19 ,
3996 ATTRIBUTE20 ,
3997 CREATED_BY ,
3998 CREATION_DATE ,
3999 LAST_UPDATED_BY ,
4000 LAST_UPDATE_DATE ,
4001 LAST_UPDATE_LOGIN
4002 )
4003 VALUES
4004 (
4005 lv_line_item_id_tab(lv_temp)
4006 ,P_ORDER_HEADER.ORDER_ID
4007 ,lv_line_num_tab(lv_temp)
4008 ,'STANDBY'
4009 ,lv_name_tab(lv_temp)
4010 ,lv_pro_req_tab(lv_temp)
4011 ,lv_priority_tab(lv_temp)
4012 ,lv_action_tab(lv_temp)
4013 ,lv_version_tab(lv_temp)
4014 ,lv_bundle_id_tab(lv_temp)
4015 ,lv_prov_seq_tab(lv_temp)
4016 ,lv_bundle_seq_tab(lv_temp)
4017 ,lv_prov_date_tab(lv_temp)
4018 ,lv_due_date_tab(lv_temp)
4019 ,lv_cust_req_date_tab(lv_temp)
4020 ,lv_pack_flag_tab(lv_temp)
4021 ,lv_virtual_flag_tab(lv_temp)
4022 ,lv_workitem_id_tab(lv_temp)
4023 ,lv_jeopardy_flag_tab(lv_temp)
4024 ,lv_starting_num_tab(lv_temp)
4025 ,lv_ending_num_tab(lv_temp)
4026 ,lv_organization_id_tab(lv_temp)
4027 ,lv_inventory_item_id_tab(lv_temp)
4028 ,lv_line_source_tab(lv_temp)
4029 ,lv_ib_source_tab(lv_temp)
4030 ,lv_ib_source_id_tab(lv_temp)
4031 ,lv_site_use_id_tab(lv_temp)
4032 ,lv_seq_in_package_tab(lv_temp)
4033 ,lv_attribute_category_tab(lv_temp)
4034 ,lv_attribute1_tab(lv_temp)
4035 ,lv_attribute2_tab(lv_temp)
4036 ,lv_attribute3_tab(lv_temp)
4037 ,lv_attribute4_tab(lv_temp)
4038 ,lv_attribute5_tab(lv_temp)
4039 ,lv_attribute6_tab(lv_temp)
4040 ,lv_attribute7_tab(lv_temp)
4041 ,lv_attribute8_tab(lv_temp)
4042 ,lv_attribute9_tab(lv_temp)
4043 ,lv_attribute10_tab(lv_temp)
4044 ,lv_attribute11_tab(lv_temp)
4045 ,lv_attribute12_tab(lv_temp)
4046 ,lv_attribute13_tab(lv_temp)
4047 ,lv_attribute14_tab(lv_temp)
4048 ,lv_attribute15_tab(lv_temp)
4049 ,lv_attribute16_tab(lv_temp)
4050 ,lv_attribute17_tab(lv_temp)
4051 ,lv_attribute18_tab(lv_temp)
4052 ,lv_attribute19_tab(lv_temp)
4053 ,lv_attribute20_tab(lv_temp)
4054 ,fnd_global.user_id
4055 ,sysdate
4056 ,fnd_global.user_id
4057 ,sysdate
4058 ,fnd_global.login_id
4059 );
4060
4061 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4062 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4063 dbg_msg := ('Successfully inserted records into Order Lines');
4064 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4065 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4066 END IF;
4067 END IF;
4068 END IF;
4069 --=================================================================================================
4070 --Release the memory
4071 --=================================================================================================
4072 lv_line_id_tab.DELETE;
4073 lv_line_num_tab.DELETE;
4074 lv_name_tab.DELETE;
4075 lv_pro_req_tab.DELETE;
4076 lv_priority_tab.DELETE;
4077 lv_action_tab.DELETE;
4078 lv_version_tab.DELETE;
4079 lv_bundle_id_tab.DELETE;
4080 lv_prov_seq_tab.DELETE;
4081 lv_bundle_seq_tab.DELETE;
4082 lv_prov_date_tab.DELETE;
4083 lv_due_date_tab.DELETE;
4084 lv_cust_req_date_tab.DELETE;
4085 lv_pack_flag_tab.DELETE;
4086 lv_workitem_id_tab.DELETE;
4087 lv_jeopardy_flag_tab.DELETE;
4088 lv_starting_num_tab.DELETE;
4089 lv_line_status_tab.DELETE;
4090 lv_ending_num_tab.DELETE;
4091 lv_inventory_item_id_tab.DELETE;
4092 lv_organization_id_tab.DELETE;
4093 lv_line_source_tab.DELETE;
4094 lv_ib_source_tab.DELETE;
4095 lv_ib_source_id_tab.DELETE;
4096 lv_site_use_id_tab.DELETE;
4097 lv_pack_flag_tab.DELETE;
4098
4099 --=================================================================================================
4100 --Loop through and assign variables declared to insert into XDP_LINE_RELATIONSHIPS
4101 --=================================================================================================
4102
4103
4104 IF p_order_line_rel_list.COUNT > 0 THEN
4105
4106 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4107 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4108 dbg_msg := ('Number of records in Order Line Relationships List: '|| p_order_line_rel_list.COUNT);
4109 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4110 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4111 END IF;
4112 END IF;
4113 END IF;
4114
4115 lv_index := p_order_line_rel_list.FIRST;
4116 lv_fnd_count := 0;
4117
4118 FOR lv_temp IN 1..p_order_line_rel_list.COUNT
4119 LOOP
4120 lv_fnd_count := lv_fnd_count + 1;
4121
4122 lv_line_item_id_tab(lv_temp) := p_order_line_rel_list(lv_index).line_item_id;
4123 lv_rel_line_item_id_tab(lv_temp) := p_order_line_rel_list(lv_index).related_line_item_id;
4124 lv_relationship_tab(lv_temp) := p_order_line_rel_list(lv_index).line_relationship;
4125 lv_index := p_order_line_rel_list.NEXT(lv_index);
4126 END LOOP;
4127 END IF ;
4128 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4129 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4130 dbg_msg := ('Number of records to be inserted in Order Line Relationships: '||lv_fnd_count);
4131 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4132 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4133 END IF;
4134 END IF;
4135 END IF;
4136 --================================================================================================
4137 --insert into XDP_LINE_RELATIONSHIPS
4138 --================================================================================================
4139
4140 FORALL lv_temp IN 1..p_order_line_rel_list.COUNT
4141 insert into XDP_LINE_RELATIONSHIPS
4142 (line_item_id
4143 ,related_line_item_id
4144 ,line_relationship
4145 ,creation_date
4146 ,created_by
4147 ,last_update_date
4148 ,last_updated_by
4149 ,last_update_login)
4150 values
4151 (lv_line_item_id_tab(lv_temp)
4152 ,lv_rel_line_item_id_tab(lv_temp)
4153 ,lv_relationship_tab(lv_temp)
4154 ,sysdate
4155 ,fnd_global.user_id
4156 ,sysdate
4157 ,fnd_global.user_id
4158 ,fnd_global.login_id
4159 );
4160
4161 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4162 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4163 dbg_msg := ('Successfully inserted records into Order Line Relationships');
4164 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4165 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4166 END IF;
4167 END IF;
4168 END IF;
4169
4170 --================================================================================================
4171 --Release memory
4172 --===============================================================================================
4173
4174 lv_item_id_tab.DELETE;
4175 lv_rel_item_id_tab.DELETE;
4176 lv_relationship_tab.DELETE;
4177 lv_line_item_id_tab.DELETE;
4178
4179 --=================================================================================================
4180 --Loop through and assign variables declared to insert into XDP_ORDER_LINEITEM_DETS
4181 --=================================================================================================
4182
4183 lv_fnd_count := 0;
4184 lv_index2 := p_order_line_list.FIRST;
4185 /*
4186 IF p_order_line_det_list.COUNT = 0 THEN
4187 FOR lv_temp2 IN 1..p_order_line_list.COUNT LOOP
4188 p_order_line_det_list(lv_temp2).line_number := p_order_line_list(lv_index2).line_item_id;
4189 p_order_line_det_list(lv_temp2).parameter_name := 'FULFILLMENT_STATUS';
4190 p_order_line_det_list(lv_temp2).parameter_value := '';
4191 p_order_line_det_list(lv_temp2).parameter_ref_value := '';
4192 lv_index2 := lv_index2 + 1;
4193 END LOOP;
4194 END IF;
4195
4196 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4197 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4198 dbg_msg := ('Number of records in Order Line Detail List: '||p_order_line_det_list.COUNT);
4199 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4200 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4201 END IF;
4202 END IF;
4203 END IF;
4204 */
4205 lv_index := p_order_line_det_list.FIRST;
4206
4207 FOR lv_temp IN 1..p_order_line_det_list.COUNT
4208 LOOP
4209 lv_fnd_count := lv_fnd_count + 1;
4210
4211 lv_line_item_id_tab(lv_temp) := p_order_line_det_list(lv_index).line_number;
4212 lv_name_tab(lv_temp) := p_order_line_det_list(lv_index).parameter_name;
4213 lv_val_tab(lv_temp) := p_order_line_det_list(lv_index).parameter_value;
4214 lv_ref_val_tab(lv_temp) := p_order_line_det_list(lv_index).parameter_ref_value;
4215 lv_index := p_order_line_det_list.NEXT(lv_index);
4216 END LOOP;
4217
4218 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4219 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4220 dbg_msg := ('Number of records to be inserted in Order Line Details: '||lv_fnd_count);
4221 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4222 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4223 END IF;
4224 END IF;
4225 END IF;
4226
4227 --=================================================================================================
4228 -- Insert Order Line Parameters into XDP_ORDER_LINEIEM_DETS
4229 --=================================================================================================
4230
4231
4232 FORALL lv_temp in 1..p_order_line_det_list.COUNT
4233
4234 INSERT INTO XDP_ORDER_LINEITEM_DETS
4235 (line_item_id,
4236 line_parameter_name,
4237 parameter_value,
4238 parameter_reference_value,
4239 created_by,
4240 creation_date,
4241 last_updated_by,
4242 last_update_date,
4243 last_update_login
4244 )
4245 values
4246 (lv_line_item_id_tab(lv_temp),
4247 lv_name_tab(lv_temp),
4248 lv_val_tab(lv_temp),
4249 lv_ref_val_tab(lv_temp),
4250 fnd_global.user_id,
4251 sysdate,
4252 fnd_global.user_id,
4253 sysdate,
4254 fnd_global.login_id
4255 );
4256
4257 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4258 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4259 dbg_msg := ('Successfully inserted records into Order Line Details');
4260 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4261 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4262 END IF;
4263 END IF;
4264 END IF;
4265
4266 EXCEPTION
4267 WHEN OTHERS THEN
4268 xdp_utilities.generic_error('XDP_ORDER.POPULATE_LINES'
4269 , G_external_order_reference
4270 , SQLCODE
4271 , SQLERRM);
4272 END POPULATE_LINES ;
4273
4274 -- ===========================================================================
4275 -- populate fulfill worklist
4276 -- ===========================================================================
4277
4278 PROCEDURE POPULATE_FULFILL_WORKLIST_LIST
4279 (P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
4280 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
4281 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
4282 P_FULFILL_WORKLIST_LIST IN OUT NOCOPY XDP_TYPES.FULFILL_WORKLIST_LIST
4283 ) IS
4284
4285 -- REMOVE THIS!!!
4286 -- p_fulfill_worklist XDP_TYPES.FULFILL_WORKLIST_LIST;
4287
4288
4289 BEGIN
4290
4291 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4292 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST_LIST')) THEN
4293 dbg_msg := ('Procedure Populate_Fulfill_Worklist_List begins.');
4294 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4295 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST_LIST', dbg_msg);
4296 END IF;
4297 END IF;
4298 END IF;
4299
4300 /**********************************
4301 create fulfil worklist
4302 ***********************************/
4303
4304 CREATE_FULFILL_WORKLIST(
4305 P_ORDER_HEADER => POPULATE_FULFILL_WORKLIST_LIST.P_ORDER_HEADER,
4306 P_SERVICE_ORDER_LINE_LIST => POPULATE_FULFILL_WORKLIST_LIST.P_SERVICE_ORDER_LINE_LIST,
4307 P_SERVICE_LINE_ATTRIB_LIST => POPULATE_FULFILL_WORKLIST_LIST.P_SERVICE_LINE_ATTRIB_LIST,
4308 P_FULFILL_WORKLIST_LIST => POPULATE_FULFILL_WORKLIST_LIST.P_FULFILL_WORKLIST_LIST
4309 );
4310
4311 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4312 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST_LIST')) THEN
4313 dbg_msg := ('Successfully created Fulfill Worklist');
4314 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4315 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST_LIST', dbg_msg);
4316 END IF;
4317 END IF;
4318 END IF;
4319
4320 /**********************************
4321 populate fulfill worklist
4322 *********************************/
4323
4324 POPULATE_FULFILL_WORKLIST(
4325 P_ORDER_HEADER => P_ORDER_HEADER,
4326 P_FULFILL_WORKLIST_LIST => P_FULFILL_WORKLIST_LIST);
4327
4328 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4329 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST_LIST')) THEN
4330 dbg_msg := ('Successfully Populated Fulfill Worklist');
4331 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4332 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST_LIST', dbg_msg);
4333 END IF;
4334 END IF;
4335 END IF;
4336
4337 EXCEPTION
4338
4339 WHEN OTHERS THEN
4340 xdp_utilities.generic_error('XDP_ORDER.POPULATE_FULFILL_WORKLIST_LIST'
4341 , G_external_order_reference
4342 , SQLCODE
4343 , SQLERRM);
4344
4345 END POPULATE_FULFILL_WORKLIST_LIST;
4346
4347 -- ==========================================================================
4348 -- create fulfill worklist
4349 -- ==========================================================================
4350
4351 PROCEDURE CREATE_FULFILL_WORKLIST (
4352 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
4353 P_SERVICE_ORDER_LINE_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_ORDER_LINE_LIST,
4354 P_SERVICE_LINE_ATTRIB_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
4355 P_FULFILL_WORKLIST_LIST OUT NOCOPY XDP_TYPES.FULFILL_WORKLIST_LIST
4356 ) IS
4357
4358 lv_index BINARY_INTEGER;
4359 lv_wi_index BINARY_INTEGER;
4360 lv_srv_config VARCHAR2(1);
4361 lv_wi_map_proc VARCHAr2(80);
4362 lv_return_code NUMBER;
4363 lv_error_description VARCHAR2(1000);
4364 l_line_number NUMBER ;
4365 l_service_item_name VARCHAR2(40);
4366 e_fulfill_worklist_error EXCEPTION;
4367 e_srv_config_error EXCEPTION;
4368 lv_val_proc VARCHAR2(80); -- added by sxbanerj 01/08/2001- RVU
4369 lv_val_flag VARCHAR2(1); -- added by sxbanerj 01/08/2001-RVU
4370 lv_version VARCHAR2(40);
4371 lv_fa VARCHAR2(80);
4372 lv_wf_item_type VARCHAR2(80);
4373 lv_wf_item_key VARCHAR2(240);
4374 lv_wf_process VARCHAR2(40);
4375 lv_wf_exec VARCHAR2(80);
4376 lv_time NUMBER;
4377 lv_protected_flag VARCHAR2(1);
4378 lv_role_name VARCHAR2(100);
4379 lv_fnd_count NUMBER := 0;
4380 lv_workitem_id NUMBER ;
4381
4382 CURSOR lc_wi_map(l_inventory_item_id number,
4383 l_action varchar2,
4384 l_organization_id number) IS
4385 select swp.workitem_id workitem_id
4386 ,wi.workitem_name workitem_name
4387 ,NVL(swp.provision_seq, 0) provision_seq
4388 ,wi.validation_procedure
4389 ,wi.validation_enabled_flag
4390 ,wi.VERSION
4391 ,wi.FA_EXEC_MAP_PROC
4392 ,wi.USER_WF_ITEM_TYPE
4393 ,wi.USER_WF_ITEM_KEY_PREFIX
4394 ,wi.USER_WF_PROCESS_NAME
4395 ,wi.WF_EXEC_PROC
4396 ,wi.TIME_ESTIMATE
4397 ,wi.PROTECTED_FLAG
4398 ,wi.ROLE_NAME
4399 from XDP_SERVICE_WI_MAP swp,
4400 XDP_SERVICE_VAL_ACTS svn,
4401 XDP_WORKITEMS wi
4402 where swp.service_val_act_id = svn.service_val_act_id and
4403 svn.inventory_item_id = l_inventory_item_id and
4404 svn.organization_id = l_organization_id and
4405 swp.workitem_id = wi.workitem_id and
4406 svn.action_code = l_action
4407 order by provision_seq;
4408
4409
4410 -- get workitems that implement the line and store in a record structure
4411
4412 BEGIN
4413
4414 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4415 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST')) THEN
4416 dbg_msg := ('Procedure Create_Fulfill_Worklist begins.');
4417 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4418 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST', dbg_msg);
4419 END IF;
4420 END IF;
4421 END IF;
4422
4423 -- lv_index := p_service_order_line_list.FIRST;
4424 lv_wi_index := 0;
4425
4426 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4427 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST')) THEN
4428 dbg_msg := ('Number of records in Service Order Line List: '||p_service_order_line_list.COUNT);
4429 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4430 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST', dbg_msg);
4431 END IF;
4432 END IF;
4433 END IF;
4434
4435 FOR lv_index IN 1..p_service_order_line_list.COUNT LOOP
4436
4437 IF p_service_order_line_list(lv_index).fulfillment_required_flag = 'Y' AND
4438 p_service_order_line_list(lv_index).action_code IS NULL AND
4439 p_service_order_line_list(lv_index).is_package_flag = 'N' THEN
4440
4441 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4442 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST')) THEN
4443 dbg_msg := ('Line is a Workitem');
4444 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4445 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST', dbg_msg);
4446 END IF;
4447 END IF;
4448 END IF;
4449
4450 BEGIN
4451
4452 -- Workitem has already been validated, so NO_DATA_FOUND will not occur.
4453
4454 SELECT Validation_Procedure ,
4455 Validation_Enabled_Flag ,
4456 VERSION ,
4457 FA_EXEC_MAP_PROC ,
4458 USER_WF_ITEM_TYPE ,
4459 USER_WF_ITEM_KEY_PREFIX ,
4460 USER_WF_PROCESS_NAME ,
4461 WF_EXEC_PROC ,
4462 TIME_ESTIMATE ,
4463 PROTECTED_FLAG ,
4464 ROLE_NAME
4465 INTO lv_val_proc,
4466 lv_val_flag,
4467 lv_version,
4468 lv_fa,
4469 Lv_wf_item_type,
4470 lv_wf_item_key,
4471 lv_wf_process ,
4472 lv_wf_exec,
4473 lv_time,
4474 lv_protected_flag,
4475 lv_role_name
4476 FROM XDP_WORKITEMS
4477 WHERE Workitem_id= p_service_order_line_list(lv_index).workitem_id;
4478
4479 EXCEPTION
4480 WHEN OTHERS THEN
4481 xdp_utilities.generic_error('XDP_PROCESS_ORDER.CREATE_FULFILL_WORKLIST'
4482 , G_external_order_reference
4483 , SQLCODE
4484 , SQLERRM);
4485 END;
4486
4487 lv_wi_index := lv_wi_index + 1;
4488 lv_fnd_count := lv_fnd_count + 1;
4489
4490 p_fulfill_worklist_list(lv_wi_index).line_item_id := p_service_order_line_list(lv_index).line_item_id;
4491 p_fulfill_worklist_list(lv_wi_index).line_number := p_service_order_line_list(lv_index).line_number;
4492 p_fulfill_worklist_list(lv_wi_index).workitem_id := p_service_order_line_list(lv_index).workitem_id;
4493 p_fulfill_worklist_list(lv_wi_index).wi_sequence := p_service_order_line_list(lv_index).fulfillment_sequence;
4494 p_fulfill_worklist_list(lv_wi_index).required_fulfillment_date:= p_service_order_line_list(lv_index).required_fulfillment_date;
4495 p_fulfill_worklist_list(lv_wi_index).priority := p_service_order_line_list(lv_index).priority;
4496 p_fulfill_worklist_list(lv_wi_index).due_date := p_service_order_line_list(lv_index).due_date;
4497 p_fulfill_worklist_list(lv_wi_index).customer_required_date := p_service_order_line_list(lv_index).customer_required_date;
4498 p_fulfill_worklist_list(lv_wi_index).attribute_category := p_service_order_line_list(lv_index).attribute_category;
4499 p_fulfill_worklist_list(lv_wi_index).attribute1 := p_service_order_line_list(lv_index).attribute1;
4500 p_fulfill_worklist_list(lv_wi_index).attribute2 := p_service_order_line_list(lv_index).attribute2;
4501 p_fulfill_worklist_list(lv_wi_index).attribute3 := p_service_order_line_list(lv_index).attribute3;
4502 p_fulfill_worklist_list(lv_wi_index).attribute4 := p_service_order_line_list(lv_index).attribute4;
4503 p_fulfill_worklist_list(lv_wi_index).attribute5 := p_service_order_line_list(lv_index).attribute5;
4504 p_fulfill_worklist_list(lv_wi_index).attribute6 := p_service_order_line_list(lv_index).attribute6;
4505 p_fulfill_worklist_list(lv_wi_index).attribute7 := p_service_order_line_list(lv_index).attribute7;
4506 p_fulfill_worklist_list(lv_wi_index).attribute8 := p_service_order_line_list(lv_index).attribute8;
4507 p_fulfill_worklist_list(lv_wi_index).attribute9 := p_service_order_line_list(lv_index).attribute9;
4508 p_fulfill_worklist_list(lv_wi_index).attribute10 := p_service_order_line_list(lv_index).attribute10;
4509 p_fulfill_worklist_list(lv_wi_index).attribute11 := p_service_order_line_list(lv_index).attribute11;
4510 p_fulfill_worklist_list(lv_wi_index).attribute12 := p_service_order_line_list(lv_index).attribute12;
4511 p_fulfill_worklist_list(lv_wi_index).attribute13 := p_service_order_line_list(lv_index).attribute13;
4512 p_fulfill_worklist_list(lv_wi_index).attribute14 := p_service_order_line_list(lv_index).attribute14;
4513 p_fulfill_worklist_list(lv_wi_index).attribute15 := p_service_order_line_list(lv_index).attribute15;
4514 p_fulfill_worklist_list(lv_wi_index).attribute16 := p_service_order_line_list(lv_index).attribute16;
4515 p_fulfill_worklist_list(lv_wi_index).attribute17 := p_service_order_line_list(lv_index).attribute17;
4516 p_fulfill_worklist_list(lv_wi_index).attribute18 := p_service_order_line_list(lv_index).attribute18;
4517 p_fulfill_worklist_list(lv_wi_index).attribute19 := p_service_order_line_list(lv_index).attribute19;
4518 p_fulfill_worklist_list(lv_wi_index).attribute20 := p_service_order_line_list(lv_index).attribute20;
4519 p_fulfill_worklist_list(lv_wi_index).validation_procedure := lv_val_proc; -- sxbanerj -RVU 01/08/01
4520 p_fulfill_worklist_list(lv_wi_index).validation_enabled_flag := lv_val_flag; -- sxbanerj- RVU 01/08/01.
4521 p_fulfill_worklist_list(lv_wi_index).VERSION := lv_version;
4522 p_fulfill_worklist_list(lv_wi_index).FA_EXEC_MAP_PROC := lv_fa;
4523 p_fulfill_worklist_list(lv_wi_index).USER_WF_ITEM_TYPE := lv_wf_item_type;
4524 p_fulfill_worklist_list(lv_wi_index).USER_WF_ITEM_KEY_PREFIX := lv_wf_item_key;
4525 p_fulfill_worklist_list(lv_wi_index).USER_WF_PROCESS_NAME := lv_wf_process;
4526 p_fulfill_worklist_list(lv_wi_index).WF_EXEC_PROC := lv_wf_exec;
4527 p_fulfill_worklist_list(lv_wi_index).TIME_ESTIMATE := lv_time;
4528 p_fulfill_worklist_list(lv_wi_index).PROTECTED_FLAG := lv_protected_flag;
4529 p_fulfill_worklist_list(lv_wi_index).ROLE_NAME := lv_role_name;
4530
4531 ELSIF (p_service_order_line_list(lv_index).ib_source = 'NONE' AND
4532 p_service_order_line_list(lv_index).is_package_flag = 'N')
4533 OR
4534 (p_service_order_line_list(lv_index).ib_source IN ('CSI', 'TXN') AND
4535 p_service_order_line_list(lv_index).ib_source_id is not null) THEN -- its a service
4536
4537 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4538 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST')) THEN
4539 dbg_msg := ('Line is a Service');
4540 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4541 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST', dbg_msg);
4542 END IF;
4543 END IF;
4544 END IF;
4545
4546 -- check service to wi mapping type
4547
4548 lv_srv_config := 'N';
4549
4550 SELECT wi_mapping_proc
4551 INTO lv_wi_map_proc
4552 FROM xdp_service_val_acts svn
4553 WHERE svn.inventory_item_id = p_service_order_line_list(lv_index).inventory_item_id
4554 AND svn.organization_id = p_service_order_line_list(lv_index).organization_id
4555 AND svn.action_code = p_service_order_line_list(lv_index).action_code;
4556
4557 IF lv_wi_map_proc is not null THEN --dynamic wi mapping
4558
4559 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4560 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST')) THEN
4561 dbg_msg := ('Line has a dynamic Workitem Mapping');
4562 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4563 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST', dbg_msg);
4564 END IF;
4565 END IF;
4566 END IF;
4567
4568 XDP_UTILITIES.CALLWIMAPPROC(
4569 P_PROCEDURE_NAME => LV_WI_MAP_PROC
4570 ,P_ORDER_ID => P_ORDER_HEADER.ORDER_ID -- P_ORDER_HEADER.ORDER_NUMBER
4571 ,P_LINE_ITEM_ID => P_SERVICE_ORDER_LINE_LIST(LV_INDEX).LINE_ITEM_ID
4572 ,P_RETURN_CODE => LV_RETURN_CODE
4573 ,P_ERROR_DESCRIPTION => LV_ERROR_DESCRIPTION
4574 );
4575
4576 IF lv_return_code <> 0 THEN
4577
4578 l_line_number := p_service_order_line_list(lv_index).line_number;
4579 l_service_item_name := p_service_order_line_list(lv_index).service_item_name;
4580 RAISE e_fulfill_worklist_error;
4581
4582 END IF;
4583
4584 ELSE -- static wi mapping
4585
4586
4587 FOR lv_map_rec in
4588 lc_wi_map(p_service_order_line_list(lv_index).inventory_item_id,
4589 p_service_order_line_list(lv_index).action_code,
4590 p_service_order_line_list(lv_index).organization_id) LOOP
4591 lv_srv_config := 'Y';
4592
4593 -- validate a workitem
4594
4595 lv_workitem_id := GET_WORKITEM_ID (P_WORKITEM_NAME => lv_map_rec.workitem_name ,
4596 P_VERSION => lv_map_rec.version) ;
4597
4598 lv_wi_index := lv_wi_index + 1;
4599 lv_fnd_count := lv_fnd_count + 1;
4600
4601 p_fulfill_worklist_list(lv_wi_index).line_item_id := p_service_order_line_list(lv_index).line_item_id;
4602 p_fulfill_worklist_list(lv_wi_index).line_number := p_service_order_line_list(lv_index).line_number;
4603 p_fulfill_worklist_list(lv_wi_index).workitem_id := lv_map_rec.workitem_id;
4604 p_fulfill_worklist_list(lv_wi_index).workitem_name := lv_map_rec.workitem_name;
4605 p_fulfill_worklist_list(lv_wi_index).wi_sequence := lv_map_rec.provision_seq;
4606 p_fulfill_worklist_list(lv_wi_index).required_fulfillment_date := p_service_order_line_list(lv_index).required_fulfillment_date;
4607 p_fulfill_worklist_list(lv_wi_index).priority := p_service_order_line_list(lv_index).priority;
4608 p_fulfill_worklist_list(lv_wi_index).due_date := p_service_order_line_list(lv_index).due_date;
4609 p_fulfill_worklist_list(lv_wi_index).customer_required_date := p_service_order_line_list(lv_index).customer_required_date;
4610 p_fulfill_worklist_list(lv_wi_index).attribute1 := p_service_order_line_list(lv_index).attribute1;
4611 p_fulfill_worklist_list(lv_wi_index).attribute2 := p_service_order_line_list(lv_index).attribute2;
4612 p_fulfill_worklist_list(lv_wi_index).attribute3 := p_service_order_line_list(lv_index).attribute3;
4613 p_fulfill_worklist_list(lv_wi_index).attribute4 := p_service_order_line_list(lv_index).attribute4;
4614 p_fulfill_worklist_list(lv_wi_index).attribute5 := p_service_order_line_list(lv_index).attribute5;
4615 p_fulfill_worklist_list(lv_wi_index).attribute6 := p_service_order_line_list(lv_index).attribute6;
4616 p_fulfill_worklist_list(lv_wi_index).attribute7 := p_service_order_line_list(lv_index).attribute7;
4617 p_fulfill_worklist_list(lv_wi_index).attribute8 := p_service_order_line_list(lv_index).attribute8;
4618 p_fulfill_worklist_list(lv_wi_index).attribute9 := p_service_order_line_list(lv_index).attribute9;
4619 p_fulfill_worklist_list(lv_wi_index).attribute10 := p_service_order_line_list(lv_index).attribute10;
4620 p_fulfill_worklist_list(lv_wi_index).attribute11 := p_service_order_line_list(lv_index).attribute11;
4621 p_fulfill_worklist_list(lv_wi_index).attribute12 := p_service_order_line_list(lv_index).attribute12;
4622 p_fulfill_worklist_list(lv_wi_index).attribute13 := p_service_order_line_list(lv_index).attribute13;
4623 p_fulfill_worklist_list(lv_wi_index).attribute14 := p_service_order_line_list(lv_index).attribute14;
4624 p_fulfill_worklist_list(lv_wi_index).attribute15 := p_service_order_line_list(lv_index).attribute15;
4625 p_fulfill_worklist_list(lv_wi_index).attribute16 := p_service_order_line_list(lv_index).attribute16;
4626 p_fulfill_worklist_list(lv_wi_index).attribute17 := p_service_order_line_list(lv_index).attribute17;
4627 p_fulfill_worklist_list(lv_wi_index).attribute18 := p_service_order_line_list(lv_index).attribute18;
4628 p_fulfill_worklist_list(lv_wi_index).attribute19 := p_service_order_line_list(lv_index).attribute19;
4629 p_fulfill_worklist_list(lv_wi_index).attribute20 := p_service_order_line_list(lv_index).attribute20;
4630 p_fulfill_worklist_list(lv_wi_index).validation_procedure := lv_map_rec.validation_procedure;
4631 p_fulfill_worklist_list(lv_wi_index).validation_enabled_flag := lv_map_rec.validation_enabled_flag;
4632 p_fulfill_worklist_list(lv_wi_index).version := lv_map_rec.VERSION;
4633 p_fulfill_worklist_list(lv_wi_index).FA_EXEC_MAP_PROC := lv_map_rec.FA_EXEC_MAP_PROC;
4634 p_fulfill_worklist_list(lv_wi_index).USER_WF_ITEM_TYPE := lv_map_rec.USER_WF_ITEM_TYPE;
4635 p_fulfill_worklist_list(lv_wi_index).USER_WF_ITEM_KEY_PREFIX :=lv_map_rec.USER_WF_ITEM_KEY_PREFIX;
4636 p_fulfill_worklist_list(lv_wi_index).USER_WF_PROCESS_NAME :=lv_map_rec.USER_WF_PROCESS_NAME;
4637 p_fulfill_worklist_list(lv_wi_index).WF_EXEC_PROC :=lv_map_rec.WF_EXEC_PROC;
4638 p_fulfill_worklist_list(lv_wi_index).TIME_ESTIMATE :=lv_map_rec.TIME_ESTIMATE;
4639 p_fulfill_worklist_list(lv_wi_index).PROTECTED_FLAG :=lv_map_rec.PROTECTED_FLAG;
4640 p_fulfill_worklist_list(lv_wi_index).ROLE_NAME :=lv_map_rec.ROLE_NAME;
4641
4642 END LOOP;
4643
4644 IF lv_srv_config = 'N' THEN
4645 l_line_number := p_service_order_line_list(lv_index).line_number;
4646 l_service_item_name := p_service_order_line_list(lv_index).service_item_name;
4647 RAISE e_srv_config_error;
4648 END IF;
4649 END IF;
4650 END IF;
4651 END LOOP;
4652
4653 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4654 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST')) THEN
4655 dbg_msg := ('Number of records to be inserted in Fulfill Worklist for service: '||lv_fnd_count);
4656 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4657 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.CREATE_FULFILL_WORKLIST', dbg_msg);
4658 END IF;
4659 END IF;
4660 END IF;
4661
4662 EXCEPTION
4663
4664 WHEN e_fulfill_worklist_error THEN
4665 -- Date: 20 Jan 2005 Author: DPUTHIYE Bug#: 4083708
4666 -- Change: The FND message thrown by this exception has been replaced with a new message
4667 -- The new message also contains the error text (ERROR_TEXT) returned by the WI mapping proc.
4668 -- Impacted modules: None.
4669 -- FND_MESSAGE.SET_NAME('XDP', 'XDP_RETURN_STATUS_ERROR');
4670 FND_MESSAGE.SET_NAME('XDP', 'XDP_WI_MAP_PROC_ERROR');
4671 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
4672 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
4673 FND_MESSAGE.SET_TOKEN('LINE_ITEM_NAME', l_service_item_name);
4674 FND_MESSAGE.SET_TOKEN('ERROR_TEXT', LV_ERROR_DESCRIPTION);
4675 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.CREATE_FULFILL_WORKLIST');
4676
4677 WHEN e_srv_config_error THEN
4678 FND_MESSAGE.SET_NAME('XDP', 'XDP_SERVICE_WI_MAP_ERROR');
4679 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',G_external_order_reference);
4680 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line_number);
4681 FND_MESSAGE.SET_TOKEN('LINE_ITEM_NAME', l_service_item_name);
4682 XDP_UTILITIES.RAISE_EXCEPTION('XDP_ORDER.CREATE_FULFILL_WORKLIST');
4683
4684 WHEN OTHERS THEN
4685 xdp_utilities.generic_error('XDP_PROCESS_ORDER.CREATE_FULFILL_WORKLIST'
4686 , G_external_order_reference
4687 , SQLCODE
4688 , SQLERRM);
4689
4690 END CREATE_FULFILL_WORKLIST;
4691
4692 -- ================================================================================
4693 -- populate fulfill_worklist
4694 -- ================================================================================
4695
4696
4697 PROCEDURE POPULATE_FULFILL_WORKLIST (
4698 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
4699 P_FULFILL_WORKLIST_LIST IN OUT NOCOPY XDP_TYPES.FULFILL_WORKLIST_LIST) IS
4700
4701 -- Index counter
4702 l_index NUMBER;
4703 lv_fnd_count NUMBER := 0;
4704
4705 -- Table of primitives to handle FORALL insert
4706 l_workitem_instance_id XDP_TYPES.NUMBER_TAB;
4707 l_line_item_id xdp_types.number_tab;
4708 l_line_number xdp_types.number_tab;
4709 l_workitem_id xdp_types.number_tab;
4710 l_status_code xdp_types.varchar2_40_tab;
4711 l_provisioning_date xdp_types.date_tab;
4712 l_priority xdp_types.number_tab;
4713 l_wi_sequence xdp_types.number_tab;
4714 l_due_date xdp_types.date_tab;
4715 l_customer_required_date xdp_types.date_tab;
4716
4717 TYPE VARCHAR2_30_TAB IS TABLE OF VARCHAR2(240) INDEX BY BINARY_INTEGER ;
4718
4719 l_attribute_category_tab VARCHAR2_30_TAB;
4720
4721 TYPE VARCHAR2_240_TAB IS TABLE OF VARCHAR2(240) INDEX BY BINARY_INTEGER ;
4722
4723 l_attribute1_tab VARCHAR2_240_TAB;
4724 l_attribute2_tab VARCHAR2_240_TAB;
4725 l_attribute3_tab VARCHAR2_240_TAB;
4726 l_attribute4_tab VARCHAR2_240_TAB;
4727 l_attribute5_tab VARCHAR2_240_TAB;
4728 l_attribute6_tab VARCHAR2_240_TAB;
4729 l_attribute7_tab VARCHAR2_240_TAB;
4730 l_attribute8_tab VARCHAR2_240_TAB;
4731 l_attribute9_tab VARCHAR2_240_TAB;
4732 l_attribute10_tab VARCHAR2_240_TAB;
4733 l_attribute11_tab VARCHAR2_240_TAB;
4734 l_attribute12_tab VARCHAR2_240_TAB;
4735 l_attribute13_tab VARCHAR2_240_TAB;
4736 l_attribute14_tab VARCHAR2_240_TAB;
4737 l_attribute15_tab VARCHAR2_240_TAB;
4738 l_attribute16_tab VARCHAR2_240_TAB;
4739 l_attribute17_tab VARCHAR2_240_TAB;
4740 l_attribute18_tab VARCHAR2_240_TAB;
4741 l_attribute19_tab VARCHAR2_240_TAB;
4742 l_attribute20_tab VARCHAR2_240_TAB;
4743
4744 l_dummy number;
4745
4746 BEGIN
4747
4748 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4749 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST')) THEN
4750 dbg_msg := ('Procedure Populate_Fulfill_Worklist begins.');
4751 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4752 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST', dbg_msg);
4753 END IF;
4754 END IF;
4755 END IF;
4756
4757 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4758 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST')) THEN
4759 dbg_msg := ('Number of records in Fulfill Worklist List: '||p_fulfill_worklist_list.COUNT);
4760 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4761 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST', dbg_msg);
4762 END IF;
4763 END IF;
4764 END IF;
4765
4766 -- Populate table of primitives to prepare for FORALL insert
4767 FOR l_index IN 1..p_fulfill_worklist_list.COUNT LOOP
4768 lv_fnd_count := lv_fnd_count + 1;
4769
4770 l_line_item_id(l_index) := p_fulfill_worklist_list(l_index).line_item_id;
4771 l_line_number(l_index) := p_fulfill_worklist_list(l_index).line_number;
4772 l_workitem_id(l_index) := p_fulfill_worklist_list(l_index).workitem_id;
4773 l_provisioning_date(l_index) := p_fulfill_worklist_list(l_index).required_fulfillment_date;
4774 l_priority(l_index) := p_fulfill_worklist_list(l_index).priority;
4775 l_wi_sequence(l_index) := p_fulfill_worklist_list(l_index).wi_sequence;
4776 l_due_date(l_index) := p_fulfill_worklist_list(l_index).due_date;
4777 l_customer_required_date(l_index) := p_fulfill_worklist_list(l_index).customer_required_date;
4778 l_attribute_category_tab(l_index) := p_fulfill_worklist_list(l_index).attribute_category ;
4779 l_attribute1_tab(l_index) := p_fulfill_worklist_list(l_index).attribute1 ;
4780 l_attribute2_tab(l_index) := p_fulfill_worklist_list(l_index).attribute2 ;
4781 l_attribute3_tab(l_index) := p_fulfill_worklist_list(l_index).attribute3 ;
4782 l_attribute4_tab(l_index) := p_fulfill_worklist_list(l_index).attribute4 ;
4783 l_attribute5_tab(l_index) := p_fulfill_worklist_list(l_index).attribute5 ;
4784 l_attribute6_tab(l_index) := p_fulfill_worklist_list(l_index).attribute6 ;
4785 l_attribute7_tab(l_index) := p_fulfill_worklist_list(l_index).attribute7 ;
4786 l_attribute8_tab(l_index) := p_fulfill_worklist_list(l_index).attribute8 ;
4787 l_attribute9_tab(l_index) := p_fulfill_worklist_list(l_index).attribute9 ;
4788 l_attribute10_tab(l_index) := p_fulfill_worklist_list(l_index).attribute10;
4789 l_attribute11_tab(l_index) := p_fulfill_worklist_list(l_index).attribute11;
4790 l_attribute12_tab(l_index) := p_fulfill_worklist_list(l_index).attribute12;
4791 l_attribute13_tab(l_index) := p_fulfill_worklist_list(l_index).attribute13;
4792 l_attribute14_tab(l_index) := p_fulfill_worklist_list(l_index).attribute14;
4793 l_attribute15_tab(l_index) := p_fulfill_worklist_list(l_index).attribute15;
4794 l_attribute16_tab(l_index) := p_fulfill_worklist_list(l_index).attribute16;
4795 l_attribute17_tab(l_index) := p_fulfill_worklist_list(l_index).attribute17;
4796 l_attribute18_tab(l_index) := p_fulfill_worklist_list(l_index).attribute18;
4797 l_attribute19_tab(l_index) := p_fulfill_worklist_list(l_index).attribute19;
4798 l_attribute20_tab(l_index) := p_fulfill_worklist_list(l_index).attribute20;
4799
4800 END LOOP;
4801
4802 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4803 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST')) THEN
4804 dbg_msg := ('Number of records tp be inserted into Fulfill Worklist: '||lv_fnd_count);
4805 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4806 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_FULFILL_WORKLIST', dbg_msg);
4807 END IF;
4808 END IF;
4809 END IF;
4810
4811
4812 -- ** populate into XDP_FULFILL_WORKLIST
4813 FORALL l_index IN 1..p_fulfill_worklist_list.COUNT
4814 INSERT INTO XDP_FULFILL_WORKLIST
4815 (WORKITEM_INSTANCE_ID,
4816 LINE_ITEM_ID,
4817 ORDER_ID,
4818 LINE_NUMBER,
4819 WORKITEM_ID,
4820 STATUS_CODE,
4821 PROVISIONING_DATE,
4822 PRIORITY,
4823 WI_SEQUENCE,
4824 DUE_DATE,
4825 CUSTOMER_REQUIRED_DATE,
4826 ATTRIBUTE_CATEGORY,
4827 ATTRIBUTE1,
4828 ATTRIBUTE2,
4829 ATTRIBUTE3,
4830 ATTRIBUTE4,
4831 ATTRIBUTE5,
4832 ATTRIBUTE6,
4833 ATTRIBUTE7,
4834 ATTRIBUTE8,
4835 ATTRIBUTE9,
4836 ATTRIBUTE10,
4837 ATTRIBUTE11,
4838 ATTRIBUTE12,
4839 ATTRIBUTE13,
4840 ATTRIBUTE14,
4841 ATTRIBUTE15,
4842 ATTRIBUTE16,
4843 ATTRIBUTE17,
4844 ATTRIBUTE18,
4845 ATTRIBUTE19,
4846 ATTRIBUTE20,
4847 CREATED_BY,
4848 CREATION_DATE,
4849 LAST_UPDATED_BY,
4850 LAST_UPDATE_DATE,
4851 LAST_UPDATE_LOGIN
4852 )
4853 VALUES
4854 (xdp_fulfill_worklist_s.NEXTVAL,
4855 l_line_item_id(l_index),
4856 P_ORDER_HEADER.ORDER_ID,
4857 l_line_number(l_index),
4858 l_workitem_id(l_index),
4859 'STANDBY',
4860 l_provisioning_date(l_index),
4861 l_priority(l_index),
4862 l_wi_sequence(l_index),
4863 l_due_date(l_index),
4864 l_customer_required_date(l_index),
4865 l_attribute_category_tab(l_index),
4866 l_attribute1_tab(l_index),
4867 l_attribute2_tab(l_index),
4868 l_attribute3_tab(l_index),
4869 l_attribute4_tab(l_index),
4870 l_attribute5_tab(l_index),
4871 l_attribute6_tab(l_index),
4872 l_attribute7_tab(l_index),
4873 l_attribute8_tab(l_index),
4874 l_attribute9_tab(l_index),
4875 l_attribute10_tab(l_index),
4876 l_attribute11_tab(l_index),
4877 l_attribute12_tab(l_index),
4878 l_attribute13_tab(l_index),
4879 l_attribute14_tab(l_index),
4880 l_attribute15_tab(l_index),
4881 l_attribute16_tab(l_index),
4882 l_attribute17_tab(l_index),
4883 l_attribute18_tab(l_index),
4884 l_attribute19_tab(l_index),
4885 l_attribute20_tab(l_index),
4886 FND_GLOBAL.USER_ID,
4887 SYSDATE,
4888 FND_GLOBAL.USER_ID,
4889 SYSDATE,
4890 FND_GLOBAL.LOGIN_ID
4891 ) RETURNING workitem_instance_id BULK COLLECT INTO l_workitem_instance_id;
4892
4893 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
4894 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES')) THEN
4895 dbg_msg := ('Successfully inserted records into Fulfill Worklist');
4896 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
4897 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_LINES', dbg_msg);
4898 END IF;
4899 END IF;
4900 END IF;
4901
4902 -- Populate workitem_instance_id in record with the value returned from insert
4903 FOR l_index IN 1..p_fulfill_worklist_list.COUNT LOOP
4904 p_fulfill_worklist_list(l_index).workitem_instance_id := l_workitem_instance_id(l_index);
4905 END LOOP;
4906
4907 -- Release memory
4908 l_workitem_instance_id.DELETE;
4909 l_line_item_id.DELETE;
4910 l_line_number.DELETE;
4911 l_workitem_id.DELETE;
4912 l_provisioning_date.DELETE;
4913 l_priority.DELETE;
4914 l_wi_sequence.DELETE;
4915 l_due_date.DELETE;
4916 l_customer_required_date.DELETE;
4917 l_attribute_category_tab.DELETE;
4918 l_attribute1_tab.DELETE;
4919 l_attribute2_tab.DELETE;
4920 l_attribute3_tab.DELETE;
4921 l_attribute4_tab.DELETE;
4922 l_attribute5_tab.DELETE;
4923 l_attribute6_tab.DELETE;
4924 l_attribute7_tab.DELETE;
4925 l_attribute8_tab.DELETE;
4926 l_attribute9_tab.DELETE;
4927 l_attribute10_tab.DELETE;
4928 l_attribute11_tab.DELETE;
4929 l_attribute12_tab.DELETE;
4930 l_attribute13_tab.DELETE;
4931 l_attribute14_tab.DELETE;
4932 l_attribute15_tab.DELETE;
4933 l_attribute16_tab.DELETE;
4934 l_attribute17_tab.DELETE;
4935 l_attribute18_tab.DELETE;
4936 l_attribute19_tab.DELETE;
4937 l_attribute20_tab.DELETE;
4938
4939 EXCEPTION
4940 WHEN OTHERS THEN
4941 xdp_utilities.generic_error('XDP_PROCESS_ORDER.POPULATE_FULFILL_WORKLIST'
4942 , G_external_order_reference
4943 , SQLCODE
4944 , SQLERRM);
4945
4946
4947 END POPULATE_FULFILL_WORKLIST;
4948
4949 -- --------------------------------------------------------------------------------
4950 -- Validate Workitem Param Config
4951 -- --------------------------------------------------------------------------------
4952
4953 PROCEDURE VALIDATE_WI_PARAM_CONFIG ( P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
4954 P_SERVICE_ORDER_LINE_LIST IN XDP_TYPES.SERVICE_ORDER_LINE_LIST,
4955 P_FULFILL_WORKLIST_LIST IN XDP_TYPES.FULFILL_WORKLIST_LIST,
4956 P_SERVICE_LINE_ATTRIB_LIST_IN IN XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
4957 P_SERVICE_LINE_ATTRIB_LIST_OUT OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST,
4958 P_WORKITEM_EVAL_PARAM_LIST_OUT OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST) IS
4959
4960 -- Cursor to get parameters defined for a WorkItem
4961 CURSOR lc_wi_param (l_wi_id NUMBER) IS
4962 SELECT
4963 wip.parameter_name,
4964 wip.required_flag,
4965 wip.value_lookup_sql,
4966 wip.validation_procedure,
4967 wip.evaluation_mode,
4968 wip.evaluation_seq,
4969 wip.evaluation_procedure,
4970 wip.default_value,
4971 wip.display_seq,
4972 wip.workitem_id
4973 FROM xdp_wi_parameters wip
4974 WHERE wip.workitem_id = l_wi_id
4975 ORDER BY wip.evaluation_seq;
4976
4977 -- Index counters
4978 l_order_line_index NUMBER;
4979 l_wi_index NUMBER;
4980 l_attrib_list_index_IN NUMBER;
4981 l_attrib_list_index_OUT NUMBER := 0;
4982 l_eval_param_index_OUT NUMBER := 0;
4983
4984
4985 -- Variables to hold evaluated values
4986 l_param_eval_value VARCHAR2(4000);
4987 l_param_eval_ref_value VARCHAR2(4000);
4988
4989 -- Exceptions
4990 e_no_evalproc_specified EXCEPTION;
4991 e_req_param_null EXCEPTION;
4992 e_wi_param_evalproc_failed EXCEPTION;
4993 e_parameter_not_defined EXCEPTION;
4994
4995 l_parameter_found BOOLEAN := FALSE;
4996
4997 -- Variables to carry values to exception clause in case of exception
4998 l_line_number NUMBER;
4999 l_workitem VARCHAR2(100);
5000 l_parameter VARCHAR2(100);
5001 l_evalproc VARCHAR2(100);
5002 l_error_code NUMBER;
5003 l_error_message VARCHAR2(4000);
5004 l_counter_index number;
5005 lv_fnd_count NUMBER := 0;
5006
5007 BEGIN
5008 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5009 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_WI_PARAM_CONFIG')) THEN
5010 dbg_msg := ('Procedure Validate_WI_Param_Config begins.');
5011 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5012 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_WI_PARAM_CONFIG', dbg_msg);
5013 END IF;
5014 END IF;
5015 END IF;
5016 -- ** Loop through all Order lines
5017 FOR l_order_line_index IN 1..p_service_order_line_list.COUNT LOOP
5018 IF ((p_service_order_line_list(l_order_line_index).is_virtual_line_flag = 'Y' AND
5019 p_service_order_line_list(l_order_line_index).parent_line_number IS NULL) OR
5020 (p_service_order_line_list(l_order_line_index).is_package_flag = 'N')
5021 ) THEN
5022
5023 -- ** Loop through all WorkItems in fulfill_worklist_list
5024 FOR l_wi_index IN 1..p_fulfill_worklist_list.COUNT LOOP
5025
5026 -- ** For every WorkItem for the Order line
5027 IF p_service_order_line_list(l_order_line_index).line_item_id = p_fulfill_worklist_list(l_wi_index).line_item_id THEN
5028 -- ** Loop through all parameters defined for Workitem in table XDP_WI_PARAMETERS using cursor
5029 FOR l_param_rec in lc_wi_param (p_fulfill_worklist_list(l_wi_index).workitem_id) LOOP
5030
5031 l_parameter_found := FALSE;
5032 l_parameter := l_param_rec.parameter_name;
5033
5034 -- ** Loop through all attributes received for line.
5035 FOR lv_attrib_list_index_IN IN 1..p_service_line_attrib_list_IN.COUNT LOOP
5036 -- ** For every match WI parameter Order line parameter
5037 IF ((p_service_line_attrib_list_IN(lv_attrib_list_index_IN).parameter_name = l_param_rec.parameter_name) AND
5038 (p_fulfill_worklist_list(l_wi_index).workitem_id = l_param_rec.workitem_id ) AND
5039 (p_service_line_attrib_list_IN(lv_attrib_list_index_IN).line_item_id = p_fulfill_worklist_list(l_wi_index). line_item_id)
5040 ) THEN
5041
5042 l_parameter_found := TRUE;
5043
5044 IF l_param_rec.evaluation_mode = 'ON_ORDER_RECEIPT' THEN
5045 -- Add the parameter details to p_workitem_eval_param_list_out
5046 l_eval_param_index_OUT := l_eval_param_index_OUT + 1 ;
5047
5048 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).workitem_instance_id :=
5049 p_fulfill_worklist_list(l_wi_index).workitem_instance_id;
5050 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).workitem_name :=
5051 p_fulfill_worklist_list(l_wi_index).workitem_name;
5052 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).line_item_id :=
5053 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).line_item_id;
5054 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).line_number :=
5055 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).line_number;
5056 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).workitem_id :=
5057 p_fulfill_worklist_list(l_wi_index).workitem_id;
5058 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).parameter_name :=
5059 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).parameter_name;
5060 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).parameter_value :=
5061 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).parameter_value;
5062 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).parameter_ref_value :=
5063 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).parameter_ref_value;
5064 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).txn_ext_attrib_detail_id :=
5065 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).txn_ext_attrib_detail_id;
5066 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).attrib_source_table :=
5067 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).attrib_source_table;
5068 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).attrib_source_id :=
5069 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).attrib_source_id;
5070 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).is_value_evaluated :=
5071 NVL(p_service_line_attrib_list_IN(lv_attrib_list_index_IN).is_value_evaluated,'N');
5072 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).modified_flag :=
5073 NVL(p_service_line_attrib_list_IN(lv_attrib_list_index_IN).modified_flag,'N');
5074
5075 -- Fill up with values retrieved from WI Parameter Config
5076 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).required_flag := l_param_rec.required_flag;
5077 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).value_lookup_sql := l_param_rec.value_lookup_sql;
5078 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).validation_procedure := l_param_rec.validation_procedure;
5079 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).evaluation_mode := l_param_rec.evaluation_mode;
5080 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).evaluation_seq := l_param_rec.evaluation_seq;
5081 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).evaluation_procedure := l_param_rec.evaluation_procedure;
5082 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).display_seq := l_param_rec.display_seq;
5083 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).default_value := l_param_rec.default_value;
5084
5085 ELSE
5086
5087 -- Let's add the values we've retrieved from XDP_WI_PARAMETERS to the out structure.
5088
5089 l_attrib_list_index_OUT := l_attrib_list_index_OUT + 1;
5090 lv_fnd_count := lv_fnd_count + 1;
5091
5092 -- Transfer values from IN structure to OUT structure
5093
5094 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).workitem_instance_id :=
5095 p_fulfill_worklist_list(l_wi_index).workitem_instance_id;
5096 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).workitem_name :=
5097 p_fulfill_worklist_list(l_wi_index).workitem_name;
5098 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).line_item_id :=
5099 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).line_item_id;
5100 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).line_number :=
5101 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).line_number;
5102 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).workitem_id :=
5103 p_fulfill_worklist_list(l_wi_index).workitem_id;
5104 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_name :=
5105 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).parameter_name;
5106 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_value :=
5107 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).parameter_value;
5108 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_ref_value :=
5109 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).parameter_ref_value;
5110 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).txn_ext_attrib_detail_id :=
5111 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).txn_ext_attrib_detail_id;
5112 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).attrib_source_table :=
5113 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).attrib_source_table;
5114 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).attrib_source_id :=
5115 p_service_line_attrib_list_IN(lv_attrib_list_index_IN).attrib_source_id;
5116 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).is_value_evaluated :=
5117 NVL(p_service_line_attrib_list_IN(lv_attrib_list_index_IN).is_value_evaluated,'N');
5118 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).modified_flag :=
5119 NVL(p_service_line_attrib_list_IN(lv_attrib_list_index_IN).modified_flag,'N');
5120
5121 -- Fill up with values retrieved from WI Parameter Config
5122 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).required_flag := l_param_rec.required_flag;
5123 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).value_lookup_sql := l_param_rec.value_lookup_sql;
5124 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).validation_procedure := l_param_rec.validation_procedure;
5125 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).evaluation_mode := l_param_rec.evaluation_mode;
5126 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).evaluation_seq := l_param_rec.evaluation_seq;
5127 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).evaluation_procedure := l_param_rec.evaluation_procedure;
5128 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).display_seq := l_param_rec.display_seq;
5129 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).default_value := l_param_rec.default_value;
5130
5131 IF p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).evaluation_mode IS NULL THEN
5132 IF p_service_order_line_list(l_order_line_index).ib_source = 'CSI' THEN
5133 IF p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_value
5134 <> p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_ref_value THEN
5135 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).is_value_evaluated := 'Y';
5136 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).modified_flag := 'Y';
5137
5138 END IF;
5139 ELSE
5140 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).is_value_evaluated := 'Y';
5141 END IF;
5142 END IF; -- If parameter needs to be evaluated;
5143
5144 -- If the attribute does not have a value, the default value set up during config will be used
5145 IF p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_value IS NULL THEN
5146 IF p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).default_value IS NOT NULL THEN
5147 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_value :=
5148 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).default_value;
5149 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).modified_flag := 'Y';
5150
5151 ELSE
5152 IF p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).required_flag = 'Y' THEN
5153 l_line_number := p_fulfill_worklist_list(l_wi_index).line_number;
5154 l_workitem := p_fulfill_worklist_list(l_wi_index).workitem_name;
5155 RAISE e_req_param_null;
5156 END IF; -- NULL, required and no default
5157 END IF;
5158 END IF; -- If parameter value IS NULL;
5159 END IF; -- END IF for if the evaluation mode is ON_ORDER_RECEIPT
5160 END IF; -- END IF for a match of WI and Parameter name in cursor <-> line_attrib_list
5161
5162 END LOOP; -- END LOOP of going through all attributes received for the line
5163
5164 IF l_parameter_found = FALSE THEN
5165 IF ((l_param_rec.required_flag = 'Y') AND
5166 ((l_param_rec.default_value IS NULL) AND
5167 (l_param_rec.evaluation_mode IS NULL) )
5168 ) THEN
5169 l_line_number := p_fulfill_worklist_list(l_wi_index).line_number;
5170 l_workitem := p_fulfill_worklist_list(l_wi_index).workitem_name;
5171 RAISE e_req_param_null;
5172 -- raise error
5173 ELSE
5174 -- Let's add the values to the out structure.
5175 IF l_param_rec.evaluation_mode = 'ON_ORDER_RECEIPT' THEN
5176 --Add the parameter to p_workitem_eval_param_list_out
5177
5178 l_eval_param_index_OUT := l_eval_param_index_OUT + 1 ;
5179
5180 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).workitem_instance_id :=
5181 p_fulfill_worklist_list(l_wi_index).workitem_instance_id;
5182 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).workitem_name :=
5183 p_fulfill_worklist_list(l_wi_index).workitem_name;
5184 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).line_item_id :=
5185 p_fulfill_worklist_list(l_wi_index).line_item_id;
5186 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).line_number :=
5187 p_fulfill_worklist_list(l_wi_index).line_number;
5188 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).workitem_id :=
5189 p_fulfill_worklist_list(l_wi_index).workitem_id;
5190
5191 -- Fill up with values retrieved from WI Parameter Config
5192 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).parameter_name := l_param_rec.parameter_name;
5193 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).parameter_ref_value := null;
5194 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).is_value_evaluated := 'N' ;
5195 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).modified_flag := 'N' ;
5196 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).required_flag := l_param_rec.required_flag;
5197 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).value_lookup_sql := l_param_rec.value_lookup_sql;
5198 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).validation_procedure := l_param_rec.validation_procedure;
5199 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).evaluation_mode := l_param_rec.evaluation_mode;
5200 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).evaluation_seq := l_param_rec.evaluation_seq;
5201 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).evaluation_procedure := l_param_rec.evaluation_procedure;
5202 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).display_seq := l_param_rec.display_seq;
5203 P_WORKITEM_EVAL_PARAM_LIST_OUT(l_eval_param_index_OUT).default_value := l_param_rec.default_value;
5204 ELSE
5205 l_attrib_list_index_OUT := l_attrib_list_index_OUT + 1;
5206 lv_fnd_count := lv_fnd_count + 1;
5207
5208 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).workitem_instance_id
5209 := p_fulfill_worklist_list(l_wi_index).workitem_instance_id;
5210 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).workitem_name
5211 := p_fulfill_worklist_list(l_wi_index).workitem_name;
5212 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).line_item_id
5213 := p_fulfill_worklist_list(l_wi_index).line_item_id;
5214 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).line_number
5215 := p_fulfill_worklist_list(l_wi_index).line_number;
5216 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).workitem_id
5217 := p_fulfill_worklist_list(l_wi_index).workitem_id;
5218 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_name := l_param_rec.parameter_name;
5219 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_ref_value := null;
5220 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).required_flag := l_param_rec.required_flag;
5221 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).value_lookup_sql := l_param_rec.value_lookup_sql;
5222 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).validation_procedure := l_param_rec.validation_procedure;
5223 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).evaluation_mode := l_param_rec.evaluation_mode;
5224 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).evaluation_seq := l_param_rec.evaluation_seq;
5225 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).evaluation_procedure := l_param_rec.evaluation_procedure;
5226 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).display_seq := l_param_rec.display_seq;
5227 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).default_value := l_param_rec.default_value;
5228 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).is_value_evaluated := 'N';
5229 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).modified_flag := 'N';
5230
5231 IF l_param_rec.evaluation_mode IS NULL THEN
5232 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_value := l_param_rec.default_value;
5233 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).is_value_evaluated := 'Y';
5234 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).modified_flag := 'N';
5235 ELSE
5236 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_value := l_param_rec.default_value;
5237 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).parameter_value := l_param_rec.default_value;
5238 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).is_value_evaluated := 'N';
5239 p_service_line_attrib_list_OUT(l_attrib_list_index_OUT).modified_flag := 'N';
5240 END IF ;
5241 END IF ; --END IF for ON_ORDER_RECEIPT
5242 END IF ;
5243 END IF;
5244
5245 END LOOP; -- EMD LOOP through all parameters defined for Workitem in table XDP_WI_PARAMETERS using cursor
5246 END IF; -- END IF For every WorkItem for the Order line (match of line_item_id in the two lists)
5247 END LOOP; -- END LOOP through all WorkItems in fulfill_worklist_list
5248 ELSE
5249 null;
5250 END IF;
5251
5252 END LOOP; -- END LOOP through all Order lines
5253
5254 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5255 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_WI_PARAM_CONFIG')) THEN
5256 dbg_msg := ('Number of records in Service Line Attrib List: '||lv_fnd_count);
5257 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5258 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_WI_PARAM_CONFIG', dbg_msg);
5259 END IF;
5260 END IF;
5261 END IF;
5262 EXCEPTION
5263 WHEN e_no_evalproc_specified THEN
5264 fnd_message.set_name('XDP','XDP_WI_EVAL_PROC_NULL'); -- Done 191384
5265 fnd_message.set_token('ORDER_NUMBER',G_external_order_reference);
5266 fnd_message.set_token('LINE_NUMBER',l_line_number);
5267 fnd_message.set_token('WORKITEM',l_workitem);
5268 fnd_message.set_token('PARAMETER',l_parameter);
5269 xdp_utilities.raise_exception('XDP_ORDER.APPEND_WI_PARAM_CONFIG');
5270
5271 WHEN e_req_param_null THEN
5272 fnd_message.set_name('XDP','XDP_REQ_WI_PARAM_NULL'); -- Done 191385
5273 fnd_message.set_token('ORDER_NUMBER',G_external_order_reference);
5274 fnd_message.set_token('LINE_NUMBER',l_line_number);
5275 fnd_message.set_token('WORKITEM',l_workitem);
5276 fnd_message.set_token('PARAMETER',l_parameter);
5277 xdp_utilities.raise_exception('XDP_ORDER.APPEND_WI_PARAM_CONFIG');
5278
5279 WHEN e_wi_param_evalproc_failed THEN
5280 fnd_message.set_name('XDP','XDP_WI_PARAM_EVALPROC_FAILED'); -- Done 191386
5281 fnd_message.set_token('ORDER_NUMBER',G_external_order_reference);
5282 fnd_message.set_token('LINE_NUMBER',l_line_number);
5283 fnd_message.set_token('WORKITEM',l_workitem);
5284 fnd_message.set_token('PARAMETER',l_parameter);
5285 fnd_message.set_token('EVALPROC',l_evalproc);
5286 fnd_message.set_token('ERRCODE',l_error_code);
5287 fnd_message.set_token('ERRMSG',l_error_message);
5288 xdp_utilities.raise_exception('XDP_ORDER.APPEND_WI_PARAM_CONFIG');
5289
5290 WHEN e_parameter_not_defined THEN
5291 fnd_message.set_name('XDP','XDP_PARAM_NOT_DEFINED');
5292 fnd_message.set_token('LINE_NUMBER',l_line_number);
5293 fnd_message.set_token('PARAMETER',l_parameter);
5294
5295 WHEN OTHERS THEN
5296 xdp_utilities.generic_error('XDP_PROCESS_ORDER.APPEND_WI_PARAM_CONFIG'
5297 , G_external_order_reference
5298 , SQLCODE
5299 , SQLERRM);
5300 END VALIDATE_WI_PARAM_CONFIG;
5301
5302
5303
5304 -- ------------------------------------------------------------------------------
5305 --
5306 -- ------------------------------------------------------------------------------
5307
5308
5309
5310 PROCEDURE POPULATE_WORKLIST_DETAILS (
5311 P_SERVICE_LINE_ATTRIB_LIST IN XDP_TYPES.SERVICE_LINE_ATTRIB_LIST) IS
5312
5313 -- Table of primitives to handle FORALL insert
5314 l_workitem_instance_id XDP_TYPES.number_tab;
5315 l_workitem_id XDP_TYPES.number_tab;
5316 l_is_value_evaluated XDP_TYPES.varchar2_1_tab;
5317 l_parameter_value XDP_TYPES.varchar2_4000_tab;
5318 l_parameter_ref_value XDP_TYPES.varchar2_4000_tab;
5319 l_txn_attrib_detail_id XDP_TYPES.number_tab;
5320 l_attrib_source_table XDP_TYPES.varchar2_30_tab;
5321 l_attrib_source_id XDP_TYPES.number_tab;
5322 l_modified_flag XDP_TYPES.varchar2_1_tab;
5323 l_parameter_name XDP_TYPES.varchar2_40_tab;
5324
5325 -- Index counter
5326 l_index NUMBER;
5327 lv_fnd_count NUMBER := 0;
5328
5329 BEGIN
5330
5331 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5332 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_WORKLIST_DETAILS')) THEN
5333 dbg_msg := ('Procedure Populate_Worklist_Details begins.');
5334 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5335 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.POPULATE_WORKLIST_DETAILS', dbg_msg);
5336 END IF;
5337 END IF;
5338 END IF;
5339
5340 -- Populate table of primitives to prepare for FORALL insert
5341
5342 FOR l_index IN 1..p_service_line_attrib_list.COUNT LOOP
5343
5344 lv_fnd_count := lv_fnd_count + 1;
5345
5346 l_workitem_instance_id(l_index) := p_service_line_attrib_list(l_index).workitem_instance_id;
5347 l_workitem_id(l_index) := p_service_line_attrib_list(l_index).workitem_id;
5348 l_is_value_evaluated(l_index) := p_service_line_attrib_list(l_index).is_value_evaluated;
5349 l_parameter_value(l_index) := p_service_line_attrib_list(l_index).parameter_value;
5350 l_parameter_ref_value(l_index) := p_service_line_attrib_list(l_index).parameter_ref_value;
5351 l_txn_attrib_detail_id(l_index) := p_service_line_attrib_list(l_index).txn_ext_attrib_detail_id;
5352 l_attrib_source_table(l_index) := p_service_line_attrib_list(l_index).attrib_source_table;
5353 l_attrib_source_id(l_index) := p_service_line_attrib_list(l_index).attrib_source_id;
5354 l_modified_flag(l_index) := p_service_line_attrib_list(l_index).modified_flag;
5355 l_parameter_name(l_index) := p_service_line_attrib_list(l_index).parameter_name;
5356
5357 END LOOP;
5358
5359 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5360 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.POPULATE_WORKLIST_DETAILS')) THEN
5361 dbg_msg := ('Number of records to be inserted Worklist Details: '||lv_fnd_count);
5362 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5363 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.POPULATE_WORKLIST_DETAILS', dbg_msg);
5364 END IF;
5365 END IF;
5366 END IF;
5367
5368 -- ** Insert into XDP_WORKLIST_DETAILS
5369 FORALL l_index IN 1..p_service_line_attrib_list.COUNT
5370
5371 INSERT INTO xdp_worklist_details
5372 ( workitem_instance_id,
5373 workitem_id,
5374 is_value_evaluated,
5375 parameter_value,
5376 parameter_ref_value,
5377 created_by,
5378 creation_date,
5379 last_updated_by,
5380 last_update_date,
5381 last_update_login,
5382 txn_attrib_detail_id,
5383 attrib_source_table,
5384 attrib_source_id,
5385 modified_flag,
5386 parameter_name
5387 )
5388 VALUES
5389 ( l_workitem_instance_id(l_index),
5390 l_workitem_id(l_index),
5391 l_is_value_evaluated(l_index),
5392 l_parameter_value(l_index),
5393 l_parameter_ref_value(l_index),
5394 FND_GLOBAL.USER_ID,
5395 sysdate,
5396 FND_GLOBAL.USER_ID,
5397 sysdate,
5398 FND_GLOBAL.LOGIN_ID,
5399 l_txn_attrib_detail_id(l_index),
5400 l_attrib_source_table(l_index),
5401 l_attrib_source_id(l_index),
5402 l_modified_flag(l_index),
5403 l_parameter_name(l_index)
5404 );
5405
5406 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5407 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_WORKLIST_DETAILS')) THEN
5408 dbg_msg := ('Successfully inserted records into Worklist Details');
5409 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5410 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.POPULATE_WORKLIST_DETAILS', dbg_msg);
5411 END IF;
5412 END IF;
5413 END IF;
5414
5415 -- Release memory
5416 l_workitem_instance_id.DELETE;
5417 l_workitem_id.DELETE;
5418 l_is_value_evaluated.DELETE;
5419 l_parameter_value.DELETE;
5420 l_parameter_ref_value.DELETE;
5421 l_txn_attrib_detail_id.DELETE;
5422 l_attrib_source_table.DELETE;
5423 l_attrib_source_id.DELETE;
5424 l_modified_flag.DELETE;
5425 l_parameter_name.DELETE;
5426
5427 EXCEPTION
5428 WHEN OTHERS THEN
5429 xdp_utilities.generic_error('XDP_PROCESS_ORDER.POPULATE_WORKLIST_DETAILS'
5430 , G_external_order_reference
5431 , SQLCODE
5432 , SQLERRM);
5433 END POPULATE_WORKLIST_DETAILS;
5434
5435 --------------------------------------
5436 -- EVALUATE WORKITEM PARMETER AND INSERT INTO XDP_WORKLIST DETAILS -- Added by sxbanerj -01/08/2001
5437 ---------------------------------------
5438 PROCEDURE EVALUATE_WORKITEM_PARAMS(
5439 P_ORDER_HEADER IN XDP_TYPES.SERVICE_ORDER_HEADER,
5440 P_WORKITEM_EVAL_PARAM_LIST IN OUT NOCOPY XDP_TYPES.SERVICE_LINE_ATTRIB_LIST
5441 ) IS
5442
5443 l_line_number NUMBER;
5444 l_workitem VARCHAR2(80);
5445 l_parameter VARCHAR2(80);
5446 l_param_eval_value VARCHAR2(4000);
5447 l_param_eval_ref_value VARCHAR2(4000);
5448 l_error_code NUMBER;
5449 l_error_message VARCHAR2(4000);
5450 l_evalproc VARCHAR2(100);
5451 i NUMBER ;
5452 -- Exceptions
5453 e_no_evalproc_specified EXCEPTION;
5454 e_req_param_null EXCEPTION;
5455 e_wi_param_evalproc_failed EXCEPTION;
5456 e_parameter_not_defined EXCEPTION;
5457
5458 BEGIN
5459
5460 FOR i in 1..P_WORKITEM_EVAL_PARAM_LIST.COUNT
5461 LOOP
5462
5463 IF P_WORKITEM_EVAL_PARAM_LIST(i).evaluation_procedure IS NULL THEN
5464 l_line_number := P_WORKITEM_EVAL_PARAM_LIST(i).line_number;
5465 l_workitem := P_WORKITEM_EVAL_PARAM_LIST(i).workitem_name;
5466 RAISE e_no_evalproc_specified;
5467 ELSE
5468
5469 XDP_UTILITIES.CallWIParamEvalProc(
5470 p_procedure_name => P_WORKITEM_EVAL_PARAM_LIST(i).evaluation_procedure,
5471 p_order_id => p_order_header.order_id,
5472 p_line_item_id => P_WORKITEM_EVAL_PARAM_LIST(i).line_item_id,
5473 p_wi_instance_id => P_WORKITEM_EVAL_PARAM_LIST(i).workitem_instance_id,
5474 p_param_val => P_WORKITEM_EVAL_PARAM_LIST(i).parameter_value,
5475 p_param_ref_val => P_WORKITEM_EVAL_PARAM_LIST(i).parameter_ref_value,
5476 p_param_eval_val => l_param_eval_value,
5477 p_param_eval_ref_val => l_param_eval_ref_value,
5478 p_return_code => l_error_code,
5479 p_error_description => l_error_message);
5480
5481 IF l_error_code = 0 THEN
5482 P_WORKITEM_EVAL_PARAM_LIST(i).parameter_value := l_param_eval_value;
5483 P_WORKITEM_EVAL_PARAM_LIST(i).parameter_ref_value := l_param_eval_ref_value;
5484 P_WORKITEM_EVAL_PARAM_LIST(i).is_value_evaluated := 'Y';
5485 P_WORKITEM_EVAL_PARAM_LIST(i).modified_flag := 'Y';
5486
5487 ELSE
5488 l_line_number := P_WORKITEM_EVAL_PARAM_LIST(i).line_number;
5489 l_workitem := P_WORKITEM_EVAL_PARAM_LIST(i).workitem_name;
5490 l_evalproc := P_WORKITEM_EVAL_PARAM_LIST(i).evaluation_procedure;
5491 RAISE e_wi_param_evalproc_failed;
5492 END IF;
5493
5494 INSERT INTO XDP_WORKLIST_DETAILS
5495 ( workitem_instance_id,
5496 workitem_id,
5497 is_value_evaluated,
5498 parameter_value,
5499 parameter_ref_value,
5500 created_by,
5501 creation_date,
5502 last_updated_by,
5503 last_update_date,
5504 last_update_login,
5505 txn_attrib_detail_id,
5506 attrib_source_table,
5507 attrib_source_id,
5508 modified_flag,
5509 parameter_name
5510 )
5511 VALUES
5512 ( P_WORKITEM_EVAL_PARAM_LIST(i).workitem_instance_id,
5513 P_WORKITEM_EVAL_PARAM_LIST(i).workitem_id,
5514 P_WORKITEM_EVAL_PARAM_LIST(i).is_value_evaluated,
5515 P_WORKITEM_EVAL_PARAM_LIST(i).parameter_value,
5516 P_WORKITEM_EVAL_PARAM_LIST(i).parameter_ref_value,
5517 FND_GLOBAL.USER_ID,
5518 sysdate,
5519 FND_GLOBAL.USER_ID,
5520 sysdate,
5521 FND_GLOBAL.LOGIN_ID,
5522 P_WORKITEM_EVAL_PARAM_LIST(i).txn_ext_attrib_detail_id,
5523 P_WORKITEM_EVAL_PARAM_LIST(i).attrib_source_table,
5524 P_WORKITEM_EVAL_PARAM_LIST(i).attrib_source_id,
5525 P_WORKITEM_EVAL_PARAM_LIST(i).modified_flag,
5526 P_WORKITEM_EVAL_PARAM_LIST(i).parameter_name
5527 );
5528 END IF; -- If evaluation_procedure defined or not
5529 END LOOP;
5530
5531 EXCEPTION
5532 WHEN e_no_evalproc_specified THEN
5533 fnd_message.set_name('XDP','XDP_WI_EVAL_PROC_NULL');
5534 fnd_message.set_token('ORDER_NUMBER',G_external_order_reference);
5535 fnd_message.set_token('LINE_NUMBER',l_line_number);
5536 fnd_message.set_token('WORKITEM',l_workitem);
5537 fnd_message.set_token('PARAMETER',l_parameter);
5538 xdp_utilities.raise_exception('XDP_ORDER.EVALUATE_WORKITEM_PARAMS');
5539
5540 WHEN e_wi_param_evalproc_failed THEN
5541 fnd_message.set_name('XDP','XDP_WI_PARAM_EVALPROC_FAILED');
5542 fnd_message.set_token('ORDER_NUMBER',G_external_order_reference);
5543 fnd_message.set_token('LINE_NUMBER',l_line_number);
5544 fnd_message.set_token('WORKITEM',l_workitem);
5545 fnd_message.set_token('PARAMETER',l_parameter);
5546 fnd_message.set_token('EVALPROC',l_evalproc);
5547 fnd_message.set_token('ERRCODE',l_error_code);
5548 fnd_message.set_token('ERRMSG',l_error_message);
5549 xdp_utilities.raise_exception('XDP_ORDER.EVALUATE_WORKITEM_PARAMS');
5550
5551 WHEN OTHERS THEN
5552 xdp_utilities.generic_error('XDP_PROCESS_ORDER.EVALUATE_WORKITEM_PARAMS'
5553 , G_external_order_reference
5554 , SQLCODE
5555 , SQLERRM);
5556 END EVALUATE_WORKITEM_PARAMS;
5557
5558 --------------------------------------
5559 -- RUNTIME VALIDATION FOR WORKITEM --
5560 ---------------------------------------
5561 PROCEDURE RUNTIME_VALIDATION(p_fulfill_worklist_list IN XDP_TYPES.FULFILL_WORKLIST_LIST
5562 ,p_order_header IN XDP_TYPES.SERVICE_ORDER_HEADER) IS
5563
5564 x_error_code NUMBER;
5565 x_error_message VARCHAR2(4000);
5566 lv_fnd_count NUMBER := 0;
5567
5568 BEGIN
5569
5570 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5571 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.RUNTIME_VALIDATION')) THEN
5572 dbg_msg := ('Procedure Runtime_Validation begins.');
5573 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5574 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.RUNTIME_VALIDATION', dbg_msg);
5575 END IF;
5576 END IF;
5577 END IF;
5578
5579 For lv_index in 1..p_fulfill_worklist_list.COUNT LOOP
5580
5581 lv_fnd_count := lv_fnd_count + 1;
5582
5583 IF p_fulfill_worklist_list(lv_index).Validation_enabled_flag = 'Y' AND
5584 p_fulfill_worklist_list(lv_index).Validation_Procedure IS NOT NULL THEN
5585
5586 Validate_Workitem(
5587 p_order_id => p_order_header.order_id
5588 ,p_line_item_id => p_fulfill_worklist_list(lv_index).line_item_id
5589 ,p_wi_instance_id => p_fulfill_worklist_list(lv_index).workitem_instance_id
5590 ,p_procedure_name => p_fulfill_worklist_list(lv_index).validation_procedure
5591 ,x_error_code => x_error_code
5592 ,x_error_message => x_error_message);
5593
5594
5595 IF x_error_code <> 0 THEN
5596 FND_MESSAGE.SET_NAME('XNP','XNP_RVU_VALIDATION_FAILED');
5597 FND_MESSAGE.SET_TOKEN('ORDER_ID', G_external_order_reference);
5598 FND_MESSAGE.SET_TOKEN('WORKITEM_NAME',p_fulfill_worklist_list(lv_index).WORKITEM_NAME);
5599 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',x_error_message);
5600 APP_EXCEPTION.RAISE_EXCEPTION;
5601 END IF;
5602 END IF;
5603 END LOOP;
5604 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5605 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.RUNTIME_VALIDATION')) THEN
5606 dbg_msg := ('Number of records validated: '||lv_fnd_count);
5607 IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5608 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.RUNTIME_VALIDATION', dbg_msg);
5609 END IF;
5610 END IF;
5611 END IF;
5612
5613 END RUNTIME_VALIDATION;
5614
5615 ------------------------------------------------------------
5616 -- Validate Workitem for RVu - added by sxbanerj -01/08/2001
5617 -------------------------------------------------------------
5618 PROCEDURE Validate_Workitem(
5619 p_order_id IN NUMBER
5620 ,p_line_item_id IN NUMBER
5621 ,p_wi_instance_id IN NUMBER
5622 ,p_procedure_name IN VARCHAR2
5623 ,x_error_code OUT NOCOPY NUMBER
5624 ,x_error_message OUT NOCOPY VARCHAR2)
5625 IS
5626 lv_plsql_blk varchar2(32000);
5627 BEGIN
5628
5629 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5630 IF (FND_LOG.TEST(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_WORKITEM')) THEN
5631 dbg_msg := ('Procedure Validate_Workitem begins.');
5632 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5633 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_WORKITEM', dbg_msg);
5634 END IF;
5635 END IF;
5636 END IF;
5637
5638 IF((FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)) THEN
5639 IF (FND_LOG.TEST(FND_LOG.LEVEL_STATEMENT, 'xdp.plsql.XDP_ORDER.VALIDATE_WORKITEM')) THEN
5640 dbg_msg := ('Order ID is:'||p_order_id||' Workitem Instance Id is: '||p_wi_instance_id||' Procedure Name is: '||
5641 p_procedure_name);
5642 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
5643 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'xdp.plsql.XDP_ORDER.VALIDATE_WORKITEM', dbg_msg);
5644 END IF;
5645 END IF;
5646 END IF;
5647
5648
5649 x_error_code := 0;
5650 lv_plsql_blk := 'BEGIN '||
5651 p_procedure_name||
5652 '( :p_order_id,
5653 :p_line_item_id,
5654 :p_wi_instance_id,
5655 :x_error_code,
5656 :x_error_message
5657 ); end;';
5658
5659 execute immediate lv_plsql_blk
5660 USING
5661 p_order_id
5662 ,p_line_item_id
5663 ,p_wi_instance_id
5664 ,OUT x_error_code
5665 ,OUT x_error_message;
5666
5667 EXCEPTION
5668 WHEN OTHERS THEN
5669 x_error_code := SQLCODE;
5670 x_error_message := SQLERRM;
5671
5672 END Validate_Workitem;
5673
5674 END XDP_ORDER;