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